UNPKG

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
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==