UNPKG

@petkit/ngx-table-descartes

Version:
144 lines (143 loc) 14 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, TemplateRef, } from '@angular/core'; import { groupBy, keys, values, orderBy, isArray, } from 'lodash-es'; import { Observable, of, combineLatest, } from 'rxjs'; var TableDescartesComponent = /** @class */ (function () { function TableDescartesComponent() { this.data = of([]); this.order = of(null); this.table = []; } /** * @return {?} */ TableDescartesComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; combineLatest([ this.data, this.order, ]).subscribe(function (_a) { var _b = tslib_1.__read(_a, 2), data = _b[0], order = _b[1]; if (!isArray(data)) { return; } /** @type {?} */ var _order = order || (data[0] && keys(data[0]) || null); _this._order = _order; if (!isArray(_order)) { return; } /** @type {?} */ var orderData = orderBy(data, _order); _this.orderData = orderData; /** @type {?} */ var aoaData = _this.getAoA(orderData, _order); _this.aoaData = aoaData; _this.table = _this.format(aoaData); }); }; /** * @param {?} AoO * @param {?} order * @return {?} */ TableDescartesComponent.prototype.getAoA = /** * @param {?} AoO * @param {?} order * @return {?} */ function (AoO, order) { return AoO.map(function (row) { return order.map(function (key) { return row[key]; }).filter(function (key) { return key !== undefined; }); }); }; /** * @param {?} data * @return {?} */ TableDescartesComponent.prototype.format = /** * @param {?} data * @return {?} */ function (data) { var _this = this; if (!isArray(data) || data.length === 0) { return []; } if (!isArray(data[0]) || data[0].length === 0) { return []; } /** @type {?} */ var groupDatas = groupBy(data, function (row) { return row[0]; }); /** @type {?} */ var result = values(groupDatas).map(function (groupData) { /** @type {?} */ var _data = []; /** @type {?} */ var firstCols = []; /** @type {?} */ var nextResult; groupData.forEach(function (_a) { var _b = tslib_1.__read(_a), col = _b[0], row = _b.slice(1); firstCols.push(col); _data.push(row); }); /** @type {?} */ var firstCol = { content: firstCols[0], rowspan: firstCols.length, key: _this._order ? _this._order[_this._order.length - _data[0].length - 1] : null, }; /** @type {?} */ var next = _this.format(_data); if (next.length) { next[0].unshift(firstCol); nextResult = next; } else { var _a = tslib_1.__read(firstCols), leaves = _a.slice(1); nextResult = tslib_1.__spread([[firstCol]], leaves.map(function () { return []; })); } return nextResult; }).reduce(function (a, b) { return a.concat(b); }, []); return result; }; TableDescartesComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-table-descartes', template: "<table class=\"ngx-table-descartes__table\">\n <ng-content></ng-content>\n <tbody>\n <tr *ngFor=\"let row of table; index as i;\">\n <td class=\"ngx-table-descartes__td\" *ngFor=\"let cell of row\" [attr.rowspan]=\"cell.rowspan\">\n <ng-container *ngIf=\"tpl\">\n <ng-container *ngTemplateOutlet=\"tpl; context: {cell: cell, row: aoaData[i], obj: orderData[i]};\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!tpl\">{{cell.content}}</ng-container>\n </td>\n </tr>\n </tbody>\n</table>\n\n\n", styles: [".ngx-table-descartes__table{border-collapse:collapse;width:100%;text-align:center;vertical-align:middle}.ngx-table-descartes__td{border:1px solid #bfbfbf}"] },] }, ]; /** @nocollapse */ TableDescartesComponent.ctorParameters = function () { return []; }; TableDescartesComponent.propDecorators = { data: [{ type: Input }], order: [{ type: Input }], tpl: [{ type: Input }] }; return TableDescartesComponent; }()); export { TableDescartesComponent }; if (false) { /** @type {?} */ TableDescartesComponent.prototype.data; /** @type {?} */ TableDescartesComponent.prototype.order; /** @type {?} */ TableDescartesComponent.prototype._order; /** @type {?} */ TableDescartesComponent.prototype.tpl; /** @type {?} */ TableDescartesComponent.prototype.orderData; /** @type {?} */ TableDescartesComponent.prototype.aoaData; /** @type {?} */ TableDescartesComponent.prototype.table; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGVzY2FydGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BwZXRraXQvbmd4LXRhYmxlLWRlc2NhcnRlcy8iLCJzb3VyY2VzIjpbInRhYmxlLWRlc2NhcnRlcy90YWJsZS1kZXNjYXJ0ZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsT0FBTyxHQUNSLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxVQUFVLEVBQ1YsRUFBRSxFQUNGLGFBQWEsR0FDZCxNQUFNLE1BQU0sQ0FBQzs7SUF1Q1o7b0JBWjhDLEVBQUUsQ0FBQyxFQUFFLENBQUM7cUJBRWYsRUFBRSxDQUFDLElBQUksQ0FBQztxQkFRWCxFQUFFO0tBR25DOzs7O0lBRUQsMENBQVE7OztJQUFSO1FBQUEsaUJBd0JDO1FBdkJDLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQyxJQUFJO1lBQ1QsSUFBSSxDQUFDLEtBQUs7U0FDWCxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQUMsRUFBYTtnQkFBYiwwQkFBYSxFQUFaLFlBQUksRUFBRSxhQUFLO1lBQ3hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxDQUFDO2FBQ1I7O1lBRUQsSUFBTSxNQUFNLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUMzRCxLQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENB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QUMsQ0FBQztnQkFDTixvQ0FBUyxvQkFBUyxDQUFjO2dCQUNoQyxVQUFVLHFCQUFJLENBQUMsUUFBUSxDQUFDLEdBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFNLE9BQUEsRUFBRSxFQUFGLENBQUUsQ0FBQyxDQUFDLENBQUM7YUFDcEQ7WUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ25CLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBWCxDQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUNmOztnQkE1R0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSwwaUJBZVg7b0JBQ0MsTUFBTSxFQUFFLENBQUMsNEpBQTRKLENBQUM7aUJBQ3ZLOzs7Ozt1QkFFRSxLQUFLO3dCQUVMLEtBQUs7c0JBR0wsS0FBSzs7a0NBaERSOztTQTBDYSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGdyb3VwQnksXG4gIGtleXMsXG4gIHZhbHVlcyxcbiAgb3JkZXJCeSxcbiAgaXNBcnJheSxcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBjb21iaW5lTGF0ZXN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIElUYWJsZURlc2NhcnRlc1RhYmxlLFxufSBmcm9tICcuL3RhYmxlLWRlc2NhcnRlcy5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtdGFibGUtZGVzY2FydGVzJyxcbiAgdGVtcGxhdGU6IGA8dGFibGUgY2xhc3M9XCJuZ3gtdGFibGUtZGVzY2FydGVzX190YWJsZVwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDx0Ym9keT5cbiAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiB0YWJsZTsgaW5kZXggYXMgaTtcIj5cbiAgICAgIDx0ZCBjbGFzcz1cIm5neC10YWJsZS1kZXNjYXJ0ZXNfX3RkXCIgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93XCIgW2F0dHIucm93c3Bhbl09XCJjZWxsLnJvd3NwYW5cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRwbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGw7IGNvbnRleHQ6IHtjZWxsOiBjZWxsLCByb3c6IGFvYURhdGFbaV0sIG9iajogb3JkZXJEYXRhW2ldfTtcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdHBsXCI+e3tjZWxsLmNvbnRlbnR9fTwvbmctY29udGFpbmVyPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cblxuXG5gLFxuICBzdHlsZXM6IFtgLm5neC10YWJsZS1kZXNjYXJ0ZXNfX3RhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubmd4LXRhYmxlLWRlc2NhcnRlc19fdGR7Ym9yZGVyOjFweCBzb2xpZCAjYmZiZmJmfWBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRGVzY2FydGVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgZGF0YTogT2JzZXJ2YWJsZTx7W2tleTogc3RyaW5nXTogc3RyaW5nfVtdPiA9IG9mKFtdKTtcbiAgQElucHV0KClcbiAgb3JkZXI6IE9ic2VydmFibGU8c3RyaW5nW10gfCBudWxsPiA9IG9mKG51bGwpO1xuICBwcml2YXRlIF9vcmRlcjogc3RyaW5nW10gfCBudWxsO1xuICBASW5wdXQoKVxuICB0cGw6IFRlbXBsYXRlUmVmPGFueT47XG5cblxuICBvcmRlckRhdGE6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9W11bXTtcbiAgYW9hRGF0YTogc3RyaW5nW11bXTtcbiAgdGFibGU6IElUYWJsZURlc2NhcnRlc1RhYmxlW11bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmRhdGEsXG4gICAgICB0aGlzLm9yZGVyLFxuICAgIF0pLnN1YnNjcmliZSgoW2RhdGEsIG9yZGVyXSkgPT4ge1xuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgX29yZGVyID0gb3JkZXIgfHwgKGRhdGFbMF0gJiYga2V5cyhkYXRhWzBdKSB8fCBudWxsKTtcbiAgICAgIHRoaXMuX29yZGVyID0gX29yZGVyO1xuICAgICAgaWYgKCFpc0FycmF5KF9vcmRlcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcmRlckRhdGEgPSBvcmRlckJ5KGRhdGEsIF9vcmRlcik7XG4gICAgICB0aGlzLm9yZGVyRGF0YSA9IG9yZGVyRGF0YTtcblxuICAgICAgY29uc3QgYW9hRGF0YSA9IHRoaXMuZ2V0QW9BKG9yZGVyRGF0YSwgX29yZGVyKTtcbiAgICAgIHRoaXMuYW9hRGF0YSA9IGFvYURhdGE7XG5cbiAgICAgIHRoaXMudGFibGUgPSB0aGlzLmZvcm1hdChhb2FEYXRhKTtcbiAgICB9KTtcblxuICB9XG5cbiAgZ2V0QW9BKEFvTzogb2JqZWN0W10sIG9yZGVyOiBhbnlbXSk6IHN0cmluZ1tdW10ge1xuICAgIHJldHVybiBBb08ubWFwKHJvdyA9PiBvcmRlci5tYXAoa2V5ID0+IHJvd1trZXldKS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gdW5kZWZpbmVkKSk7XG4gIH1cblxuICBmb3JtYXQoZGF0YTogYW55W11bXSk6IGFueVtdW10ge1xuICAgIGlmICghaXNBcnJheShkYXRhKSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghaXNBcnJheShkYXRhWzBdKSB8fCBkYXRhWzBdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwRGF0YXMgPSBncm91cEJ5KGRhdGEsIHJvdyA9PiByb3dbMF0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gdmFsdWVzKGdyb3VwRGF0YXMpLm1hcChncm91cERhdGEgPT4ge1xuICAgICAgY29uc3QgX2RhdGE6IGFueVtdID0gW107XG4gICAgICBjb25zdCBmaXJzdENvbHM6IGFueVtdID0gW107XG4gICAgICBsZXQgbmV4dFJlc3VsdDtcblxuICAgICAgZ3JvdXBEYXRhLmZvckVhY2goKFtjb2wsIC4uLnJvd10pID0+IHtcbiAgICAgICAgZmlyc3RDb2xzLnB1c2goY29sKTtcbiAgICAgICAgX2RhdGEucHVzaChyb3cpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZpcnN0Q29sID0ge1xuICAgICAgICBjb250ZW50OiBmaXJzdENvbHNbMF0sXG4gICAgICAgIHJvd3NwYW46IGZpcnN0Q29scy5sZW5ndGgsXG4gICAgICAgIGtleTogdGhpcy5fb3JkZXIgPyB0aGlzLl9vcmRlclt0aGlzLl9vcmRlci5sZW5ndGggLSBfZGF0YVswXS5sZW5ndGggLSAxXSA6IG51bGwsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy5mb3JtYXQoX2RhdGEpO1xuXG4gICAgICBpZiAobmV4dC5sZW5ndGgpIHtcbiAgICAgICAgbmV4dFswXS51bnNoaWZ0KGZpcnN0Q29sKTtcbiAgICAgICAgbmV4dFJlc3VsdCA9IG5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbLCAuLi5sZWF2ZXNdID0gZmlyc3RDb2xzO1xuICAgICAgICBuZXh0UmVzdWx0ID0gW1tmaXJzdENvbF0sIC4uLmxlYXZlcy5tYXAoKCkgPT4gW10pXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHRSZXN1bHQ7XG4gICAgfSkucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19