fix: support dragging binded text in container selected in a group (#4462)
* fix: support moving binded text when container selected via group * update coords of bounded text only when element doesn't belong to any group or element in group is selected * dnt drag binded text when nested group selected * Update src/element/dragElements.ts Co-authored-by: David Luzar <luzar.david@gmail.com> Co-authored-by: David Luzar <luzar.david@gmail.com>
This commit is contained in:
parent
c76784b774
commit
64c2d76cfa
@ -3574,6 +3574,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
lockDirection,
|
lockDirection,
|
||||||
dragDistanceX,
|
dragDistanceX,
|
||||||
dragDistanceY,
|
dragDistanceY,
|
||||||
|
this.state,
|
||||||
);
|
);
|
||||||
this.maybeSuggestBindingForAll(selectedElements);
|
this.maybeSuggestBindingForAll(selectedElements);
|
||||||
|
|
||||||
|
@ -5,8 +5,9 @@ import { mutateElement } from "./mutateElement";
|
|||||||
import { getPerfectElementSize } from "./sizeHelpers";
|
import { getPerfectElementSize } from "./sizeHelpers";
|
||||||
import Scene from "../scene/Scene";
|
import Scene from "../scene/Scene";
|
||||||
import { NonDeletedExcalidrawElement } from "./types";
|
import { NonDeletedExcalidrawElement } from "./types";
|
||||||
import { PointerDownState } from "../types";
|
import { AppState, PointerDownState } from "../types";
|
||||||
import { getBoundTextElementId } from "./textElement";
|
import { getBoundTextElementId } from "./textElement";
|
||||||
|
import { isSelectedViaGroup } from "../groups";
|
||||||
|
|
||||||
export const dragSelectedElements = (
|
export const dragSelectedElements = (
|
||||||
pointerDownState: PointerDownState,
|
pointerDownState: PointerDownState,
|
||||||
@ -16,6 +17,7 @@ export const dragSelectedElements = (
|
|||||||
lockDirection: boolean = false,
|
lockDirection: boolean = false,
|
||||||
distanceX: number = 0,
|
distanceX: number = 0,
|
||||||
distanceY: number = 0,
|
distanceY: number = 0,
|
||||||
|
appState: AppState,
|
||||||
) => {
|
) => {
|
||||||
const [x1, y1] = getCommonBounds(selectedElements);
|
const [x1, y1] = getCommonBounds(selectedElements);
|
||||||
const offset = { x: pointerX - x1, y: pointerY - y1 };
|
const offset = { x: pointerX - x1, y: pointerY - y1 };
|
||||||
@ -28,7 +30,15 @@ export const dragSelectedElements = (
|
|||||||
element,
|
element,
|
||||||
offset,
|
offset,
|
||||||
);
|
);
|
||||||
if (!element.groupIds.length) {
|
// update coords of bound text only if we're dragging the container directly
|
||||||
|
// (we don't drag the group that it's part of)
|
||||||
|
if (
|
||||||
|
// container isn't part of any group
|
||||||
|
// (perf optim so we don't check `isSelectedViaGroup()` in every case)
|
||||||
|
!element.groupIds.length ||
|
||||||
|
// container is part of a group, but we're dragging the container directly
|
||||||
|
(appState.editingGroupId && !isSelectedViaGroup(appState, element))
|
||||||
|
) {
|
||||||
const boundTextElementId = getBoundTextElementId(element);
|
const boundTextElementId = getBoundTextElementId(element);
|
||||||
if (boundTextElementId) {
|
if (boundTextElementId) {
|
||||||
const textElement =
|
const textElement =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user