1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-14 02:06:29 +00:00

enhance editor UX

This commit is contained in:
Dick Choi
2016-01-09 23:03:23 +09:00
parent 673503b76f
commit a505227d01
3 changed files with 31 additions and 12 deletions

View File

@@ -43,7 +43,6 @@ export default class ModeSelect extends React.Component {
} }
handleModeOptionClick (modeName) { handleModeOptionClick (modeName) {
console.log(modeName)
return e => { return e => {
this.props.onChange(modeName) this.props.onChange(modeName)
this.setState({ this.setState({
@@ -90,7 +89,7 @@ export default class ModeSelect extends React.Component {
let targetMode = filteredModes[this.state.focusIndex] let targetMode = filteredModes[this.state.focusIndex]
if (targetMode != null) { if (targetMode != null) {
this.props.onChange(targetMode.name) this.props.onChange(targetMode.name)
this.handleBlur() this.setIdle()
} }
} }
break break
@@ -113,16 +112,18 @@ export default class ModeSelect extends React.Component {
handleBlur (e) { handleBlur (e) {
if (e.target !== ReactDOM.findDOMNode(this.refs.search)) { if (e.target !== ReactDOM.findDOMNode(this.refs.search)) {
this.setState({ this.setIdle()
mode: IDLE_MODE,
search: '',
focusIndex: 0
}, function () {
if (this.props.onBlur) this.props.onBlur()
})
} }
} }
setIdle () {
this.setState({
mode: IDLE_MODE,
search: '',
focusIndex: 0
})
}
render () { render () {
let className = this.props.className != null let className = this.props.className != null
? `ModeSelect ${this.props.className}` ? `ModeSelect ${this.props.className}`
@@ -168,6 +169,5 @@ ModeSelect.propTypes = {
className: PropTypes.string, className: PropTypes.string,
value: PropTypes.string, value: PropTypes.string,
onChange: PropTypes.func, onChange: PropTypes.func,
onKeyDown: PropTypes.func, onKeyDown: PropTypes.func
onBlur: PropTypes.func
} }

View File

@@ -92,6 +92,12 @@ export default class ArticleDetail extends React.Component {
if (isModalOpen()) return true if (isModalOpen()) return true
this.handleUncache() this.handleUncache()
} }
this.titleHandler = e => {
if (isModalOpen()) return true
let titleEl = ReactDOM.findDOMNode(this.refs.title)
titleEl.focus()
titleEl.select()
}
this.editHandler = e => { this.editHandler = e => {
if (isModalOpen()) return true if (isModalOpen()) return true
this.refs.editor.switchEditMode() this.refs.editor.switchEditMode()
@@ -112,6 +118,7 @@ export default class ArticleDetail extends React.Component {
// ipc.on('detail-save', this.saveHandler) // ipc.on('detail-save', this.saveHandler)
ipc.on('detail-delete', this.deleteHandler) ipc.on('detail-delete', this.deleteHandler)
ipc.on('detail-uncache', this.uncacheHandler) ipc.on('detail-uncache', this.uncacheHandler)
ipc.on('detail-title', this.titleHandler)
ipc.on('detail-edit', this.editHandler) ipc.on('detail-edit', this.editHandler)
} }
@@ -121,6 +128,7 @@ export default class ArticleDetail extends React.Component {
// ipc.removeListener('detail-save', this.saveHandler) // ipc.removeListener('detail-save', this.saveHandler)
ipc.removeListener('detail-delete', this.deleteHandler) ipc.removeListener('detail-delete', this.deleteHandler)
ipc.removeListener('detail-uncache', this.uncacheHandler) ipc.removeListener('detail-uncache', this.uncacheHandler)
ipc.removeListener('detail-title', this.titleHandler)
ipc.removeListener('detail-edit', this.editHandler) ipc.removeListener('detail-edit', this.editHandler)
} }
@@ -192,6 +200,7 @@ export default class ArticleDetail extends React.Component {
}) })
dispatch(updateArticle(article)) dispatch(updateArticle(article))
this.switchEditMode()
} }
handleContentChange (value) { handleContentChange (value) {
@@ -222,7 +231,7 @@ export default class ArticleDetail extends React.Component {
handleModeSelectKeyDown (e) { handleModeSelectKeyDown (e) {
if (e.keyCode === 9 && !e.shiftKey) { if (e.keyCode === 9 && !e.shiftKey) {
e.preventDefault() e.preventDefault()
this.refs.editor.switchEditMode() this.switchEditMode()
} }
if (e.keyCode === 9 && e.shiftKey) { if (e.keyCode === 9 && e.shiftKey) {
e.preventDefault() e.preventDefault()
@@ -230,6 +239,10 @@ export default class ArticleDetail extends React.Component {
} }
} }
switchEditMode () {
this.refs.editor.switchEditMode()
}
render () { render () {
let { folders, status, tags, activeArticle, modified, user } = this.props let { folders, status, tags, activeArticle, modified, user } = this.props
if (activeArticle == null) return this.renderEmpty() if (activeArticle == null) return this.renderEmpty()

View File

@@ -21,6 +21,7 @@ export default class ArticleList extends React.Component {
componentDidMount () { componentDidMount () {
this.refreshTimer = setInterval(() => this.forceUpdate(), 60 * 1000) this.refreshTimer = setInterval(() => this.forceUpdate(), 60 * 1000)
ipc.on('list-focus', this.focusHandler) ipc.on('list-focus', this.focusHandler)
this.focus()
} }
componentWillUnmount () { componentWillUnmount () {
@@ -102,6 +103,11 @@ export default class ArticleList extends React.Component {
remote.getCurrentWebContents().send('detail-delete') remote.getCurrentWebContents().send('detail-delete')
} }
if (e.keyCode === 84) {
e.preventDefault()
remote.getCurrentWebContents().send('detail-title')
}
if (e.keyCode === 69) { if (e.keyCode === 69) {
e.preventDefault() e.preventDefault()
remote.getCurrentWebContents().send('detail-edit') remote.getCurrentWebContents().send('detail-edit')