|
|
|
@ -6,7 +6,7 @@ import { t } from "../i18n"; |
|
|
|
import { SceneHistory, HistoryEntry } from "../history"; |
|
|
|
import { SceneHistory, HistoryEntry } from "../history"; |
|
|
|
import { ExcalidrawElement } from "../element/types"; |
|
|
|
import { ExcalidrawElement } from "../element/types"; |
|
|
|
import { AppState } from "../types"; |
|
|
|
import { AppState } from "../types"; |
|
|
|
import { KEYS } from "../keys"; |
|
|
|
import { isWindows, KEYS } from "../keys"; |
|
|
|
import { getElementMap } from "../element"; |
|
|
|
import { getElementMap } from "../element"; |
|
|
|
import { newElementWith } from "../element/mutateElement"; |
|
|
|
import { newElementWith } from "../element/mutateElement"; |
|
|
|
import { fixBindingsAfterDeletion } from "../element/binding"; |
|
|
|
import { fixBindingsAfterDeletion } from "../element/binding"; |
|
|
|
@ -59,16 +59,16 @@ const writeData = ( |
|
|
|
return { commitToHistory }; |
|
|
|
return { commitToHistory }; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const testUndo = (shift: boolean) => (event: KeyboardEvent) => |
|
|
|
|
|
|
|
event[KEYS.CTRL_OR_CMD] && /z/i.test(event.key) && event.shiftKey === shift; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type ActionCreator = (history: SceneHistory) => Action; |
|
|
|
type ActionCreator = (history: SceneHistory) => Action; |
|
|
|
|
|
|
|
|
|
|
|
export const createUndoAction: ActionCreator = (history) => ({ |
|
|
|
export const createUndoAction: ActionCreator = (history) => ({ |
|
|
|
name: "undo", |
|
|
|
name: "undo", |
|
|
|
perform: (elements, appState) => |
|
|
|
perform: (elements, appState) => |
|
|
|
writeData(elements, appState, () => history.undoOnce()), |
|
|
|
writeData(elements, appState, () => history.undoOnce()), |
|
|
|
keyTest: testUndo(false), |
|
|
|
keyTest: (event) => |
|
|
|
|
|
|
|
event[KEYS.CTRL_OR_CMD] && |
|
|
|
|
|
|
|
event.key.toLowerCase() === KEYS.Z && |
|
|
|
|
|
|
|
!event.shiftKey, |
|
|
|
PanelComponent: ({ updateData }) => ( |
|
|
|
PanelComponent: ({ updateData }) => ( |
|
|
|
<ToolButton |
|
|
|
<ToolButton |
|
|
|
type="button" |
|
|
|
type="button" |
|
|
|
@ -84,7 +84,11 @@ export const createRedoAction: ActionCreator = (history) => ({ |
|
|
|
name: "redo", |
|
|
|
name: "redo", |
|
|
|
perform: (elements, appState) => |
|
|
|
perform: (elements, appState) => |
|
|
|
writeData(elements, appState, () => history.redoOnce()), |
|
|
|
writeData(elements, appState, () => history.redoOnce()), |
|
|
|
keyTest: testUndo(true), |
|
|
|
keyTest: (event) => |
|
|
|
|
|
|
|
(event[KEYS.CTRL_OR_CMD] && |
|
|
|
|
|
|
|
event.shiftKey && |
|
|
|
|
|
|
|
event.key.toLowerCase() === KEYS.Z) || |
|
|
|
|
|
|
|
(isWindows && event.ctrlKey && !event.shiftKey && event.key === KEYS.Y), |
|
|
|
PanelComponent: ({ updateData }) => ( |
|
|
|
PanelComponent: ({ updateData }) => ( |
|
|
|
<ToolButton |
|
|
|
<ToolButton |
|
|
|
type="button" |
|
|
|
type="button" |
|
|
|
|