@samitouri / QOSami-HFS / commits / b55d0fb8

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