@@ -38,7 +38,26 @@ const DatasetOrganizer: React.FC = () => {
3838 const [ showLLMPanel , setShowLLMPanel ] = useState ( false ) ;
3939 const [ hasUnsavedChanges , setHasUnsavedChanges ] = useState ( false ) ;
4040 const [ error , setError ] = useState < string | null > ( null ) ;
41- const isRestoringState = useRef ( false ) ;
41+ // Helper to mark as changed
42+ const markAsChanged = ( ) => {
43+ setHasUnsavedChanges ( true ) ;
44+ } ;
45+
46+ // Wrapper functions that mark as changed
47+ const updateFiles = ( updater : React . SetStateAction < FileItem [ ] > ) => {
48+ setFiles ( updater ) ;
49+ markAsChanged ( ) ;
50+ } ;
51+
52+ const updateSelectedIds = ( updater : React . SetStateAction < Set < string > > ) => {
53+ setSelectedIds ( updater ) ;
54+ markAsChanged ( ) ;
55+ } ;
56+
57+ const updateExpandedIds = ( updater : React . SetStateAction < Set < string > > ) => {
58+ setExpandedIds ( updater ) ;
59+ markAsChanged ( ) ;
60+ } ;
4261
4362 // Load project on mount
4463 useEffect ( ( ) => {
@@ -50,28 +69,14 @@ const DatasetOrganizer: React.FC = () => {
5069 // Restore state from project when loaded
5170 useEffect ( ( ) => {
5271 if ( currentProject && currentProject . extractor_state ) {
53- isRestoringState . current = true ; // add
5472 const state = currentProject . extractor_state ;
5573 setFiles ( state . files || [ ] ) ;
5674 setSelectedIds ( new Set ( state . selectedIds || [ ] ) ) ;
5775 setExpandedIds ( new Set ( state . expandedIds || [ ] ) ) ;
5876 setHasUnsavedChanges ( false ) ;
59-
60- setTimeout ( ( ) => {
61- isRestoringState . current = false ;
62- } , 0 ) ;
6377 }
6478 } , [ currentProject ] ) ;
6579
66- // Track changes
67- useEffect ( ( ) => {
68- if ( currentProject && ! isRestoringState . current ) {
69- console . log ( "before set has UnsavedChanges" , hasUnsavedChanges ) ;
70- setHasUnsavedChanges ( true ) ;
71- console . log ( "after it turns true" , hasUnsavedChanges ) ;
72- }
73- } , [ files , selectedIds , expandedIds , currentProject ] ) ;
74-
7580 const handleSave = async ( ) => {
7681 if ( ! currentProject ) return ;
7782
@@ -248,11 +253,9 @@ const DatasetOrganizer: React.FC = () => {
248253 sx = { {
249254 backgroundColor : Colors . darkGreen ,
250255 color : Colors . lightGray ,
251- // transition: "transform .2s ease",
252256 "&:hover" : {
253257 backgroundColor : Colors . darkGreen ,
254258 border : "none" ,
255- // transform: "scale(1.1)",
256259 } ,
257260 } }
258261 >
@@ -298,7 +301,7 @@ const DatasetOrganizer: React.FC = () => {
298301 < Box sx = { { flex : 1 , overflow : "auto" , p : 3 } } >
299302 < DropZone
300303 files = { files }
301- setFiles = { setFiles }
304+ setFiles = { updateFiles } // Pass wrapper
302305 selectedIds = { selectedIds }
303306 setSelectedIds = { setSelectedIds }
304307 expandedIds = { expandedIds }
@@ -309,11 +312,11 @@ const DatasetOrganizer: React.FC = () => {
309312 { /* Right: File Tree */ }
310313 < FileTree
311314 files = { files }
312- setFiles = { setFiles }
313315 selectedIds = { selectedIds }
314- setSelectedIds = { setSelectedIds }
315316 expandedIds = { expandedIds }
316- setExpandedIds = { setExpandedIds }
317+ setFiles = { updateFiles } // Pass wrapper instead
318+ setSelectedIds = { updateSelectedIds } // Pass wrapper
319+ setExpandedIds = { updateExpandedIds } // Pass wrapper
317320 />
318321 </ Box >
319322
0 commit comments