From 954b3e9fc542bb152bc1be321453d5a94b9f063e Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Sun, 22 Nov 2015 15:03:48 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=96=B0=E3=81=97=E3=81=84=E8=A8=98?= =?UTF-8?q?=E4=BA=8B=E3=82=92=E6=9B=B8=E3=81=8F=E6=99=82=E3=81=AB=E7=99=BA?= =?UTF-8?q?=E7=94=9F=E3=81=99=E3=82=8B=E3=83=90=E3=82=B0=E4=B8=80=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/main/HomePage.js | 30 ------------- browser/main/HomePage/ArticleDetail.js | 17 ++++---- browser/main/HomePage/ArticleNavigator.js | 27 ++++++++++-- lib/actions.js | 15 +++++-- lib/components/modal/EditedAlert.js | 3 +- lib/reducer.js | 51 +++++++++++++++++++---- package.json | 2 +- 7 files changed, 89 insertions(+), 56 deletions(-) diff --git a/browser/main/HomePage.js b/browser/main/HomePage.js index 422e5717..780f8b52 100644 --- a/browser/main/HomePage.js +++ b/browser/main/HomePage.js @@ -225,36 +225,6 @@ function remap (state) { let activeArticle = _.findWhere(articles, {key: status.articleKey}) if (activeArticle == null) activeArticle = articles[0] - // remove Unsaved new article if user is not CREATE_MODE - if (status.mode !== CREATE_MODE) { - let targetIndex = _.findIndex(articles, article => article.status === NEW) - - if (targetIndex >= 0) articles.splice(targetIndex, 1) - } - - // switching CREATE_MODE - if (status.mode === CREATE_MODE) { - let newArticle = _.findWhere(articles, {status: 'NEW'}) - let FolderKey = targetFolders.length > 0 - ? targetFolders[0].key - : folders[0].key - - if (newArticle == null) { - newArticle = { - id: null, - key: keygen(), - title: '', - content: '', - mode: 'markdown', - tags: [], - FolderKey: FolderKey, - status: NEW - } - articles.unshift(newArticle) - } - activeArticle = newArticle - } - return { folders, status, diff --git a/browser/main/HomePage/ArticleDetail.js b/browser/main/HomePage/ArticleDetail.js index 45b094ed..de3ffd54 100644 --- a/browser/main/HomePage/ArticleDetail.js +++ b/browser/main/HomePage/ArticleDetail.js @@ -7,7 +7,6 @@ import MarkdownPreview from 'boost/components/MarkdownPreview' import CodeEditor from 'boost/components/CodeEditor' import { IDLE_MODE, - CREATE_MODE, EDIT_MODE, switchMode, switchArticle, @@ -15,6 +14,7 @@ import { clearSearch, lockStatus, unlockStatus, + clearNewArticle, updateArticle, destroyArticle, NEW @@ -114,7 +114,7 @@ export default class ArticleDetail extends React.Component { componentDidUpdate (prevProps) { let isModeChanged = prevProps.status.mode !== this.props.status.mode - if (isModeChanged && this.props.status.mode !== IDLE_MODE) { + if (isModeChanged && this.props.status.mode === EDIT_MODE) { ReactDOM.findDOMNode(this.refs.title).focus() } } @@ -124,6 +124,7 @@ export default class ArticleDetail extends React.Component { let isArticleChanged = nextProps.activeArticle != null && (nextProps.activeArticle.key !== this.state.article.key) let isModeChanged = nextProps.status.mode !== this.props.status.mode + // Reset article input if (isArticleChanged || (isModeChanged && nextProps.status.mode !== IDLE_MODE)) { Object.assign(nextState, { @@ -248,12 +249,15 @@ export default class ArticleDetail extends React.Component { let { activeArticle, dispatch } = this.props dispatch(unlockStatus()) - if (activeArticle.status === NEW) dispatch(switchArticle(null)) + if (activeArticle.status === NEW) { + dispatch(clearNewArticle()) + dispatch(switchArticle(null)) + } dispatch(switchMode(IDLE_MODE)) } handleSaveButtonClick (e) { - let { dispatch, folders, filters } = this.props + let { dispatch, folders, status } = this.props let article = this.state.article let newArticle = Object.assign({}, article) @@ -277,7 +281,7 @@ export default class ArticleDetail extends React.Component { // Searchを初期化し、更新先のFolder filterをかける // かかれていない時に // Searchを初期化する - if (filters.folder.length !== 0) dispatch(switchFolder(folder.name)) + if (status.targetFolders.length > 0) dispatch(switchFolder(folder.name)) else dispatch(clearSearch()) dispatch(switchArticle(newArticle.key)) } @@ -319,8 +323,6 @@ export default class ArticleDetail extends React.Component { let article = this.state.article article.tags = tags - this.setState({article: article}) - let _isTagChanged = _.difference(article.tags, this.props.activeArticle.tags).length > 0 || _.difference(this.props.activeArticle.tags, article.tags).length > 0 let { isTitleChanged, isContentChanged, isArticleEdited, isModeChanged } = this.state @@ -500,7 +502,6 @@ export default class ArticleDetail extends React.Component { if (activeArticle == null) return this.renderEmpty() switch (status.mode) { - case CREATE_MODE: case EDIT_MODE: return this.renderEdit() case IDLE_MODE: diff --git a/browser/main/HomePage/ArticleNavigator.js b/browser/main/HomePage/ArticleNavigator.js index d4c21131..49063bb4 100644 --- a/browser/main/HomePage/ArticleNavigator.js +++ b/browser/main/HomePage/ArticleNavigator.js @@ -1,10 +1,11 @@ import React, { PropTypes } from 'react' import { findWhere } from 'lodash' -import { setSearchFilter, switchFolder, switchMode, CREATE_MODE } from 'boost/actions' +import { setSearchFilter, switchFolder, switchMode, switchArticle, updateArticle, EDIT_MODE } from 'boost/actions' import { openModal } from 'boost/modal' import FolderMark from 'boost/components/FolderMark' import Preferences from 'boost/components/modal/Preferences' import CreateNewFolder from 'boost/components/modal/CreateNewFolder' +import keygen from 'boost/keygen' import remote from 'remote' let userName = remote.getGlobal('process').env.USER @@ -65,9 +66,27 @@ export default class ArticleNavigator extends React.Component { } handleNewPostButtonClick (e) { - let { dispatch } = this.props + let { dispatch, folders, status } = this.props + let { targetFolders } = status - dispatch(switchMode(CREATE_MODE)) + let FolderKey = targetFolders.length > 0 + ? targetFolders[0].key + : folders[0].key + + let newArticle = { + id: null, + key: keygen(), + title: '', + content: '', + mode: 'markdown', + tags: [], + FolderKey: FolderKey, + status: 'NEW' + } + + dispatch(updateArticle(newArticle)) + dispatch(switchArticle(newArticle.key, true)) + dispatch(switchMode(EDIT_MODE)) } handleNewFolderButton (e) { @@ -94,7 +113,7 @@ export default class ArticleNavigator extends React.Component { let folderElememts = folders.map((folder, index) => { let isActive = findWhere(targetFolders, {key: folder.key}) - let articleCount = allArticles.filter(article => article.FolderKey === folder.key).length + let articleCount = allArticles.filter(article => article.FolderKey === folder.key && article.status !== 'NEW').length return (