diff --git a/apps/client/src/widgets/type_widgets/canvas.ts b/apps/client/src/widgets/type_widgets/canvas.ts index 9a0d6e34f..8971ed6e2 100644 --- a/apps/client/src/widgets/type_widgets/canvas.ts +++ b/apps/client/src/widgets/type_widgets/canvas.ts @@ -2,9 +2,10 @@ import TypeWidget from "./type_widget.js"; import server from "../../services/server.js"; import type FNote from "../../entities/fnote.js"; import options from "../../services/options.js"; -import type { AppState, BinaryFileData, LibraryItem } from "@excalidraw/excalidraw/types"; -import type { ExcalidrawElement, Theme } from "@excalidraw/excalidraw/element/types"; +import type { LibraryItem } from "@excalidraw/excalidraw/types"; +import type { Theme } from "@excalidraw/excalidraw/element/types"; import type Canvas from "./canvas_el.js"; +import { CanvasContent } from "./canvas_el.js"; const TPL = /*html*/`
@@ -46,11 +47,7 @@ const TPL = /*html*/`
`; -interface CanvasContent { - elements: ExcalidrawElement[]; - files: BinaryFileData[]; - appState: Partial; -} + interface AttachmentMetadata { title: string; diff --git a/apps/client/src/widgets/type_widgets/canvas_el.ts b/apps/client/src/widgets/type_widgets/canvas_el.ts index c90d4f035..1af6d8940 100644 --- a/apps/client/src/widgets/type_widgets/canvas_el.ts +++ b/apps/client/src/widgets/type_widgets/canvas_el.ts @@ -1,9 +1,15 @@ import "@excalidraw/excalidraw/index.css"; import { Excalidraw, getSceneVersion, exportToSvg } from "@excalidraw/excalidraw"; import { createElement, render } from "preact/compat"; -import { AppState, BinaryFileData, ExcalidrawImperativeAPI, ExcalidrawProps, LibraryItem, SceneData } from "@excalidraw/excalidraw/types"; +import { AppState, BinaryFileData, ExcalidrawImperativeAPI, ExcalidrawProps, LibraryItem } from "@excalidraw/excalidraw/types"; import type { ComponentType } from "preact"; -import { Theme } from "@excalidraw/excalidraw/element/types"; +import { ExcalidrawElement, NonDeletedExcalidrawElement, Theme } from "@excalidraw/excalidraw/element/types"; + +export interface CanvasContent { + elements: ExcalidrawElement[]; + files: BinaryFileData[]; + appState: Partial; +} /** Indicates that it is fresh. excalidraw scene version is always >0 */ const SCENE_VERSION_INITIAL = -1; @@ -85,17 +91,11 @@ export default class Canvas { }); } - loadData(content: any, theme: any) { + loadData(content: CanvasContent, theme: Theme) { const { elements, files } = content; const appState: Partial = content.appState ?? {}; - appState.theme = theme; - const sceneData: SceneData = { - elements, - appState - }; - // files are expected in an array when loading. they are stored as a key-index object // see example for loading here: // https://github.com/excalidraw/excalidraw/blob/c5a7723185f6ca05e0ceb0b0d45c4e3fbcb81b2a/src/packages/excalidraw/example/App.js#L68 @@ -111,7 +111,10 @@ export default class Canvas { // Update the scene // TODO: Fix type of sceneData - this.excalidrawApi.updateScene(sceneData as any); + this.excalidrawApi.updateScene({ + elements, + appState: appState as AppState + }); this.excalidrawApi.addFiles(fileArray); this.excalidrawApi.history.clear(); } @@ -135,8 +138,7 @@ export default class Canvas { const svgString = svg.outerHTML; const activeFiles: Record = {}; - // TODO: Used any where upstream typings appear to be broken. - elements.forEach((element: any) => { + elements.forEach((element: NonDeletedExcalidrawElement) => { if ("fileId" in element && element.fileId) { activeFiles[element.fileId] = files[element.fileId]; }