8000 File list context actions working. · arduino/lab-micropython-editor@60f80d1 · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit 60f80d1

Browse files
committed
File list context actions working.
Signed-off-by: ubi de feo <me@ubidefeo.com>
1 parent 4cad657 commit 60f80d1

File tree

3 files changed

+31
-31
lines changed

3 files changed

+31
-31
lines changed

index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ let splashTimestamp = null
1212
function createWindow () {
1313
// Create the browser window.
1414
win = new BrowserWindow({
15-
width: 720,
16-
height: 640,
15+
width: 760,
16+
height: 700,
1717
webPreferences: {
1818
nodeIntegration: false,
1919
webSecurity: true,

ui/arduino/store.js

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ async function store(state, emitter) {
3030
win.setWindowSize(720, 640)
3131

3232
state.platform = window.BridgeWindow.getOS()
33-
state.view = 'file-manager'
33+
state.view = 'editor'
3434
state.diskNavigationPath = '/'
3535
state.diskNavigationRoot = getDiskNavigationRootFromStorage()
3636
state.diskFiles = []
@@ -1138,25 +1138,21 @@ async function store(state, emitter) {
11381138
})
11391139

11401140
emitter.on('file-context-menu', (file, source, event) => {
1141-
// state.selectedFiles = []
11421141
let parentFolder = source == 'board' ? state.boardNavigationPath : state.diskNavigationPath
11431142
log('file-contextual-menu', file, source, event)
1144-
const isSelected = state.selectedFiles.find((f) => {
1143+
let itemIndex = state.selectedFiles.findIndex((f) => {
11451144
return f.fileName === file.fileName && f.source === source
11461145
})
1147-
if (isSelected) {
1148-
state.selectedFiles = state.selectedFiles.filter((f) => {
1149-
return !(f.fileName === file.fileName && f.source === source)
1150-
})
1151-
} else {
1146+
if (itemIndex == -1) {
11521147
state.selectedFiles.push({
11531148
fileName: file.fileName,
11541149
type: file.type,
11551150
source: source,
11561151
parentFolder: parentFolder
11571152
})
1153+
itemIndex = state.selectedFiles.length - 1
11581154
}
1159-
state.itemActionMenu = state.selectedFiles[state.selectedFiles.length - 1]
1155+
state.itemActionMenu = state.selectedFiles[itemIndex]
11601156
emitter.emit('render')
11611157
})
11621158

@@ -1178,10 +1174,10 @@ async function store(state, emitter) {
11781174
return
11791175
}
11801176

1181-
const isSelected = state.selectedFiles.find((f) => {
1177+
const selectedItemIndex = state.selectedFiles.findIndex((f) => {
11821178
return f.fileName === file.fileName && f.source === source
11831179
})
1184-
if (isSelected) {
1180+
if (selectedItemIndex > -1) {
11851181
state.selectedFiles = state.selectedFiles.filter((f) => {
11861182
return !(f.fileName === file.fileName && f.source === source)
11871183
})
@@ -1193,6 +1189,8 @@ async function store(state, emitter) {
11931189
parentFolder: parentFolder
11941190
})
11951191
}
1192+
1193+
state.itemActionMenu = state.itemActionMenu === null ? null : state.selectedFiles[state.selectedFiles.length - 1]
11961194
console.log(state.selectedFiles)
11971195
emitter.emit('render')
11981196
})
@@ -1203,10 +1201,9 @@ async function store(state, emitter) {
12031201
for (let i in state.selectedFiles) {
12041202
let selectedFile = state.selectedFiles[i]
12051203
if (selectedFile.type == 'folder') {
1206-
// Don't open folders
1204+
// skip folders
12071205
continue
12081206
}
1209-
// ALl good until here
12101207

12111208
const alreadyOpen = state.openFiles.find((f) => {
12121209
return f.fileName == selectedFile.fileName

ui/arduino/views/components/file-list.js

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const DiskFileList = generateFileList('disk')
22
const BoardFileList = generateFileList('board')
33

4-
function generateFileList(source, selectedFiles) {
4+
function generateFileList(source) {
55

66
return function FileList(state, emit) {
77
function onKeyEvent(e) {
@@ -13,7 +13,10 @@ function generateFileList(source, selectedFiles) {
1313
e.target.blur()
1414
}
1515
}
16+
selectedFiles = state.selectedFiles
17+
isConnected = state.isConnected
1618

19+
console.log('generating', source, '| selectedFiles', selectedFiles)
1720
/* template for new file item, with focussed input
1821
ESC to cancel, ENTER to finish */
1922
const newFileItem = html`
@@ -72,12 +75,19 @@ function generateFileList(source, selectedFiles) {
7275
state.itemActionMenu = null
7376
emit('render')
7477
}
75-
78+
// let allowTransfer = false
79+
// if (source === 'disk') {
80+
// return canUpload(isConnected, selectedFiles)
81+
// else {
82+
// return canDownload(isConnected, selectedFiles)
83+
// }
84+
const allowTransfer = source === 'disk' ? canUpload({isConnected, selectedFiles}) : canDownload({isConnected, selectedFiles})
85+
const allowRename = selectedFiles.length === 1
7686
function ItemActions(item, i){
7787
const popupMenu = html`
7888
<div class="popup-menu">
79-
<div class="popup-menu-item ${state.isConnected ? '' : 'disabled'}" onclick=${triggerTransfer}><img src="media/${source === 'disk' ? 'upload' : 'download'}.svg" /></div>
80-
<div class="popup-menu-item" onclick=${() => triggerRename(item)}><img src="media/cursor.svg" /></div>
89+
<div class="popup-menu-item ${allowTransfer ? '' : 'disabled'}" onclick=${triggerTransfer}><img src="media/${source === 'disk' ? 'upload' : 'download'}.svg" /></div>
90+
<div class="popup-menu-item ${allowRename ? '' : 'disabled'}"" onclick=${() => triggerRename(item)}><img src="media/cursor.svg" /></div>
8191
<div class="popup-menu-item" onclick=${triggerRemove}><img src="media/delete.svg" /></div>
8292
<div class="popup-menu-item" onclick=${(e) => {dismissContextMenu(e, item)}}><img src="media/arrow-right-white.svg" /></div>
8393
</div>`
@@ -113,8 +123,6 @@ function generateFileList(source, selectedFiles) {
113123
function toggleActionsMenu(item, source, e) {
114124
e.stopPropagation()
115125
console.log("show file options", item, source, e)
116-
// const popupMenu = e.currentTarget.parentElement.querySelector('.popup-menu')
117-
// popupMenu.classList.add('visible')
118126
emit('file-context-menu', item, source, e)
119127
}
120128

@@ -130,17 +138,13 @@ function generateFileList(source, selectedFiles) {
130138
fileName = renamingFileItem
131139
}
132140

133-
// a context menu has been triggered
134-
const contextMenuOpen = state.itemActionMenu != null
135-
136141
// only show the action menu on current item
137-
const showActionMenu = state.itemActionMenu && state.itemActionMenu.fileName === item.fileName && state.itemActionMenu.source === source
142+
const showActionMenu = state.itemActionMenu
143+
&& state.itemActionMenu.fileName === item.fileName
144+
&& state.itemActionMenu.source === source
138145

139-
// let actionMenuHtml = html``
140-
// if (showActionMenu) {
141146
const actionMenuHtml = showActionMenu ? html`${ItemActions(item, i)}` : html``
142-
// }
143-
147+
144148
if (item.type === 'folder') {
145149
return html`
146150
<div
@@ -160,7 +164,6 @@ function generateFileList(source, selectedFiles) {
160164
</div>
161165
`
162166
} else {
163-
//<div class="options" onclick=${(e) => {contextualMenu(e, item)}}>
164167
return html`
165168
<div
166169
class="item ${isChecked ? 'selected' : ''} ${showActionMenu ? 'actionable' : ''}"
@@ -180,7 +183,7 @@ function generateFileList(source, selectedFiles) {
180183
`
181184
}
182185
}
183-
//
186+
184187
// XXX: Use `source` to filter an array of files with a `source` as proprety
185188
const files = state[`${source}Files`].sort((a, b) => {
186189
const nameA = a.fileName.toUpperCase()

0 commit comments

Comments
 (0)
0