Another half of actionFinalize on arrow endpoint drag

This commit is contained in:
Mark Tolmacs 2025-04-16 19:11:11 +02:00
parent 64fa1c6948
commit e51e72c676
No known key found for this signature in database
2 changed files with 25 additions and 9 deletions

View file

@ -17,6 +17,12 @@ import { isPathALoop } from "@excalidraw/element/shapes";
import { isInvisiblySmallElement } from "@excalidraw/element/sizeHelpers"; import { isInvisiblySmallElement } from "@excalidraw/element/sizeHelpers";
import type {
ExcalidrawElement,
ExcalidrawLinearElement,
NonDeleted,
} from "@excalidraw/element/types";
import { t } from "../i18n"; import { t } from "../i18n";
import { resetCursor } from "../cursor"; import { resetCursor } from "../cursor";
import { done } from "../components/icons"; import { done } from "../components/icons";
@ -84,13 +90,22 @@ export const actionFinalize = register({
focusContainer(); focusContainer();
} }
const element = appState.multiElement let element: NonDeleted<ExcalidrawElement> | null = null;
? appState.multiElement if (appState.multiElement) {
: appState.newElement?.type === "freedraw" element = appState.multiElement;
? appState.newElement } else if (
: isBindingElement(appState.newElement) appState.newElement?.type === "freedraw" ||
? appState.newElement isBindingElement(appState.newElement)
: null; ) {
element = appState.newElement;
} else if (Object.keys(appState.selectedElementIds).length === 1) {
const candidate = elementsMap.get(
Object.keys(appState.selectedElementIds)[0],
) as NonDeleted<ExcalidrawLinearElement> | undefined;
if (candidate) {
element = candidate;
}
}
if (element) { if (element) {
// pen and mouse have hover // pen and mouse have hover
@ -112,7 +127,7 @@ export const actionFinalize = register({
if (isInvisiblySmallElement(element)) { if (isInvisiblySmallElement(element)) {
// TODO: #7348 in theory this gets recorded by the store, so the invisible elements could be restored by the undo/redo, which might be not what we would want // TODO: #7348 in theory this gets recorded by the store, so the invisible elements could be restored by the undo/redo, which might be not what we would want
newElements = newElements.filter((el) => el.id !== element.id); newElements = newElements.filter((el) => el.id !== element!.id);
} }
// If the multi point line closes the loop, // If the multi point line closes the loop,

View file

@ -91,9 +91,10 @@ export function isPoint(p: unknown): p is LocalPoint | GlobalPoint {
export function pointsEqual<Point extends GlobalPoint | LocalPoint>( export function pointsEqual<Point extends GlobalPoint | LocalPoint>(
a: Point, a: Point,
b: Point, b: Point,
threshold: number = PRECISION,
): boolean { ): boolean {
const abs = Math.abs; const abs = Math.abs;
return abs(a[0] - b[0]) < PRECISION && abs(a[1] - b[1]) < PRECISION; return abs(a[0] - b[0]) < threshold && abs(a[1] - b[1]) < threshold;
} }
/** /**