@@ -19,6 +19,11 @@ function generateFileList(source) {
19
19
< div class ="text ">
20
20
< input type ="text " onkeydown =${ onKeyEvent } onblur =${ ( e ) => emit ( 'finish-creating-file' , e . target . value ) } />
21
21
</ div >
22
+ < div class ="popup-menu ">
23
+ < div class ="popup-menu-item "> rename</ div >
24
+ < div class ="popup-menu-item "> delete</ div >
25
+ < div class ="popup-menu-item "> upload</ div >
26
+ </ div >
22
27
</ div >
23
28
`
24
29
const newFolderItem = html `
@@ -27,8 +32,50 @@ function generateFileList(source) {
27
32
< div class ="text ">
28
33
< input type ="text " onkeydown =${ onKeyEvent } onblur =${ ( e ) => emit ( 'finish-creating-folder' , e . target . value ) } />
29
34
</ div >
35
+ < div class ="popup-menu ">
36
+ < div class ="popup-menu-item "> rename</ div >
37
+ < div class ="popup-menu-item "> delete</ div >
38
+ < div class ="popup-menu-item "> upload</ div >
39
+ </ div >
30
40
</ div >
31
41
`
42
+ function dismissContextMenu ( e , item ) {
43
+ console . log ( "click action" , e , item )
44
+ e . stopPropagation ( )
45
+ state . fileContextMenu = null
46
+ state . selectedFiles = [ ]
47
+ emit ( 'render' )
48
+ }
49
+ function triggerRemove ( ) {
50
+ emit ( 'remove-files' )
51
+ state . fileContextMenu = null
52
+ emit ( 'render' )
53
+ }
54
+ function triggerRename ( item ) {
55
+ emit ( 'rename-file' , source , item )
56
+
57
+ state . fileContextMenu = null
58
+ emit ( 'render' )
59
+ }
60
+ function triggerTransfer ( ) {
61
+ if ( source === 'disk' ) {
62
+ emit ( 'upload-files' )
63
+ } else {
64
+ emit ( 'download-files' )
65
+ }
66
+ state . fileContextMenu = null
67
+ emit ( 'render' )
68
+ }
69
+ function FileOptions ( item , i ) {
70
+ const popupMenu = html `
71
+ < div class ="popup-menu ">
72
+ < div class ="popup-menu-item ${ state . isConnected ? '' : 'disabled' } " onclick =${ triggerTransfer } > < img src ="media/${ source === 'disk' ? 'upload' : 'download' } .svg " /> </ div >
73
+ < div class ="popup-menu-item " onclick =${ ( ) => triggerRename ( item ) } > < img src ="media/cursor.svg " /> </ div >
74
+ < div class ="popup-menu-item " onclick =${ triggerRemove } > < img src ="media/delete.svg " /> </ div >
75
+ < div class ="popup-menu-item " onclick =${ ( e ) => { dismissContextMenu ( e , item ) } } > < img src ="media/arrow-right-white.svg " /> </ div >
76
+ </ div > `
77
+ return popupMenu
78
+ }
32
79
33
80
function FileItem ( item , i ) {
34
81
const renamingFileItem = html `
@@ -43,6 +90,8 @@ function generateFileList(source) {
43
90
const isChecked = state . selectedFiles . find (
44
91
f => f . fileName === item . fileName && f . source === source
45
92
)
93
+
94
+ const hasContextMenu = state . fileContextMenu && state . fileContextMenu . fileName === item . fileName && state . fileContextMenu . source === source
46
95
function renameItem ( e ) {
47
96
e . preventDefault ( )
48
97
emit ( 'rename-file' , source , item )
@@ -54,12 +103,26 @@ function generateFileList(source) {
54
103
function openFile ( ) {
55
104
if ( ! state . renamingFile ) emit ( `open-file` , source , item )
56
105
}
106
+
107
+ function toggleContextMenu ( item , source , e ) {
108
+ e . stopPropagation ( )
109
+ console . log ( "show file options" , item , source , e )
110
+ // const popupMenu = e.currentTarget.parentElement.querySelector('.popup-menu')
111
+ // popupMenu.classList.add('visible')
112
+ emit ( 'file-context-menu' , item , source , e )
113
+ }
57
114
let fileName = item . fileName
58
115
const isSelected = state . selectedFiles . find ( f => f . fileName === fileName )
59
116
60
117
if ( state . renamingFile == source && isSelected ) {
61
118
fileName = renamingFileItem
62
119
}
120
+
121
+ contextMenuHtml = html ``
122
+ if ( hasContextMenu ) {
123
+ contextMenuHtml = html `${ FileOptions ( item , i ) } `
124
+ }
125
+
63
126
if ( item . type === 'folder' ) {
64
127
return html `
65
128
< div
@@ -69,12 +132,14 @@ function generateFileList(source) {
69
132
>
70
133
< img class ="icon " src ="media/folder.svg " />
71
134
< div class ="text "> ${ fileName } </ div >
72
- < div class ="options " onclick =${ renameItem } >
73
- < img src ="media/cursor .svg " />
135
+ < div class ="options " onclick =${ ( e ) => toggleContextMenu ( item , source , e ) } > }>
136
+ < img src ="media/more .svg " />
74
137
</ div >
138
+ ${ contextMenuHtml }
75
139
</ div >
76
140
`
77
141
} else {
142
+ //<div class="options" onclick=${(e) => {contextualMenu(e, item)}}>
78
143
return html `
79
144
< div
80
145
class ="item ${ isChecked ? 'selected' : '' } "
@@ -83,14 +148,15 @@ function generateFileList(source) {
83
148
>
84
149
< img class ="icon " src ="media/file.svg " />
85
150
< div class ="text "> ${ fileName } </ div >
86
- < div class ="options " onclick =${ renameItem } >
87
- < img src ="media/cursor .svg " />
151
+ < div class ="options " onclick =${ ( e ) => toggleContextMenu ( item , source , e ) } >
152
+ < img src ="media/more .svg " />
88
153
</ div >
154
+ ${ contextMenuHtml }
89
155
</ div >
90
156
`
91
157
}
92
158
}
93
-
159
+ //
94
160
// XXX: Use `source` to filter an array of files with a `source` as proprety
95
161
const files = state [ `${ source } Files` ] . sort ( ( a , b ) => {
96
162
const nameA = a . fileName . toUpperCase ( )
@@ -116,8 +182,8 @@ function generateFileList(source) {
116
182
< div class ="list ">
117
183
${ source === 'disk' && state . diskNavigationPath != '/' ? parentNavigationDots : '' }
118
184
${ source === 'board' && state . boardNavigationPath != '/' ? parentNavigationDots : '' }
119
- ${ state . creatingFile == source ? newFileItem : null }
120
- ${ state . creatingFolder == source ? newFolderItem : null }
185
+ ${ source == state . creatingFile ? newFileItem : null }
186
+ ${ source == state . creatingFolder ? newFolderItem : null }
121
187
${ files . map ( FileItem ) }
122
188
</ div >
123
189
</ div >
0 commit comments