Skip to content

Commit

Permalink
Merge pull request #1324 from mslourens/confirmation-dialog
Browse files Browse the repository at this point in the history
show delete confirmation dialog
  • Loading branch information
kazup01 authored Jan 12, 2018
2 parents ad80b8e + 18649dd commit 85937d8
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 61 deletions.
60 changes: 28 additions & 32 deletions browser/main/Detail/MarkdownNoteDetail.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ import { formatDate } from 'browser/lib/date-formatter'
import { getTodoPercentageOfCompleted } from 'browser/lib/getTodoStatus'
import striptags from 'striptags'

const electron = require('electron')
const { remote } = electron
const { dialog } = remote

class MarkdownNoteDetail extends React.Component {
constructor (props) {
super(props)
Expand Down Expand Up @@ -187,38 +183,37 @@ class MarkdownNoteDetail extends React.Component {
handleTrashButtonClick (e) {
const { note } = this.state
const { isTrashed } = note
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 {
note.isTrashed = true
if (confirmDeletion()) {
note.isTrashed = true

this.setState({
note
}, () => {
this.save()
})
this.setState({
note
}, () => {
this.save()
})

ee.emit('list:next')
}
}
ee.emit('list:next')
}

handleUndoButtonClick (e) {
Expand Down Expand Up @@ -447,7 +442,8 @@ MarkdownNoteDetail.propTypes = {
style: PropTypes.shape({
left: PropTypes.number
}),
ignorePreviewPointerEvents: PropTypes.bool
ignorePreviewPointerEvents: PropTypes.bool,
confirmDeletion: PropTypes.bool.isRequired
}

export default CSSModules(MarkdownNoteDetail, styles)
56 changes: 28 additions & 28 deletions browser/main/Detail/SnippetNoteDetail.js
Original file line number Diff line number Diff line change
Expand Up @@ -176,38 +176,37 @@ class SnippetNoteDetail extends React.Component {
handleTrashButtonClick (e) {
const { note } = this.state
const { isTrashed } = note
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 {
note.isTrashed = true
if (confirmDeletion()) {
note.isTrashed = true

this.setState({
note
}, () => {
this.save()
})
this.setState({
note
}, () => {
this.save()
})

ee.emit('list:next')
}
}
ee.emit('list:next')
}

handleUndoButtonClick (e) {
Expand Down Expand Up @@ -731,7 +730,8 @@ SnippetNoteDetail.propTypes = {
style: PropTypes.shape({
left: PropTypes.number
}),
ignorePreviewPointerEvents: PropTypes.bool
ignorePreviewPointerEvents: PropTypes.bool,
confirmDeletion: PropTypes.bool.isRequired
}

export default CSSModules(SnippetNoteDetail, styles)
22 changes: 22 additions & 0 deletions browser/main/Detail/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -64,6 +84,7 @@ class Detail extends React.Component {
<SnippetNoteDetail
note={note}
config={config}
confirmDeletion={(permanent) => this.confirmDeletion(permanent)}
ref='root'
{..._.pick(this.props, [
'dispatch',
Expand All @@ -80,6 +101,7 @@ class Detail extends React.Component {
<MarkdownNoteDetail
note={note}
config={config}
confirmDeletion={(permanent) => this.confirmDeletion(permanent)}
ref='root'
{..._.pick(this.props, [
'dispatch',
Expand Down
13 changes: 12 additions & 1 deletion browser/main/modals/PreferencesModal/UiTab.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class UiTab extends React.Component {
ui: {
theme: this.refs.uiTheme.value,
showCopyNotification: this.refs.showCopyNotification.checked,
confirmDeletion: this.refs.confirmDeletion.checked,
disableDirectWrite: this.refs.uiD2w != null
? this.refs.uiD2w.checked
: false
Expand Down Expand Up @@ -173,6 +174,16 @@ class UiTab extends React.Component {
Show &quot;Saved to Clipboard&quot; notification when copying
</label>
</div>
<div styleName='group-checkBoxSection'>
<label>
<input onChange={(e) => this.handleUIChange(e)}
checked={this.state.config.ui.confirmDeletion}
ref='confirmDeletion'
type='checkbox'
/>&nbsp;
Show a confirmation dialog when deleting notes
</label>
</div>
{
global.process.platform === 'win32'
? <div styleName='group-checkBoxSection'>
Expand All @@ -182,7 +193,7 @@ class UiTab extends React.Component {
refs='uiD2w'
disabled={OSX}
type='checkbox'
/>
/>&nbsp;
Disable Direct Write(It will be applied after restarting)
</label>
</div>
Expand Down

0 comments on commit 85937d8

Please sign in to comment.