@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
163 lines • 17.9 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 = {}));
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=