mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
Refactor (#862)
* Initial factoring out of parts of the LayerUI component 2360 → 2224 LOC * Create a Section component * Break up src/index.tsx * Refactor actions to reduce duplication, fix CSS Also consolidate icons * Move scene/data.ts to its own directory * Fix accidental reverts, banish further single-character variables * ACTIVE_ELEM_COLOR → ACTIVE_ELEMENT_COLOR * Further refactoring the icons file * Log all errors * Pointer Event polyfill to make the tests work * add test hooks & fix tests Co-authored-by: dwelle <luzar.david@gmail.com>
This commit is contained in:
parent
1a6431a04a
commit
c6a0cfc2b1
49 changed files with 3498 additions and 3372 deletions
|
@ -10,33 +10,36 @@ import { KEYS } from "../keys";
|
|||
|
||||
const writeData = (
|
||||
appState: AppState,
|
||||
data: { elements: ExcalidrawElement[]; appState: AppState } | null,
|
||||
updater: () => { elements: ExcalidrawElement[]; appState: AppState } | null,
|
||||
) => {
|
||||
if (data !== null) {
|
||||
return {
|
||||
elements: data.elements,
|
||||
appState: { ...appState, ...data.appState },
|
||||
};
|
||||
}
|
||||
return {};
|
||||
};
|
||||
|
||||
const testUndo = (shift: boolean) => (
|
||||
event: KeyboardEvent,
|
||||
appState: AppState,
|
||||
) => event[KEYS.META] && /z/i.test(event.key) && event.shiftKey === shift;
|
||||
|
||||
export const createUndoAction: (h: SceneHistory) => Action = history => ({
|
||||
name: "undo",
|
||||
perform: (_, appState) =>
|
||||
if (
|
||||
[
|
||||
appState.multiElement,
|
||||
appState.resizingElement,
|
||||
appState.editingElement,
|
||||
appState.draggingElement,
|
||||
].every(x => x === null)
|
||||
? writeData(appState, history.undoOnce())
|
||||
: {},
|
||||
].some(Boolean)
|
||||
) {
|
||||
const data = updater();
|
||||
|
||||
return data === null
|
||||
? {}
|
||||
: {
|
||||
elements: data.elements,
|
||||
appState: { ...appState, ...data.appState },
|
||||
};
|
||||
}
|
||||
return {};
|
||||
};
|
||||
|
||||
const testUndo = (shift: boolean) => (event: KeyboardEvent) =>
|
||||
event[KEYS.META] && /z/i.test(event.key) && event.shiftKey === shift;
|
||||
|
||||
type ActionCreator = (history: SceneHistory) => Action;
|
||||
|
||||
export const createUndoAction: ActionCreator = history => ({
|
||||
name: "undo",
|
||||
perform: (_, appState) => writeData(appState, () => history.undoOnce()),
|
||||
keyTest: testUndo(false),
|
||||
PanelComponent: ({ updateData }) => (
|
||||
<ToolButton
|
||||
|
@ -49,17 +52,9 @@ export const createUndoAction: (h: SceneHistory) => Action = history => ({
|
|||
commitToHistory: () => false,
|
||||
});
|
||||
|
||||
export const createRedoAction: (h: SceneHistory) => Action = history => ({
|
||||
export const createRedoAction: ActionCreator = history => ({
|
||||
name: "redo",
|
||||
perform: (_, appState) =>
|
||||
[
|
||||
appState.multiElement,
|
||||
appState.resizingElement,
|
||||
appState.editingElement,
|
||||
appState.draggingElement,
|
||||
].every(x => x === null)
|
||||
? writeData(appState, history.redoOnce())
|
||||
: {},
|
||||
perform: (_, appState) => writeData(appState, () => history.redoOnce()),
|
||||
keyTest: testUndo(true),
|
||||
PanelComponent: ({ updateData }) => (
|
||||
<ToolButton
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue