@foblex/flow
Version:
An Angular library designed to simplify the creation and manipulation of dynamic flow. Provides components for flows, nodes, and connections, automating node manipulation and inter-node connections.
67 lines • 9.57 kB
JavaScript
import { Directive } from '@angular/core';
import { Point, PointExtensions, RectExtensions } from '@foblex/2d';
import { FComponentsStore } from '../../f-storage';
import { FDraggableDataContext } from '../f-draggable-data-context';
import * as i0 from "@angular/core";
export class FNodeDropToGroupDragHandler {
notDraggedNodesRects;
_fComponentsStore;
_fDraggableDataContext;
fEventType = 'move-node-to-parent';
_DEBOUNCE_TIME = 1;
get _transform() {
return this._fComponentsStore.fCanvas.transform;
}
_onPointerDownPosition = PointExtensions.initialize();
_debounceTimer = null;
fNodeWithRect = null;
constructor(_injector, notDraggedNodesRects) {
this.notDraggedNodesRects = notDraggedNodesRects;
this._fComponentsStore = _injector.get(FComponentsStore);
this._fDraggableDataContext = _injector.get(FDraggableDataContext);
this._onPointerDownPosition = this._fDraggableDataContext.onPointerDownPosition;
}
_toggleParentNode(difference) {
const isInclude = this._isNodeInsideAnotherNode(this._getNewPosition(difference));
if (isInclude) {
this._markIncludeNode(isInclude);
}
else {
this._unmarkIncludeNode();
}
}
_getNewPosition(difference) {
return Point.fromPoint(this._onPointerDownPosition).add(difference).mult(this._transform.scale);
}
_isNodeInsideAnotherNode(point) {
return this.notDraggedNodesRects.find((x) => RectExtensions.isIncludePoint(x.rect, point));
}
onPointerMove(difference) {
if (this._debounceTimer) {
clearTimeout(this._debounceTimer);
}
this._debounceTimer = setTimeout(() => this._toggleParentNode(difference), this._DEBOUNCE_TIME);
}
_markIncludeNode(nodeWithRect) {
this._unmarkIncludeNode();
this.fNodeWithRect = nodeWithRect;
nodeWithRect.node.setClass('f-parent-for-drop');
}
_unmarkIncludeNode() {
this.fNodeWithRect?.node.removeClass('f-parent-for-drop');
this.fNodeWithRect = null;
}
onPointerUp() {
this._unmarkIncludeNode();
if (this._debounceTimer) {
clearTimeout(this._debounceTimer);
this._debounceTimer = null;
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeDropToGroupDragHandler, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: FNodeDropToGroupDragHandler, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeDropToGroupDragHandler, decorators: [{
type: Directive
}], ctorParameters: () => [{ type: i0.Injector }, { type: undefined }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLWRyb3AtdG8tZ3JvdXAuZHJhZy1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9mLWRyYWdnYWJsZS9mLWRyb3AtdG8tZ3JvdXAvZi1ub2RlLWRyb3AtdG8tZ3JvdXAuZHJhZy1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUEyQixLQUFLLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFHcEUsTUFBTSxPQUFPLDJCQUEyQjtJQW9CNUI7SUFsQk8saUJBQWlCLENBQW1CO0lBQ3BDLHNCQUFzQixDQUF3QjtJQUV4RCxVQUFVLEdBQUcscUJBQXFCLENBQUM7SUFFbEMsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUUzQixJQUFZLFVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBUSxDQUFDLFNBQVMsQ0FBQztJQUNuRCxDQUFDO0lBRU8sc0JBQXNCLEdBQVcsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzlELGNBQWMsR0FBUSxJQUFJLENBQUM7SUFFNUIsYUFBYSxHQUF5QixJQUFJLENBQUM7SUFFbEQsWUFDRSxTQUFtQixFQUNYLG9CQUFxQztRQUFyQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQWlCO1FBRTdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDO0lBQ2xGLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxVQUFrQjtRQUMxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxVQUFrQjtRQUN4QyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxLQUFhO1FBQzVDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVNLGFBQWEsQ0FBQyxVQUFrQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxZQUEyQjtRQUNsRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNsQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQzt3R0F0RVUsMkJBQTJCOzRGQUEzQiwyQkFBMkI7OzRGQUEzQiwyQkFBMkI7a0JBRHZDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJUG9pbnQsIElUcmFuc2Zvcm1Nb2RlbCwgUG9pbnQsIFBvaW50RXh0ZW5zaW9ucywgUmVjdEV4dGVuc2lvbnMgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IElGRHJhZ0hhbmRsZXIgfSBmcm9tICcuLi9mLWRyYWctaGFuZGxlcic7XG5pbXBvcnQgeyBGQ29tcG9uZW50c1N0b3JlIH0gZnJvbSAnLi4vLi4vZi1zdG9yYWdlJztcbmltcG9ydCB7IElOb2RlV2l0aFJlY3QgfSBmcm9tICcuLi9kb21haW4nO1xuaW1wb3J0IHsgRkRyYWdnYWJsZURhdGFDb250ZXh0IH0gZnJvbSAnLi4vZi1kcmFnZ2FibGUtZGF0YS1jb250ZXh0JztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgRk5vZGVEcm9wVG9Hcm91cERyYWdIYW5kbGVyIGltcGxlbWVudHMgSUZEcmFnSGFuZGxlciB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZkNvbXBvbmVudHNTdG9yZTogRkNvbXBvbmVudHNTdG9yZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZkRyYWdnYWJsZURhdGFDb250ZXh0OiBGRHJhZ2dhYmxlRGF0YUNvbnRleHQ7XG5cbiAgcHVibGljIGZFdmVudFR5cGUgPSAnbW92ZS1ub2RlLXRvLXBhcmVudCc7XG5cbiAgcHJpdmF0ZSBfREVCT1VOQ0VfVElNRSA9IDE7XG5cbiAgcHJpdmF0ZSBnZXQgX3RyYW5zZm9ybSgpOiBJVHJhbnNmb3JtTW9kZWwge1xuICAgIHJldHVybiB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZDYW52YXMhLnRyYW5zZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgX29uUG9pbnRlckRvd25Qb3NpdGlvbjogSVBvaW50ID0gUG9pbnRFeHRlbnNpb25zLmluaXRpYWxpemUoKTtcbiAgcHJpdmF0ZSBfZGVib3VuY2VUaW1lcjogYW55ID0gbnVsbDtcblxuICBwdWJsaWMgZk5vZGVXaXRoUmVjdDogSU5vZGVXaXRoUmVjdCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBub3REcmFnZ2VkTm9kZXNSZWN0czogSU5vZGVXaXRoUmVjdFtdLFxuICApIHtcbiAgICB0aGlzLl9mQ29tcG9uZW50c1N0b3JlID0gX2luamVjdG9yLmdldChGQ29tcG9uZW50c1N0b3JlKTtcbiAgICB0aGlzLl9mRHJhZ2dhYmxlRGF0YUNvbnRleHQgPSBfaW5qZWN0b3IuZ2V0KEZEcmFnZ2FibGVEYXRhQ29udGV4dCk7XG4gICAgdGhpcy5fb25Qb2ludGVyRG93blBvc2l0aW9uID0gdGhpcy5fZkRyYWdnYWJsZURhdGFDb250ZXh0Lm9uUG9pbnRlckRvd25Qb3NpdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZVBhcmVudE5vZGUoZGlmZmVyZW5jZTogSVBvaW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNJbmNsdWRlID0gdGhpcy5faXNOb2RlSW5zaWRlQW5vdGhlck5vZGUodGhpcy5fZ2V0TmV3UG9zaXRpb24oZGlmZmVyZW5jZSkpO1xuICAgIGlmIChpc0luY2x1ZGUpIHtcbiAgICAgIHRoaXMuX21hcmtJbmNsdWRlTm9kZShpc0luY2x1ZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91bm1hcmtJbmNsdWRlTm9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldE5ld1Bvc2l0aW9uKGRpZmZlcmVuY2U6IElQb2ludCk6IElQb2ludCB7XG4gICAgcmV0dXJuIFBvaW50LmZyb21Qb2ludCh0aGlzLl9vblBvaW50ZXJEb3duUG9zaXRpb24pLmFkZChkaWZmZXJlbmNlKS5tdWx0KHRoaXMuX3RyYW5zZm9ybS5zY2FsZSk7XG4gIH1cblxuICBwcml2YXRlIF9pc05vZGVJbnNpZGVBbm90aGVyTm9kZShwb2ludDogSVBvaW50KTogSU5vZGVXaXRoUmVjdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubm90RHJhZ2dlZE5vZGVzUmVjdHMuZmluZCgoeCkgPT4gUmVjdEV4dGVuc2lvbnMuaXNJbmNsdWRlUG9pbnQoeC5yZWN0LCBwb2ludCkpO1xuICB9XG5cbiAgcHVibGljIG9uUG9pbnRlck1vdmUoZGlmZmVyZW5jZTogSVBvaW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RlYm91bmNlVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9kZWJvdW5jZVRpbWVyKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl90b2dnbGVQYXJlbnROb2RlKGRpZmZlcmVuY2UpLCB0aGlzLl9ERUJPVU5DRV9USU1FKTtcbiAgfVxuXG4gIHByaXZhdGUgX21hcmtJbmNsdWRlTm9kZShub2RlV2l0aFJlY3Q6IElOb2RlV2l0aFJlY3QpOiB2b2lkIHtcbiAgICB0aGlzLl91bm1hcmtJbmNsdWRlTm9kZSgpO1xuICAgIHRoaXMuZk5vZGVXaXRoUmVjdCA9IG5vZGVXaXRoUmVjdDtcbiAgICBub2RlV2l0aFJlY3Qubm9kZS5zZXRDbGFzcygnZi1wYXJlbnQtZm9yLWRyb3AnKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VubWFya0luY2x1ZGVOb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuZk5vZGVXaXRoUmVjdD8ubm9kZS5yZW1vdmVDbGFzcygnZi1wYXJlbnQtZm9yLWRyb3AnKTtcbiAgICB0aGlzLmZOb2RlV2l0aFJlY3QgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uUG9pbnRlclVwKCk6IHZvaWQge1xuICAgIHRoaXMuX3VubWFya0luY2x1ZGVOb2RlKCk7XG5cbiAgICBpZiAodGhpcy5fZGVib3VuY2VUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2RlYm91bmNlVGltZXIpO1xuICAgICAgdGhpcy5fZGVib3VuY2VUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=