UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

163 lines 17.9 kB
import { __decorate, __metadata } from "tslib"; import { Directive, Input, Output, EventEmitter, ElementRef, OnDestroy, NgZone, OnInit } from '@angular/core'; import { interval, Subject } from 'rxjs'; import { filter, takeUntil } from 'rxjs/operators'; export var DragScrollDirection; (function (DragScrollDirection) { DragScrollDirection[DragScrollDirection["NONE"] = 0] = "NONE"; DragScrollDirection[DragScrollDirection["LEFT"] = 1] = "LEFT"; DragScrollDirection[DragScrollDirection["TOP"] = 2] = "TOP"; DragScrollDirection[DragScrollDirection["RIGHT"] = 3] = "RIGHT"; DragScrollDirection[DragScrollDirection["BOTTOM"] = 4] = "BOTTOM"; DragScrollDirection[DragScrollDirection["TOPLEFT"] = 5] = "TOPLEFT"; DragScrollDirection[DragScrollDirection["TOPRIGHT"] = 6] = "TOPRIGHT"; DragScrollDirection[DragScrollDirection["BOTTOMLEFT"] = 7] = "BOTTOMLEFT"; DragScrollDirection[DragScrollDirection["BOTTOMRIGHT"] = 8] = "BOTTOMRIGHT"; })(DragScrollDirection || (DragScrollDirection = {})); var IgxGridDragSelectDirective = /** @class */ (function () { function IgxGridDragSelectDirective(ref, zone) { var _this = this; this.ref = ref; this.zone = zone; this.onDragStop = new EventEmitter(); this.onDragScroll = new EventEmitter(); this.end$ = new Subject(); this.lastDirection = DragScrollDirection.NONE; this.startDragSelection = function (ev) { if (!_this.activeDrag) { return; } var x = ev.clientX; var y = ev.clientY; var direction = _this._measureDimensions(x, y); if (direction === _this.lastDirection) { return; } _this.unsubscribe(); _this._sub = _this._interval$.subscribe(function () { return _this.onDragScroll.emit(direction); }); _this.lastDirection = direction; }; this.stopDragSelection = function () { if (!_this.activeDrag) { return; } _this.onDragStop.emit(false); _this.unsubscribe(); _this.lastDirection = DragScrollDirection.NONE; }; this._interval$ = interval(100).pipe(takeUntil(this.end$), filter(function () { return _this.activeDrag; })); } Object.defineProperty(IgxGridDragSelectDirective.prototype, "activeDrag", { get: function () { return this._activeDrag; }, set: function (val) { if (val !== this._activeDrag) { this.unsubscribe(); this._activeDrag = val; } }, enumerable: true, configurable: true }); Object.defineProperty(IgxGridDragSelectDirective.prototype, "nativeElement", { get: function () { return this.ref.nativeElement; }, enumerable: true, configurable: true }); Object.defineProperty(IgxGridDragSelectDirective.prototype, "clientRect", { get: function () { return this.nativeElement.getBoundingClientRect(); }, enumerable: true, configurable: true }); IgxGridDragSelectDirective.prototype.ngOnInit = function () { var _this = this; this.zone.runOutsideAngular(function () { _this.nativeElement.addEventListener('pointerover', _this.startDragSelection); _this.nativeElement.addEventListener('pointerleave', _this.stopDragSelection); }); }; IgxGridDragSelectDirective.prototype.ngOnDestroy = function () { var _this = this; this.zone.runOutsideAngular(function () { _this.nativeElement.removeEventListener('pointerover', _this.startDragSelection); _this.nativeElement.removeEventListener('pointerleave', _this.stopDragSelection); }); this.unsubscribe(); this.end$.complete(); }; IgxGridDragSelectDirective.prototype._measureDimensions = function (x, y) { var direction; var rect = this.clientRect; var RATIO = 0.15; var offsetX = Math.trunc(x - rect.left); var offsetY = Math.trunc(y - rect.top); var left = offsetX <= rect.width * RATIO; var right = offsetX >= rect.width * (1 - RATIO); var top = offsetY <= rect.height * RATIO; var bottom = offsetY >= rect.height * (1 - RATIO); if (top && left) { direction = DragScrollDirection.TOPLEFT; } else if (top && right) { direction = DragScrollDirection.TOPRIGHT; } else if (bottom && left) { direction = DragScrollDirection.BOTTOMLEFT; } else if (bottom && right) { direction = DragScrollDirection.BOTTOMRIGHT; } else if (top) { direction = DragScrollDirection.TOP; } else if (bottom) { direction = DragScrollDirection.BOTTOM; } else if (left) { direction = DragScrollDirection.LEFT; } else if (right) { direction = DragScrollDirection.RIGHT; } else { direction = DragScrollDirection.NONE; } return direction; }; IgxGridDragSelectDirective.prototype.unsubscribe = function () { if (this._sub) { this._sub.unsubscribe(); } }; IgxGridDragSelectDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: NgZone } ]; }; __decorate([ Input('igxGridDragSelect'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxGridDragSelectDirective.prototype, "activeDrag", null); __decorate([ Output(), __metadata("design:type", Object) ], IgxGridDragSelectDirective.prototype, "onDragStop", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxGridDragSelectDirective.prototype, "onDragScroll", void 0); IgxGridDragSelectDirective = __decorate([ Directive({ selector: '[igxGridDragSelect]' }), __metadata("design:paramtypes", [ElementRef, NgZone]) ], IgxGridDragSelectDirective); return IgxGridDragSelectDirective; }()); export { IgxGridDragSelectDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9zZWxlY3Rpb24vZHJhZy1zZWxlY3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsUUFBUSxFQUE0QixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxNQUFNLENBQU4sSUFBWSxtQkFVWDtBQVZELFdBQVksbUJBQW1CO0lBQzNCLDZEQUFJLENBQUE7SUFDSiw2REFBSSxDQUFBO0lBQ0osMkRBQUcsQ0FBQTtJQUNILCtEQUFLLENBQUE7SUFDTCxpRUFBTSxDQUFBO0lBQ04sbUVBQU8sQ0FBQTtJQUNQLHFFQUFRLENBQUE7SUFDUix5RUFBVSxDQUFBO0lBQ1YsMkVBQVcsQ0FBQTtBQUNmLENBQUMsRUFWVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBVTlCO0FBTUQ7SUFrQ0ksb0NBQW9CLEdBQWUsRUFBVSxJQUFZO1FBQXpELGlCQUtDO1FBTG1CLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBbEJ6RCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUd6QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBVTdDLFNBQUksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBNEJuRCx1QkFBa0IsR0FBRyxVQUFDLEVBQWdCO1lBQ2xDLElBQUks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QUcsQ0FBQztTQUN2QzthQUFNLElBQUksTUFBTSxFQUFFO1lBQ2YsU0FBUyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztTQUMxQzthQUFNLElBQUksSUFBSSxFQUFFO1lBQ2IsU0FBUyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztTQUN4QzthQUFNLElBQUksS0FBSyxFQUFFO1lBQ2QsU0FBUyxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQztTQUN6QzthQUFNO1lBQ0gsU0FBUyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztTQUN4QztRQUVELE9BQU8sU0FBUyxDQUFDO0lBRXJCLENBQUM7SUFFUyxnREFBVyxHQUFyQjtRQUNJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDOztnQkF6RndCLFVBQVU7Z0JBQWdCLE1BQU07O0lBOUJ6RDtRQURDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQzs7O2dFQUcxQjtJQVVEO1FBREMsTUFBTSxFQUFFOztrRUFDZ0M7SUFHekM7UUFEQyxNQUFNLEVBQUU7O29FQUM4QztJQW5COUMsMEJBQTBCO1FBSHRDLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxxQkFBcUI7U0FDbEMsQ0FBQzt5Q0FtQzJCLFVBQVUsRUFBZ0IsTUFBTTtPQWxDaEQsMEJBQTBCLENBNEh0QztJQUFELGlDQUFDO0NBQUEsQUE1SEQsSUE0SEM7U0E1SFksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgTmdab25lLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGludGVydmFsLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgZW51bSBEcmFnU2Nyb2xsRGlyZWN0aW9uIHtcbiAgICBOT05FLFxuICAgIExFRlQsXG4gICAgVE9QLFxuICAgIFJJR0hULFxuICAgIEJPVFRPTSxcbiAgICBUT1BMRUZULFxuICAgIFRPUFJJR0hULFxuICAgIEJPVFRPTUxFRlQsXG4gICAgQk9UVE9NUklHSFRcbn1cblxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hHcmlkRHJhZ1NlbGVjdF0nXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWREcmFnU2VsZWN0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIF9hY3RpdmVEcmFnOiBib29sZWFuO1xuXG4gICAgQElucHV0KCdpZ3hHcmlkRHJhZ1NlbGVjdCcpXG4gICAgZ2V0IGFjdGl2ZURyYWcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEcmFnO1xuICAgIH1cblxuICAgIHNldCBhY3RpdmVEcmFnKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsICE9PSB0aGlzLl9hY3RpdmVEcmFnKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVEcmFnID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgb25EcmFnU3RvcCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIG9uRHJhZ1Njcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8RHJhZ1Njcm9sbERpcmVjdGlvbj4oKTtcblxuICAgIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGNsaWVudFJlY3QoKTogQ2xpZW50UmVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGVuZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHJvdGVjdGVkIGxhc3REaXJlY3Rpb24gPSBEcmFnU2Nyb2xsRGlyZWN0aW9uLk5PTkU7XG4gICAgcHJvdGVjdGVkIF9pbnRlcnZhbCQ6IE9ic2VydmFibGU8YW55PjtcbiAgICBwcm90ZWN0ZWQgX3N1YjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgem9uZTogTmdab25lKSB7XG4gICAgICAgIHRoaXMuX2ludGVydmFsJCA9IGludGVydmFsKDEwMCkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmVuZCQpLFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuYWN0aXZlRHJhZylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyb3ZlcicsIHRoaXMuc3RhcnREcmFnU2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybGVhdmUnLCB0aGlzLnN0b3BEcmFnU2VsZWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm92ZXInLCB0aGlzLnN0YXJ0RHJhZ1NlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxlYXZlJywgdGhpcy5zdG9wRHJhZ1NlbGVjdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZW5kJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuXG4gICAgc3RhcnREcmFnU2VsZWN0aW9uID0gKGV2OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURyYWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgICAgICAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuX21lYXN1cmVEaW1lbnNpb25zKHgsIHkpO1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSB0aGlzLmxhc3REaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuX2ludGVydmFsJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkRyYWdTY3JvbGwuZW1pdChkaXJlY3Rpb24pKTtcbiAgICAgICAgdGhpcy5sYXN0RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIHN0b3BEcmFnU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlRHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25EcmFnU3RvcC5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxhc3REaXJlY3Rpb24gPSBEcmFnU2Nyb2xsRGlyZWN0aW9uLk5PTkU7XG4gICAgfVxuXG4gICAgX21lYXN1cmVEaW1lbnNpb25zKHg6IG51bWJlciwgeTogbnVtYmVyKTogRHJhZ1Njcm9sbERpcmVjdGlvbiB7XG4gICAgICAgIGxldCBkaXJlY3Rpb246IERyYWdTY3JvbGxEaXJlY3Rpb247XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY2xpZW50UmVjdDtcbiAgICAgICAgY29uc3QgUkFUSU8gPSAwLjE1O1xuICAgICAgICBjb25zdCBvZmZzZXRYID0gTWF0aC50cnVuYyh4IC0gcmVjdC5sZWZ0KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IE1hdGgudHJ1bmMoeSAtIHJlY3QudG9wKTtcblxuICAgICAgICBjb25zdCBsZWZ0ID0gb2Zmc2V0WCA8PSByZWN0LndpZHRoICogUkFUSU87XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gb2Zmc2V0WCA+PSByZWN0LndpZHRoICogKDEgLSBSQVRJTyk7XG4gICAgICAgIGNvbnN0IHRvcCA9IG9mZnNldFkgPD0gcmVjdC5oZWlnaHQgKiBSQVRJTztcbiAgICAgICAgY29uc3QgYm90dG9tID0gb2Zmc2V0WSA+PSByZWN0LmhlaWdodCAqICgxIC0gUkFUSU8pO1xuXG4gICAgICAgIGlmICh0b3AgJiYgbGVmdCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5UT1BMRUZUO1xuICAgICAgICB9IGVsc2UgaWYgKHRvcCAmJiByaWdodCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5UT1BSSUdIVDtcbiAgICAgICAgfSBlbHNlIGlmIChib3R0b20gJiYgbGVmdCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5CT1RUT01MRUZUO1xuICAgICAgICB9IGVsc2UgaWYgKGJvdHRvbSAmJiByaWdodCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5CT1RUT01SSUdIVDtcbiAgICAgICAgfSBlbHNlIGlmICh0b3ApIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IERyYWdTY3JvbGxEaXJlY3Rpb24uVE9QO1xuICAgICAgICB9IGVsc2UgaWYgKGJvdHRvbSkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5CT1RUT007XG4gICAgICAgIH0gZWxzZSBpZiAobGVmdCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5MRUZUO1xuICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBEcmFnU2Nyb2xsRGlyZWN0aW9uLlJJR0hUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5OT05FO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbjtcblxuICAgIH1cblxuICAgIHByb3RlY3RlZCB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xuICAgICAgICAgICAgdGhpcy5fc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=