@true-directive/grid
Version:
Angular Data Grid from Yopsilon.
151 lines • 18.2 kB
JavaScript
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=