better code: define type once
Massimo Melina committed
Jan 17, 2025 at 18:50 UTC
b55d0fb8d9c6b85e424cc1f7018822d012e4eef1
2 files changed
+8
-7
admin/src/FilePicker.ts
+3
-4
@@ -11,8 +11,7 @@ import { StringField } from '@hfs/mui-grid-form'
11
import { FileIcon, FolderIcon } from './VfsTree'
12
import { FixedSizeList } from 'react-window'
13
import { promptDialog } from './dialog'
14
-
15
-export interface DirEntry { n:string, s?:number, m?:string, c?:string, k?:'d' }
14
+import { LsEntry } from '../../src/api.vfs'
15
16
interface FilePickerProps {
17
onSelect:(v:string[])=>void
@@ -34,7 +33,7 @@ export default function FilePicker({ onSelect, multiple=true, files=true, folder
33
}
34
}).finally(() => setReady(true))
35
}, [from])
37
- const { list, props, error, connecting, reload } = useApiList<DirEntry>(ready && 'get_ls', { path: cwd, files, fileMask })
36
+ const { list, props, error, connecting, reload } = useApiList<LsEntry>(ready && 'get_ls', { path: cwd, files, fileMask })
37
useEffect(() => {
38
setSel([])
39
setFilter('')
@@ -107,7 +106,7 @@ export default function FilePicker({ onSelect, multiple=true, files=true, folder
106
width: '100%', height: listHeight,
107
itemSize: 46, itemCount: filteredList.length, overscanCount: 5,
108
children({ index, style }) {
110
- const it: DirEntry = filteredList[index]
109
+ const it = filteredList[index]
110
const isFolder = it.k === 'd'
111
return h(MenuItem, {
112
style: { ...style, padding: 0 },
src/api.vfs.ts
+5
-3
@@ -26,6 +26,8 @@ async function urlToNodeOriginal(uri: string) {
26
27
const ALLOWED_KEYS = ['name','source','masks','default','accept','rename','mime','url','target','comment','icon', ...PERM_KEYS]
28
29
+export interface LsEntry { n:string, s?:number, m?:string, c?:string, k?:'d' }
30
+
31
const apis: ApiHandlers = {
32
33
async get_vfs() {
@@ -185,7 +187,7 @@ const apis: ApiHandlers = {
187
get_disk_spaces: getDiskSpaces,
188
189
get_ls({ path, files=true, fileMask }, ctx) {
188
- return new SendListReadable({
190
+ return new SendListReadable<LsEntry>({
191
async doAtStart(list) {
192
if (!path && IS_WINDOWS) {
193
try {
@@ -213,8 +215,8 @@ const apis: ApiHandlers = {
215
list.add({
216
n: name,
217
s: stats.size,
216
- c: stats.birthtime,
217
- m: stats.mtime,
218
+ c: stats.birthtime.toJSON(),
219
+ m: stats.mtime.toJSON(),
220
k: isDir ? 'd' : undefined,
221
})
222
} catch {} // just ignore entries we can't stat