preserve bindings if present and fix testcases

This commit is contained in:
Aakansha Doshi 2023-05-23 16:47:52 +05:30
parent 75cfe54b15
commit f113a393e6
4 changed files with 23 additions and 10 deletions

View file

@ -154,7 +154,6 @@ export const restoreElementWithProperties = <
if (PRECEDING_ELEMENT_KEY in element) {
base[PRECEDING_ELEMENT_KEY] = element[PRECEDING_ELEMENT_KEY];
}
return {
...base,
...getNormalizedDimensions(base),
@ -237,7 +236,6 @@ const restoreElement = (
startArrowhead = null,
endArrowhead = element.type === "arrow" ? "arrow" : null,
} = element;
let x = element.x;
let y = element.y;
let points = // migrate old arrow model to new one

View file

@ -1,4 +1,5 @@
import {
Arrowhead,
ExcalidrawBindableElement,
ExcalidrawElement,
FontFamilyValues,
@ -89,6 +90,7 @@ export interface ImportedDataState {
end?: {
type: ExcalidrawBindableElement["type"];
} & MarkOptional<ElementConstructorOpts, "x" | "y">;
endArrowhead?: Arrowhead | null;
} & ElementConstructorOpts)
)[]
| null;

View file

@ -733,10 +733,18 @@ export const convertToExcalidrawElements = (
} as ExcalidrawTextElement;
res.push(excalidrawElement);
} else if (element.type === "arrow" || element.type === "line") {
//@ts-ignore
const { start, end, type, endArrowHead, ...rest } = element;
const {
//@ts-ignore
start,
//@ts-ignore
end,
type,
//@ts-ignore
endArrowhead = element.type === "arrow" ? "arrow" : null,
...rest
} = element;
excalidrawElement = {
excalidrawElement = newLinearElement({
type,
width: 200,
height: 24,
@ -744,10 +752,16 @@ export const convertToExcalidrawElements = (
[0, 0],
[200, 0],
],
endArrowhead: endArrowHead || type === "arrow" ? "arrow" : null,
endArrowhead,
...rest,
} as ExcalidrawLinearElement;
});
mutateElement(excalidrawElement, {
//@ts-ignore
startBinding: element?.startBinding || null,
//@ts-ignore
endBinding: element.endBinding || null,
});
let startBoundElement;
let endBoundElement;
if (start) {

View file

@ -139,9 +139,8 @@ describe("restoreElements", () => {
expect(restoredArrow).toMatchSnapshot({ seed: expect.any(Number) });
});
it("when arrow element has defined endArrowHead", () => {
it('should set arrow element endArrowHead as "arrow" when arrow element endArrowHead is null', () => {
const arrowElement = API.createElement({ type: "arrow" });
const restoredElements = restore.restoreElements([arrowElement], null);
const restoredArrow = restoredElements[0] as ExcalidrawLinearElement;
@ -149,7 +148,7 @@ describe("restoreElements", () => {
expect(arrowElement.endArrowhead).toBe(restoredArrow.endArrowhead);
});
it("when arrow element has undefined endArrowHead", () => {
it('should set arrow element endArrowHead as "arrow" when arrow element endArrowHead is undefined', () => {
const arrowElement = API.createElement({ type: "arrow" });
Object.defineProperty(arrowElement, "endArrowhead", {
get: jest.fn(() => undefined),