Skip to content
23 changes: 23 additions & 0 deletions browser/lib/confirmDeleteNote.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import electron from 'electron'
import i18n from 'browser/lib/i18n'
const { remote } = electron
const { dialog } = remote

export function confirmDeleteNote (confirmDeletion, permanent) {
if (confirmDeletion || permanent) {
const alertConfig = {
ype: 'warning',
message: i18n.__('Confirm note deletion'),
detail: i18n.__('This will permanently remove this note.'),
buttons: [i18n.__('Confirm'), i18n.__('Cancel')]
}

const dialogButtonIndex = dialog.showMessageBox(
remote.getCurrentWindow(), alertConfig
)

return dialogButtonIndex === 0
}

return true
}
10 changes: 5 additions & 5 deletions browser/main/Detail/MarkdownNoteDetail.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import InfoPanelTrashed from './InfoPanelTrashed'
import { formatDate } from 'browser/lib/date-formatter'
import { getTodoPercentageOfCompleted } from 'browser/lib/getTodoStatus'
import striptags from 'striptags'
import { confirmDeleteNote } from 'browser/lib/confirmDeleteNote'

class MarkdownNoteDetail extends React.Component {
constructor (props) {
Expand Down Expand Up @@ -181,10 +182,10 @@ class MarkdownNoteDetail extends React.Component {
handleTrashButtonClick (e) {
const { note } = this.state
const { isTrashed } = note
const { confirmDeletion } = this.props
const { confirmDeletion } = this.props.config.ui

if (isTrashed) {
if (confirmDeletion(true)) {
if (confirmDeleteNote(confirmDeletion, true)) {
const {note, dispatch} = this.props
dataApi
.deleteNote(note.storage, note.key)
Expand All @@ -201,7 +202,7 @@ class MarkdownNoteDetail extends React.Component {
.then(() => ee.emit('list:next'))
}
} else {
if (confirmDeletion()) {
if (confirmDeleteNote(confirmDeletion, false)) {
note.isTrashed = true

this.setState({
Expand Down Expand Up @@ -437,8 +438,7 @@ MarkdownNoteDetail.propTypes = {
style: PropTypes.shape({
left: PropTypes.number
}),
ignorePreviewPointerEvents: PropTypes.bool,
confirmDeletion: PropTypes.bool.isRequired
ignorePreviewPointerEvents: PropTypes.bool
}

export default CSSModules(MarkdownNoteDetail, styles)
10 changes: 5 additions & 5 deletions browser/main/Detail/SnippetNoteDetail.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import InfoPanel from './InfoPanel'
import InfoPanelTrashed from './InfoPanelTrashed'
import { formatDate } from 'browser/lib/date-formatter'
import i18n from 'browser/lib/i18n'
import { confirmDeleteNote } from 'browser/lib/confirmDeleteNote'

function pass (name) {
switch (name) {
Expand Down Expand Up @@ -197,10 +198,10 @@ class SnippetNoteDetail extends React.Component {
handleTrashButtonClick (e) {
const { note } = this.state
const { isTrashed } = note
const { confirmDeletion } = this.props
const { confirmDeletion } = this.props.config.ui

if (isTrashed) {
if (confirmDeletion(true)) {
if (confirmDeleteNote(confirmDeletion, true)) {
const {note, dispatch} = this.props
dataApi
.deleteNote(note.storage, note.key)
Expand All @@ -217,7 +218,7 @@ class SnippetNoteDetail extends React.Component {
.then(() => ee.emit('list:next'))
}
} else {
if (confirmDeletion()) {
if (confirmDeleteNote(confirmDeletion, false)) {
note.isTrashed = true

this.setState({
Expand Down Expand Up @@ -883,8 +884,7 @@ SnippetNoteDetail.propTypes = {
style: PropTypes.shape({
left: PropTypes.number
}),
ignorePreviewPointerEvents: PropTypes.bool,
confirmDeletion: PropTypes.bool.isRequired
ignorePreviewPointerEvents: PropTypes.bool
}

export default CSSModules(SnippetNoteDetail, styles)
22 changes: 0 additions & 22 deletions browser/main/Detail/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,26 +33,6 @@ 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: i18n.__('Confirm note deletion'),
detail: i18n.__('This will permanently remove this note.'),
buttons: [i18n.__('Confirm'), i18n.__('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 @@ -82,7 +62,6 @@ class Detail extends React.Component {
<SnippetNoteDetail
note={note}
config={config}
confirmDeletion={(permanent) => this.confirmDeletion(permanent)}
ref='root'
{..._.pick(this.props, [
'dispatch',
Expand All @@ -99,7 +78,6 @@ class Detail extends React.Component {
<MarkdownNoteDetail
note={note}
config={config}
confirmDeletion={(permanent) => this.confirmDeletion(permanent)}
ref='root'
{..._.pick(this.props, [
'dispatch',
Expand Down
14 changes: 6 additions & 8 deletions browser/main/NoteList/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import copy from 'copy-to-clipboard'
import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig'
import Markdown from '../../lib/markdown'
import i18n from 'browser/lib/i18n'
import { confirmDeleteNote } from 'browser/lib/confirmDeleteNote'

const { remote } = require('electron')
const { Menu, MenuItem, dialog } = remote
Expand Down Expand Up @@ -585,16 +586,11 @@ class NoteList extends React.Component {
const notes = this.notes.map((note) => Object.assign({}, note))
const selectedNotes = findNotesByKeys(notes, selectedNoteKeys)
const firstNote = selectedNotes[0]
const { confirmDeletion } = this.props.config.ui

if (firstNote.isTrashed) {
const noteExp = selectedNotes.length > 1 ? 'notes' : 'note'
const dialogueButtonIndex = dialog.showMessageBox(remote.getCurrentWindow(), {
type: 'warning',
message: i18n.__('Confirm note deletion'),
detail: `This will permanently remove ${selectedNotes.length} ${noteExp}.`,
buttons: [i18n.__('Confirm'), i18n.__('Cancel')]
})
if (dialogueButtonIndex === 1) return
if (!confirmDeleteNote(confirmDeletion, true)) return

Promise.all(
selectedNotes.map((note) => {
return dataApi
Expand All @@ -615,6 +611,8 @@ class NoteList extends React.Component {
})
console.log('Notes were all deleted')
} else {
if (!confirmDeleteNote(confirmDeletion, false)) return

Promise.all(
selectedNotes.map((note) => {
note.isTrashed = true
Expand Down