UNPKG

@true-directive/grid

Version:

Angular Data Grid from Yopsilon.

111 lines 15.8 kB
import * as tslib_1 from "tslib"; /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * alx@truedirective.com * @link https://truedirective.com/ * @license MIT */ import { Injectable } from '@angular/core'; let BaseComponent = class BaseComponent { constructor() { this.uiAction = null; this.windowResizeBound = null; this.touchMoveListenFunc = null; this.touchEndListenFunc = null; this.touchCancelListenFunc = null; this._touchListener = null; } addWindowResizeListener() { if (!this.windowResizeBound) { this.windowResizeBound = this.windowResize.bind(this); } window.addEventListener('resize', this.windowResizeBound, false); } addDocumentMouseListeners() { if (!this.documentMouseMoveBound) { this.documentMouseMoveBound = this.documentMouseMove.bind(this); } if (!this.documentMouseUpBound) { this.documentMouseUpBound = this.documentMouseUp.bind(this); } document.addEventListener('mousemove', this.documentMouseMoveBound, false); document.addEventListener('mouseup', this.documentMouseUpBound, false); } removeDocumentMouseListeners() { if (this.documentMouseMoveBound) { document.removeEventListener('mousemove', this.documentMouseMoveBound, false); } if (this.documentMouseUpBound) { document.removeEventListener('mouseup', this.documentMouseUpBound, false); } this.documentMouseMoveBound = null; this.documentMouseUpBound = null; } addTouchListeners(element) { this.removeTouchListeners(); this.touchStartBound = this.touchStart.bind(this); this.touchEndBound = this.touchEnd.bind(this); this.touchCancelBound = this.touchCancel.bind(this); element.addEventListener('touchstart', this.touchStartBound, { capture: false, passive: true, once: false }); element.addEventListener('touchend', this.touchEndBound, { capture: false, passive: true, once: false }); element.addEventListener('touchcancel', this.touchCancelBound, { capture: false, passive: true, once: false }); this._touchListener = element; } removeTouchListeners() { if (this.touchEndBound) { this._touchListener.removeEventListener('touchend', this.touchEndBound, false); } if (this.touchStartBound) { this._touchListener.removeEventListener('touchstart', this.touchStartBound, false); } if (this.touchCancelBound) { this._touchListener.removeEventListener('touchcancel', this.touchCancelBound, false); } this.touchStartBound = null; this.touchEndBound = null; this.touchCancelBound = null; this._touchListener = null; } removeTouchMoveListeners() { // remove previous listeners if (this.touchMoveListenFunc) { this.touchMoveListenFunc(); } if (this.touchEndListenFunc) { this.touchEndListenFunc(); } if (this.touchCancelListenFunc) { this.touchCancelListenFunc(); } this.touchMoveListenFunc = null; this.touchEndListenFunc = null; this.touchCancelListenFunc = null; } windowResize(e) { } touchStart(e) { } touchEnd(e) { } touchCancel(e) { } documentMouseMove(e) { } documentMouseUp(e) { this.removeDocumentMouseListeners(); } canDrop(mouseAction, show) { } dragInProcess(value) { } resizeInProcess(value) { } showHeaderBtn(fieldName) { } hideHeaderBtns() { } ngOnDestroy() { if (this.windowResizeBound) { window.removeEventListener('resize', this.windowResizeBound, false); } this.windowResizeBound = null; this.removeDocumentMouseListeners(); this.removeTouchMoveListeners(); this.removeTouchListeners(); } }; BaseComponent = tslib_1.__decorate([ Injectable() ], BaseComponent); export { BaseComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0VBS0U7QUFDRixPQUFPLEVBQUUsVUFBVSxFQUF5QyxNQUFNLGVBQWUsQ0FBQztBQUtsRixJQUFzQixhQUFhLEdBQW5DLE1BQXNCLGFBQWE7SUFEbkM7UUFHWSxhQUFRLEdBQWEsSUFBSSxDQUFDO1FBVTFCLHNCQUFpQixHQUFRLElBQUksQ0FBQztRQUU5Qix3QkFBbUIsR0FBUSxJQUFJLENBQUM7UUFDaEMsdUJBQWtCLEdBQVEsSUFBSSxDQUFDO1FBQy9CLDBCQUFxQixHQUFTLElBQUksQ0FBQztRQUVyQyxtQkFBYyxHQUFnQixJQUFJLENBQUM7SUF1SDdDLENBQUM7SUFySFcsdUJBQXVCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVTLHlCQUF5QjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ2hDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM5QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0Q7UUFFRCxRQUFRLENBQUMsZ0JBQWdCLENB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RUFBRSxDQUFDO0lBQzlCLENBQUM7Q0FDRixDQUFBO0FBeklxQixhQUFhO0lBRGxDLFVBQVUsRUFBRTtHQUNTLGFBQWEsQ0F5SWxDO1NBeklxQixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IEFsZWtzZXkgTWVsbmlrb3YsIFRydWUgRGlyZWN0aXZlIENvbXBhbnkuXHJcbiAqIGFseEB0cnVlZGlyZWN0aXZlLmNvbVxyXG4gKiBAbGluayBodHRwczovL3RydWVkaXJlY3RpdmUuY29tL1xyXG4gKiBAbGljZW5zZSBNSVRcclxuKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVJQWN0aW9uIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHByb3RlY3RlZCB1aUFjdGlvbjogVUlBY3Rpb24gPSBudWxsO1xyXG5cclxuICAvLyDQodC70YPRiNCw0YLQtdC70Lgg0YHQvtCx0YvRgtC40Lkg0LTQvtC60YPQvNC10L3RgtCwLiDQndGD0LbQvdGLINGC0L7Qu9GM0LrQviDQv9GA0Lgg0L/QtdGA0LXRgtCw0YHQutC40LLQsNC90LjQuCDQutC+0LvQvtC90L7QuiDQuCDQstGL0LTQtdC70LXQvdC40Lgg0L7QsdC70LDRgdGC0LhcclxuICBwcml2YXRlIGRvY3VtZW50TW91c2VNb3ZlQm91bmQ6IGFueTtcclxuICBwcml2YXRlIGRvY3VtZW50TW91c2VVcEJvdW5kOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgdG91Y2hTdGFydEJvdW5kOiBhbnk7XHJcbiAgcHJpdmF0ZSB0b3VjaEVuZEJvdW5kOiBhbnk7XHJcbiAgcHJpdmF0ZSB0b3VjaENhbmNlbEJvdW5kOiBhbnk7XHJcblxyXG4gIHByb3RlY3RlZCB3aW5kb3dSZXNpemVCb3VuZDogYW55ID0gbnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIHRvdWNoTW92ZUxpc3RlbkZ1bmM6IGFueSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHRvdWNoRW5kTGlzdGVuRnVuYzogYW55ID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgdG91Y2hDYW5jZWxMaXN0ZW5GdW5jOiBhbnkgID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfdG91Y2hMaXN0ZW5lcjogSFRNTEVsZW1lbnQgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgYWRkV2luZG93UmVzaXplTGlzdGVuZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMud2luZG93UmVzaXplQm91bmQpIHtcclxuICAgICAgdGhpcy53aW5kb3dSZXNpemVCb3VuZCA9IHRoaXMud2luZG93UmVzaXplLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMud2luZG93UmVzaXplQm91bmQsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhZGREb2N1bWVudE1vdXNlTGlzdGVuZXJzKCkge1xyXG4gICAgaWYgKCF0aGlzLmRvY3VtZW50TW91c2VNb3ZlQm91bmQpIHtcclxuICAgICAgdGhpcy5kb2N1bWVudE1vdXNlTW92ZUJvdW5kID0gdGhpcy5kb2N1bWVudE1vdXNlTW92ZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5kb2N1bWVudE1vdXNlVXBCb3VuZCkge1xyXG4gICAgICB0aGlzLmRvY3VtZW50TW91c2VVcEJvdW5kID0gdGhpcy5kb2N1bWVudE1vdXNlVXAuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRvY3VtZW50TW91c2VNb3ZlQm91bmQsIGZhbHNlKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmRvY3VtZW50TW91c2VVcEJvdW5kLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVtb3ZlRG9jdW1lbnRNb3VzZUxpc3RlbmVycygpIHtcclxuXHJcbiAgICBpZiAodGhpcy5kb2N1bWVudE1vdXNlTW92ZUJvdW5kKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZG9jdW1lbnRNb3VzZU1vdmVCb3VuZCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRvY3VtZW50TW91c2VVcEJvdW5kKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmRvY3VtZW50TW91c2VVcEJvdW5kLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kb2N1bWVudE1vdXNlTW92ZUJvdW5kID0gbnVsbDtcclxuICAgIHRoaXMuZG9jdW1lbnRNb3VzZVVwQm91bmQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGFkZFRvdWNoTGlzdGVuZXJzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLnJlbW92ZVRvdWNoTGlzdGVuZXJzKCk7XHJcbiAgICB0aGlzLnRvdWNoU3RhcnRCb3VuZCA9IHRoaXMudG91Y2hTdGFydC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy50b3VjaEVuZEJvdW5kID0gdGhpcy50b3VjaEVuZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy50b3VjaENhbmNlbEJvdW5kID0gdGhpcy50b3VjaENhbmNlbC5iaW5kKHRoaXMpO1xyXG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy50b3VjaFN0YXJ0Qm91bmQsIHtjYXB0dXJlOiBmYWxzZSwgcGFzc2l2ZTogdHJ1ZSwgb25jZTogZmFsc2V9KTtcclxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLnRvdWNoRW5kQm91bmQsIHtjYXB0dXJlOiBmYWxzZSwgcGFzc2l2ZTogdHJ1ZSwgb25jZTogZmFsc2V9KTtcclxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLnRvdWNoQ2FuY2VsQm91bmQsIHtjYXB0dXJlOiBmYWxzZSwgcGFzc2l2ZTogdHJ1ZSwgb25jZTogZmFsc2V9KTtcclxuICAgIHRoaXMuX3RvdWNoTGlzdGVuZXIgPSBlbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlbW92ZVRvdWNoTGlzdGVuZXJzKCkge1xyXG4gICAgaWYgKHRoaXMudG91Y2hFbmRCb3VuZCkge1xyXG4gICAgICB0aGlzLl90b3VjaExpc3RlbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy50b3VjaEVuZEJvdW5kLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudG91Y2hTdGFydEJvdW5kKSB7XHJcbiAgICAgIHRoaXMuX3RvdWNoTGlzdGVuZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMudG91Y2hTdGFydEJvdW5kLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudG91Y2hDYW5jZWxCb3VuZCkge1xyXG4gICAgICB0aGlzLl90b3VjaExpc3RlbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdGhpcy50b3VjaENhbmNlbEJvdW5kLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b3VjaFN0YXJ0Qm91bmQgPSBudWxsO1xyXG4gICAgdGhpcy50b3VjaEVuZEJvdW5kID0gbnVsbDtcclxuICAgIHRoaXMudG91Y2hDYW5jZWxCb3VuZCA9IG51bGw7XHJcbiAgICB0aGlzLl90b3VjaExpc3RlbmVyID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZW1vdmVUb3VjaE1vdmVMaXN0ZW5lcnMoKSB7XHJcbiAgICAvLyByZW1vdmUgcHJldmlvdXMgbGlzdGVuZXJzXHJcbiAgICBpZiAodGhpcy50b3VjaE1vdmVMaXN0ZW5GdW5jKSB7XHJcbiAgICAgIHRoaXMudG91Y2hNb3ZlTGlzdGVuRnVuYygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudG91Y2hFbmRMaXN0ZW5GdW5jKSB7XHJcbiAgICAgIHRoaXMudG91Y2hFbmRMaXN0ZW5GdW5jKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50b3VjaENhbmNlbExpc3RlbkZ1bmMpIHtcclxuICAgICAgdGhpcy50b3VjaENhbmNlbExpc3RlbkZ1bmMoKTtcclxuICAgIH1cclxuICAgIHRoaXMudG91Y2hNb3ZlTGlzdGVuRnVuYyA9IG51bGw7XHJcbiAgICB0aGlzLnRvdWNoRW5kTGlzdGVuRnVuYyA9IG51bGw7XHJcbiAgICB0aGlzLnRvdWNoQ2FuY2VsTGlzdGVuRnVuYyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgd2luZG93UmVzaXplKGU6IGFueSkgeyB9XHJcblxyXG4gIHB1YmxpYyB0b3VjaFN0YXJ0KGU6IGFueSkgeyB9XHJcblxyXG4gIHB1YmxpYyB0b3VjaEVuZChlOiBhbnkpIHsgfVxyXG5cclxuICBwdWJsaWMgdG91Y2hDYW5jZWwoZTogYW55KSB7IH1cclxuXHJcbiAgcHJvdGVjdGVkIGRvY3VtZW50TW91c2VNb3ZlKGU6IE1vdXNlRXZlbnQpIHsgfVxyXG5cclxuICBwcm90ZWN0ZWQgZG9jdW1lbnRNb3VzZVVwKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMucmVtb3ZlRG9jdW1lbnRNb3VzZUxpc3RlbmVycygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbkRyb3AobW91c2VBY3Rpb246IFVJQWN0aW9uLCBzaG93OiBib29sZWFuKTogYW55IHsgfVxyXG5cclxuICBwdWJsaWMgZHJhZ0luUHJvY2Vzcyh2YWx1ZTogYm9vbGVhbikgeyB9XHJcblxyXG4gIHB1YmxpYyByZXNpemVJblByb2Nlc3ModmFsdWU6IGJvb2xlYW4pIHsgfVxyXG5cclxuICBwdWJsaWMgc2hvd0hlYWRlckJ0bihmaWVsZE5hbWU6IHN0cmluZykgeyB9XHJcblxyXG4gIHB1YmxpYyBoaWRlSGVhZGVyQnRucygpIHsgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuXHJcbiAgICBpZiAodGhpcy53aW5kb3dSZXNpemVCb3VuZCkge1xyXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy53aW5kb3dSZXNpemVCb3VuZCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud2luZG93UmVzaXplQm91bmQgPSBudWxsO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRG9jdW1lbnRNb3VzZUxpc3RlbmVycygpO1xyXG4gICAgdGhpcy5yZW1vdmVUb3VjaE1vdmVMaXN0ZW5lcnMoKTtcclxuICAgIHRoaXMucmVtb3ZlVG91Y2hMaXN0ZW5lcnMoKTtcclxuICB9XHJcbn1cclxuIl19