import { ExcalidrawElement } from "./types"; import { randomSeed } from "roughjs/bin/math"; import { invalidateShapeForElement } from "../renderer/renderElement"; type ElementUpdate = Omit< Partial, "id" | "seed" >; // This function tracks updates of text elements for the purposes for collaboration. // The version is used to compare updates when more than one user is working in // the same drawing. export function mutateElement( element: TElement, updates: ElementUpdate, ) { const mutableElement = element as any; for (const key in updates) { const value = (updates as any)[key]; if (typeof value !== "undefined") { mutableElement[key] = value; } } if ( typeof updates.height !== "undefined" || typeof updates.width !== "undefined" || typeof updates.points !== "undefined" ) { invalidateShapeForElement(element); } mutableElement.version++; mutableElement.versionNonce = randomSeed(); } export function newElementWith( element: TElement, updates: ElementUpdate, ): TElement { return { ...element, ...updates, version: element.version + 1, versionNonce: randomSeed(), }; }