@@ -22,15 +22,15 @@ import { merge } from 'es-toolkit';
2222import { omit , pick } from 'es-toolkit/compat' ;
2323import { changeBoardModalSliceConfig } from 'features/changeBoardModal/store/slice' ;
2424import { canvasSettingsSliceConfig } from 'features/controlLayers/store/canvasSettingsSlice' ;
25- import { canvasSliceConfig } from 'features/controlLayers/store/canvasSlice' ;
25+ import { canvasSliceConfig , undoableCanvasesReducer } from 'features/controlLayers/store/canvasSlice' ;
2626import { canvasSessionSliceConfig } from 'features/controlLayers/store/canvasStagingAreaSlice' ;
2727import { lorasSliceConfig } from 'features/controlLayers/store/lorasSlice' ;
2828import { paramsSliceConfig } from 'features/controlLayers/store/paramsSlice' ;
2929import { refImagesSliceConfig } from 'features/controlLayers/store/refImagesSlice' ;
3030import { dynamicPromptsSliceConfig } from 'features/dynamicPrompts/store/dynamicPromptsSlice' ;
3131import { gallerySliceConfig } from 'features/gallery/store/gallerySlice' ;
3232import { modelManagerSliceConfig } from 'features/modelManagerV2/store/modelManagerV2Slice' ;
33- import { nodesSliceConfig } from 'features/nodes/store/nodesSlice' ;
33+ import { nodesSliceConfig , undoableNodesSliceReducer } from 'features/nodes/store/nodesSlice' ;
3434import { workflowLibrarySliceConfig } from 'features/nodes/store/workflowLibrarySlice' ;
3535import { workflowSettingsSliceConfig } from 'features/nodes/store/workflowSettingsSlice' ;
3636import { upscaleSliceConfig } from 'features/parameters/store/upscaleSlice' ;
@@ -44,7 +44,6 @@ import { diff } from 'jsondiffpatch';
4444import dynamicMiddlewares from 'redux-dynamic-middlewares' ;
4545import type { SerializeFunction , UnserializeFunction } from 'redux-remember' ;
4646import { REMEMBER_REHYDRATED , rememberEnhancer , rememberReducer } from 'redux-remember' ;
47- import undoable , { newHistory } from 'redux-undo' ;
4847import { serializeError } from 'serialize-error' ;
4948import { api } from 'services/api' ;
5049import { authToastMiddleware } from 'services/api/authToastMiddleware' ;
@@ -91,22 +90,14 @@ const ALL_REDUCERS = {
9190 [ api . reducerPath ] : api . reducer ,
9291 [ canvasSessionSliceConfig . slice . reducerPath ] : canvasSessionSliceConfig . slice . reducer ,
9392 [ canvasSettingsSliceConfig . slice . reducerPath ] : canvasSettingsSliceConfig . slice . reducer ,
94- // Undoable!
95- [ canvasSliceConfig . slice . reducerPath ] : undoable (
96- canvasSliceConfig . slice . reducer ,
97- canvasSliceConfig . undoableConfig ?. reduxUndoOptions
98- ) ,
93+ [ canvasSliceConfig . slice . reducerPath ] : undoableCanvasesReducer ,
9994 [ changeBoardModalSliceConfig . slice . reducerPath ] : changeBoardModalSliceConfig . slice . reducer ,
10095 [ configSliceConfig . slice . reducerPath ] : configSliceConfig . slice . reducer ,
10196 [ dynamicPromptsSliceConfig . slice . reducerPath ] : dynamicPromptsSliceConfig . slice . reducer ,
10297 [ gallerySliceConfig . slice . reducerPath ] : gallerySliceConfig . slice . reducer ,
10398 [ lorasSliceConfig . slice . reducerPath ] : lorasSliceConfig . slice . reducer ,
10499 [ modelManagerSliceConfig . slice . reducerPath ] : modelManagerSliceConfig . slice . reducer ,
105- // Undoable!
106- [ nodesSliceConfig . slice . reducerPath ] : undoable (
107- nodesSliceConfig . slice . reducer ,
108- nodesSliceConfig . undoableConfig ?. reduxUndoOptions
109- ) ,
100+ [ nodesSliceConfig . slice . reducerPath ] : undoableNodesSliceReducer ,
110101 [ paramsSliceConfig . slice . reducerPath ] : paramsSliceConfig . slice . reducer ,
111102 [ queueSliceConfig . slice . reducerPath ] : queueSliceConfig . slice . reducer ,
112103 [ refImagesSliceConfig . slice . reducerPath ] : refImagesSliceConfig . slice . reducer ,
@@ -128,7 +119,7 @@ const unserialize: UnserializeFunction = (data, key) => {
128119 if ( ! sliceConfig ?. persistConfig ) {
129120 throw new Error ( `No persist config for slice "${ key } "` ) ;
130121 }
131- const { getInitialState, persistConfig, undoableConfig } = sliceConfig ;
122+ const { getInitialState, persistConfig } = sliceConfig ;
132123 let state ;
133124 try {
134125 const initialState = getInitialState ( ) ;
@@ -160,12 +151,7 @@ const unserialize: UnserializeFunction = (data, key) => {
160151 state = getInitialState ( ) ;
161152 }
162153
163- // Undoable slices must be wrapped in a history!
164- if ( undoableConfig ) {
165- return newHistory ( [ ] , state , [ ] ) ;
166- } else {
167- return state ;
168- }
154+ return persistConfig . wrapState ? persistConfig . wrapState ( state ) : state ;
169155} ;
170156
171157const serialize : SerializeFunction = ( data , key ) => {
@@ -175,7 +161,7 @@ const serialize: SerializeFunction = (data, key) => {
175161 }
176162
177163 const result = omit (
178- sliceConfig . undoableConfig ? data . present : data ,
164+ sliceConfig . persistConfig . unwrapState ? sliceConfig . persistConfig . unwrapState ( data ) : data ,
179165 sliceConfig . persistConfig . persistDenylist ?? [ ]
180166 ) ;
181167
0 commit comments