diff --git a/frontend/src/Editor/DragContainer.jsx b/frontend/src/Editor/DragContainer.jsx
index b9af7f6e81..0fe5cc584b 100644
--- a/frontend/src/Editor/DragContainer.jsx
+++ b/frontend/src/Editor/DragContainer.jsx
@@ -4,106 +4,11 @@ import { useEditorStore } from '@/_stores/editorStore';
import { shallow } from 'zustand/shallow';
import './DragContainer.css';
import DragContainerNested from './DragContainerNested';
-import _, { isEmpty } from 'lodash';
+import _, { isEmpty, debounce } from 'lodash';
import { flushSync } from 'react-dom';
import { restrictedWidgetsObj } from './WidgetManager/restrictedWidgetsConfig';
import { useGridStoreActions, useDragTarget, useNoOfGrid, useGridStore } from '@/_stores/gridStore';
-const configHandleForMultiple = (id) => {
- return (
-
{
- if (useGridStore.getState().isGroundHandleHoverd) {
- useGridStore.getState().actions.setIsGroundHandleHoverd(false);
- }
- }}
- onMouseDownCapture={() => {
- if (!useGridStore.getState().isGroundHandleHoverd) {
- useGridStore.getState().actions.setIsGroundHandleHoverd(true);
- }
- }}
- >
-
-
-

-
components
-
-
-
- );
-};
-
-const DimensionViewable = {
- name: 'dimensionViewable',
- props: [],
- events: [],
- render() {
- return configHandleForMultiple('multiple-components-config-handle');
- },
-};
-
-const DimensionViewableForSub = {
- name: 'dimensionViewableForSub',
- props: [],
- events: [],
- render() {
- return configHandleForMultiple('multiple-components-config-handle-sub');
- },
-};
-
-const MouseCustomAble = {
- name: 'mouseTest',
- props: {},
- events: {},
- mouseEnter(e) {
- const controlBoxes = document.getElementsByClassName('moveable-control-box');
- for (const element of controlBoxes) {
- element.classList.remove('moveable-control-box-d-block');
- }
- e.props.target.classList.add('hovered');
- e.controlBox.classList.add('moveable-control-box-d-block');
- },
- mouseLeave(e) {
- console.log('MouseCustomAble LEAVE', e);
- e.props.target.classList.remove('hovered');
- e.controlBox.classList.remove('moveable-control-box-d-block');
- },
-};
-
-const MouseEnterLeaveAble = makeAble('enterLeave', {
- mouseEnter(moveable) {
- console.log('enterLeave moveable', moveable);
- if (moveable.moveables) {
- // group
- moveable.moveables.forEach((child) => {
- console.log('enterLeave', child);
- });
- } else {
- // single
- // moveable.state.target.style.backgroundColor = '#e55';
- }
- },
- mouseLeave(moveable) {
- console.log('enterLeave moveable leave', moveable);
- if (moveable.moveables) {
- // group
- moveable.moveables.forEach((child) => {
- console.log('enterLeave', child);
- });
- } else {
- // single
- console.log('enterLeave e;se', moveable);
- }
- },
-});
-
export default function DragContainer({
boxes,
mode,
@@ -124,6 +29,85 @@ export default function DragContainer({
draggedSubContainer,
boxesAsObj,
}) {
+ const lastDraggedEventsRef = useRef(null);
+ const configHandleForMultiple = (id) => {
+ return (
+ {
+ if (lastDraggedEventsRef.current) {
+ onDrag(
+ lastDraggedEventsRef.current.map((ev) => ({
+ id: ev.target.id,
+ x: ev.translate[0],
+ y: ev.translate[1],
+ }))
+ );
+ }
+ if (useGridStore.getState().isGroundHandleHoverd) {
+ useGridStore.getState().actions.setIsGroundHandleHoverd(false);
+ }
+ }}
+ onMouseDownCapture={() => {
+ lastDraggedEventsRef.current = null;
+ if (!useGridStore.getState().isGroundHandleHoverd) {
+ useGridStore.getState().actions.setIsGroundHandleHoverd(true);
+ }
+ }}
+ >
+
+
+

+
components
+
+
+
+ );
+ };
+
+ const DimensionViewable = {
+ name: 'dimensionViewable',
+ props: [],
+ events: [],
+ render() {
+ return configHandleForMultiple('multiple-components-config-handle');
+ },
+ };
+
+ const DimensionViewableForSub = {
+ name: 'dimensionViewableForSub',
+ props: [],
+ events: [],
+ render() {
+ return configHandleForMultiple('multiple-components-config-handle-sub');
+ },
+ };
+
+ const MouseCustomAble = {
+ name: 'mouseTest',
+ props: {},
+ events: {},
+ mouseEnter(e) {
+ const controlBoxes = document.getElementsByClassName('moveable-control-box');
+ for (const element of controlBoxes) {
+ element.classList.remove('moveable-control-box-d-block');
+ }
+ e.props.target.classList.add('hovered');
+ e.controlBox.classList.add('moveable-control-box-d-block');
+ },
+ mouseLeave(e) {
+ console.log('MouseCustomAble LEAVE', e);
+ e.props.target.classList.remove('hovered');
+ e.controlBox.classList.remove('moveable-control-box-d-block');
+ },
+ };
+
const [dragTarget, setDragTarget] = useDragTarget();
const [draggedTarget, setDraggedTarget] = useState();
const moveableRef = useRef();
@@ -324,6 +308,12 @@ export default function DragContainer({
e.setMin([gridWidth, 10]);
};
+ const updateNewPosition = (events) => {
+ lastDraggedEventsRef.current = events;
+ };
+
+ const debouncedOnDrag = debounce((events) => updateNewPosition(events), 100);
+
return (
@@ -675,21 +665,10 @@ export default function DragContainer({
events.forEach((ev) => {
ev.target.style.transform = ev.transform;
});
- // onDrag(
- // events.map((ev) => ({
- // id: ev.target.id,
- // x: ev.translate[0],
- // y: ev.translate[1],
- // }))
- // );
+ debouncedOnDrag(events);
}}
- // onDragGroupStart={() => {
- // // if (currentLayout === 'mobile' && autoComputeLayout) {
- // // turnOffAutoLayout();
- // // return false;
- // // }
- // }}
onDragGroupEnd={(e) => {
+ debouncedOnDrag.cancel();
const { events } = e;
onDrag(
events.map((ev) => ({