@true-directive/grid
Version:
Angular Data Grid from Yopsilon.
105 lines • 15 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, ElementRef, ViewChild, ChangeDetectorRef, Inject } from '@angular/core';
import { GridStateService } from './grid-state.service';
import { InternationalizationService } from './internationalization/internationalization.service';
import { ColumnType } from '@true-directive/base';
import { SummaryType } from '@true-directive/base';
import { Column } from '@true-directive/base';
var GridFooterCellComponent = /** @class */ (function () {
function GridFooterCellComponent(state, intl, elementRef, changeDetector) {
this.state = state;
this.intl = intl;
this.elementRef = elementRef;
this.changeDetector = changeDetector;
this._currentSummary = null;
this.summaryTypes = [
SummaryType.SUM, SummaryType.MIN, SummaryType.MAX,
SummaryType.COUNT, SummaryType.AVERAGE
];
}
GridFooterCellComponent.prototype.displayedValue = function (a) {
if (a.type != SummaryType.COUNT && this.column.format != '') {
return this.state.dataSource.displayedValue(this.column, a.value, null);
}
return a.value;
};
GridFooterCellComponent.prototype.canApply = function (t) {
if (t === SummaryType.SUM || t === SummaryType.AVERAGE) {
return this.column.type === ColumnType.NUMBER;
}
return true;
};
GridFooterCellComponent.prototype.hasAggr = function (t) {
return this._currentSummary != null && this._currentSummary.type === t;
};
Object.defineProperty(GridFooterCellComponent.prototype, "menuVisible", {
get: function () {
return this.menu.visible;
},
enumerable: true,
configurable: true
});
GridFooterCellComponent.prototype.menuClosed = function (e) {
this.elementRef.nativeElement.classList.remove('true-grid-btn-visible');
};
GridFooterCellComponent.prototype.menuShow = function (e) {
this.elementRef.nativeElement.classList.add('true-grid-btn-visible');
};
GridFooterCellComponent.prototype.setAggr = function (t) {
this.state.setSummary(this.column, t, this._currentSummary);
};
GridFooterCellComponent.prototype.addAggr = function (e, t) {
this.state.addSummary(this.column, t);
};
GridFooterCellComponent.prototype.toggleMenu = function (e, a) {
if (a === void 0) { a = null; }
var l = e.target.tagName === 'SPAN' ? e.target.parentElement : e.target;
if (l.parentElement !== this.elementRef.nativeElement) {
l = l.parentElement;
}
if (this.menuVisible) {
this.menu.closePopup();
}
else {
this._currentSummary = a;
this.menu.showByTarget(l, this.column.isNumeric ? 'AboveLeft' : 'AboveRight');
this.changeDetector.detectChanges();
}
};
tslib_1.__decorate([
Input('column'),
tslib_1.__metadata("design:type", Column)
], GridFooterCellComponent.prototype, "column", void 0);
tslib_1.__decorate([
ViewChild('btn', { static: false }),
tslib_1.__metadata("design:type", Object)
], GridFooterCellComponent.prototype, "btn", void 0);
tslib_1.__decorate([
ViewChild('menu', { static: false }),
tslib_1.__metadata("design:type", Object)
], GridFooterCellComponent.prototype, "menu", void 0);
GridFooterCellComponent = tslib_1.__decorate([
Component({
selector: 'true-grid-footer-cell',
template: "<div *ngFor=\"let a of column.summaries\"\r\n class=\"true-aggr\"\r\n [style.height.px]=\"state.st.rowHeight\"\r\n (click)=\"toggleMenu($event, a)\">\r\n <div>\r\n <span class=\"true-aggr-caption\">{{a.type.footerText | trueTranslate}} </span>{{displayedValue(a)}}\r\n </div>\r\n</div>\r\n<div\r\n class=\"true-footer-btn-container\"\r\n *ngIf=\"!column.isCheckbox && column.summaries.length === 0\">\r\n <div #btn class=\"true-grid-btn\" (click)=\"toggleMenu($event)\"><span class=\"true-icon-sigma\"></span></div>\r\n</div>\r\n\r\n<true-menu #menu\r\n (show)=\"menuShow($event)\"\r\n (closed)=\"menuClosed($event)\">\r\n <true-menu-item\r\n [hidden]=\"column.summaries.length === 0\"\r\n [true-menu-show]=\"submenu\"\r\n true-divide=\"true\"><span></span>{{'Add' | trueTranslate}}</true-menu-item>\r\n <true-menu-item\r\n *ngFor=\"let t of summaryTypes; let i=index\"\r\n [true-divide]=\"i == 0 && column.summaries.length > 0\"\r\n (itemClick)=\"setAggr(t)\"\r\n [disabled]=\"!canApply(t)\"><span [class.true-icon-ok]=\"hasAggr(t)\"></span>{{t.name | trueTranslate}}</true-menu-item>\r\n <true-menu-item (itemClick)=\"setAggr(null)\" true-divide=\"true\">\r\n <span [class.true-icon-ok]=\"column.summaries.length === 0\"></span>{{'None' | trueTranslate}}</true-menu-item>\r\n</true-menu>\r\n\r\n<true-menu #submenu>\r\n <true-menu-item\r\n *ngFor=\"let t of summaryTypes\"\r\n (itemClick)=\"addAggr($event, t)\"\r\n [disabled]=\"!canApply(t)\"><span></span>{{t.name | trueTranslate}}</true-menu-item>\r\n</true-menu>\r\n",
host: {
'[class.num]': 'column.isNumeric',
'[class.h100]': 'column.summaries.length<=1'
},
styles: [":host{display:block;overflow-x:hidden}.true-aggr{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-pack:start;justify-content:flex-start;-webkit-box-align:center;align-items:center}.true-aggr div{white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}:host.num .true-aggr{-webkit-box-pack:end;justify-content:flex-end}:host.h100{height:100%}:host.h100 .true-aggr{height:100%}.true-footer-btn-container{box-sizing:border-box;height:100%;width:100%;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}:host:hover .true-footer-btn-container .true-grid-btn{visibility:visible}:host.num .true-footer-btn-container{-webkit-box-pack:end;justify-content:flex-end}"]
}),
tslib_1.__param(0, Inject('gridState')),
tslib_1.__metadata("design:paramtypes", [GridStateService,
InternationalizationService,
ElementRef,
ChangeDetectorRef])
], GridFooterCellComponent);
return GridFooterCellComponent;
}());
export { GridFooterCellComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1mb290ZXItY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9ncmlkLWZvb3Rlci1jZWxsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7RUFJRTtBQUNGLE9BQU8sRUFBWSxTQUFTLEVBQUUsS0FBSyxFQUFVLFVBQVUsRUFBRSxTQUFTLEVBQ3pELGlCQUFpQixFQUFFLE1BQU0sRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVc5QztJQXdFRSxpQ0FDOEIsS0FBdUIsRUFDNUMsSUFBaUMsRUFDaEMsVUFBc0IsRUFDdEIsY0FBaUM7UUFIYixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUM1QyxTQUFJLEdBQUosSUFBSSxDQUE2QjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQTFFM0Msb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFFdkIsaUJBQVksR0FBRztZQUN0QixXQUFXLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUc7WUFDakQsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTztTQUN2QyxDQUFDO0lBcUU2QyxDQUFDO0lBbkV6QyxnREFBYyxHQUFyQixVQUFzQixDQUFVO1FBQzlCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMs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LE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQzs7eURBQ3pCO0lBbENDLHVCQUF1QjtRQVRuQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLDhqREFBZ0Q7WUFFaEQsSUFBSSxFQUFFO2dCQUNKLGFBQWEsRUFBRSxrQkFBa0I7Z0JBQ2pDLGNBQWMsRUFBRSw0QkFBNEI7YUFDN0M7O1NBQ0YsQ0FBQztRQTBFRyxtQkFBQSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7aURBQWUsZ0JBQWdCO1lBQ3RDLDJCQUEyQjtZQUNwQixVQUFVO1lBQ04saUJBQWlCO09BNUVoQyx1QkFBdUIsQ0E2RW5DO0lBQUQsOEJBQUM7Q0FBQSxBQTdFRCxJQTZFQztTQTdFWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTkgQWxla3NleSBNZWxuaWtvdiwgVHJ1ZSBEaXJlY3RpdmUgQ29tcGFueS5cclxuICogQGxpbmsgaHR0cHM6Ly90cnVlZGlyZWN0aXZlLmNvbS9cclxuICogQGxpY2Vuc2UgTUlUXHJcbiovXHJcbmltcG9ydCB7IE5nTW9kdWxlLCBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCxcclxuICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdCxcclxuICAgICAgICAgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBHcmlkU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuL2ludGVybmF0aW9uYWxpemF0aW9uL2ludGVybmF0aW9uYWxpemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5pbXBvcnQgeyBTdW1tYXJ5VHlwZSwgU3VtbWFyeSB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgQ29sdW1uIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0cnVlLWdyaWQtZm9vdGVyLWNlbGwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWZvb3Rlci1jZWxsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvZ3JpZC1mb290ZXItY2VsbC5iZWhhdmlvci5zY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tjbGFzcy5udW1dJzogJ2NvbHVtbi5pc051bWVyaWMnLFxyXG4gICAgJ1tjbGFzcy5oMTAwXSc6ICdjb2x1bW4uc3VtbWFyaWVzLmxlbmd0aDw9MSdcclxuICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcmlkRm9vdGVyQ2VsbENvbXBvbmVudCB7XHJcblxyXG4gIF9jdXJyZW50U3VtbWFyeTogU3VtbWFyeSA9IG51bGw7XHJcblxyXG4gIHJlYWRvbmx5IHN1bW1hcnlUeXBlcyA9IFtcclxuICAgIFN1bW1hcnlUeXBlLlNVTSwgU3VtbWFyeVR5cGUuTUlOLCBTdW1tYXJ5VHlwZS5NQVgsXHJcbiAgICBTdW1tYXJ5VHlwZS5DT1VOVCwgU3VtbWFyeVR5cGUuQVZFUkFHRVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBkaXNwbGF5ZWRWYWx1ZShhOiBTdW1tYXJ5KTogc3RyaW5nIHtcclxuICAgIGlmIChhLnR5cGUgIT0gU3VtbWFyeVR5cGUuQ09VTlQgJiYgdGhpcy5jb2x1bW4uZm9ybWF0ICE9ICcnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLmRhdGFTb3VyY2UuZGlzcGxheWVkVmFsdWUodGhpcy5jb2x1bW4sIGEudmFsdWUsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGEudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuQXBwbHkodDogU3VtbWFyeVR5cGUpOiBib29sZWFuIHtcclxuICAgIGlmICh0ID09PSBTdW1tYXJ5VHlwZS5TVU0gfHwgdCA9PT0gU3VtbWFyeVR5cGUuQVZFUkFHRSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW4udHlwZSA9PT0gQ29sdW1uVHlwZS5OVU1CRVI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNBZ2dyKHQ6IFN1bW1hcnlUeXBlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFN1bW1hcnkgIT0gbnVsbCAmJiB0aGlzLl9jdXJyZW50U3VtbWFyeS50eXBlID09PSB0O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCdjb2x1bW4nKVxyXG4gIHB1YmxpYyBjb2x1bW46IENvbHVtbjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnYnRuJywge3N0YXRpYzogZmFsc2V9KVxyXG4gIGJ0bjogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKCdtZW51Jywge3N0YXRpYzogZmFsc2V9KVxyXG4gIG1lbnU6IGFueTtcclxuXHJcbiAgZ2V0IG1lbnVWaXNpYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWVudS52aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgbWVudUNsb3NlZChlOiBhbnkpIHtcclxuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RydWUtZ3JpZC1idG4tdmlzaWJsZScpO1xyXG4gIH1cclxuXHJcbiAgbWVudVNob3coZTogYW55KSB7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnVlLWdyaWQtYnRuLXZpc2libGUnKTtcclxuICB9XHJcblxyXG4gIHNldEFnZ3IodDogU3VtbWFyeVR5cGUpIHtcclxuICAgIHRoaXMuc3RhdGUuc2V0U3VtbWFyeSh0aGlzLmNvbHVtbiwgdCwgdGhpcy5fY3VycmVudFN1bW1hcnkpO1xyXG4gIH1cclxuXHJcbiAgYWRkQWdncihlOiBhbnksIHQ6IFN1bW1hcnlUeXBlKSB7XHJcbiAgICB0aGlzLnN0YXRlLmFkZFN1bW1hcnkodGhpcy5jb2x1bW4sIHQpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTWVudShlOiBhbnksIGE6IFN1bW1hcnkgPSBudWxsKSB7XHJcblxyXG4gICAgbGV0IGwgPSBlLnRhcmdldC50YWdOYW1lID09PSAnU1BBTicgPyBlLnRhcmdldC5wYXJlbnRFbGVtZW50IDogZS50YXJnZXQ7XHJcbiAgICBpZiAobC5wYXJlbnRFbGVtZW50ICE9PSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICBsID0gbC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1lbnVWaXNpYmxlKSB7XHJcbiAgICAgIHRoaXMubWVudS5jbG9zZVBvcHVwKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3VtbWFyeSA9IGE7XHJcbiAgICAgIHRoaXMubWVudS5zaG93QnlUYXJnZXQobCwgdGhpcy5jb2x1bW4uaXNOdW1lcmljID8gJ0Fib3ZlTGVmdCcgOiAnQWJvdmVSaWdodCcpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnZ3JpZFN0YXRlJykgcHVibGljIHN0YXRlOiBHcmlkU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGludGw6IEludGVybmF0aW9uYWxpemF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxufVxyXG4iXX0=