admin/fs: file-picker remembers last folder

Massimo Melina committed Nov 29, 2023 at 23:36 UTC c2bdf452165ce315f8710f71c54f1431e9a3f6b5
1 file changed +7 -5
admin/src/addFiles.ts
+7 -5
@@ -9,22 +9,24 @@ import { apiCall } from './api'
9 import FilePicker from './FilePicker'
10 import { focusSelector } from '@hfs/shared'
11
12 +let lastFolder: undefined | string
13 export default function addFiles() {
14 const { close } = newDialog({
15 title: "Add files or folders",
16 dialogProps: { sx:{ minWidth: 'min(90vw, 40em)', minHeight: 'calc(100vh - 9em)' } },
17 Content() {
17 - const parent = getParent()
18 + const parent = getFolderFromSelected()
19 return h(Fragment, {},
20 h(Box, { sx:{ typography: 'body1', px: 1, py: 2 } },
21 "Selected elements will be added under ",
22 parent.isRoot ? h('i', {}, "Home") : decodeURI(parent.id)
23 ),
24 h(FilePicker, {
24 - from: parent.source,
25 + from: lastFolder ?? parent.source,
26 async onSelect(sel) {
27 const res = await Promise.all(sel.map(source =>
28 apiCall('add_vfs', { parent: parent.id, source }).then(r => r, e => [source, e.message])))
29 + lastFolder = sel[0].slice(0, sel[0].lastIndexOf('/'))
30 const errs = res.filter(Array.isArray)
31 if (errs.length)
32 await alertDialog(h(Box, {},
@@ -48,7 +50,7 @@ export async function addVirtual() {
50 try {
51 const name = await promptDialog("Enter folder name")
52 if (!name) return
51 - const { id: parent } = getParent()
53 + const { id: parent } = getFolderFromSelected()
54 const res = await apiCall('add_vfs', { parent, name })
55 reloadVfs([ parent + encodeURI(res.name) + '/' ])
56 await alertDialog(`Folder "${res.name}" created`, 'success')
@@ -60,7 +62,7 @@ export async function addVirtual() {
62
63 export async function addLink() {
64 try {
63 - const { id: parent } = getParent()
65 + const { id: parent } = getFolderFromSelected()
66 const res = await apiCall('add_vfs', { parent, name: 'new link', url: 'https://google.com' })
67 reloadVfs([ parent + encodeURI(res.name) ])
68 toast("Link created", 'success', {
@@ -72,7 +74,7 @@ export async function addLink() {
74 }
75 }
76
75 -function getParent() {
77 +function getFolderFromSelected() {
78 const f = state.selectedFiles[0] || state.vfs
79 return f.type === 'folder' ? f : f.parent!
80 }