Skip to content

Commit 5331846

Browse files
committed
fix(undo-redo): clear previous item
1 parent 3e5b806 commit 5331846

File tree

1 file changed

+31
-19
lines changed

1 file changed

+31
-19
lines changed

libs/ngrx-toolkit/src/lib/with-undo-redo.ts

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import {
55
withComputed,
66
withHooks,
77
withMethods,
8-
EmptyFeatureResult, SignalStoreFeatureResult
8+
EmptyFeatureResult,
9+
SignalStoreFeatureResult,
910
} from '@ngrx/signals';
1011
import { Signal, effect, signal, untracked, isSignal } from '@angular/core';
1112
import { capitalize } from './with-data-service';
@@ -16,7 +17,7 @@ export type NormalizedUndoRedoOptions = {
1617
maxStackSize: number;
1718
collections?: string[];
1819
keys: string[];
19-
skip: number,
20+
skip: number;
2021
};
2122

2223
const defaultOptions: NormalizedUndoRedoOptions = {
@@ -41,29 +42,35 @@ type NonNever<T> = T extends never ? never : T;
4142

4243
type ExtractEntityCollection<T> = T extends `${infer U}Entities` ? U : never;
4344

44-
type ExtractEntityCollections<Store extends SignalStoreFeatureResult> = NonNever<{
45-
[K in keyof Store['props']]: ExtractEntityCollection<K>;
46-
}[keyof Store['props']]>;
45+
type ExtractEntityCollections<Store extends SignalStoreFeatureResult> =
46+
NonNever<
47+
{
48+
[K in keyof Store['props']]: ExtractEntityCollection<K>;
49+
}[keyof Store['props']]
50+
>;
4751

48-
type OptionsForState<Store extends SignalStoreFeatureResult> = Partial<Omit<NormalizedUndoRedoOptions, 'collections' | 'keys'>> & {
52+
type OptionsForState<Store extends SignalStoreFeatureResult> = Partial<
53+
Omit<NormalizedUndoRedoOptions, 'collections' | 'keys'>
54+
> & {
4955
collections?: ExtractEntityCollections<Store>[];
5056
keys?: (keyof Store['state'])[];
5157
};
5258

53-
export function withUndoRedo<
54-
Input extends EmptyFeatureResult>(options?: OptionsForState<Input>): SignalStoreFeature<
59+
export function withUndoRedo<Input extends EmptyFeatureResult>(
60+
options?: OptionsForState<Input>
61+
): SignalStoreFeature<
5562
Input,
5663
EmptyFeatureResult & {
57-
props: {
58-
canUndo: Signal<boolean>;
59-
canRedo: Signal<boolean>;
60-
};
61-
methods: {
62-
undo: () => void;
63-
redo: () => void;
64-
clearStack: () => void;
65-
};
66-
}
64+
props: {
65+
canUndo: Signal<boolean>;
66+
canRedo: Signal<boolean>;
67+
};
68+
methods: {
69+
undo: () => void;
70+
redo: () => void;
71+
clearStack: () => void;
72+
};
73+
}
6774
> {
6875
let previous: StackItem | null = null;
6976
let skipOnce = false;
@@ -130,14 +137,19 @@ export function withUndoRedo<
130137
clearStack(): void {
131138
undoStack.splice(0);
132139
redoStack.splice(0);
140+
141+
previous = null;
142+
133143
updateInternal();
134144
},
135145
})),
136146
withHooks({
137147
onInit(store) {
138148
effect(() => {
139149
const cand = keys.reduce((acc, key) => {
140-
const s = (store as Record<string | keyof Input['state'], unknown>)[key];
150+
const s = (store as Record<string | keyof Input['state'], unknown>)[
151+
key
152+
];
141153
if (s && isSignal(s)) {
142154
return {
143155
...acc,

0 commit comments

Comments
 (0)