MCPcopy Create free account
hub / github.com/Datakitpage/Datakit / useFileAccess

Function useFileAccess

frontend/src/hooks/useFileAccess.ts:11–231  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

9}
10
11export function useFileAccess() {
12 const [recentFiles, setRecentFiles] = useState<FileAccessEntry[]>([]);
13 const [isLoading, setIsLoading] = useState(false);
14 const [error, setError] = useState<string | null>(null);
15
16 // Load recent files from localStorage on component mount
17 useEffect(() => {
18 try {
19 const storedFiles = localStorage.getItem("datakit_recent_files");
20 if (storedFiles) {
21 // Parse the stored files - remove handle which can't be serialized
22 const parsedFiles = JSON.parse(storedFiles) as FileAccessEntry[];
23 setRecentFiles(parsedFiles);
24 }
25 } catch (err) {
26 console.error("Failed to load recent files:", err);
27 }
28 }, []);
29
30 // Update localStorage when recentFiles changes
31 useEffect(() => {
32 if (recentFiles.length > 0) {
33 try {
34 // Store files without handle property
35 const storable = recentFiles.map(({ handle, ...rest }) => rest);
36 localStorage.setItem("datakit_recent_files", JSON.stringify(storable));
37 } catch (err) {
38 console.error("Failed to save recent files:", err);
39 }
40 }
41 }, [recentFiles]);
42
43 // Add a file to recent files list
44 const addRecentFile = useCallback(
45 (file: File, handle?: FileSystemFileHandle) => {
46 const fileType = file.name.split(".").pop()?.toLowerCase() || "";
47
48 const newEntry: FileAccessEntry = {
49 name: file.name,
50 size: file.size,
51 type: fileType,
52 lastAccessed: Date.now(),
53 handle,
54 };
55
56 setRecentFiles((prev) => {
57 // Add to the beginning, remove duplicates, keep only the 10 most recent
58 const filtered = prev.filter((f) => f.name !== file.name);
59 return [newEntry, ...filtered].slice(0, 10);
60 });
61
62 return newEntry;
63 },
64 []
65 );
66
67 const requestFileHandle = useCallback(async (): Promise<{
68 handle: FileSystemFileHandle;

Callers 1

useDirectFileImportFunction · 0.85

Calls 1

streamMethod · 0.80

Tested by

no test coverage detected