mirror of
https://github.com/excalidraw/excalidraw.git
synced 2024-11-10 11:35:52 +01:00
History improvements (#337)
* Simplified redoOnce. * Help mental model. * Move clear redo stack where it belongs. * Not needed anymore as we check for same state.
This commit is contained in:
parent
ba8bc10431
commit
88a9cee8bb
@ -22,13 +22,14 @@ class SceneHistory {
|
|||||||
// If the last entry is the same as this one, ignore it
|
// If the last entry is the same as this one, ignore it
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.stateHistory.push(newEntry);
|
this.stateHistory.push(newEntry);
|
||||||
|
|
||||||
|
// As a new entry was pushed, we invalidate the redo stack
|
||||||
|
this.clearRedoStack();
|
||||||
}
|
}
|
||||||
|
|
||||||
restoreEntry(entry: string) {
|
restoreEntry(entry: string) {
|
||||||
// When restoring, we shouldn't add an history entry otherwise we'll be stuck with it and can't go back
|
|
||||||
this.skipRecording();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return JSON.parse(entry);
|
return JSON.parse(entry);
|
||||||
} catch {
|
} catch {
|
||||||
@ -40,11 +41,15 @@ class SceneHistory {
|
|||||||
this.redoStack.splice(0, this.redoStack.length);
|
this.redoStack.splice(0, this.redoStack.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
redoOnce(elements: readonly ExcalidrawElement[]) {
|
redoOnce() {
|
||||||
const currentEntry = this.generateCurrentEntry(elements);
|
if (this.redoStack.length === 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
const entryToRestore = this.redoStack.pop();
|
const entryToRestore = this.redoStack.pop();
|
||||||
|
|
||||||
if (entryToRestore !== undefined) {
|
if (entryToRestore !== undefined) {
|
||||||
this.stateHistory.push(currentEntry);
|
this.stateHistory.push(entryToRestore);
|
||||||
return this.restoreEntry(entryToRestore);
|
return this.restoreEntry(entryToRestore);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,7 +291,7 @@ export class App extends React.Component<{}, AppState> {
|
|||||||
} else if (event[META_KEY] && event.code === "KeyZ") {
|
} else if (event[META_KEY] && event.code === "KeyZ") {
|
||||||
if (event.shiftKey) {
|
if (event.shiftKey) {
|
||||||
// Redo action
|
// Redo action
|
||||||
const data = history.redoOnce(elements);
|
const data = history.redoOnce();
|
||||||
if (data !== null) {
|
if (data !== null) {
|
||||||
elements = data;
|
elements = data;
|
||||||
}
|
}
|
||||||
@ -1026,7 +1026,6 @@ export class App extends React.Component<{}, AppState> {
|
|||||||
this.saveDebounced();
|
this.saveDebounced();
|
||||||
if (history.isRecording()) {
|
if (history.isRecording()) {
|
||||||
history.pushEntry(history.generateCurrentEntry(elements));
|
history.pushEntry(history.generateCurrentEntry(elements));
|
||||||
history.clearRedoStack();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user