UNPKG

@true-directive/grid

Version:

Angular Data Grid from Yopsilon.

151 lines 18.2 kB
import * as tslib_1 from "tslib"; /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ import { Component, Input, Output, ElementRef, ViewChild, EventEmitter, Inject } from '@angular/core'; import { BaseComponent } from './base.component'; import { GridStateService } from './grid-state.service'; import { SortType } from '@true-directive/base'; import { Column } from '@true-directive/base'; let GridHeaderCellComponent = class GridHeaderCellComponent extends BaseComponent { constructor(state, elementRef) { super(); this.state = state; this.elementRef = elementRef; this.toggleCheckColumn = new EventEmitter(); this.captionMouseDown = new EventEmitter(); this.captionMouseUp = new EventEmitter(); this.captionTouchStart = new EventEmitter(); } // Иконка фильтра // Если фильтр включен, то иконка кнопки показывается всегда и подсвечивается isFiltered() { return this.state.dataSource.getFilter(this.column) != null; } setState(s) { if (s === 'btn-visible') this.caption.nativeElement.classList.toggle('true-grid-btn-visible', true); } removeState(s) { if (s === 'btn-visible') this.caption.nativeElement.classList.toggle('true-grid-btn-visible', false); } btnIconClass() { let classes = ''; if (this.isFiltered()) { classes += this.state.sta.filterBtnIconClass_active; } else { classes += this.state.sta.filterBtnIconClass; } return classes; } // Отсортирована ли колонка isSorted(col) { return this.sorted !== null; } get sorted() { const res = this.state.dataSource.sortedByField(this.column.fieldName); return !res ? null : res.sortType; } get sortedUp() { return this.sorted === SortType.ASC; } get sortedDown() { return this.sorted === SortType.DESC; } // Если отсортирован, то как?.. sortIndicatorClass() { if (this.sortedUp) { return this.state.sta.sortedUpIconClass; } if (this.sortedDown) { return this.state.sta.sortedDownIconClass; } return ''; } toggleCheck(e) { this.toggleCheckColumn.emit(e); e.preventDefault(); } headerMouseDown(e) { e.stopPropagation(); } mouseDown(e) { this.captionMouseDown.emit(e); } mouseUp(e) { this.captionMouseUp.emit(e); } touchStart(e) { this.captionTouchStart.emit(e); } contextMenu(e) { this.state.headerContextMenu(e, this.column); } // Клик по кнопке фильтра btnTouch(e) { this.state.showFilter(e, this.column); e.stopPropagation(); if (e.cancelable) { e.preventDefault(); } } // Клик по кнопке фильтра btnClick(e) { this.state.showFilter(e, this.column); } // Прерываем MouseDown, чтобы не произошло сортировки btnMouseDown(e) { e.stopPropagation(); e.preventDefault(); } ngAfterContentInit() { this.addTouchListeners(this.caption.nativeElement); } }; tslib_1.__decorate([ Input('column'), tslib_1.__metadata("design:type", Column) ], GridHeaderCellComponent.prototype, "column", void 0); tslib_1.__decorate([ Output('toggleCheckColumn'), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "toggleCheckColumn", void 0); tslib_1.__decorate([ Output('captionMouseDown'), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "captionMouseDown", void 0); tslib_1.__decorate([ Output('captionMouseUp'), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "captionMouseUp", void 0); tslib_1.__decorate([ Output('captionTouchStart'), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "captionTouchStart", void 0); tslib_1.__decorate([ ViewChild('caption', { static: true }), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "caption", void 0); tslib_1.__decorate([ ViewChild('btn', { static: true }), tslib_1.__metadata("design:type", Object) ], GridHeaderCellComponent.prototype, "btn", void 0); GridHeaderCellComponent = tslib_1.__decorate([ Component({ selector: 'true-grid-header-cell', template: "<div #caption\r\n class=\"true-header-cell__caption\"\r\n [class.true-header-cell__checkbox]=\"column.isCheckbox\"\r\n [class.true-header-cell__filtered]=\"isFiltered()\"\r\n (contextmenu)=\"contextMenu($event)\"\r\n (touchstart)=\"touchStart($event)\"\r\n (mousedown)=\"mouseDown($event)\"\r\n (mouseup)=\"mouseUp($event)\">\r\n\r\n <div *ngIf=\"column.isCheckbox\"\r\n [ngClass]=\"state.settings.headerCheckboxClass(column.isChecked)\"\r\n (click)=\"toggleCheck($event)\"></div>\r\n <div *ngIf=\"isSorted(column)\"\r\n class=\"true-header-cell__sort-indicator\" [ngClass]=\"sortIndicatorClass()\"></div>\r\n <div *ngIf=\"!column.isCheckbox\"\r\n [class.true-header-cell__txt_nowrap]=\"!state.settings.headerWordWrap\"\r\n class=\"true-header-cell__txt\">\r\n {{column.caption | trueTranslate}}\r\n </div>\r\n\r\n <div #btn *ngIf=\"!column.isCheckbox && state.settings.allowFilter && (column.allowFilter || isFiltered())\"\r\n class=\"true-grid-btn\"\r\n (click)=\"btnClick($event)\"\r\n (touchstart)=\"btnTouch($event)\"\r\n (mousedown)=\"btnMouseDown($event)\">\r\n <span [ngClass]=\"btnIconClass()\"></span>\r\n </div>\r\n</div>\r\n", host: { 'class': 'true-header-cell' }, styles: [":host{cursor:default;display:block;height:100%}.true-header-cell__caption{height:100%;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-pack:center;justify-content:center;-webkit-box-align:stretch;align-items:stretch;overflow-x:hidden}.true-header-cell__caption.true-header-cell__checkbox{-webkit-box-align:center;align-items:center;justify-content:space-around}.true-header-cell__caption .true-header-cell__sort-indicator{text-align:center;-ms-grid-row-align:center;align-self:center}.true-header-cell__caption .true-header-cell__txt{-ms-grid-row-align:center;align-self:center;overflow-x:hidden;-webkit-box-flex:1;flex-grow:1;overflow-y:hidden}.true-header-cell__caption .true-header-cell__txt_nowrap{white-space:nowrap;text-overflow:ellipsis}.true-grid-btn-visible .true-grid-btn,.true-header-cell__caption:hover .true-grid-btn{opacity:.2;visibility:visible}.true-header-cell__filtered .true-grid-btn{visibility:visible!important;opacity:1!important}"] }), tslib_1.__param(0, Inject('gridState')), tslib_1.__metadata("design:paramtypes", [GridStateService, ElementRef]) ], GridHeaderCellComponent); export { GridHeaderCellComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9ncmlkLWhlYWRlci1jZWxsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7RUFJRTtBQUNGLE9BQU8sRUFBWSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUN6RCxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBVTlDLElBQWEsdUJBQXVCLEdBQXBDLE1BQWEsdUJBQXdCLFNBQVEsYUFBYTtJQWtJeEQsWUFDOEIsS0FBdUIsRUFDNUMsVUFBc0I7UUFDM0IsS0FBSyxFQUFFLENBQUM7UUFGa0IsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFDNUMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTlIL0Isc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUc1QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRzNDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUd6QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBdUgxQyxDQUFDO0lBL0dILGlCQUFpQjtJQUNqQiw2RUFBNkU7SUFDN0UsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDOUQsQ0FB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QUM1Qjs7S0FFRixDQUFDO0lBb0lHLG1CQUFBLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTs2Q0FBZSxnQkFBZ0I7UUFDaEMsVUFBVTtHQXBJcEIsdUJBQXVCLENBdUluQztTQXZJWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTkgQWxla3NleSBNZWxuaWtvdiwgVHJ1ZSBEaXJlY3RpdmUgQ29tcGFueS5cclxuICogQGxpbmsgaHR0cHM6Ly90cnVlZGlyZWN0aXZlLmNvbS9cclxuICogQGxpY2Vuc2UgTUlUXHJcbiovXHJcbmltcG9ydCB7IE5nTW9kdWxlLCBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCxcclxuICAgICAgICAgRXZlbnRFbWl0dGVyLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JpZFN0YXRlU2VydmljZSB9IGZyb20gJy4vZ3JpZC1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFBhcnQgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IFNvcnRUeXBlIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5pbXBvcnQgeyBDb2x1bW4gfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydWUtZ3JpZC1oZWFkZXItY2VsbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtaGVhZGVyLWNlbGwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGhvc3Q6IHtcclxuICAgICdjbGFzcyc6ICd0cnVlLWhlYWRlci1jZWxsJ1xyXG4gIH0sXHJcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL2dyaWQtaGVhZGVyLWNlbGwuYmVoYXZpb3Iuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcmlkSGVhZGVyQ2VsbENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoJ2NvbHVtbicpXHJcbiAgcHVibGljIGNvbHVtbjogQ29sdW1uO1xyXG5cclxuICBAT3V0cHV0KCd0b2dnbGVDaGVja0NvbHVtbicpXHJcbiAgdG9nZ2xlQ2hlY2tDb2x1bW4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgnY2FwdGlvbk1vdXNlRG93bicpXHJcbiAgY2FwdGlvbk1vdXNlRG93biA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCdjYXB0aW9uTW91c2VVcCcpXHJcbiAgY2FwdGlvbk1vdXNlVXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgnY2FwdGlvblRvdWNoU3RhcnQnKVxyXG4gIGNhcHRpb25Ub3VjaFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NhcHRpb24nLCB7c3RhdGljOiB0cnVlfSlcclxuICBjYXB0aW9uOiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2J0bicsIHtzdGF0aWM6IHRydWV9KVxyXG4gIGJ0bjogYW55O1xyXG5cclxuICAvLyDQmNC60L7QvdC60LAg0YTQuNC70YzRgtGA0LBcclxuICAvLyDQldGB0LvQuCDRhNC40LvRjNGC0YAg0LLQutC70Y7Rh9C10L0sINGC0L4g0LjQutC+0L3QutCwINC60L3QvtC/0LrQuCDQv9C+0LrQsNC30YvQstCw0LXRgtGB0Y8g0LLRgdC10LPQtNCwINC4INC/0L7QtNGB0LLQtdGH0LjQstCw0LXRgtGB0Y9cclxuICBpc0ZpbHRlcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZGF0YVNvdXJjZS5nZXRGaWx0ZXIodGhpcy5jb2x1bW4pICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U3RhdGUoczogc3RyaW5nKSB7XHJcbiAgICBpZiAocyA9PT0gJ2J0bi12aXNpYmxlJylcclxuICAgICAgdGhpcy5jYXB0aW9uLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgndHJ1ZS1ncmlkLWJ0bi12aXNpYmxlJywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlU3RhdGUoczogc3RyaW5nKSB7XHJcbiAgICBpZiAocyA9PT0gJ2J0bi12aXNpYmxlJylcclxuICAgICAgdGhpcy5jYXB0aW9uLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgndHJ1ZS1ncmlkLWJ0bi12aXNpYmxlJywgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgYnRuSWNvbkNsYXNzKCkge1xyXG4gICAgbGV0IGNsYXNzZXMgPSAnJztcclxuICAgIGlmICh0aGlzLmlzRmlsdGVyZWQoKSkge1xyXG4gICAgICBjbGFzc2VzICs9IHRoaXMuc3RhdGUuc3RhLmZpbHRlckJ0bkljb25DbGFzc19hY3RpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjbGFzc2VzICs9IHRoaXMuc3RhdGUuc3RhLmZpbHRlckJ0bkljb25DbGFzcztcclxuICAgIH1cclxuICAgIHJldHVybiBjbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgLy8g0J7RgtGB0L7RgNGC0LjRgNC+0LLQsNC90LAg0LvQuCDQutC+0LvQvtC90LrQsFxyXG4gIHB1YmxpYyBpc1NvcnRlZChjb2w6IENvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydGVkICE9PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzb3J0ZWQoKTogU29ydFR5cGUge1xyXG4gICAgY29uc3QgcmVzID0gdGhpcy5zdGF0ZS5kYXRhU291cmNlLnNvcnRlZEJ5RmllbGQodGhpcy5jb2x1bW4uZmllbGROYW1lKTtcclxuICAgIHJldHVybiAhcmVzID8gbnVsbCA6IHJlcy5zb3J0VHlwZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc29ydGVkVXAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWQgPT09IFNvcnRUeXBlLkFTQztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc29ydGVkRG93bigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNvcnRlZCA9PT0gU29ydFR5cGUuREVTQztcclxuICB9XHJcblxyXG4gIC8vINCV0YHQu9C4INC+0YLRgdC+0YDRgtC40YDQvtCy0LDQvSwg0YLQviDQutCw0Lo/Li5cclxuICBzb3J0SW5kaWNhdG9yQ2xhc3MoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydGVkVXApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuc3RhLnNvcnRlZFVwSWNvbkNsYXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRlZERvd24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuc3RhLnNvcnRlZERvd25JY29uQ2xhc3M7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ2hlY2soZTogYW55KSB7XHJcbiAgICB0aGlzLnRvZ2dsZUNoZWNrQ29sdW1uLmVtaXQoZSk7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBoZWFkZXJNb3VzZURvd24oZTogYW55KSB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgbW91c2VEb3duKGU6IGFueSkge1xyXG4gICAgdGhpcy5jYXB0aW9uTW91c2VEb3duLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBtb3VzZVVwKGU6IGFueSkge1xyXG4gICAgdGhpcy5jYXB0aW9uTW91c2VVcC5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgdG91Y2hTdGFydChlOiBhbnkpIHtcclxuICAgIHRoaXMuY2FwdGlvblRvdWNoU3RhcnQuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIGNvbnRleHRNZW51KGU6IGFueSkge1xyXG4gICAgdGhpcy5zdGF0ZS5oZWFkZXJDb250ZXh0TWVudShlLCB0aGlzLmNvbHVtbik7XHJcbiAgfVxyXG5cclxuICAvLyDQmtC70LjQuiDQv9C+INC60L3QvtC/0LrQtSDRhNC40LvRjNGC0YDQsFxyXG4gIGJ0blRvdWNoKGU6IGFueSkge1xyXG4gICAgdGhpcy5zdGF0ZS5zaG93RmlsdGVyKGUsIHRoaXMuY29sdW1uKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAoZS5jYW5jZWxhYmxlKSB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vINCa0LvQuNC6INC/0L4g0LrQvdC+0L/QutC1INGE0LjQu9GM0YLRgNCwXHJcbiAgYnRuQ2xpY2soZTogYW55KSB7XHJcbiAgICB0aGlzLnN0YXRlLnNob3dGaWx0ZXIoZSwgdGhpcy5jb2x1bW4pO1xyXG4gIH1cclxuXHJcbiAgLy8g0J/RgNC10YDRi9Cy0LDQtdC8IE1vdXNlRG93biwg0YfRgtC+0LHRiyDQvdC1INC/0YDQvtC40LfQvtGI0LvQviDRgdC+0YDRgtC40YDQvtCy0LrQuFxyXG4gIGJ0bk1vdXNlRG93bihlOiBhbnkpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICB0aGlzLmFkZFRvdWNoTGlzdGVuZXJzKHRoaXMuY2FwdGlvbi5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnZ3JpZFN0YXRlJykgcHVibGljIHN0YXRlOiBHcmlkU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxufVxyXG4iXX0=