From 7654e927f987bf7eda015d1697a349e57396e2ef Mon Sep 17 00:00:00 2001 From: Dustin Brett Date: Fri, 24 Jan 2025 18:08:55 -0800 Subject: [PATCH] Handle new/old observations of FS --- .../fileSystem/useFileSystemContextState.ts | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/contexts/fileSystem/useFileSystemContextState.ts b/contexts/fileSystem/useFileSystemContextState.ts index e666a592..12536d16 100644 --- a/contexts/fileSystem/useFileSystemContextState.ts +++ b/contexts/fileSystem/useFileSystemContextState.ts @@ -47,6 +47,8 @@ export type FileSystemObserver = { type FileSystemChangeRecord = { relativePathComponents: string[]; + relativePathMovedFrom: string[] | null; + type: "appeared" | "disappeared" | "moved"; }; declare global { @@ -330,13 +332,34 @@ const useFileSystemContextState = (): FileSystemContextState => { let observer: FileSystemObserver | undefined; if ("FileSystemObserver" in window) { - observer = new window.FileSystemObserver((records) => - records.forEach(({ relativePathComponents }) => - updateFolder( - join(mappedPath, ...relativePathComponents.slice(0, -1)) - ) - ) - ); + observer = new window.FileSystemObserver(([record]) => { + const { + relativePathComponents, + relativePathMovedFrom, + type, + } = record; + let newFile = ""; + let oldFile = ""; + + if (type === "appeared") { + newFile = + relativePathComponents[relativePathComponents.length - 1]; + } else if (type === "disappeared") { + oldFile = + relativePathComponents[relativePathComponents.length - 1]; + } else if (relativePathMovedFrom && type === "moved") { + oldFile = + relativePathMovedFrom[relativePathMovedFrom.length - 1]; + newFile = + relativePathComponents[relativePathComponents.length - 1]; + } + + updateFolder( + join(mappedPath, ...relativePathComponents.slice(0, -1)), + newFile, + oldFile + ); + }); observer.observe(handle, { recursive: true }); }