fix: make getBoundTextElement and related helpers pure (#7601)

* fix: make getBoundTextElement pure

* updating args

* fix

* pass boundTextElement to getBoundTextMaxWidth

* fix labelled arrows

* lint

* pass elementsMap to removeElementsFromFrame

* pass elementsMap to getMaximumGroups, alignElements and distributeElements

* lint

* pass allElementsMap to renderElement

* lint

* feat: make more typesafe

* fix: remove unnecessary assertion

* fix: remove unused params

---------

Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
This commit is contained in:
Aakansha Doshi 2024-01-26 11:29:07 +05:30 committed by GitHub
parent 2789d08154
commit 10bd08ef19
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
34 changed files with 385 additions and 143 deletions

View file

@ -444,6 +444,7 @@ export const addElementsToFrame = <T extends ElementsMapOrArray>(
elementsToAdd: NonDeletedExcalidrawElement[],
frame: ExcalidrawFrameLikeElement,
): T => {
const elementsMap = arrayToMap(allElements);
const currTargetFrameChildrenMap = new Map<ExcalidrawElement["id"], true>();
for (const element of allElements.values()) {
if (element.frameId === frame.id) {
@ -481,7 +482,7 @@ export const addElementsToFrame = <T extends ElementsMapOrArray>(
finalElementsToAdd.push(element);
}
const boundTextElement = getBoundTextElement(element);
const boundTextElement = getBoundTextElement(element, elementsMap);
if (
boundTextElement &&
!suppliedElementsToAddSet.has(boundTextElement.id) &&
@ -506,6 +507,7 @@ export const addElementsToFrame = <T extends ElementsMapOrArray>(
export const removeElementsFromFrame = (
elementsToRemove: ReadonlySetLike<NonDeletedExcalidrawElement>,
elementsMap: ElementsMap,
) => {
const _elementsToRemove = new Map<
ExcalidrawElement["id"],
@ -524,7 +526,7 @@ export const removeElementsFromFrame = (
const arr = toRemoveElementsByFrame.get(element.frameId) || [];
arr.push(element);
const boundTextElement = getBoundTextElement(element);
const boundTextElement = getBoundTextElement(element, elementsMap);
if (boundTextElement) {
_elementsToRemove.set(boundTextElement.id, boundTextElement);
arr.push(boundTextElement);
@ -550,7 +552,7 @@ export const removeAllElementsFromFrame = <T extends ExcalidrawElement>(
frame: ExcalidrawFrameLikeElement,
) => {
const elementsInFrame = getFrameChildren(allElements, frame.id);
removeElementsFromFrame(elementsInFrame);
removeElementsFromFrame(elementsInFrame, arrayToMap(allElements));
return allElements;
};
@ -558,6 +560,7 @@ export const replaceAllElementsInFrame = <T extends ExcalidrawElement>(
allElements: readonly T[],
nextElementsInFrame: ExcalidrawElement[],
frame: ExcalidrawFrameLikeElement,
app: AppClassProperties,
): T[] => {
return addElementsToFrame(
removeAllElementsFromFrame(allElements, frame),
@ -608,7 +611,7 @@ export const updateFrameMembershipOfSelectedElements = <
});
if (elementsToRemove.size > 0) {
removeElementsFromFrame(elementsToRemove);
removeElementsFromFrame(elementsToRemove, elementsMap);
}
return allElements;
};