@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
90 lines • 14.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { isColumnPickerGroupItem } from './interfaces/column-picker-group-item.interface';
import * as i0 from "@angular/core";
export class ColumnPickerService {
getDeselectedColumnsInPresentationOrder(deselected, sort) {
let columns;
if (sort) {
const normalizedColumns = this.normalizeColumns(deselected);
normalizedColumns.sort(sort);
columns = this.denormalizeColumns(normalizedColumns, deselected);
}
else {
const grouped = deselected.filter(column => isColumnPickerGroupItem(column) && column.group !== undefined);
columns = [
...grouped,
...deselected.filter(column => grouped.indexOf(column) === -1)
];
}
return columns;
}
createTreeData(columns) {
const treeData = [];
const groupedColumns = columns.filter(column => isColumnPickerGroupItem(column) && column.group !== undefined);
columns.forEach((column) => {
if (groupedColumns.indexOf(column) !== -1 && isColumnPickerGroupItem(column)) {
const groupNode = this.createOrFindGroupNode(column, treeData);
groupNode.children.push(column.name);
this.createColumnTreeNode(column, treeData, 1);
}
else if (!isColumnPickerGroupItem(column)) {
this.createColumnTreeNode(column, treeData, 0);
}
});
return treeData;
}
normalizeColumns(columns) {
return columns.map(column => ({
name: isColumnPickerGroupItem(column) ? column.name : column,
group: isColumnPickerGroupItem(column) ? column.group : undefined
}));
}
denormalizeColumns(normalizedColumns, originalColumns) {
return normalizedColumns.map(normalized => {
const original = originalColumns.find(originalColumn => {
if (isColumnPickerGroupItem(originalColumn)) {
return originalColumn.group === normalized.group && originalColumn.name === normalized.name;
}
return false;
});
// Anything not found in the original array must have been normalized from a string
return original ? original : normalized.name;
});
}
createOrFindGroupNode(column, treeData) {
let groupNode = treeData.find(node => node.name === column.group && node.expandable);
if (!groupNode) {
groupNode = this.createGroupTreeNode(column, treeData);
}
return groupNode;
}
createGroupTreeNode(column, treeData) {
treeData.push({
name: column.group,
level: 0,
expandable: true,
isExpanded: this.isGroupTreeNodeExpanded(column.group),
column,
children: []
});
return treeData[treeData.length - 1];
}
createColumnTreeNode(column, treeData, level) {
treeData.push({
name: isColumnPickerGroupItem(column) ? column.name : column,
level,
expandable: false,
column
});
}
isGroupTreeNodeExpanded(groupName) {
const groupTreeNode = this.groups.find(group => group.name === groupName);
return groupTreeNode ? groupTreeNode.expanded : false;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ColumnPickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ColumnPickerService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ColumnPickerService, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXBpY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFibGUvY29sdW1uLXBpY2tlci9jb2x1bW4tcGlja2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQXlCLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7O0FBR2pILE1BQU0sT0FBTyxtQkFBbUI7SUFJNUIsdUNBQXVDLENBQ25DLFVBQThDLEVBQzlDLElBQW9FO1FBR3BFLElBQUksT0FBMkMsQ0FBQztRQUVoRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckUsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztZQUMzRyxPQUFPLEdBQUc7Z0JBQ04sR0FBRyxPQUFPO2dCQUNWLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDakUsQ0FBQztRQUNOLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQTJDO1FBQ3RELE1BQU0s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QUNSLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN0RCxNQUFNO1lBQ04sUUFBUSxFQUFFLEVBQUU7U0FDZixDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxNQUF3QyxFQUFFLFFBQWdDLEVBQUUsS0FBYTtRQUNsSCxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ1YsSUFBSSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQzVELEtBQUs7WUFDTCxVQUFVLEVBQUUsS0FBSztZQUNqQixNQUFNO1NBQ1QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHVCQUF1QixDQUFDLFNBQWlCO1FBQzdDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztRQUMxRSxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFELENBQUM7K0dBbEdRLG1CQUFtQjttSEFBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uUGlja2VyR3JvdXAgfSBmcm9tICcuL2NvbHVtbi1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbHVtblBpY2tlclRyZWVOb2RlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbHVtbi1waWNrZXItdHJlZS1ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5QaWNrZXJHcm91cEl0ZW0sIGlzQ29sdW1uUGlja2VyR3JvdXBJdGVtIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbHVtbi1waWNrZXItZ3JvdXAtaXRlbS5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sdW1uUGlja2VyU2VydmljZSB7XG5cbiAgICBncm91cHM6IENvbHVtblBpY2tlckdyb3VwW107XG5cbiAgICBnZXREZXNlbGVjdGVkQ29sdW1uc0luUHJlc2VudGF0aW9uT3JkZXIoXG4gICAgICAgIGRlc2VsZWN0ZWQ6IChzdHJpbmcgfCBDb2x1bW5QaWNrZXJHcm91cEl0ZW0pW10sXG4gICAgICAgIHNvcnQ6IChhOiBDb2x1bW5QaWNrZXJHcm91cEl0ZW0sIGI6IENvbHVtblBpY2tlckdyb3VwSXRlbSkgPT4gbnVtYmVyXG4gICAgKTogKHN0cmluZyB8IENvbHVtblBpY2tlckdyb3VwSXRlbSlbXSB7XG5cbiAgICAgICAgbGV0IGNvbHVtbnM6IChzdHJpbmcgfCBDb2x1bW5QaWNrZXJHcm91cEl0ZW0pW107XG5cbiAgICAgICAgaWYgKHNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDb2x1bW5zID0gdGhpcy5ub3JtYWxpemVDb2x1bW5zKGRlc2VsZWN0ZWQpO1xuICAgICAgICAgICAgbm9ybWFsaXplZENvbHVtbnMuc29ydChzb3J0KTtcbiAgICAgICAgICAgIGNvbHVtbnMgPSB0aGlzLmRlbm9ybWFsaXplQ29sdW1ucyhub3JtYWxpemVkQ29sdW1ucywgZGVzZWxlY3RlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBncm91cGVkID0gZGVzZWxlY3RlZC5maWx0ZXIoY29sdW1uID0+IGlzQ29sdW1uUGlja2VyR3JvdXBJdGVtKGNvbHVtbikgJiYgY29sdW1uLmdyb3VwICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgY29sdW1ucyA9IFtcbiAgICAgICAgICAgICAgICAuLi5ncm91cGVkLFxuICAgICAgICAgICAgICAgIC4uLmRlc2VsZWN0ZWQuZmlsdGVyKGNvbHVtbiA9PiBncm91cGVkLmluZGV4T2YoY29sdW1uKSA9PT0gLTEpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuXG4gICAgY3JlYXRlVHJlZURhdGEoY29sdW1uczogKHN0cmluZyB8IENvbHVtblBpY2tlckdyb3VwSXRlbSlbXSk6IENvbHVtblBpY2tlclRyZWVOb2RlW10ge1xuICAgICAgICBjb25zdCB0cmVlRGF0YTogQ29sdW1uUGlja2VyVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgICBjb25zdCBncm91cGVkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBpc0NvbHVtblBpY2tlckdyb3VwSXRlbShjb2x1bW4pICYmIGNvbHVtbi5ncm91cCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogKHN0cmluZyB8IENvbHVtblBpY2tlckdyb3VwSXRlbSkpID0+IHtcbiAgICAgICAgICAgIGlmIChncm91cGVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbikgIT09IC0xICYmIGlzQ29sdW1uUGlja2VyR3JvdXBJdGVtKGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cE5vZGUgPSB0aGlzLmNyZWF0ZU9yRmluZEdyb3VwTm9kZShjb2x1bW4sIHRyZWVEYXRhKTtcbiAgICAgICAgICAgICAgICBncm91cE5vZGUuY2hpbGRyZW4ucHVzaChjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5UcmVlTm9kZShjb2x1bW4sIHRyZWVEYXRhLCAxKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNDb2x1bW5QaWNrZXJHcm91cEl0ZW0oY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29sdW1uVHJlZU5vZGUoY29sdW1uLCB0cmVlRGF0YSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmVlRGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZUNvbHVtbnMoY29sdW1uczogKHN0cmluZyB8IENvbHVtblBpY2tlckdyb3VwSXRlbSlbXSk6IENvbHVtblBpY2tlckdyb3VwSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgICAgICAgbmFtZTogaXNDb2x1bW5QaWNrZXJHcm91cEl0ZW0oY29sdW1uKSA/IGNvbHVtbi5uYW1lIDogY29sdW1uLFxuICAgICAgICAgICAgZ3JvdXA6IGlzQ29sdW1uUGlja2VyR3JvdXBJdGVtKGNvbHVtbikgPyBjb2x1bW4uZ3JvdXAgOiB1bmRlZmluZWRcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVub3JtYWxpemVDb2x1bW5zKG5vcm1hbGl6ZWRDb2x1bW5zOiBDb2x1bW5QaWNrZXJHcm91cEl0ZW1bXSwgb3JpZ2luYWxDb2x1bW5zOiAoc3RyaW5nIHwgQ29sdW1uUGlja2VyR3JvdXBJdGVtKVtdKTogKHN0cmluZyB8IENvbHVtblBpY2tlckdyb3VwSXRlbSlbXSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVkQ29sdW1ucy5tYXAobm9ybWFsaXplZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IG9yaWdpbmFsQ29sdW1ucy5maW5kKG9yaWdpbmFsQ29sdW1uID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNDb2x1bW5QaWNrZXJHcm91cEl0ZW0ob3JpZ2luYWxDb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbENvbHVtbi5ncm91cCA9PT0gbm9ybWFsaXplZC5ncm91cCAmJiBvcmlnaW5hbENvbHVtbi5uYW1lID09PSBub3JtYWxpemVkLm5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQW55dGhpbmcgbm90IGZvdW5kIGluIHRoZSBvcmlnaW5hbCBhcnJheSBtdXN0IGhhdmUgYmVlbiBub3JtYWxpemVkIGZyb20gYSBzdHJpbmdcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbCA/IG9yaWdpbmFsIDogbm9ybWFsaXplZC5uYW1lO1xuICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlT3JGaW5kR3JvdXBOb2RlKGNvbHVtbjogQ29sdW1uUGlja2VyR3JvdXBJdGVtLCB0cmVlRGF0YTogQ29sdW1uUGlja2VyVHJlZU5vZGVbXSk6IENvbHVtblBpY2tlclRyZWVOb2RlIHtcbiAgICAgICAgbGV0IGdyb3VwTm9kZSA9IHRyZWVEYXRhLmZpbmQobm9kZSA9PiBub2RlLm5hbWUgPT09IGNvbHVtbi5ncm91cCAmJiBub2RlLmV4cGFuZGFibGUpO1xuICAgICAgICBpZiAoIWdyb3VwTm9kZSkge1xuICAgICAgICAgICAgZ3JvdXBOb2RlID0gdGhpcy5jcmVhdGVHcm91cFRyZWVOb2RlKGNvbHVtbiwgdHJlZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwTm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUdyb3VwVHJlZU5vZGUoY29sdW1uOiBDb2x1bW5QaWNrZXJHcm91cEl0ZW0sIHRyZWVEYXRhOiBDb2x1bW5QaWNrZXJUcmVlTm9kZVtdKTogQ29sdW1uUGlja2VyVHJlZU5vZGUge1xuICAgICAgICB0cmVlRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5ncm91cCxcbiAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGlzRXhwYW5kZWQ6IHRoaXMuaXNHcm91cFRyZWVOb2RlRXhwYW5kZWQoY29sdW1uLmdyb3VwKSxcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdHJlZURhdGFbdHJlZURhdGEubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb2x1bW5UcmVlTm9kZShjb2x1bW46IChzdHJpbmcgfCBDb2x1bW5QaWNrZXJHcm91cEl0ZW0pLCB0cmVlRGF0YTogQ29sdW1uUGlja2VyVHJlZU5vZGVbXSwgbGV2ZWw6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0cmVlRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IGlzQ29sdW1uUGlja2VyR3JvdXBJdGVtKGNvbHVtbikgPyBjb2x1bW4ubmFtZSA6IGNvbHVtbixcbiAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb2x1bW5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0dyb3VwVHJlZU5vZGVFeHBhbmRlZChncm91cE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBncm91cFRyZWVOb2RlID0gdGhpcy5ncm91cHMuZmluZChncm91cCA9PiBncm91cC5uYW1lID09PSBncm91cE5hbWUpO1xuICAgICAgICByZXR1cm4gZ3JvdXBUcmVlTm9kZSA/IGdyb3VwVHJlZU5vZGUuZXhwYW5kZWQgOiBmYWxzZTtcbiAgICB9XG59XG4iXX0=