Skip to content

Commit 08a8627

Browse files
committed
feat(pages): remember selection on undo/redo
1 parent 873f9a5 commit 08a8627

File tree

1 file changed

+47
-8
lines changed

1 file changed

+47
-8
lines changed

apps/client/src/code/pages/page/undo-redo.ts

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { ySyncPluginKey } from 'y-prosemirror';
33

44
import type { Page } from './page';
55

6+
const _moduleLogger = mainLogger.sub('UndoRedo');
7+
68
export class PageUndoRedo {
79
readonly page: Page;
810

@@ -37,26 +39,63 @@ export class PageUndoRedo {
3739
},
3840
);
3941

40-
this.undoManager.on('stack-cleared', this.updateReactiveData);
41-
this.undoManager.on('stack-item-added', this.updateReactiveData);
42-
this.undoManager.on('stack-item-popped', this.updateReactiveData);
43-
this.undoManager.on('stack-item-updated', this.updateReactiveData);
42+
this.undoManager.on('stack-cleared', (event: any) => {
43+
_moduleLogger.debug('stack-cleared: %o', event);
44+
45+
this.updateReactiveData();
46+
});
47+
this.undoManager.on('stack-item-added', (event: any) => {
48+
_moduleLogger.debug('stack-item-added: %o', event);
49+
50+
this.updateReactiveData();
51+
52+
event.stackItem.meta.set(
53+
'selectedNoteIds',
54+
this.page.selection.react.noteIds.slice(),
55+
);
56+
event.stackItem.meta.set(
57+
'selectedArrowIds',
58+
this.page.selection.react.arrowIds.slice(),
59+
);
60+
});
61+
this.undoManager.on('stack-item-updated', (event: any) => {
62+
// _moduleLogger.debug('stack-item-updated: %o', event);
63+
64+
this.updateReactiveData();
65+
66+
event.stackItem.meta.set(
67+
'selectedNoteIds',
68+
this.page.selection.react.noteIds.slice(),
69+
);
70+
event.stackItem.meta.set(
71+
'selectedArrowIds',
72+
this.page.selection.react.arrowIds.slice(),
73+
);
74+
});
75+
this.undoManager.on('stack-item-popped', (event: any) => {
76+
_moduleLogger.debug('stack-item-popped: %o', event);
77+
78+
this.updateReactiveData();
79+
80+
this.page.selection.set(
81+
...this.page.notes.fromIds(event.stackItem.meta.get('selectedNoteIds')),
82+
...this.page.arrows.fromIds(
83+
event.stackItem.meta.get('selectedArrowIds'),
84+
),
85+
);
86+
});
4487
}
4588

4689
resetCapturing() {
4790
this.undoManager.stopCapturing();
4891
}
4992

5093
undo() {
51-
this.page.selection.clear();
52-
5394
this.undoManager.undo();
5495

5596
this.updateReactiveData();
5697
}
5798
redo() {
58-
this.page.selection.clear();
59-
6099
this.undoManager.redo();
61100

62101
this.updateReactiveData();

0 commit comments

Comments
 (0)