excalidraw/src/element/mutateElement.ts

58 lines
1.6 KiB
TypeScript
Raw Normal View History

import { ExcalidrawElement, ExcalidrawTextElement } from "./types";
2020-03-14 20:46:57 -07:00
import { randomSeed } from "roughjs/bin/math";
type ElementUpdate<TElement extends ExcalidrawElement> = Omit<
Partial<TElement>,
"id" | "seed"
>;
2020-03-09 23:37:42 -07:00
// 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: ExcalidrawElement,
2020-03-14 20:46:57 -07:00
updates?: ElementUpdate<ExcalidrawElement>,
) {
2020-03-14 20:46:57 -07:00
if (updates) {
Object.assign(element, updates);
}
(element as any).version++;
2020-03-14 20:46:57 -07:00
(element as any).versionNonce = randomSeed();
}
export function newElementWith(
element: ExcalidrawElement,
updates: ElementUpdate<ExcalidrawElement>,
): ExcalidrawElement {
2020-03-14 20:46:57 -07:00
return {
...element,
...updates,
version: element.version + 1,
versionNonce: randomSeed(),
};
}
2020-03-09 23:37:42 -07:00
// 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 document.
export function mutateTextElement(
element: ExcalidrawTextElement,
updates: ElementUpdate<ExcalidrawTextElement>,
): void {
Object.assign(element, updates);
(element as any).version++;
2020-03-14 20:46:57 -07:00
(element as any).versionNonce = randomSeed();
}
export function newTextElementWith(
element: ExcalidrawTextElement,
updates: ElementUpdate<ExcalidrawTextElement>,
): ExcalidrawTextElement {
2020-03-14 20:46:57 -07:00
return {
...element,
...updates,
version: element.version + 1,
versionNonce: randomSeed(),
};
}