@@ -10,6 +10,7 @@ import dataApi from 'browser/main/lib/dataApi'
1010import StorageItemChild from 'browser/components/StorageItem'
1111import eventEmitter from 'browser/main/lib/eventEmitter'
1212import _ from 'lodash'
13+ import * as path from 'path'
1314
1415const { remote } = require ( 'electron' )
1516const { Menu, MenuItem, dialog } = remote
@@ -24,18 +25,20 @@ class StorageItem extends React.Component {
2425 }
2526
2627 handleHeaderContextMenu ( e ) {
27- const menu = new Menu ( )
28- menu . append ( new MenuItem ( {
29- label : 'Add Folder' ,
30- click : ( e ) => this . handleAddFolderButtonClick ( e )
31- } ) )
32- menu . append ( new MenuItem ( {
33- type : 'separator'
34- } ) )
35- menu . append ( new MenuItem ( {
36- label : 'Unlink Storage' ,
37- click : ( e ) => this . handleUnlinkStorageClick ( e )
38- } ) )
28+ const menu = Menu . buildFromTemplate ( [
29+ {
30+ label : 'Add Folder' ,
31+ click : ( e ) => this . handleAddFolderButtonClick ( e )
32+ } ,
33+ {
34+ type : 'separator'
35+ } ,
36+ {
37+ label : 'Unlink Storage' ,
38+ click : ( e ) => this . handleUnlinkStorageClick ( e )
39+ }
40+ ] )
41+
3942 menu . popup ( )
4043 }
4144
@@ -89,18 +92,36 @@ class StorageItem extends React.Component {
8992 }
9093
9194 handleFolderButtonContextMenu ( e , folder ) {
92- const menu = new Menu ( )
93- menu . append ( new MenuItem ( {
94- label : 'Rename Folder' ,
95- click : ( e ) => this . handleRenameFolderClick ( e , folder )
96- } ) )
97- menu . append ( new MenuItem ( {
98- type : 'separator'
99- } ) )
100- menu . append ( new MenuItem ( {
101- label : 'Delete Folder' ,
102- click : ( e ) => this . handleFolderDeleteClick ( e , folder )
103- } ) )
95+ const menu = Menu . buildFromTemplate ( [
96+ {
97+ label : 'Rename Folder' ,
98+ click : ( e ) => this . handleRenameFolderClick ( e , folder )
99+ } ,
100+ {
101+ type : 'separator'
102+ } ,
103+ {
104+ label : 'Export Folder' ,
105+ submenu : [
106+ {
107+ label : 'Export as txt' ,
108+ click : ( e ) => this . handleExportFolderClick ( e , folder , 'txt' )
109+ } ,
110+ {
111+ label : 'Export as md' ,
112+ click : ( e ) => this . handleExportFolderClick ( e , folder , 'md' )
113+ }
114+ ]
115+ } ,
116+ {
117+ type : 'separator'
118+ } ,
119+ {
120+ label : 'Delete Folder' ,
121+ click : ( e ) => this . handleFolderDeleteClick ( e , folder )
122+ }
123+ ] )
124+
104125 menu . popup ( )
105126 }
106127
@@ -112,6 +133,31 @@ class StorageItem extends React.Component {
112133 } )
113134 }
114135
136+ handleExportFolderClick ( e , folder , fileType ) {
137+ const options = {
138+ properties : [ 'openDirectory' , 'createDirectory' ] ,
139+ buttonLabel : 'Select directory' ,
140+ title : 'Select a folder to export the files to' ,
141+ multiSelections : false
142+ }
143+ dialog . showOpenDialog ( remote . getCurrentWindow ( ) , options ,
144+ ( paths ) => {
145+ if ( paths && paths . length === 1 ) {
146+ const { storage, dispatch } = this . props
147+ dataApi
148+ . exportFolder ( storage . key , folder . key , fileType , paths [ 0 ] )
149+ . then ( ( data ) => {
150+ dispatch ( {
151+ type : 'EXPORT_FOLDER' ,
152+ storage : data . storage ,
153+ folderKey : data . folderKey ,
154+ fileType : data . fileType
155+ } )
156+ } )
157+ }
158+ } )
159+ }
160+
115161 handleFolderDeleteClick ( e , folder ) {
116162 const index = dialog . showMessageBox ( remote . getCurrentWindow ( ) , {
117163 type : 'warning' ,
0 commit comments