igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
237 lines • 18 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, Input, Output, EventEmitter, ElementRef, NgZone } from '@angular/core';
import { interval, Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
/** @enum {number} */
const DragScrollDirection = {
NONE: 0,
LEFT: 1,
TOP: 2,
RIGHT: 3,
BOTTOM: 4,
TOPLEFT: 5,
TOPRIGHT: 6,
BOTTOMLEFT: 7,
BOTTOMRIGHT: 8,
};
export { DragScrollDirection };
DragScrollDirection[DragScrollDirection.NONE] = 'NONE';
DragScrollDirection[DragScrollDirection.LEFT] = 'LEFT';
DragScrollDirection[DragScrollDirection.TOP] = 'TOP';
DragScrollDirection[DragScrollDirection.RIGHT] = 'RIGHT';
DragScrollDirection[DragScrollDirection.BOTTOM] = 'BOTTOM';
DragScrollDirection[DragScrollDirection.TOPLEFT] = 'TOPLEFT';
DragScrollDirection[DragScrollDirection.TOPRIGHT] = 'TOPRIGHT';
DragScrollDirection[DragScrollDirection.BOTTOMLEFT] = 'BOTTOMLEFT';
DragScrollDirection[DragScrollDirection.BOTTOMRIGHT] = 'BOTTOMRIGHT';
export class IgxGridDragSelectDirective {
/**
* @param {?} ref
* @param {?} zone
*/
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;
}
/** @type {?} */
const x = ev.clientX;
/** @type {?} */
const y = ev.clientY;
/** @type {?} */
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));
}
/**
* @return {?}
*/
get activeDrag() {
return this._activeDrag;
}
/**
* @param {?} val
* @return {?}
*/
set activeDrag(val) {
if (val !== this._activeDrag) {
this.unsubscribe();
this._activeDrag = val;
}
}
/**
* @return {?}
*/
get nativeElement() {
return this.ref.nativeElement;
}
/**
* @return {?}
*/
get clientRect() {
return this.nativeElement.getBoundingClientRect();
}
/**
* @return {?}
*/
ngOnInit() {
this.zone.runOutsideAngular(() => {
this.nativeElement.addEventListener('pointerover', this.startDragSelection);
this.nativeElement.addEventListener('pointerleave', this.stopDragSelection);
});
}
/**
* @return {?}
*/
ngOnDestroy() {
this.zone.runOutsideAngular(() => {
this.nativeElement.removeEventListener('pointerover', this.startDragSelection);
this.nativeElement.removeEventListener('pointerleave', this.stopDragSelection);
});
this.unsubscribe();
this.end$.complete();
}
/**
* @param {?} x
* @param {?} y
* @return {?}
*/
_measureDimensions(x, y) {
/** @type {?} */
let direction;
/** @type {?} */
const rect = this.clientRect;
/** @type {?} */
const RATIO = 0.15;
/** @type {?} */
const offsetX = Math.trunc(x - rect.left);
/** @type {?} */
const offsetY = Math.trunc(y - rect.top);
/** @type {?} */
const left = offsetX <= rect.width * RATIO;
/** @type {?} */
const right = offsetX >= rect.width * (1 - RATIO);
/** @type {?} */
const top = offsetY <= rect.height * RATIO;
/** @type {?} */
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;
}
/**
* @protected
* @return {?}
*/
unsubscribe() {
if (this._sub) {
this._sub.unsubscribe();
}
}
}
IgxGridDragSelectDirective.decorators = [
{ type: Directive, args: [{
selector: '[igxGridDragSelect]'
},] }
];
/** @nocollapse */
IgxGridDragSelectDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: NgZone }
];
IgxGridDragSelectDirective.propDecorators = {
activeDrag: [{ type: Input, args: ['igxGridDragSelect',] }],
onDragStop: [{ type: Output }],
onDragScroll: [{ type: Output }]
};
if (false) {
/** @type {?} */
IgxGridDragSelectDirective.prototype._activeDrag;
/** @type {?} */
IgxGridDragSelectDirective.prototype.onDragStop;
/** @type {?} */
IgxGridDragSelectDirective.prototype.onDragScroll;
/**
* @type {?}
* @protected
*/
IgxGridDragSelectDirective.prototype.end$;
/**
* @type {?}
* @protected
*/
IgxGridDragSelectDirective.prototype.lastDirection;
/**
* @type {?}
* @protected
*/
IgxGridDragSelectDirective.prototype._interval$;
/**
* @type {?}
* @protected
*/
IgxGridDragSelectDirective.prototype._sub;
/** @type {?} */
IgxGridDragSelectDirective.prototype.startDragSelection;
/** @type {?} */
IgxGridDragSelectDirective.prototype.stopDragSelection;
/**
* @type {?}
* @private
*/
IgxGridDragSelectDirective.prototype.ref;
/**
* @type {?}
* @private
*/
IgxGridDragSelectDirective.prototype.zone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9kcmFnLXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFhLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsUUFBUSxFQUE0QixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0lBRy9DLE9BQUk7SUFDSixPQUFJO0lBQ0osTUFBRztJQUNILFFBQUs7SUFDTCxTQUFNO0lBQ04sVUFBTztJQUNQLFdBQVE7SUFDUixhQUFVO0lBQ1YsY0FBVzs7Ozs7Ozs7Ozs7O0FBT2YsTUFBTSxPQUFPLDBCQUEwQjs7Ozs7SUFrQ25DLFlBQW9CLEdBQWUsRUFBVSxJQUFZO1FBQXJDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBbEJ6RCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUd6QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBVTdDLFNBQUksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBNEJuRCx1QkFBa0IsR0FBRyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbEIsT0FBTzthQUNWOztrQkFDSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU87O2tCQUNkLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTzs7a0JBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQyxr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LENBQUM7Ozs7O0lBRVMsV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQzs7O1lBOUhKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUscUJBQXFCO2FBQ2xDOzs7O1lBbkJnRCxVQUFVO1lBQWEsTUFBTTs7O3lCQXVCekUsS0FBSyxTQUFDLG1CQUFtQjt5QkFZekIsTUFBTTsyQkFHTixNQUFNOzs7O0lBakJQLGlEQUFxQjs7SUFjckIsZ0RBQ3lDOztJQUV6QyxrREFDdUQ7Ozs7O0lBVXZELDBDQUFvQzs7Ozs7SUFDcEMsbURBQW1EOzs7OztJQUNuRCxnREFBc0M7Ozs7O0lBQ3RDLDBDQUE2Qjs7SUEwQjdCLHdEQWFDOztJQUVELHVEQU9DOzs7OztJQTlDVyx5Q0FBdUI7Ozs7O0lBQUUsMENBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgTmdab25lLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGludGVydmFsLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgZW51bSBEcmFnU2Nyb2xsRGlyZWN0aW9uIHtcbiAgICBOT05FLFxuICAgIExFRlQsXG4gICAgVE9QLFxuICAgIFJJR0hULFxuICAgIEJPVFRPTSxcbiAgICBUT1BMRUZULFxuICAgIFRPUFJJR0hULFxuICAgIEJPVFRPTUxFRlQsXG4gICAgQk9UVE9NUklHSFRcbn1cblxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hHcmlkRHJhZ1NlbGVjdF0nXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWREcmFnU2VsZWN0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIF9hY3RpdmVEcmFnOiBib29sZWFuO1xuXG4gICAgQElucHV0KCdpZ3hHcmlkRHJhZ1NlbGVjdCcpXG4gICAgZ2V0IGFjdGl2ZURyYWcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEcmFnO1xuICAgIH1cblxuICAgIHNldCBhY3RpdmVEcmFnKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsICE9PSB0aGlzLl9hY3RpdmVEcmFnKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVEcmFnID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgb25EcmFnU3RvcCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIG9uRHJhZ1Njcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8RHJhZ1Njcm9sbERpcmVjdGlvbj4oKTtcblxuICAgIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGNsaWVudFJlY3QoKTogQ2xpZW50UmVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGVuZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHJvdGVjdGVkIGxhc3REaXJlY3Rpb24gPSBEcmFnU2Nyb2xsRGlyZWN0aW9uLk5PTkU7XG4gICAgcHJvdGVjdGVkIF9pbnRlcnZhbCQ6IE9ic2VydmFibGU8YW55PjtcbiAgICBwcm90ZWN0ZWQgX3N1YjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgem9uZTogTmdab25lKSB7XG4gICAgICAgIHRoaXMuX2ludGVydmFsJCA9IGludGVydmFsKDEwMCkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmVuZCQpLFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuYWN0aXZlRHJhZylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyb3ZlcicsIHRoaXMuc3RhcnREcmFnU2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybGVhdmUnLCB0aGlzLnN0b3BEcmFnU2VsZWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm92ZXInLCB0aGlzLnN0YXJ0RHJhZ1NlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxlYXZlJywgdGhpcy5zdG9wRHJhZ1NlbGVjdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZW5kJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuXG4gICAgc3RhcnREcmFnU2VsZWN0aW9uID0gKGV2OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURyYWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgICAgICAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuX21lYXN1cmVEaW1lbnNpb25zKHgsIHkpO1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSB0aGlzLmxhc3REaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuX2ludGVydmFsJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkRyYWdTY3JvbGwuZW1pdChkaXJlY3Rpb24pKTtcbiAgICAgICAgdGhpcy5sYXN0RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIHN0b3BEcmFnU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlRHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25EcmFnU3RvcC5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxhc3REaXJlY3Rpb24gPSBEcmFnU2Nyb2xsRGlyZWN0aW9uLk5PTkU7XG4gICAgfVxuXG4gICAgX21lYXN1cmVEaW1lbnNpb25zKHg6IG51bWJlciwgeTogbnVtYmVyKTogRHJhZ1Njcm9sbERpcmVjdGlvbiB7XG4gICAgICAgIGxldCBkaXJlY3Rpb246IERyYWdTY3JvbGxEaXJlY3Rpb247XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY2xpZW50UmVjdDtcbiAgICAgICAgY29uc3QgUkFUSU8gPSAwLjE1O1xuICAgICAgICBjb25zdCBvZmZzZXRYID0gTWF0aC50cnVuYyh4IC0gcmVjdC5sZWZ0KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IE1hdGgudHJ1bmMoeSAtIHJlY3QudG9wKTtcblxuICAgICAgICBjb25zdCBsZWZ0ID0gb2Zmc2V0WCA8PSByZWN0LndpZHRoICogUkFUSU87XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gb2Zmc2V0WCA+PSByZWN0LndpZHRoICogKDEgLSBSQVRJTyk7XG4gICAgICAgIGNvbnN0IHRvcCA9IG9mZnNldFkgPD0gcmVjdC5oZWlnaHQgKiBSQVRJTztcbiAgICAgICAgY29uc3QgYm90dG9tID0gb2Zmc2V0WSA+PSByZWN0LmhlaWdodCAqICgxIC0gUkFUSU8pO1xuXG4gICAgICAgIGlmICh0b3AgJiYgbGVmdCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5UT1BMRUZUO1xuICAgICAgICB9IGVsc2UgaWYgKHRvcCAmJiByaWdodCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5UT1BSSUdIVDtcbiAgICAgICAgfSBlbHNlIGlmIChib3R0b20gJiYgbGVmdCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5CT1RUT01MRUZUO1xuICAgICAgICB9IGVsc2UgaWYgKGJvdHRvbSAmJiByaWdodCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5CT1RUT01SSUdIVDtcbiAgICAgICAgfSBlbHNlIGlmICh0b3ApIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IERyYWdTY3JvbGxEaXJlY3Rpb24uVE9QO1xuICAgICAgICB9IGVsc2UgaWYgKGJvdHRvbSkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5CT1RUT007XG4gICAgICAgIH0gZWxzZSBpZiAobGVmdCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5MRUZUO1xuICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBEcmFnU2Nyb2xsRGlyZWN0aW9uLlJJR0hUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gRHJhZ1Njcm9sbERpcmVjdGlvbi5OT05FO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbjtcblxuICAgIH1cblxuICAgIHByb3RlY3RlZCB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xuICAgICAgICAgICAgdGhpcy5fc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=