med-table
Version:
Wrapper over table of primeng library for Ministry of Health
53 lines • 8.88 kB
JavaScript
import { isEqual } from 'lodash';
import { CellBuilder } from './CellBuilder';
import { CONFIG_KEY_CHILDREN } from '../../configs/columnConfigKeys';
import { getNestedList, getColumnIndex, getColspanByKey, getObjectsByLevel, getMaxDeepKeyLevel, createArrayByNumber, } from '../../utils';
export class TableHeaderBuilder {
constructor(sheetSettings, columnsConfig) {
this.sheetSettings = sheetSettings;
this.columnsConfig = columnsConfig;
this.cellBuilder = new CellBuilder();
}
get maxDeepKeyLevel() {
return getMaxDeepKeyLevel(this.columnsConfig, CONFIG_KEY_CHILDREN);
}
get tableHeadLevels() {
return createArrayByNumber(this.maxDeepKeyLevel);
}
getHeaderRows() {
return this.tableHeadLevels.map((level, index) => {
if (index)
this.sheetSettings.updateRowIndex();
const allColumnsBeforeLevel = this.getAllColumnsBeforeLevel(level);
const visibleColumns = this.getVisibleColumns(level);
return allColumnsBeforeLevel.map((column, index) => {
const cols = [];
const range = this.getColspan(column);
const isVisibleColumn = Boolean(visibleColumns.find(col => isEqual(col, column)));
const startIndex = getColumnIndex(allColumnsBeforeLevel, column, CONFIG_KEY_CHILDREN);
this.sheetSettings.addColMerge(startIndex, startIndex + range);
if (isVisibleColumn) {
cols.push(this.cellBuilder.createTextCell(column.label, { bold: true }));
}
else {
cols.push(this.cellBuilder.createEmptyCell());
}
createArrayByNumber(range).map(() => {
cols.push(this.cellBuilder.createEmptyCell());
});
return cols;
}).flat();
});
}
getAllColumnsBeforeLevel(level) {
return getObjectsByLevel(this.columnsConfig, level, CONFIG_KEY_CHILDREN);
}
getVisibleColumns(level) {
return getNestedList(this.columnsConfig, CONFIG_KEY_CHILDREN, level).filter(Boolean);
}
getColspan(column) {
const DELTA = 1;
return getColspanByKey(column, CONFIG_KEY_CHILDREN) - DELTA;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGVIZWFkZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkLXRhYmxlL3NyYy9saWIvc2VydmljZXMvU2hlZXRzR2VuZXJhdG9yL1RhYmxlSGVhZGVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFckUsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2QsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsbUJBQW1CLEdBQ3BCLE1BQU0sYUFBYSxDQUFDO0FBTXJCLE1BQU0sT0FBTyxrQkFBa0I7SUFHN0IsWUFDbUIsYUFBaUMsRUFDakMsYUFBcUM7UUFEckMsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBQ2pDLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQUp2QyxnQkFBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFLOUMsQ0FBQztJQUVKLElBQVksZUFBZTtRQUN6QixPQUFPLGtCQUFrQixDQUF1QixJQUFJLENBQUMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELElBQVksZUFBZTtRQUN6QixPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxLQUFLO2dCQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFL0MsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXJELE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNqRCxNQUFNLElBQUksR0FBaUIsRUFBRSxDQUFDO2dCQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7Z0JBRXRGLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBRS9ELElBQUksZUFBZSxFQUFFO29CQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMxRTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztpQkFDL0M7Z0JBRUQsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxLQUFhO1FBQzVDLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBYTtRQUNyQyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU8sVUFBVSxDQUFDLE1BQTRCO1FBQzdDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNoQixPQUFPLGVBQWUsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDOUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDZWxsT2JqZWN0IH0gZnJvbSAneGxzeC1qcy1zdHlsZSc7XG5pbXBvcnQgeyBDZWxsQnVpbGRlciB9IGZyb20gJy4vQ2VsbEJ1aWxkZXInO1xuaW1wb3J0IHsgSVdvcmtTaGVldFNldHRpbmdzIH0gZnJvbSAnLi9Xb3JrU2hlZXRTZXR0aW5ncyc7XG5pbXBvcnQgeyBDT05GSUdfS0VZX0NISUxEUkVOIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb2x1bW5Db25maWdLZXlzJztcbmltcG9ydCB7IE1lZFRhYmxlQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMvTWVkVGFibGVDb2x1bW5Db25maWcnO1xuaW1wb3J0IHtcbiAgZ2V0TmVzdGVkTGlzdCxcbiAgZ2V0Q29sdW1uSW5kZXgsXG4gIGdldENvbHNwYW5CeUtleSxcbiAgZ2V0T2JqZWN0c0J5TGV2ZWwsXG4gIGdldE1heERlZXBLZXlMZXZlbCxcbiAgY3JlYXRlQXJyYXlCeU51bWJlcixcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUhlYWRlckJ1aWxkZXIge1xuICBnZXRIZWFkZXJSb3dzKCk6IENlbGxPYmplY3RbXVtdXG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUhlYWRlckJ1aWxkZXIgaW1wbGVtZW50cyBJVGFibGVIZWFkZXJCdWlsZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjZWxsQnVpbGRlciA9IG5ldyBDZWxsQnVpbGRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2hlZXRTZXR0aW5nczogSVdvcmtTaGVldFNldHRpbmdzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29sdW1uc0NvbmZpZzogTWVkVGFibGVDb2x1bW5Db25maWdbXSxcbiAgKSB7fVxuXG4gIHByaXZhdGUgZ2V0IG1heERlZXBLZXlMZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRNYXhEZWVwS2V5TGV2ZWw8TWVkVGFibGVDb2x1bW5Db25maWc+KHRoaXMuY29sdW1uc0NvbmZpZywgQ09ORklHX0tFWV9DSElMRFJFTik7XG4gIH1cblxuICBwcml2YXRlIGdldCB0YWJsZUhlYWRMZXZlbHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBjcmVhdGVBcnJheUJ5TnVtYmVyKHRoaXMubWF4RGVlcEtleUxldmVsKTtcbiAgfVxuXG4gIGdldEhlYWRlclJvd3MoKTogQ2VsbE9iamVjdFtdW10ge1xuICAgIHJldHVybiB0aGlzLnRhYmxlSGVhZExldmVscy5tYXAoKGxldmVsLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4KSB0aGlzLnNoZWV0U2V0dGluZ3MudXBkYXRlUm93SW5kZXgoKTtcblxuICAgICAgY29uc3QgYWxsQ29sdW1uc0JlZm9yZUxldmVsID0gdGhpcy5nZXRBbGxDb2x1bW5zQmVmb3JlTGV2ZWwobGV2ZWwpO1xuICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVDb2x1bW5zKGxldmVsKTtcblxuICAgICAgcmV0dXJuIGFsbENvbHVtbnNCZWZvcmVMZXZlbC5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY29sczogQ2VsbE9iamVjdFtdID0gW107XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRDb2xzcGFuKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGlzVmlzaWJsZUNvbHVtbiA9IEJvb2xlYW4odmlzaWJsZUNvbHVtbnMuZmluZChjb2wgPT4gaXNFcXVhbChjb2wsIGNvbHVtbikpKTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGdldENvbHVtbkluZGV4KGFsbENvbHVtbnNCZWZvcmVMZXZlbCwgY29sdW1uLCBDT05GSUdfS0VZX0NISUxEUkVOKTtcblxuICAgICAgICB0aGlzLnNoZWV0U2V0dGluZ3MuYWRkQ29sTWVyZ2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHJhbmdlKTtcblxuICAgICAgICBpZiAoaXNWaXNpYmxlQ29sdW1uKSB7XG4gICAgICAgICAgY29scy5wdXNoKHRoaXMuY2VsbEJ1aWxkZXIuY3JlYXRlVGV4dENlbGwoY29sdW1uLmxhYmVsLCB7IGJvbGQ6IHRydWUgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHMucHVzaCh0aGlzLmNlbGxCdWlsZGVyLmNyZWF0ZUVtcHR5Q2VsbCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWF0ZUFycmF5QnlOdW1iZXIocmFuZ2UpLm1hcCgoKSA9PiB7XG4gICAgICAgICAgY29scy5wdXNoKHRoaXMuY2VsbEJ1aWxkZXIuY3JlYXRlRW1wdHlDZWxsKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29scztcbiAgICAgIH0pLmZsYXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsQ29sdW1uc0JlZm9yZUxldmVsKGxldmVsOiBudW1iZXIpOiBNZWRUYWJsZUNvbHVtbkNvbmZpZ1tdIHtcbiAgICByZXR1cm4gZ2V0T2JqZWN0c0J5TGV2ZWwodGhpcy5jb2x1bW5zQ29uZmlnLCBsZXZlbCwgQ09ORklHX0tFWV9DSElMRFJFTik7XG4gIH1cblxuICBwcml2YXRlIGdldFZpc2libGVDb2x1bW5zKGxldmVsOiBudW1iZXIpOiBNZWRUYWJsZUNvbHVtbkNvbmZpZ1tdIHtcbiAgICByZXR1cm4gZ2V0TmVzdGVkTGlzdCh0aGlzLmNvbHVtbnNDb25maWcsIENPTkZJR19LRVlfQ0hJTERSRU4sIGxldmVsKS5maWx0ZXIoQm9vbGVhbik7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHNwYW4oY29sdW1uOiBNZWRUYWJsZUNvbHVtbkNvbmZpZyk6IG51bWJlciB7XG4gICAgY29uc3QgREVMVEEgPSAxO1xuICAgIHJldHVybiBnZXRDb2xzcGFuQnlLZXkoY29sdW1uLCBDT05GSUdfS0VZX0NISUxEUkVOKSAtIERFTFRBO1xuICB9XG59XG4iXX0=