Selaa lähdekoodia

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 kuukausi sitten
vanhempi
commit
b60ce4b1fe
1 muutettua tiedostoa jossa 4 lisäystä ja 5 poistoa
  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(() => {