mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
fix: z-index change by one causes app to freeze (#8314)
This commit is contained in:
parent
261304c1a4
commit
d5f4ee7b3f
2 changed files with 36 additions and 14 deletions
|
@ -246,6 +246,20 @@ describe("z-index manipulation", () => {
|
|||
],
|
||||
});
|
||||
|
||||
// elements should not duplicate
|
||||
assertZindex({
|
||||
elements: [
|
||||
{ id: "A", containerId: "C" },
|
||||
{ id: "B" },
|
||||
{ id: "C", isSelected: true },
|
||||
],
|
||||
operations: [
|
||||
[actionSendBackward, ["A", "C", "B"]],
|
||||
// noop
|
||||
[actionSendBackward, ["A", "C", "B"]],
|
||||
],
|
||||
});
|
||||
|
||||
// grouped elements should be atomic
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -80,29 +80,37 @@ const getTargetIndexAccountingForBinding = (
|
|||
direction: "left" | "right",
|
||||
) => {
|
||||
if ("containerId" in nextElement && nextElement.containerId) {
|
||||
if (direction === "left") {
|
||||
const containerElement = Scene.getScene(nextElement)!.getElement(
|
||||
nextElement.containerId,
|
||||
);
|
||||
if (containerElement) {
|
||||
return elements.indexOf(containerElement);
|
||||
}
|
||||
} else {
|
||||
return elements.indexOf(nextElement);
|
||||
return direction === "left"
|
||||
? Math.min(
|
||||
elements.indexOf(containerElement),
|
||||
elements.indexOf(nextElement),
|
||||
)
|
||||
: Math.max(
|
||||
elements.indexOf(containerElement),
|
||||
elements.indexOf(nextElement),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
const boundElementId = nextElement.boundElements?.find(
|
||||
(binding) => binding.type !== "arrow",
|
||||
)?.id;
|
||||
if (boundElementId) {
|
||||
if (direction === "left") {
|
||||
return elements.indexOf(nextElement);
|
||||
}
|
||||
|
||||
const boundTextElement =
|
||||
Scene.getScene(nextElement)!.getElement(boundElementId);
|
||||
if (boundTextElement) {
|
||||
return elements.indexOf(boundTextElement);
|
||||
return direction === "left"
|
||||
? Math.min(
|
||||
elements.indexOf(boundTextElement),
|
||||
elements.indexOf(nextElement),
|
||||
)
|
||||
: Math.max(
|
||||
elements.indexOf(boundTextElement),
|
||||
elements.indexOf(nextElement),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue