ultisuite-client/lib/drive/ultidraw-seed.ts
R3D347HR4Y 303b2b1074
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
wow
2026-06-11 01:22:40 +02:00

34 lines
995 B
TypeScript

import type { ExcalidrawElement } from "@excalidraw/excalidraw/element/types"
import { generateNKeysBetween } from "fractional-indexing"
import * as Y from "yjs"
/** Seed y-excalidraw Y.Array from parsed file elements when no yjsState exists yet. */
export function seedYExcalidrawElements(
ydoc: Y.Doc,
elements: readonly ExcalidrawElement[],
files: Record<string, unknown>
): void {
const yElements = ydoc.getArray<Y.Map<unknown>>("elements")
const yAssets = ydoc.getMap("assets")
if (yElements.length > 0) return
ydoc.transact(() => {
if (elements.length > 0) {
const keys = generateNKeysBetween(null, null, elements.length)
for (let i = 0; i < elements.length; i++) {
yElements.push([
new Y.Map(
Object.entries({
pos: keys[i],
el: { ...elements[i] },
})
),
])
}
}
for (const [id, asset] of Object.entries(files)) {
yAssets.set(id, asset)
}
})
}