UNPKG

@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.

57 lines 10.3 kB
import { Point, PointExtensions, RectExtensions } from '@foblex/2d'; import { NotifyTransformChangedRequest } from '../../f-storage'; import { GetCanBeSelectedItemsRequest } from '../../domain'; export class SelectionAreaDragHandle { _fComponentsStore; _fSelectionArea; _fDraggableDataContext; _fMediator; fEventType = 'selection-area'; _canBeSelected = []; _selectedByMove = []; get _fCanvasPosition() { return Point.fromPoint(this._fComponentsStore.fCanvas.transform.position) .add(this._fComponentsStore.fCanvas.transform.scaledPosition); } constructor(_fComponentsStore, _fSelectionArea, _fDraggableDataContext, _fMediator) { this._fComponentsStore = _fComponentsStore; this._fSelectionArea = _fSelectionArea; this._fDraggableDataContext = _fDraggableDataContext; this._fMediator = _fMediator; } prepareDragSequence() { this._canBeSelected = this._fMediator.execute(new GetCanBeSelectedItemsRequest()); this._fSelectionArea.show(); this._fSelectionArea.draw(RectExtensions.initialize(this._fDraggableDataContext.onPointerDownPosition.x, this._fDraggableDataContext.onPointerDownPosition.y)); } onPointerMove(difference) { const currentPoint = Point.fromPoint(difference).add(this._fDraggableDataContext.onPointerDownPosition); const point = this._getMinimumPoint(this._fDraggableDataContext.onPointerDownPosition, currentPoint); const width = Math.abs(difference.x); const height = Math.abs(difference.y); const fSelectionAreaRect = RectExtensions.initialize(point.x, point.y, width, height); this._fSelectionArea.draw(fSelectionAreaRect); this._selectedByMove = []; this._canBeSelected.forEach((item) => { item.element.unmarkAsSelected(); const fItemRect = RectExtensions.addPoint(item.fRect, this._fCanvasPosition); const isIntersect = RectExtensions.intersectionWithRect(fItemRect, fSelectionAreaRect); if (isIntersect) { item.element.markAsSelected(); this._selectedByMove.push(item.element); } }); this._fMediator.execute(new NotifyTransformChangedRequest()); } _getMinimumPoint(point1, point2) { return PointExtensions.initialize(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y)); } onPointerUp() { this._fSelectionArea.hide(); this._fDraggableDataContext.selectedItems.push(...this._selectedByMove); if (this._selectedByMove.length > 0) { this._fDraggableDataContext.isSelectedChanged = true; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWFyZWEuZHJhZy1oYW5kbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2Ytc2VsZWN0aW9uLWFyZWEvZG9tYWluL3NlbGVjdGlvbi1hcmVhLmRyYWctaGFuZGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxLQUFLLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1RSxPQUFPLEVBQW9CLDZCQUE2QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEYsT0FBTyxFQUFFLDRCQUE0QixFQUFnQyxNQUFNLGNBQWMsQ0FBQztBQU0xRixNQUFNLE9BQU8sdUJBQXVCO0lBYXhCO0lBQ0E7SUFDQTtJQUNBO0lBZEgsVUFBVSxHQUFXLGdCQUFnQixDQUFDO0lBRXJDLGNBQWMsR0FBbUMsRUFBRSxDQUFDO0lBQ3BELGVBQWUsR0FBa0IsRUFBRSxDQUFDO0lBRTVDLElBQVksZ0JBQWdCO1FBQzFCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7YUFDdkUsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxZQUNVLGlCQUFtQyxFQUNuQyxlQUFtQyxFQUNuQyxzQkFBNkMsRUFDN0MsVUFBcUI7UUFIckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUFDbkMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3QyxlQUFVLEdBQVYsVUFBVSxDQUFXO0lBRS9CLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8s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RXh0ZW5zaW9ucywgUmVjdEV4dGVuc2lvbnMgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IEZDb21wb25lbnRzU3RvcmUsIE5vdGlmeVRyYW5zZm9ybUNoYW5nZWRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZi1zdG9yYWdlJztcbmltcG9ydCB7IEdldENhbkJlU2VsZWN0ZWRJdGVtc1JlcXVlc3QsIElDYW5CZVNlbGVjdGVkRWxlbWVudEFuZFJlY3QgfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRk1lZGlhdG9yIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBGRHJhZ2dhYmxlRGF0YUNvbnRleHQsIElGRHJhZ0hhbmRsZXIgfSBmcm9tICcuLi8uLi9mLWRyYWdnYWJsZSc7XG5pbXBvcnQgeyBGU2VsZWN0aW9uQXJlYUJhc2UgfSBmcm9tICcuLi9mLXNlbGVjdGlvbi1hcmVhLWJhc2UnO1xuaW1wb3J0IHsgSVNlbGVjdGFibGUgfSBmcm9tICcuLi8uLi9taXhpbnMnO1xuXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uQXJlYURyYWdIYW5kbGUgaW1wbGVtZW50cyBJRkRyYWdIYW5kbGVyIHtcblxuICBwdWJsaWMgZkV2ZW50VHlwZTogc3RyaW5nID0gJ3NlbGVjdGlvbi1hcmVhJztcblxuICBwcml2YXRlIF9jYW5CZVNlbGVjdGVkOiBJQ2FuQmVTZWxlY3RlZEVsZW1lbnRBbmRSZWN0W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRCeU1vdmU6IElTZWxlY3RhYmxlW10gPSBbXTtcblxuICBwcml2YXRlIGdldCBfZkNhbnZhc1Bvc2l0aW9uKCk6IElQb2ludCB7XG4gICAgcmV0dXJuIFBvaW50LmZyb21Qb2ludCh0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZDYW52YXMhLnRyYW5zZm9ybS5wb3NpdGlvbilcbiAgICAgIC5hZGQodGhpcy5fZkNvbXBvbmVudHNTdG9yZS5mQ2FudmFzIS50cmFuc2Zvcm0uc2NhbGVkUG9zaXRpb24pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZkNvbXBvbmVudHNTdG9yZTogRkNvbXBvbmVudHNTdG9yZSxcbiAgICBwcml2YXRlIF9mU2VsZWN0aW9uQXJlYTogRlNlbGVjdGlvbkFyZWFCYXNlLFxuICAgIHByaXZhdGUgX2ZEcmFnZ2FibGVEYXRhQ29udGV4dDogRkRyYWdnYWJsZURhdGFDb250ZXh0LFxuICAgIHByaXZhdGUgX2ZNZWRpYXRvcjogRk1lZGlhdG9yLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBwcmVwYXJlRHJhZ1NlcXVlbmNlKCk6IHZvaWQge1xuICAgIHRoaXMuX2NhbkJlU2VsZWN0ZWQgPSB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZShuZXcgR2V0Q2FuQmVTZWxlY3RlZEl0ZW1zUmVxdWVzdCgpKTtcblxuICAgIHRoaXMuX2ZTZWxlY3Rpb25BcmVhLnNob3coKTtcbiAgICB0aGlzLl9mU2VsZWN0aW9uQXJlYS5kcmF3KFxuICAgICAgUmVjdEV4dGVuc2lvbnMuaW5pdGlhbGl6ZShcbiAgICAgICAgdGhpcy5fZkRyYWdnYWJsZURhdGFDb250ZXh0Lm9uUG9pbnRlckRvd25Qb3NpdGlvbi54LFxuICAgICAgICB0aGlzLl9mRHJhZ2dhYmxlRGF0YUNvbnRleHQub25Qb2ludGVyRG93blBvc2l0aW9uLnlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uUG9pbnRlck1vdmUoZGlmZmVyZW5jZTogSVBvaW50KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFBvaW50ID0gUG9pbnQuZnJvbVBvaW50KGRpZmZlcmVuY2UpLmFkZCh0aGlzLl9mRHJhZ2dhYmxlRGF0YUNvbnRleHQub25Qb2ludGVyRG93blBvc2l0aW9uKTtcblxuICAgIGNvbnN0IHBvaW50ID0gdGhpcy5fZ2V0TWluaW11bVBvaW50KHRoaXMuX2ZEcmFnZ2FibGVEYXRhQ29udGV4dC5vblBvaW50ZXJEb3duUG9zaXRpb24sIGN1cnJlbnRQb2ludCk7XG5cbiAgICBjb25zdCB3aWR0aCA9IE1hdGguYWJzKGRpZmZlcmVuY2UueCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5hYnMoZGlmZmVyZW5jZS55KTtcblxuICAgIGNvbnN0IGZTZWxlY3Rpb25BcmVhUmVjdCA9IFJlY3RFeHRlbnNpb25zLmluaXRpYWxpemUocG9pbnQueCwgcG9pbnQueSwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICB0aGlzLl9mU2VsZWN0aW9uQXJlYS5kcmF3KGZTZWxlY3Rpb25BcmVhUmVjdCk7XG4gICAgdGhpcy5fc2VsZWN0ZWRCeU1vdmUgPSBbXTtcbiAgICB0aGlzLl9jYW5CZVNlbGVjdGVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW0uZWxlbWVudC51bm1hcmtBc1NlbGVjdGVkKCk7XG5cbiAgICAgIGNvbnN0IGZJdGVtUmVjdCA9IFJlY3RFeHRlbnNpb25zLmFkZFBvaW50KGl0ZW0uZlJlY3QsIHRoaXMuX2ZDYW52YXNQb3NpdGlvbik7XG5cbiAgICAgIGNvbnN0IGlzSW50ZXJzZWN0ID0gUmVjdEV4dGVuc2lvbnMuaW50ZXJzZWN0aW9uV2l0aFJlY3QoZkl0ZW1SZWN0LCBmU2VsZWN0aW9uQXJlYVJlY3QpO1xuICAgICAgaWYgKGlzSW50ZXJzZWN0KSB7XG5cbiAgICAgICAgaXRlbS5lbGVtZW50Lm1hcmtBc1NlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQnlNb3ZlLnB1c2goaXRlbS5lbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTx2b2lkPihuZXcgTm90aWZ5VHJhbnNmb3JtQ2hhbmdlZFJlcXVlc3QoKSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRNaW5pbXVtUG9pbnQocG9pbnQxOiBJUG9pbnQsIHBvaW50MjogSVBvaW50KTogSVBvaW50IHtcbiAgICByZXR1cm4gUG9pbnRFeHRlbnNpb25zLmluaXRpYWxpemUoXG4gICAgICBNYXRoLm1pbihwb2ludDEueCwgcG9pbnQyLngpLFxuICAgICAgTWF0aC5taW4ocG9pbnQxLnksIHBvaW50Mi55KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Qb2ludGVyVXAoKTogdm9pZCB7XG4gICAgdGhpcy5fZlNlbGVjdGlvbkFyZWEuaGlkZSgpO1xuICAgIHRoaXMuX2ZEcmFnZ2FibGVEYXRhQ29udGV4dC5zZWxlY3RlZEl0ZW1zLnB1c2goLi4udGhpcy5fc2VsZWN0ZWRCeU1vdmUpO1xuICAgIGlmICh0aGlzLl9zZWxlY3RlZEJ5TW92ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9mRHJhZ2dhYmxlRGF0YUNvbnRleHQuaXNTZWxlY3RlZENoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuIl19