@@ -22,15 +22,15 @@ import { merge } from 'es-toolkit';
22
22
import { omit , pick } from 'es-toolkit/compat' ;
23
23
import { changeBoardModalSliceConfig } from 'features/changeBoardModal/store/slice' ;
24
24
import { canvasSettingsSliceConfig } from 'features/controlLayers/store/canvasSettingsSlice' ;
25
- import { canvasSliceConfig } from 'features/controlLayers/store/canvasSlice' ;
25
+ import { canvasSliceConfig , undoableCanvasesReducer } from 'features/controlLayers/store/canvasSlice' ;
26
26
import { canvasSessionSliceConfig } from 'features/controlLayers/store/canvasStagingAreaSlice' ;
27
27
import { lorasSliceConfig } from 'features/controlLayers/store/lorasSlice' ;
28
28
import { paramsSliceConfig } from 'features/controlLayers/store/paramsSlice' ;
29
29
import { refImagesSliceConfig } from 'features/controlLayers/store/refImagesSlice' ;
30
30
import { dynamicPromptsSliceConfig } from 'features/dynamicPrompts/store/dynamicPromptsSlice' ;
31
31
import { gallerySliceConfig } from 'features/gallery/store/gallerySlice' ;
32
32
import { modelManagerSliceConfig } from 'features/modelManagerV2/store/modelManagerV2Slice' ;
33
- import { nodesSliceConfig } from 'features/nodes/store/nodesSlice' ;
33
+ import { nodesSliceConfig , undoableNodesSliceReducer } from 'features/nodes/store/nodesSlice' ;
34
34
import { workflowLibrarySliceConfig } from 'features/nodes/store/workflowLibrarySlice' ;
35
35
import { workflowSettingsSliceConfig } from 'features/nodes/store/workflowSettingsSlice' ;
36
36
import { upscaleSliceConfig } from 'features/parameters/store/upscaleSlice' ;
@@ -44,7 +44,6 @@ import { diff } from 'jsondiffpatch';
44
44
import dynamicMiddlewares from 'redux-dynamic-middlewares' ;
45
45
import type { SerializeFunction , UnserializeFunction } from 'redux-remember' ;
46
46
import { REMEMBER_REHYDRATED , rememberEnhancer , rememberReducer } from 'redux-remember' ;
47
- import undoable , { newHistory } from 'redux-undo' ;
48
47
import { serializeError } from 'serialize-error' ;
49
48
import { api } from 'services/api' ;
50
49
import { authToastMiddleware } from 'services/api/authToastMiddleware' ;
@@ -91,22 +90,14 @@ const ALL_REDUCERS = {
91
90
[ api . reducerPath ] : api . reducer ,
92
91
[ canvasSessionSliceConfig . slice . reducerPath ] : canvasSessionSliceConfig . slice . reducer ,
93
92
[ 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 ,
99
94
[ changeBoardModalSliceConfig . slice . reducerPath ] : changeBoardModalSliceConfig . slice . reducer ,
100
95
[ configSliceConfig . slice . reducerPath ] : configSliceConfig . slice . reducer ,
101
96
[ dynamicPromptsSliceConfig . slice . reducerPath ] : dynamicPromptsSliceConfig . slice . reducer ,
102
97
[ gallerySliceConfig . slice . reducerPath ] : gallerySliceConfig . slice . reducer ,
103
98
[ lorasSliceConfig . slice . reducerPath ] : lorasSliceConfig . slice . reducer ,
104
99
[ 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 ,
110
101
[ paramsSliceConfig . slice . reducerPath ] : paramsSliceConfig . slice . reducer ,
111
102
[ queueSliceConfig . slice . reducerPath ] : queueSliceConfig . slice . reducer ,
112
103
[ refImagesSliceConfig . slice . reducerPath ] : refImagesSliceConfig . slice . reducer ,
@@ -128,7 +119,7 @@ const unserialize: UnserializeFunction = (data, key) => {
128
119
if ( ! sliceConfig ?. persistConfig ) {
129
120
throw new Error ( `No persist config for slice "${ key } "` ) ;
130
121
}
131
- const { getInitialState, persistConfig, undoableConfig } = sliceConfig ;
122
+ const { getInitialState, persistConfig } = sliceConfig ;
132
123
let state ;
133
124
try {
134
125
const initialState = getInitialState ( ) ;
@@ -160,12 +151,7 @@ const unserialize: UnserializeFunction = (data, key) => {
160
151
state = getInitialState ( ) ;
161
152
}
162
153
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 ;
169
155
} ;
170
156
171
157
const serialize : SerializeFunction = ( data , key ) => {
@@ -175,7 +161,7 @@ const serialize: SerializeFunction = (data, key) => {
175
161
}
176
162
177
163
const result = omit (
178
- sliceConfig . undoableConfig ? data . present : data ,
164
+ sliceConfig . persistConfig . unwrapState ? sliceConfig . persistConfig . unwrapState ( data ) : data ,
179
165
sliceConfig . persistConfig . persistDenylist ?? [ ]
180
166
) ;
181
167
0 commit comments