diff --git a/browser/main/HomePage/ArticleDetail/index.js b/browser/main/HomePage/ArticleDetail/index.js index 74994fbd..9dde94f5 100644 --- a/browser/main/HomePage/ArticleDetail/index.js +++ b/browser/main/HomePage/ArticleDetail/index.js @@ -7,15 +7,15 @@ import CodeEditor from 'browser/components/CodeEditor' import { switchFolder, cacheArticle, - saveArticle, - destroyArticle + saveArticle } from '../../actions' import linkState from 'browser/lib/linkState' -import FolderMark from 'browser/components/FolderMark' import TagSelect from 'browser/components/TagSelect' import ModeSelect from 'browser/components/ModeSelect' import activityRecord from 'browser/lib/activityRecord' import ShareButton from './ShareButton' +import { openModal } from 'browser/lib/modal' +import DeleteArticleModal from '../../modal/DeleteArticleModal' const electron = require('electron') const clipboard = electron.clipboard @@ -251,6 +251,12 @@ export default class ArticleDetail extends React.Component { } } + handleDeleteButtonClick (e) { + if (this.props.activeArticle) { + openModal(DeleteArticleModal, {articleKey: this.props.activeArticle.key}) + } + } + handleTitleKeyDown (e) { if (e.keyCode === 9 && !e.shiftKey) { e.preventDefault() diff --git a/browser/main/modal/DeleteArticleModal.js b/browser/main/modal/DeleteArticleModal.js new file mode 100644 index 00000000..78c47e64 --- /dev/null +++ b/browser/main/modal/DeleteArticleModal.js @@ -0,0 +1,40 @@ +import React, { PropTypes } from 'react' +import ReactDOM from 'react-dom' +import store from '../store' +import { destroyArticle } from '../actions' + +export default class DeleteArticleModal extends React.Component { + componentDidMount () { + ReactDOM.findDOMNode(this.refs.no).focus() + } + + handleNoButtonClick (e) { + this.props.close() + } + + handleYesButtonClick (e) { + store.dispatch(destroyArticle(this.props.articleKey)) + this.props.close() + } + + render () { + return ( +
+
Delete an article.
+ +
Do you really want to delete?
+ +
+ + +
+
+ ) + } +} + +DeleteArticleModal.propTypes = { + action: PropTypes.object, + articleKey: PropTypes.string, + close: PropTypes.func +} diff --git a/browser/main/reducer.js b/browser/main/reducer.js index c00d8f52..a1750996 100644 --- a/browser/main/reducer.js +++ b/browser/main/reducer.js @@ -222,7 +222,9 @@ function articles (state = initialArticles, action) { let articleKey = action.data.key let targetIndex = _.findIndex(state.data, _article => articleKey === _article.key) - if (targetIndex >= 0) state.splice(targetIndex, 1) + if (targetIndex >= 0) state.data.splice(targetIndex, 1) + let modifiedIndex = _.findIndex(state.modified, _article => articleKey === _article.key) + if (modifiedIndex >= 0) state.modified.splice(modifiedIndex, 1) dataStore.setArticles(state) return state diff --git a/browser/styles/main/index.styl b/browser/styles/main/index.styl index 0396d2df..99a266f1 100644 --- a/browser/styles/main/index.styl +++ b/browser/styles/main/index.styl @@ -3,9 +3,9 @@ @import '../mixins/*' global-reset() @import '../shared/*' -@import './components/*' @import './containers/*' @import './HomeContainer' +@import './modal/*' DEFAULT_FONTS = 'Lato', helvetica, arial, sans-serif diff --git a/browser/styles/main/modal/DeleteArticleModal.styl b/browser/styles/main/modal/DeleteArticleModal.styl new file mode 100644 index 00000000..b28d1b14 --- /dev/null +++ b/browser/styles/main/modal/DeleteArticleModal.styl @@ -0,0 +1,29 @@ +.DeleteArticleModal.modal + width 350px + top 100px + user-select none + .title + font-size 24px + margin-bottom 15px + .message + font-size 14px + margin-bottom 15px + .control + text-align right + button + border-radius 5px + height 33px + padding 0 15px + font-size 14px + background-color white + border 1px solid borderColor + border-radius 5px + margin-left 5px + &:hover + background-color darken(white, 10%) + &.danger + border-color #E9432A + background-color #E9432A + color white + &:hover + background-color lighten(#E9432A, 15%)