diff --git a/browser/main/Detail/MarkdownNoteDetail.js b/browser/main/Detail/MarkdownNoteDetail.js index a85cc12c..fbd8ce5c 100644 --- a/browser/main/Detail/MarkdownNoteDetail.js +++ b/browser/main/Detail/MarkdownNoteDetail.js @@ -176,46 +176,34 @@ class MarkdownNoteDetail extends React.Component { handleTrashButtonClick (e) { const { note } = this.state const { isTrashed } = note - const { config } = this.props + const { confirmDeletion } = this.props if (isTrashed) { - const dialogueButtonIndex = dialog.showMessageBox(remote.getCurrentWindow(), { - type: 'warning', - message: 'Confirm note deletion', - detail: 'This will permanently remove this note.', - buttons: ['Confirm', 'Cancel'] - }) - if (dialogueButtonIndex === 1) return - const { note, dispatch } = this.props - dataApi - .deleteNote(note.storage, note.key) - .then((data) => { - const dispatchHandler = () => { - dispatch({ - type: 'DELETE_NOTE', - storageKey: data.storageKey, - noteKey: data.noteKey - }) - } - ee.once('list:moved', dispatchHandler) - }) - } else { - if (config.ui.confirmDeletion) { - const dialogueButtonIndex = dialog.showMessageBox(remote.getCurrentWindow(), { - type: 'warning', - message: 'Confirm note deletion', - detail: 'Are you sure you want to move the note to the trash?', - buttons: ['Confirm', 'Cancel'] - }) - if (dialogueButtonIndex === 1) return + if (confirmDeletion(true)) { + const {note, dispatch} = this.props + dataApi + .deleteNote(note.storage, note.key) + .then((data) => { + const dispatchHandler = () => { + dispatch({ + type: 'DELETE_NOTE', + storageKey: data.storageKey, + noteKey: data.noteKey + }) + } + ee.once('list:moved', dispatchHandler) + }) } - note.isTrashed = true + } else { + if (confirmDeletion()) { + note.isTrashed = true - this.setState({ - note - }, () => { - this.save() - }) + this.setState({ + note + }, () => { + this.save() + }) + } } ee.emit('list:next') } @@ -457,7 +445,8 @@ MarkdownNoteDetail.propTypes = { style: PropTypes.shape({ left: PropTypes.number }), - ignorePreviewPointerEvents: PropTypes.bool + ignorePreviewPointerEvents: PropTypes.bool, + confirmDeletion: PropTypes.bool.isRequired } export default CSSModules(MarkdownNoteDetail, styles) diff --git a/browser/main/Detail/SnippetNoteDetail.js b/browser/main/Detail/SnippetNoteDetail.js index 8c5feac6..427a0381 100644 --- a/browser/main/Detail/SnippetNoteDetail.js +++ b/browser/main/Detail/SnippetNoteDetail.js @@ -175,47 +175,35 @@ class SnippetNoteDetail extends React.Component { handleTrashButtonClick (e) { const { note } = this.state const { isTrashed } = note - const { config } = this.props + const { confirmDeletion } = this.props if (isTrashed) { - const dialogueButtonIndex = dialog.showMessageBox(remote.getCurrentWindow(), { - type: 'warning', - message: 'Confirm note deletion', - detail: 'This will permanently remove this note.', - buttons: ['Confirm', 'Cancel'] - }) - if (dialogueButtonIndex === 1) return - const { note, dispatch } = this.props - dataApi - .deleteNote(note.storage, note.key) - .then((data) => { - const dispatchHandler = () => { - dispatch({ - type: 'DELETE_NOTE', - storageKey: data.storageKey, - noteKey: data.noteKey - }) - } - ee.once('list:moved', dispatchHandler) - }) + if (confirmDeletion(true)) { + const {note, dispatch} = this.props + dataApi + .deleteNote(note.storage, note.key) + .then((data) => { + const dispatchHandler = () => { + dispatch({ + type: 'DELETE_NOTE', + storageKey: data.storageKey, + noteKey: data.noteKey + }) + } + ee.once('list:moved', dispatchHandler) + }) + } } else { - if (config.ui.confirmDeletion) { - const dialogueButtonIndex = dialog.showMessageBox(remote.getCurrentWindow(), { - type: 'warning', - message: 'Confirm note deletion', - detail: 'Are you sure you want to move the note to the trash?', - buttons: ['Confirm', 'Cancel'] + if (confirmDeletion()) { + note.isTrashed = true + + this.setState({ + note + }, () => { + this.save() }) - if (dialogueButtonIndex === 1) return } - note.isTrashed = true - - this.setState({ - note - }, () => { - this.save() - }) } ee.emit('list:next') } @@ -740,7 +728,8 @@ SnippetNoteDetail.propTypes = { style: PropTypes.shape({ left: PropTypes.number }), - ignorePreviewPointerEvents: PropTypes.bool + ignorePreviewPointerEvents: PropTypes.bool, + confirmDeletion: PropTypes.bool.isRequired } export default CSSModules(SnippetNoteDetail, styles) diff --git a/browser/main/Detail/index.js b/browser/main/Detail/index.js index 70f37a41..a9a8e4f2 100644 --- a/browser/main/Detail/index.js +++ b/browser/main/Detail/index.js @@ -32,6 +32,26 @@ class Detail extends React.Component { ee.off('detail:delete', this.deleteHandler) } + confirmDeletion (permanent) { + if (this.props.config.ui.confirmDeletion || permanent) { + const electron = require('electron') + const { remote } = electron + const { dialog } = remote + + const alertConfig = { + type: 'warning', + message: 'Confirm note deletion', + detail: 'This will permanently remove this note.', + buttons: ['Confirm', 'Cancel'] + } + + const dialogueButtonIndex = dialog.showMessageBox(remote.getCurrentWindow(), alertConfig) + return dialogueButtonIndex === 0 + } + + return true + } + render () { const { location, data, config } = this.props let note = null @@ -64,6 +84,7 @@ class Detail extends React.Component { this.confirmDeletion(permanent)} ref='root' {..._.pick(this.props, [ 'dispatch', @@ -80,6 +101,7 @@ class Detail extends React.Component { this.confirmDeletion(permanent)} ref='root' {..._.pick(this.props, [ 'dispatch',