ms-data-grid
Version:
A powerful, customizable Angular data grid component with advanced features like sorting, filtering, pagination, column pinning, and taskbar actions. Perfect for enterprise applications.
143 lines • 17.2 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class SplitColumnsService {
prepareColumns(columns, containerWidth) {
const left = [];
const center = [];
const right = [];
for (const col of columns) {
if (col.children?.length) {
const leftChildren = [];
const centerChildren = [];
const rightChildren = [];
for (const child of col.children) {
if (child.is_visible === false)
continue;
const pinned = child.pinned ?? col.pinned ?? null;
const childWithPinned = { ...child, pinned };
if (pinned === 'left')
leftChildren.push(childWithPinned);
else if (pinned === 'right')
rightChildren.push(childWithPinned);
else
centerChildren.push(childWithPinned);
}
if (leftChildren.length) {
left.push({ header: col.header, children: leftChildren, id: col?.id || col?._id });
}
if (centerChildren.length) {
center.push({
header: col.header,
children: centerChildren,
id: col.id || col._id,
});
}
if (rightChildren.length) {
right.push({
header: col.header,
children: rightChildren,
id: col.id || col._id,
});
}
}
else if (col.is_visible !== false) {
const pinned = col.pinned ?? null;
if (pinned === 'left')
left.push(col);
else if (pinned === 'right')
right.push(col);
else
center.push(col);
}
}
return { left, center, right };
}
setColumnsQuery(columns) {
for (const col of columns) {
// if (col.children?.length) {
// for (const child of col.children) {
// if (!child?.query?.firt_value && !child?.query?._ids?.length) {
// child['query'] = {
// first_condition: 'contain',
// first_value: null,
// condition: 'none',
// second_condition: 'contain',
// second_value: null,
// _ids: [],
// };
// }
// }
// }
// if (!col?.query?.firt_value && !col?.query?._ids?.length) {
// col.query = {
// first_condition: 'contain',
// first_value: null,
// condition: 'none',
// second_condition: 'contain',
// second_value: null,
// _ids: [],
// };
// }
}
console.log('Updated Columns: ', columns);
return columns;
}
assignDefaultWidths(columns, containerWidth) {
const visibleLeafCols = this.getVisibleLeafColumns(columns);
if (!visibleLeafCols.length)
return columns;
let defaultWidth = Math.floor(containerWidth / visibleLeafCols.length);
if (defaultWidth < 80)
defaultWidth = 80;
const cloneColumns = (cols) => cols.map((col) => {
if (col.children?.length) {
const newChildren = col.children.map((child) => {
// If visible → dynamic default width
// If invisible → fixed 150px
if (!child.width) {
if (child.is_visible === false) {
return { ...child, width: 150 };
}
else {
return { ...child, width: defaultWidth };
}
}
return { ...child };
});
return { ...col, children: newChildren };
}
if (!col.width) {
if (col.is_visible === false) {
return { ...col, width: 150 };
}
else {
return { ...col, width: defaultWidth };
}
}
return { ...col };
});
return cloneColumns(columns);
}
getVisibleLeafColumns(columns) {
const result = [];
for (const col of columns) {
if (col.children?.length) {
const visibleChildren = col.children.filter((c) => c.is_visible !== false);
result.push(...visibleChildren);
}
else if (col.is_visible !== false) {
result.push(col);
}
}
return result;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SplitColumnsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SplitColumnsService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SplitColumnsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtY29sdW1ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvc2VydmljZXMvc3BsaXQtY29sdW1ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsY0FBYyxDQUFDLE9BQWMsRUFBRSxjQUFzQjtRQUNuRCxNQUFNLElBQUksR0FBVSxFQUFFLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQVUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFVLEVBQUUsQ0FBQztRQUV4QixLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRTtZQUN6QixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixNQUFNLFlBQVksR0FBVSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sY0FBYyxHQUFVLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxhQUFhLEdBQVUsRUFBRSxDQUFDO2dCQUVoQyxLQUFLLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7b0JBQ2hDLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxLQUFLO3dCQUFFLFNBQVM7b0JBRXpDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7b0JBQ2xELE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBRTdDLElBQUksTUFBTSxLQUFLLE1BQU07d0JBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzt5QkFDckQsSUFBSSxNQUFNLEtBQUssT0FBTzt3QkFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDOzt3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LFFBQVEsQ0FBQyxNQUFNLENBQ3pDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FDbkMsQ0FBQztnQkFDRixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7YUFDakM7aUJBQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRTtnQkFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsQjtTQUNGO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzsrR0E3SVUsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGxpdENvbHVtbnNTZXJ2aWNlIHtcclxuICBwcmVwYXJlQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSwgY29udGFpbmVyV2lkdGg6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCBsZWZ0OiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3QgY2VudGVyOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3QgcmlnaHQ6IGFueVtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xyXG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBsZWZ0Q2hpbGRyZW46IGFueVtdID0gW107XHJcbiAgICAgICAgY29uc3QgY2VudGVyQ2hpbGRyZW46IGFueVtdID0gW107XHJcbiAgICAgICAgY29uc3QgcmlnaHRDaGlsZHJlbjogYW55W10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjb2wuY2hpbGRyZW4pIHtcclxuICAgICAgICAgIGlmIChjaGlsZC5pc192aXNpYmxlID09PSBmYWxzZSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgY29uc3QgcGlubmVkID0gY2hpbGQucGlubmVkID8/IGNvbC5waW5uZWQgPz8gbnVsbDtcclxuICAgICAgICAgIGNvbnN0IGNoaWxkV2l0aFBpbm5lZCA9IHsgLi4uY2hpbGQsIHBpbm5lZCB9O1xyXG5cclxuICAgICAgICAgIGlmIChwaW5uZWQgPT09ICdsZWZ0JykgbGVmdENoaWxkcmVuLnB1c2goY2hpbGRXaXRoUGlubmVkKTtcclxuICAgICAgICAgIGVsc2UgaWYgKHBpbm5lZCA9PT0gJ3JpZ2h0JykgcmlnaHRDaGlsZHJlbi5wdXNoKGNoaWxkV2l0aFBpbm5lZCk7XHJcbiAgICAgICAgICBlbHNlIGNlbnRlckNoaWxkcmVuLnB1c2goY2hpbGRXaXRoUGlubmVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsZWZ0Q2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZWZ0LnB1c2goeyBoZWFkZXI6IGNvbC5oZWFkZXIsIGNoaWxkcmVuOiBsZWZ0Q2hpbGRyZW4sIGlkOiBjb2w/LmlkIHx8IGNvbD8uX2lkIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2VudGVyQ2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjZW50ZXIucHVzaCh7XHJcbiAgICAgICAgICAgIGhlYWRlcjogY29sLmhlYWRlcixcclxuICAgICAgICAgICAgY2hpbGRyZW46IGNlbnRlckNoaWxkcmVuLFxyXG4gICAgICAgICAgICBpZDogY29sLmlkIHx8IGNvbC5faWQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJpZ2h0Q2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByaWdodC5wdXNoKHtcclxuICAgICAgICAgICAgaGVhZGVyOiBjb2wuaGVhZGVyLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogcmlnaHRDaGlsZHJlbixcclxuICAgICAgICAgICAgaWQ6IGNvbC5pZCB8fCBjb2wuX2lkLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbC5pc192aXNpYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHBpbm5lZCA9IGNvbC5waW5uZWQgPz8gbnVsbDtcclxuICAgICAgICBpZiAocGlubmVkID09PSAnbGVmdCcpIGxlZnQucHVzaChjb2wpO1xyXG4gICAgICAgIGVsc2UgaWYgKHBpbm5lZCA9PT0gJ3JpZ2h0JykgcmlnaHQucHVzaChjb2wpO1xyXG4gICAgICAgIGVsc2UgY2VudGVyLnB1c2goY29sKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IGxlZnQsIGNlbnRlciwgcmlnaHQgfTtcclxuICB9XHJcblxyXG4gIHNldENvbHVtbnNRdWVyeShjb2x1bW5zOiBhbnlbXSkge1xyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xyXG4gICAgICAvLyBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgLy8gICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbikge1xyXG4gICAgICAvLyAgICAgaWYgKCFjaGlsZD8ucXVlcnk/LmZpcnRfdmFsdWUgJiYgIWNoaWxkPy5xdWVyeT8uX2lkcz8ubGVuZ3RoKSB7XHJcbiAgICAgIC8vICAgICAgIGNoaWxkWydxdWVyeSddID0ge1xyXG4gICAgICAvLyAgICAgICAgIGZpcnN0X2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxyXG4gICAgICAvLyAgICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxyXG4gICAgICAvLyAgICAgICAgIGNvbmRpdGlvbjogJ25vbmUnLFxyXG4gICAgICAvLyAgICAgICAgIHNlY29uZF9jb25kaXRpb246ICdjb250YWluJyxcclxuICAgICAgLy8gICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGwsXHJcbiAgICAgIC8vICAgICAgICAgX2lkczogW10sXHJcbiAgICAgIC8vICAgICAgIH07XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmICghY29sPy5xdWVyeT8uZmlydF92YWx1ZSAmJiAhY29sPy5xdWVyeT8uX2lkcz8ubGVuZ3RoKSB7XHJcbiAgICAgIC8vICAgY29sLnF1ZXJ5ID0ge1xyXG4gICAgICAvLyAgICAgZmlyc3RfY29uZGl0aW9uOiAnY29udGFpbicsXHJcbiAgICAgIC8vICAgICBmaXJzdF92YWx1ZTogbnVsbCxcclxuICAgICAgLy8gICAgIGNvbmRpdGlvbjogJ25vbmUnLFxyXG4gICAgICAvLyAgICAgc2Vjb25kX2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxyXG4gICAgICAvLyAgICAgc2Vjb25kX3ZhbHVlOiBudWxsLFxyXG4gICAgICAvLyAgICAgX2lkczogW10sXHJcbiAgICAgIC8vICAgfTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdVcGRhdGVkIENvbHVtbnM6ICcsIGNvbHVtbnMpO1xyXG5cclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgIGFzc2lnbkRlZmF1bHRXaWR0aHMoY29sdW1uczogYW55W10sIGNvbnRhaW5lcldpZHRoOiBudW1iZXIpOiBhbnlbXSB7XHJcbiAgY29uc3QgdmlzaWJsZUxlYWZDb2xzID0gdGhpcy5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoY29sdW1ucyk7XHJcblxyXG4gIGlmICghdmlzaWJsZUxlYWZDb2xzLmxlbmd0aCkgcmV0dXJuIGNvbHVtbnM7XHJcblxyXG4gIGxldCBkZWZhdWx0V2lkdGggPSBNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoIC8gdmlzaWJsZUxlYWZDb2xzLmxlbmd0aCk7XHJcbiAgaWYgKGRlZmF1bHRXaWR0aCA8IDgwKSBkZWZhdWx0V2lkdGggPSA4MDtcclxuXHJcbiAgY29uc3QgY2xvbmVDb2x1bW5zID0gKGNvbHM6IGFueVtdKTogYW55W10gPT5cclxuICAgIGNvbHMubWFwKChjb2wpID0+IHtcclxuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3Q2hpbGRyZW4gPSBjb2wuY2hpbGRyZW4ubWFwKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyBJZiB2aXNpYmxlIOKGkiBkeW5hbWljIGRlZmF1bHQgd2lkdGhcclxuICAgICAgICAgIC8vIElmIGludmlzaWJsZSDihpIgZml4ZWQgMTUwcHhcclxuICAgICAgICAgIGlmICghY2hpbGQud2lkdGgpIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLmlzX3Zpc2libGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uY2hpbGQsIHdpZHRoOiAxNTAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5jaGlsZCwgd2lkdGg6IGRlZmF1bHRXaWR0aCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5jaGlsZCB9O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4geyAuLi5jb2wsIGNoaWxkcmVuOiBuZXdDaGlsZHJlbiB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWNvbC53aWR0aCkge1xyXG4gICAgICAgIGlmIChjb2wuaXNfdmlzaWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLmNvbCwgd2lkdGg6IDE1MCB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5jb2wsIHdpZHRoOiBkZWZhdWx0V2lkdGggfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7IC4uLmNvbCB9O1xyXG4gICAgfSk7XHJcblxyXG4gIHJldHVybiBjbG9uZUNvbHVtbnMoY29sdW1ucyk7XHJcbn1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYW55W10ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcclxuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdmlzaWJsZUNoaWxkcmVuID0gY29sLmNoaWxkcmVuLmZpbHRlcihcclxuICAgICAgICAgIChjOiBhbnkpID0+IGMuaXNfdmlzaWJsZSAhPT0gZmFsc2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnZpc2libGVDaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sLmlzX3Zpc2libGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goY29sKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==