@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
147 lines • 16.8 kB
JavaScript
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 = {}));
let IgxGridDragSelectDirective = class IgxGridDragSelectDirective {
constructor(ref, zone) {
this.ref = ref;
this.zone = zone;
this.onDragStop = new EventEmitter();
this.onDragScroll = new EventEmitter();
this.end$ = new Subject();
this.lastDirection = DragScrollDirection.NONE;
this.startDragSelection = (ev) => {
if (!this.activeDrag) {
return;
}
const x = ev.clientX;
const y = ev.clientY;
const direction = this._measureDimensions(x, y);
if (direction === this.lastDirection) {
return;
}
this.unsubscribe();
this._sub = this._interval$.subscribe(() => this.onDragScroll.emit(direction));
this.lastDirection = direction;
};
this.stopDragSelection = () => {
if (!this.activeDrag) {
return;
}
this.onDragStop.emit(false);
this.unsubscribe();
this.lastDirection = DragScrollDirection.NONE;
};
this._interval$ = interval(100).pipe(takeUntil(this.end$), filter(() => this.activeDrag));
}
get activeDrag() {
return this._activeDrag;
}
set activeDrag(val) {
if (val !== this._activeDrag) {
this.unsubscribe();
this._activeDrag = val;
}
}
get nativeElement() {
return this.ref.nativeElement;
}
get clientRect() {
return this.nativeElement.getBoundingClientRect();
}
ngOnInit() {
this.zone.runOutsideAngular(() => {
this.nativeElement.addEventListener('pointerover', this.startDragSelection);
this.nativeElement.addEventListener('pointerleave', this.stopDragSelection);
});
}
ngOnDestroy() {
this.zone.runOutsideAngular(() => {
this.nativeElement.removeEventListener('pointerover', this.startDragSelection);
this.nativeElement.removeEventListener('pointerleave', this.stopDragSelection);
});
this.unsubscribe();
this.end$.complete();
}
_measureDimensions(x, y) {
let direction;
const rect = this.clientRect;
const RATIO = 0.15;
const offsetX = Math.trunc(x - rect.left);
const offsetY = Math.trunc(y - rect.top);
const left = offsetX <= rect.width * RATIO;
const right = offsetX >= rect.width * (1 - RATIO);
const top = offsetY <= rect.height * RATIO;
const 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;
}
unsubscribe() {
if (this._sub) {
this._sub.unsubscribe();
}
}
};
IgxGridDragSelectDirective.ctorParameters = () => [
{ 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);
export { IgxGridDragSelectDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9zZWxlY3Rpb24vZHJhZy1zZWxlY3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsUUFBUSxFQUE0QixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxNQUFNLENBQU4sSUFBWSxtQkFVWDtBQVZELFdBQVksbUJBQW1CO0lBQzNCLDZEQUFJLENBQUE7SUFDSiw2REFBSSxDQUFBO0lBQ0osMkRBQUcsQ0FBQTtJQUNILCtEQUFLLENBQUE7SUFDTCxpRUFBTSxDQUFBO0lBQ04sbUVBQU8sQ0FBQTtJQUNQLHFFQUFRLENBQUE7SUFDUix5RUFBVSxDQUFBO0lBQ1YsMkVBQVcsQ0FBQTtBQUNmLENBQUMsRUFWVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBVTlCO0FBTUQsSUFBYSwwQkFBMEIsR0FBdkMsTUFBYSwwQkFBMEI7SUFrQ25DLFlBQW9CLEdBQWUsRUFBVSxJQUFZO1FBQXJDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBbEJ6RCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUd6QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBVTdDLFNBQUksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBNEJuRCx1QkFBa0IsR0FBRyxDQUFD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QUFFO1lBQ2YsU0FBUyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztTQUMxQzthQUFNLElBQUksSUFBSSxFQUFFO1lBQ2IsU0FBUyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztTQUN4QzthQUFNLElBQUksS0FBSyxFQUFFO1lBQ2QsU0FBUyxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQztTQUN6QzthQUFNO1lBQ0gsU0FBUyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztTQUN4QztRQUVELE9BQU8sU0FBUyxDQUFDO0lBRXJCLENBQUM7SUFFUyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0NBQ0osQ0FBQTs7WUExRjRCLFVBQVU7WUFBZ0IsTUFBTTs7QUE5QnpEO0lBREMsS0FBSyxDQUFDLG1CQUFtQixDQUFDOzs7NERBRzFCO0FBVUQ7SUFEQyxNQUFNLEVBQUU7OzhEQUNnQztBQUd6QztJQURDLE1BQU0sRUFBRTs7Z0VBQzhDO0FBbkI5QywwQkFBMEI7SUFIdEMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHFCQUFxQjtLQUNsQyxDQUFDO3FDQW1DMkIsVUFBVSxFQUFnQixNQUFNO0dBbENoRCwwQkFBMEIsQ0E0SHRDO1NBNUhZLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE5nWm9uZSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGVudW0gRHJhZ1Njcm9sbERpcmVjdGlvbiB7XG4gICAgTk9ORSxcbiAgICBMRUZULFxuICAgIFRPUCxcbiAgICBSSUdIVCxcbiAgICBCT1RUT00sXG4gICAgVE9QTEVGVCxcbiAgICBUT1BSSUdIVCxcbiAgICBCT1RUT01MRUZULFxuICAgIEJPVFRPTVJJR0hUXG59XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4R3JpZERyYWdTZWxlY3RdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRHJhZ1NlbGVjdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBfYWN0aXZlRHJhZzogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgnaWd4R3JpZERyYWdTZWxlY3QnKVxuICAgIGdldCBhY3RpdmVEcmFnKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRHJhZztcbiAgICB9XG5cbiAgICBzZXQgYWN0aXZlRHJhZyh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5fYWN0aXZlRHJhZykge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlRHJhZyA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIG9uRHJhZ1N0b3AgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBvbkRyYWdTY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPERyYWdTY3JvbGxEaXJlY3Rpb24+KCk7XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBjbGllbnRSZWN0KCk6IENsaWVudFJlY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBlbmQkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByb3RlY3RlZCBsYXN0RGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5OT05FO1xuICAgIHByb3RlY3RlZCBfaW50ZXJ2YWwkOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHJvdGVjdGVkIF9zdWI6IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCQgPSBpbnRlcnZhbCgxMDApLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5lbmQkKSxcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmFjdGl2ZURyYWcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm92ZXInLCB0aGlzLnN0YXJ0RHJhZ1NlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxlYXZlJywgdGhpcy5zdG9wRHJhZ1NlbGVjdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJvdmVyJywgdGhpcy5zdGFydERyYWdTZWxlY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsIHRoaXMuc3RvcERyYWdTZWxlY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmVuZCQuY29tcGxldGUoKTtcbiAgICB9XG5cblxuICAgIHN0YXJ0RHJhZ1NlbGVjdGlvbiA9IChldjogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVEcmFnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gICAgICAgIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLl9tZWFzdXJlRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gdGhpcy5sYXN0RGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9zdWIgPSB0aGlzLl9pbnRlcnZhbCQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25EcmFnU2Nyb2xsLmVtaXQoZGlyZWN0aW9uKSk7XG4gICAgICAgIHRoaXMubGFzdERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBzdG9wRHJhZ1NlbGVjdGlvbiA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURyYWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRHJhZ1N0b3AuZW1pdChmYWxzZSk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5sYXN0RGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5OT05FO1xuICAgIH1cblxuICAgIF9tZWFzdXJlRGltZW5zaW9ucyh4OiBudW1iZXIsIHk6IG51bWJlcik6IERyYWdTY3JvbGxEaXJlY3Rpb24ge1xuICAgICAgICBsZXQgZGlyZWN0aW9uOiBEcmFnU2Nyb2xsRGlyZWN0aW9uO1xuXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmNsaWVudFJlY3Q7XG4gICAgICAgIGNvbnN0IFJBVElPID0gMC4xNTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IE1hdGgudHJ1bmMoeCAtIHJlY3QubGVmdCk7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSBNYXRoLnRydW5jKHkgLSByZWN0LnRvcCk7XG5cbiAgICAgICAgY29uc3QgbGVmdCA9IG9mZnNldFggPD0gcmVjdC53aWR0aCAqIFJBVElPO1xuICAgICAgICBjb25zdCByaWdodCA9IG9mZnNldFggPj0gcmVjdC53aWR0aCAqICgxIC0gUkFUSU8pO1xuICAgICAgICBjb25zdCB0b3AgPSBvZmZzZXRZIDw9IHJlY3QuaGVpZ2h0ICogUkFUSU87XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IG9mZnNldFkgPj0gcmVjdC5oZWlnaHQgKiAoMSAtIFJBVElPKTtcblxuICAgICAgICBpZiAodG9wICYmIGxlZnQpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IERyYWdTY3JvbGxEaXJlY3Rpb24uVE9QTEVGVDtcbiAgICAgICAgfSBlbHNlIGlmICh0b3AgJiYgcmlnaHQpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IERyYWdTY3JvbGxEaXJlY3Rpb24uVE9QUklHSFQ7XG4gICAgICAgIH0gZWxzZSBpZiAoYm90dG9tICYmIGxlZnQpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IERyYWdTY3JvbGxEaXJlY3Rpb24uQk9UVE9NTEVGVDtcbiAgICAgICAgfSBlbHNlIGlmIChib3R0b20gJiYgcmlnaHQpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IERyYWdTY3JvbGxEaXJlY3Rpb24uQk9UVE9NUklHSFQ7XG4gICAgICAgIH0gZWxzZSBpZiAodG9wKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBEcmFnU2Nyb2xsRGlyZWN0aW9uLlRPUDtcbiAgICAgICAgfSBlbHNlIGlmIChib3R0b20pIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IERyYWdTY3JvbGxEaXJlY3Rpb24uQk9UVE9NO1xuICAgICAgICB9IGVsc2UgaWYgKGxlZnQpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IERyYWdTY3JvbGxEaXJlY3Rpb24uTEVGVDtcbiAgICAgICAgfSBlbHNlIGlmIChyaWdodCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5SSUdIVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IERyYWdTY3JvbGxEaXJlY3Rpb24uTk9ORTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkaXJlY3Rpb247XG5cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdWIpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19