Spaces:
Running
Running
File size: 1,725 Bytes
60f878e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import { PlaitBoard, PlaitElement } from '@plait/core';
import { MIME_TYPES, VERSIONS } from '../constants';
import { fileOpen, fileSave } from './filesystem';
import { DrawnixExportedData, DrawnixExportedType } from './types';
import { loadFromBlob, normalizeFile } from './blob';
export const getDefaultName = () => {
const time = new Date().getTime();
return time.toString();
};
export const saveAsJSON = async (
board: PlaitBoard,
name: string = getDefaultName()
) => {
const serialized = serializeAsJSON(board);
const blob = new Blob([serialized], {
type: MIME_TYPES.drawnix,
});
const fileHandle = await fileSave(blob, {
name,
extension: 'drawnix',
description: 'Drawnix file',
});
return { fileHandle };
};
export const loadFromJSON = async (board: PlaitBoard) => {
const file = await fileOpen({
description: 'Drawnix files',
// ToDo: Be over-permissive until https://bugs.webkit.org/show_bug.cgi?id=34442
// gets resolved. Else, iOS users cannot open `.drawnix` files.
// extensions: ["json", "drawnix", "png", "svg"],
});
return loadFromBlob(board, await normalizeFile(file));
};
export const isValidDrawnixData = (data?: any): data is DrawnixExportedData => {
return (
data &&
data.type === DrawnixExportedType.drawnix &&
Array.isArray(data.elements) &&
typeof data.viewport === 'object'
);
};
export const serializeAsJSON = (board: PlaitBoard): string => {
const data = {
type: DrawnixExportedType.drawnix,
version: VERSIONS.drawnix,
source: 'web',
elements: board.children,
viewport: board.viewport,
};
return JSON.stringify(data, null, 2);
};
|