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 (