* 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

48
src/data/json.ts Normal file
View file

@ -0,0 +1,48 @@
import { ExcalidrawElement } from "../element/types";
import { AppState } from "../types";
import { cleanAppStateForExport } from "../appState";
import { fileOpen, fileSave } from "browser-nativefs";
import { loadFromBlob } from "./blob";
export function serializeAsJSON(
elements: readonly ExcalidrawElement[],
appState: AppState,
): string {
return JSON.stringify(
{
type: "excalidraw",
version: 1,
source: window.location.origin,
elements: elements.map(({ shape, canvas, isSelected, ...el }) => el),
appState: cleanAppStateForExport(appState),
},
null,
2,
);
}
export async function saveAsJSON(
elements: readonly ExcalidrawElement[],
appState: AppState,
) {
const serialized = serializeAsJSON(elements, appState);
const name = `${appState.name}.excalidraw`;
await fileSave(
new Blob([serialized], { type: "application/json" }),
{
fileName: name,
description: "Excalidraw file",
},
(window as any).handle,
);
}
export async function loadFromJSON() {
const blob = await fileOpen({
description: "Excalidraw files",
extensions: ["json", "excalidraw"],
mimeTypes: ["application/json"],
});
return loadFromBlob(blob);
}