Browse Source

refactor: enhance drag event properties to include origin guides and matched guides

carlos/505-improve-grapesjs-absolute-mode
Carlos 2 years ago
parent
commit
06289a787f
  1. 47
      packages/core/src/commands/view/ComponentDrag.ts

47
packages/core/src/commands/view/ComponentDrag.ts

@ -41,13 +41,10 @@ export type DragEventProps = {
coords?: { x: number; y: number }; coords?: { x: number; y: number };
originComponent?: Component; originComponent?: Component;
originComponentView?: ComponentView; originComponentView?: ComponentView;
originGuides?: any;
matchedComponent?: Component; matchedComponent?: Component;
matchedComponentView?: ComponentView; matchedComponentView?: ComponentView;
// TODO: draft matchedGuides?: any;
elGuideInfo?: HTMLElement;
elGuideInfoCnt?: HTMLElement;
size?: number;
sizePercent?: number;
}; };
const evName = 'dmode'; const evName = 'dmode';
@ -355,7 +352,7 @@ export default {
}, },
onStart(event: Event) { onStart(event: Event) {
const { target, editor, isTran, opts } = this; const { target, editor, isTran, opts, guidesTarget } = this;
const { Canvas } = editor; const { Canvas } = editor;
const style = target.getStyle(); const style = target.getStyle();
const position = 'absolute'; const position = 'absolute';
@ -395,43 +392,41 @@ export default {
}); });
} }
const dragStartProps: DragEventProps = { originComponent: target, originComponentView: getComponentView(target) }; const originComponent = target;
const originComponentView = getComponentView(originComponent);
const guidesTargetActive = guidesTarget;
const originGuides = this.renderGuideInfo(guidesTargetActive);
const dragStartProps: DragEventProps = {
originComponent,
originComponentView,
originGuides,
};
// TODO: send the guides
this.editor.trigger(`${evName}:drag:start`, dragStartProps); this.editor.trigger(`${evName}:drag:start`, dragStartProps);
}, },
onDrag(mouseEvent: MouseEvent, _dragger: Dragger) { onDrag(mouseEvent: MouseEvent, _dragger: Dragger) {
const { guidesTarget, opts } = this; const { guidesTarget, opts } = this;
let guideNearElements = []; let matchedGuides = [];
const guidesTargetActive = guidesTarget.filter((item: any) => item.active) ?? [];
this.updateGuides(guidesTarget); this.updateGuides(guidesTarget);
opts?.debug && guidesTarget.forEach((item: any) => this.renderGuide(item)); opts?.debug && guidesTarget.forEach((item: any) => this.renderGuide(item));
opts?.guidesInfo && (guideNearElements = this.renderGuideInfo(guidesTarget.filter((item: any) => item.active))); opts?.guidesInfo && (matchedGuides = this.renderGuideInfo(guidesTargetActive));
opts?.onDrag && opts.onDrag(this._getDragData()); opts?.onDrag && opts.onDrag(this._getDragData());
const { x, y } = mouseEvent; const { x, y } = mouseEvent;
const guideNearElement = guideNearElements[0] ?? {}; let matchedComponent = matchedGuides[0]?.matched.origin;
const { size, sizePercent, matched, elGuideInfo, elGuideInfoCnt } = guideNearElement; let matchedComponentView = getComponentView(matchedComponent);
let matchedComponent = undefined;
let matchedComponentView = undefined;
if (matched?.origin) {
matchedComponent = matched.origin;
matchedComponentView = getComponentView(matchedComponent);
}
const dragMoveProps: DragEventProps = { const dragMoveProps: DragEventProps = {
coords: { x, y }, coords: { x, y },
matchedComponent, matchedComponent,
matchedComponentView, matchedComponentView,
elGuideInfo, matchedGuides,
elGuideInfoCnt,
size,
sizePercent,
}; };
// TODO: send the matched guides
this.editor.trigger(`${evName}:drag:move`, dragMoveProps); this.editor.trigger(`${evName}:drag:move`, dragMoveProps);
}, },
@ -459,7 +454,7 @@ export default {
renderGuideInfo(guides: Guide[] = []) { renderGuideInfo(guides: Guide[] = []) {
const { guidesStatic } = this; const { guidesStatic } = this;
this.hideGuidesInfo(); this.hideGuidesInfo();
return guides.map((item) => { const guidesData = guides.map((item) => {
const { origin, x } = item; const { origin, x } = item;
const rectOrigin = this.getElementPos(origin); const rectOrigin = this.getElementPos(origin);
const axis = isUndefined(x) ? 'y' : 'x'; const axis = isUndefined(x) ? 'y' : 'x';
@ -530,6 +525,8 @@ export default {
return guideNearElement; return guideNearElement;
}); });
return guidesData.filter(Boolean);
}, },
toggleDrag(enable: boolean) { toggleDrag(enable: boolean) {

Loading…
Cancel
Save