瀏覽代碼

fix: resolve FileList empty state race condition on first visit

- Remove hasInitializedDatasets boolean flag (unreliable approach)
- Change initialization logic to check if enabledDatasets.size === 0 instead
- This ensures datasets are auto-selected ONLY if no saved preference exists
- Initialize effect now depends only on [datasets], avoiding stale closure issues
- Fixes the race condition where filters were empty before datasets loaded

The issue was that enabledDatasets started as an empty Set, causing all files to be filtered out.
The boolean flag approach was still susceptible to timing issues. Now we check the actual Set size
to determine if initialization is needed - a simpler and more reliable approach.
Timothy Pomeroy 1 月之前
父節點
當前提交
b60ce4b1fe
共有 1 個文件被更改,包括 4 次插入5 次删除
  1. 4 5
      apps/web/src/app/files/FileList.tsx

+ 4 - 5
apps/web/src/app/files/FileList.tsx

@@ -55,7 +55,6 @@ export default function FileList() {
     }
     return new Set();
   });
-  const [hasInitializedDatasets, setHasInitializedDatasets] = useState(false);
   const [searchTerm, setSearchTerm] = useState(() => {
     if (typeof window !== "undefined") {
       return localStorage.getItem("fileList:searchTerm") || "";
@@ -121,16 +120,16 @@ export default function FileList() {
     }
   }, [pageSize]);
 
-  // Initialize enabled datasets when datasets are loaded (only on first load)
+  // Initialize enabled datasets when datasets are loaded and no saved preference exists
   useEffect(() => {
-    if (datasets && datasets.length > 0 && !hasInitializedDatasets) {
+    if (datasets && datasets.length > 0 && enabledDatasets.size === 0) {
+      // Only auto-select all datasets if nothing was saved in localStorage
       const datasetNames = datasets
         .map((path: string) => path.split("/").pop())
         .filter(Boolean);
       setEnabledDatasets(new Set(datasetNames));
-      setHasInitializedDatasets(true);
     }
-  }, [datasets, hasInitializedDatasets]);
+  }, [datasets]);
 
   // Listen for WebSocket events
   useEffect(() => {