* 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:
Jed Fox 2020-03-07 10:20:38 -05:00 committed by GitHub
parent 1a6431a04a
commit c6a0cfc2b1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
49 changed files with 3498 additions and 3372 deletions

View file

@ -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