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