diff --git a/browser/components/SideNavFilter.js b/browser/components/SideNavFilter.js index dba26f92..2f839a84 100644 --- a/browser/components/SideNavFilter.js +++ b/browser/components/SideNavFilter.js @@ -17,7 +17,7 @@ import styles from './SideNavFilter.styl' const SideNavFilter = ({ isFolded, isHomeActive, handleAllNotesButtonClick, isStarredActive, handleStarredButtonClick, isTrashedActive, handleTrashedButtonClick, counterDelNote, - counterTotalNote, counterStarredNote + counterTotalNote, counterStarredNote, handleFilterButtonContextMenu }) => (
@@ -26,9 +26,9 @@ const SideNavFilter = ({ >
All Notes @@ -40,9 +40,9 @@ const SideNavFilter = ({ >
Starred @@ -54,12 +54,12 @@ const SideNavFilter = ({ >
- Trash + Trash {counterDelNote} diff --git a/browser/main/SideNav/index.js b/browser/main/SideNav/index.js index 9b95ae3e..2120220b 100644 --- a/browser/main/SideNav/index.js +++ b/browser/main/SideNav/index.js @@ -1,6 +1,9 @@ import PropTypes from 'prop-types' import React from 'react' import CSSModules from 'browser/lib/CSSModules' +const { remote } = require('electron') +const { Menu } = remote +import dataApi from 'browser/main/lib/dataApi' import styles from './SideNav.styl' import { openModal } from 'browser/main/lib/modal' import PreferencesModal from '../modals/PreferencesModal' @@ -89,6 +92,7 @@ class SideNav extends React.Component { counterTotalNote={data.noteMap._map.size - data.trashedSet._set.size} counterStarredNote={data.starredSet._set.size} counterDelNote={data.trashedSet._set.size} + handleFilterButtonContextMenu={this.handleFilterButtonContextMenu.bind(this)} /> @@ -139,6 +143,34 @@ class SideNav extends React.Component { router.push(`/tags/${name}`) } + emptyTrash (entries) { + const { dispatch } = this.props + const deletionPromises = entries.map((storageAndNoteKey) => { + const storageKey = storageAndNoteKey.split('-')[0] + const noteKey = storageAndNoteKey.split('-')[1] + return dataApi.deleteNote(storageKey, noteKey) + }) + Promise.all(deletionPromises) + .then((arrayOfStorageAndNoteKeys) => { + arrayOfStorageAndNoteKeys.forEach(({ storageKey, noteKey }) => { + dispatch({ type: 'DELETE_NOTE', storageKey, noteKey }) + }) + }) + .catch((err) => { + console.error('Cannot Delete note: ' + err) + }) + console.log('Trash emptied') + } + + handleFilterButtonContextMenu (event) { + const { data } = this.props + const entries = data.trashedSet.toJS() + const menu = Menu.buildFromTemplate([ + { label: 'Empty Trash', click: () => this.emptyTrash(entries) } + ]) + menu.popup() + } + render () { const { data, location, config, dispatch } = this.props