![dependabot-preview[bot]](/assets/img/avatar_default.png)
* Bump prettier from 1.19.1 to 2.0.1 Bumps [prettier](https://github.com/prettier/prettier) from 1.19.1 to 2.0.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/master/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/1.19.1...2.0.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com> * Update formatting Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> Co-authored-by: Panayiotis Lipiridis <lipiridis@gmail.com>
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { getDefaultAppState } from "../appState";
|
|
import { DataState } from "./types";
|
|
import { restore } from "./restore";
|
|
|
|
export async function loadFromBlob(blob: any) {
|
|
const updateAppState = (contents: string) => {
|
|
const defaultAppState = getDefaultAppState();
|
|
let elements = [];
|
|
let appState = defaultAppState;
|
|
try {
|
|
const data = JSON.parse(contents);
|
|
if (data.type !== "excalidraw") {
|
|
throw new Error("Cannot load invalid json");
|
|
}
|
|
elements = data.elements || [];
|
|
appState = { ...defaultAppState, ...data.appState };
|
|
} catch {
|
|
// Do nothing because elements array is already empty
|
|
}
|
|
return { elements, appState };
|
|
};
|
|
|
|
if (blob.handle) {
|
|
(window as any).handle = blob.handle;
|
|
}
|
|
let contents;
|
|
if ("text" in Blob) {
|
|
contents = await blob.text();
|
|
} else {
|
|
contents = await new Promise((resolve) => {
|
|
const reader = new FileReader();
|
|
reader.readAsText(blob, "utf8");
|
|
reader.onloadend = () => {
|
|
if (reader.readyState === FileReader.DONE) {
|
|
resolve(reader.result as string);
|
|
}
|
|
};
|
|
});
|
|
}
|
|
const { elements, appState } = updateAppState(contents);
|
|
if (!elements.length) {
|
|
return Promise.reject("Cannot load invalid json");
|
|
}
|
|
return new Promise<DataState>((resolve) => {
|
|
resolve(restore(elements, appState, { scrollToContent: true }));
|
|
});
|
|
}
|