UNPKG

@progress/kendo-angular-excel-export

Version:

Kendo UI for Angular Excel Export component

133 lines (132 loc) 4.52 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ const compileTemplate = (templateRef, context, updateContext) => { let embeddedView = templateRef.createEmbeddedView(context); const result = (data) => { updateContext(context, data); embeddedView.detectChanges(); return embeddedView.rootNodes.reduce((content, rootNode) => { return content + rootNode.textContent; }, '').trim(); }; result.destroy = () => { embeddedView.destroy(); embeddedView = null; }; return result; }; const updateGroupHeaderContext = (context, data) => { context.$implicit = context.group = data; context.field = data.field; context.value = data.value; context.aggregates = data.aggregates; }; const updateGroupFooterContext = (context, data) => { context.group = data.group; context.$implicit = context.aggregates = data; }; const updateFooterContext = (context, data) => { context.aggregates = data.aggregates; }; /** * @hidden */ export const toExporterColumns = (sourceColumns) => { const exporterColumns = []; let columnIndex = 0; const addColumns = (columns, result, level) => { columns.forEach((column) => { if (column.level === level) { const exporterColumn = new ExporterColumn(column, columnIndex); result.push(exporterColumn); if (column.children && column.children.some(c => c !== column)) { const children = exporterColumn.columns = []; addColumns(column.children, children, level + 1); } else { columnIndex++; } } }); }; addColumns(sourceColumns, exporterColumns, 0); return exporterColumns; }; /** * @hidden */ export const destroyColumns = (columns) => { if (columns) { columns.forEach(column => { column.destroy(); }); } }; /** * @hidden */ export class ExporterColumn { title; field; hidden; locked; width; columns; groupHeaderTemplate; groupHeaderColumnTemplate; groupFooterTemplate; footerTemplate; headerCellOptions; cellOptions; groupHeaderCellOptions; groupFooterCellOptions; footerCellOptions; constructor(column, columnIndex) { this.title = column.title; this.field = column.field; this.hidden = column.hidden; this.locked = column.locked; this.width = column.width; this.headerCellOptions = column.headerCellOptions; this.cellOptions = column.cellOptions; this.groupHeaderCellOptions = column.groupHeaderCellOptions; this.groupFooterCellOptions = column.groupFooterCellOptions; this.footerCellOptions = column.footerCellOptions; if (column.footerTemplate) { this.footerTemplate = compileTemplate(column.footerTemplate.templateRef, { $implicit: column, column: column, columnIndex: columnIndex }, updateFooterContext); } if (column.groupFooterTemplate) { this.groupFooterTemplate = compileTemplate(column.groupFooterTemplate.templateRef, { column: column, field: column.field }, updateGroupFooterContext); } if (column.groupHeaderTemplate) { this.groupHeaderTemplate = compileTemplate(column.groupHeaderTemplate.templateRef, {}, updateGroupHeaderContext); } if (column.groupHeaderColumnTemplate) { this.groupHeaderColumnTemplate = compileTemplate(column.groupHeaderColumnTemplate.templateRef, {}, updateGroupHeaderContext); } } destroy() { if (this.footerTemplate) { this.footerTemplate.destroy(); } if (this.groupFooterTemplate) { this.groupFooterTemplate.destroy(); } if (this.groupHeaderTemplate) { this.groupHeaderTemplate.destroy(); } if (this.groupHeaderColumnTemplate) { this.groupHeaderColumnTemplate.destroy(); } destroyColumns(this.columns); } }