ngx-t-reports
Version:
Angular module for creating dynamic reports and dashboards. Supports various data sources, custom templates, and real-time updates.
1 lines • 178 kB
Source Map (JSON)
{"version":3,"file":"ngx-t-reports.mjs","sources":["../../../projects/ngx-t-reports/src/lib/components/e-charts/e-charts/e-charts.component.ts","../../../projects/ngx-t-reports/src/lib/components/e-charts/e-charts/e-charts.component.html","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/functions/createPieChart.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/components/grouping-chart/grouping-chart.component.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/components/grouping-chart/grouping-chart.component.html","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/constants/colorCodes.ts","../../../projects/ngx-t-reports/src/types/DocumentSectionConfigurationsInterface.ts","../../../projects/ngx-t-reports/src/lib/shared/functions/isEqual.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/functions/groupedBy.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/store/NgxTMatrixTable-selectors.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/store/NgxTMatrixTable-actions.ts","../../../projects/ngx-t-reports/src/lib/shared/functions/keysToCamelCase.ts","../../../projects/ngx-t-reports/src/lib/shared/functions/tableutills.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/store/NgxTMatrixTable-effects.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/store/ngx-tmatrix-table-store.service.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/ngx-t-matrix-table.component.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/ngx-t-matrix-table.component.html","../../../projects/ngx-t-reports/src/lib/injection-tokens/index.ts","../../../projects/ngx-t-reports/src/lib/components/element-editor/element-editor.component.ts","../../../projects/ngx-t-reports/src/lib/components/element-editor/element-editor.component.html","../../../projects/ngx-t-reports/src/lib/config/ngx-t-matrix-table-config.ts","../../../projects/ngx-t-reports/src/lib/config/Report-inputs.ts","../../../projects/ngx-t-reports/src/lib/services/time-zone-adapter/time-zone-adapter.service.ts","../../../projects/ngx-t-reports/src/lib/components/report-sheet/report-sheet.component.ts","../../../projects/ngx-t-reports/src/lib/components/report-sheet/report-sheet.component.html","../../../projects/ngx-t-reports/src/public-api.ts","../../../projects/ngx-t-reports/src/ngx-t-reports.ts"],"sourcesContent":["\r\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { EChartsOption } from 'echarts';\r\nimport { NgxEchartsModule, provideEchartsCore } from 'ngx-echarts';\r\nimport * as echarts from 'echarts/core';\r\nimport { GridComponent } from 'echarts/components';\r\nimport { CanvasRenderer } from 'echarts/renderers';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n BarChart, BoxplotChart, CandlestickChart, CustomChart, EffectScatterChart,\r\n FunnelChart, GaugeChart, GraphChart, HeatmapChart, LineChart, LinesChart,\r\n MapChart, ParallelChart, PictorialBarChart, PieChart, RadarChart, SankeyChart,\r\n ScatterChart, SunburstChart, ThemeRiverChart, TreeChart, TreemapChart\r\n} from 'echarts/charts';\r\n\r\necharts.use([\r\n BarChart, BoxplotChart, CandlestickChart, CustomChart, EffectScatterChart,\r\n FunnelChart, GaugeChart, GraphChart, HeatmapChart, LineChart, LinesChart,\r\n MapChart, ParallelChart, PictorialBarChart, PieChart, RadarChart, SankeyChart,\r\n ScatterChart, SunburstChart, ThemeRiverChart, TreeChart, TreemapChart,\r\n GridComponent, CanvasRenderer\r\n]);\r\n@Component({\r\n selector: 'app-e-charts',\r\n standalone: true,\r\n imports: [\r\n NgxEchartsModule,\r\n CommonModule\r\n ],\r\n providers: [\r\n provideEchartsCore({ echarts }),\r\n ],\r\n templateUrl: './e-charts.component.html',\r\n styleUrl: './e-charts.component.scss'\r\n})\r\nexport class EChartsComponent implements OnChanges {\r\n @Input() loading!: boolean\r\n @Input() options!: EChartsOption\r\n @Output() chartClick = new EventEmitter<any>();\r\n chartOption: EChartsOption | undefined\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n\r\n if (changes['options']) {\r\n\r\n\r\n\r\n this.chartOption = this.options\r\n\r\n }\r\n\r\n }\r\n\r\n onChartClick(event: any) {\r\n this.chartClick.emit(event);\r\n }\r\n}\r\n","@if (chartOption ) {\r\n<div echarts style=\"height:338px;\" (chartClick)=\"onChartClick($event)\" [options]=\"chartOption\" [loading]=\"loading\"\r\n class=\"chart\"></div>\r\n}","import { EChartsOption } from \"echarts\"\r\n\r\nexport function createADonutChart(id: string, title: string, dataSeries: {\r\n value: number,\r\n name: string\r\n}[]) {\r\n return {\r\n title,\r\n id: id,\r\n chart: {\r\n\r\n toolbox: {\r\n show: true,\r\n feature: {\r\n mark: { show: true },\r\n dataView: { show: true, readOnly: false },\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n\r\n grid: {\r\n top: 100,\r\n },\r\n tooltip: {\r\n trigger: 'item'\r\n },\r\n legend: {\r\n top: '5%',\r\n left: 'center'\r\n },\r\n series:\r\n [{\r\n name: title,\r\n type: 'pie',\r\n radius: ['40%', '70%'],\r\n avoidLabelOverlap: false,\r\n itemStyle: {\r\n borderRadius: 10,\r\n borderColor: '#fff',\r\n borderWidth: 2\r\n },\r\n label: {\r\n show: true\r\n },\r\n emphasis: {\r\n label: {\r\n show: true,\r\n fontSize: '40',\r\n fontWeight: 'bold'\r\n }\r\n },\r\n labelLine: {\r\n lineStyle: {\r\n color: '#235894'\r\n }\r\n },\r\n data: dataSeries\r\n }],\r\n\r\n\r\n\r\n\r\n\r\n }\r\n }\r\n}\r\n\r\nexport function createABarChart(id: string, title: string, dataSeries: {\r\n value: number,\r\n name: string\r\n}[]) {\r\n return {\r\n title,\r\n id,\r\n chart: {\r\n toolbox: {\r\n show: true,\r\n feature: {\r\n mark: { show: true },\r\n dataView: { show: true, readOnly: false },\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n axisPointer: {\r\n type: 'shadow'\r\n }\r\n },\r\n grid: {\r\n left: '3%',\r\n right: '4%',\r\n bottom: '3%',\r\n containLabel: true\r\n },\r\n xAxis: [\r\n {\r\n type: 'category',\r\n data: dataSeries.map(v => v.name),\r\n axisTick: {\r\n alignWithLabel: true\r\n }\r\n }\r\n ],\r\n yAxis: [\r\n {\r\n type: 'value'\r\n }\r\n ],\r\n series: [\r\n\r\n {\r\n name: '',\r\n type: 'bar',\r\n label: {\r\n show: true\r\n },\r\n emphasis: {\r\n label: {\r\n show: true,\r\n fontSize: '40',\r\n fontWeight: 'bold'\r\n }\r\n },\r\n labelLine: {\r\n lineStyle: {\r\n color: '#235894'\r\n }\r\n },\r\n data: dataSeries.map(\r\n (v, index) => ({\r\n ...v,\r\n itemStyle: {\r\n color: getColors(dataSeries.length)[index]\r\n }\r\n })\r\n )\r\n\r\n\r\n }\r\n ],\r\n\r\n },\r\n\r\n }\r\n}\r\nexport function createRoseTypeChart(id: string, title: string, dataSeries: {\r\n value: number,\r\n name: string\r\n}[]) {\r\n return {\r\n title,\r\n id,\r\n chart: {\r\n legend: {\r\n top: 'bottom'\r\n },\r\n toolbox: {\r\n show: true,\r\n feature: {\r\n mark: { show: true },\r\n dataView: { show: true, readOnly: false },\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n series: [\r\n {\r\n name: title,\r\n type: 'pie',\r\n radius: [50, 250],\r\n center: ['50%', '50%'],\r\n roseType: 'area',\r\n itemStyle: {\r\n borderRadius: 8\r\n },\r\n data: dataSeries\r\n }\r\n ]\r\n }\r\n }\r\n}\r\nexport function createAPolarChart(id: string, title: string, dataSeries: {\r\n value: number,\r\n name: string\r\n}[]) {\r\n\r\n return {\r\n title,\r\n id,\r\n chart: {\r\n title: [\r\n {\r\n text: title\r\n }\r\n ],\r\n toolbox: {\r\n show: true,\r\n feature: {\r\n mark: { show: true },\r\n dataView: { show: true, readOnly: false },\r\n restore: { show: true },\r\n saveAsImage: { show: true }\r\n }\r\n },\r\n polar: {\r\n radius: [30, '80%']\r\n },\r\n angleAxis: {\r\n\r\n startAngle: 75\r\n },\r\n radiusAxis: {\r\n type: 'category',\r\n data: dataSeries.map(v => v.name)\r\n },\r\n tooltip: {},\r\n series: {\r\n type: 'bar',\r\n data: dataSeries.map(v => v.value),\r\n coordinateSystem: 'polar',\r\n label: {\r\n show: true,\r\n position: 'middle',\r\n formatter: '{b}: {c}'\r\n }\r\n }\r\n } as EChartsOption\r\n\r\n\r\n }\r\n}\r\nexport const colors = [\r\n '#4285F4',\r\n '#FBBC05',\r\n '#34A853',\r\n '#EA4335',\r\n '#55ACEE',\r\n '#3B5998',\r\n '#7CBB00',\r\n '#00A1F1',\r\n '#7B0099',\r\n '#146EB4'\r\n];\r\n\r\nexport function getColors(n: number) {\r\n const result = [];\r\n for (let i = 0; i < n; i++) {\r\n result.push(colors[i % colors.length]);\r\n }\r\n return result;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n\r\nimport { GroupConfig } from '../../functions/groupedBy';\r\n\r\nimport { createABarChart, createADonutChart, createAPolarChart, createRoseTypeChart } from '../../functions/createPieChart';\r\nimport { EChartsOption } from 'echarts';\r\nimport { DocumentLitsLabelConfigInterface } from '../../../../../types/DocumentSectionConfigurationsInterface';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport { EChartsComponent } from '../../../e-charts/e-charts/e-charts.component';\r\nimport {MatCardModule} from '@angular/material/card';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\n@Component({\r\n selector: 'app-grouping-chart',\r\n standalone: true,\r\n imports: [CommonModule, EChartsComponent,MatCardModule,MatButtonModule,MatIconModule,MatMenuModule],\r\n templateUrl: './grouping-chart.component.html',\r\n styleUrl: './grouping-chart.component.scss'\r\n})\r\nexport class GroupingChartComponent {\r\n @Input() groups: GroupConfig[] = []\r\n @Input() numberProperties: DocumentLitsLabelConfigInterface[] = []\r\n\r\n constructor() {\r\n\r\n }\r\n private cache!: { chart: EChartsOption, title: string, id: string }[]\r\n private lastHash: string | null = null;\r\n\r\n\r\n get totalDistributionPerGroup(): { chart: EChartsOption, title: string, id: string }[] {\r\n // Create a hash or identifier based on the content of the groups to detect changes\r\n const currentHash = JSON.stringify(this.groups);\r\n if (this.lastHash === currentHash && this.cache) {\r\n // If the hash hasn't changed, return the cached result\r\n return this.cache;\r\n }\r\n\r\n // Compute the distribution if data has changed\r\n const result = this.numberProperties?.map((property, index) => ({\r\n title: property.label,\r\n id: index.toString(),\r\n dataSeries: this.groups.map(g => ({\r\n name: g.name,\r\n\r\n value: Number(g.totals?.[property.formControlName] || 0)\r\n\r\n }))\r\n }))\r\n .map(chart => {\r\n const type = this.chartConfig[chart.id]?.chartType || ChartTypes.Donut\r\n if (type === ChartTypes.Donut || !type) {\r\n return createADonutChart(chart.id, chart.title, chart.dataSeries)\r\n }\r\n\r\n if (type === ChartTypes.Bar) {\r\n return createABarChart(chart.id, chart.title, chart.dataSeries)\r\n }\r\n\r\n if (type === ChartTypes.Polar) {\r\n return createAPolarChart(chart.id, chart.title, chart.dataSeries)\r\n }\r\n if (type === ChartTypes.RoseType) {\r\n return createRoseTypeChart(chart.id, chart.title, chart.dataSeries)\r\n }\r\n\r\n return\r\n\r\n\r\n\r\n })\r\n\r\n // Update cache and hash\r\n this.cache = result as any;\r\n this.lastHash = currentHash;\r\n\r\n return result as { chart: EChartsOption, title: string, id: string }[]\r\n }\r\n activeChart: string | undefined\r\n chartConfig: {\r\n [key: string]: {\r\n full: boolean,\r\n chartType: ChartTypes\r\n }\r\n } = {}\r\n isExpanded() {\r\n return this.chartConfig[this.activeChart || '']?.full\r\n }\r\n chatTypesEnum = ChartTypes\r\n chartType() {\r\n return this.chartConfig[this.activeChart || '']?.chartType\r\n }\r\n setChartType(type: ChartTypes) {\r\n if (!this.chartConfig[this.activeChart || '']) {\r\n this.chartConfig[this.activeChart || ''] = {\r\n full: false,\r\n chartType: this.chatTypesEnum.Donut\r\n }\r\n }\r\n if (!this.chartConfig[this.activeChart || '']) return;\r\n this.chartConfig[this.activeChart || '']!['chartType'] = type\r\n this.lastHash = null\r\n }\r\n toggleExpansion() {\r\n const st = !!this.chartConfig[this.activeChart || '']?.full\r\n if (!this.chartConfig[this.activeChart || '']) {\r\n this.chartConfig[this.activeChart || ''] = {\r\n full: false,\r\n chartType: this.chatTypesEnum.Donut\r\n }\r\n }\r\n if (!this.chartConfig[this.activeChart || '']) return;\r\n return this.chartConfig[this.activeChart || '']!.full = !st\r\n }\r\n getChartSize(id: string) {\r\n return this.chartConfig[id]?.full ? '12' : '4'\r\n }\r\n}\r\nexport enum ChartTypes {\r\n Donut = \"donutChart\",\r\n Bar = \"bar\",\r\n Polar = \"polar\",\r\n RoseType = \"roseType\"\r\n\r\n}","<section style=\"background: var(--mat-sys-surface-container);\">\r\n\r\n\r\n <div class=\"row\">\r\n @for (chart of totalDistributionPerGroup||[]; track chart.id) {\r\n <div *ngIf=\"!!chart\" class=\"chart-container\" [class]=\"'col-md-'+getChartSize(chart.id)\">\r\n <mat-card (mouseover)=\"activeChart = chart.id\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n <h4>\r\n {{chart.title}}\r\n <button [matMenuTriggerFor]=\"menu\" style=\"position: absolute;right: 24px;top:24px\"\r\n mat-icon-button>\r\n <mat-icon>\r\n more_vert\r\n </mat-icon>\r\n </button>\r\n </h4>\r\n\r\n </mat-card-title>\r\n\r\n </mat-card-header>\r\n <mat-card-content>\r\n <app-e-charts [options]=\"chart.chart\">\r\n\r\n </app-e-charts>\r\n </mat-card-content>\r\n\r\n </mat-card>\r\n </div>\r\n }\r\n\r\n </div>\r\n</section>\r\n\r\n<mat-menu #menu=\"matMenu\">\r\n <h5> Chart settings </h5>\r\n <button (click)=\"toggleExpansion()\" mat-menu-item>\r\n <mat-icon>{{isExpanded()?'close_fullscreen':'open_in_full'}} </mat-icon>\r\n <span> {{isExpanded()?'Close full view':'View in full size' }}</span>\r\n </button>\r\n <h5> Chart type </h5>\r\n <button (click)=\"setChartType(chatTypesEnum.Donut)\" mat-menu-item>\r\n <mat-icon [color]=\"chartType() ===chatTypesEnum.Donut|| !chartType()?'primary':''\">donut_large</mat-icon>\r\n <span [style.font-weight]=\"chartType() ===chatTypesEnum.Donut|| !chartType()?'bold':''\">Donut chart</span>\r\n </button>\r\n <button (click)=\"setChartType(chatTypesEnum.Bar)\" mat-menu-item>\r\n <mat-icon [color]=\"chartType() ===chatTypesEnum.Bar?'primary':''\">bar_chart</mat-icon>\r\n <span [style.font-weight]=\"chartType() ===chatTypesEnum.Bar?'bold':''\">bar</span>\r\n </button>\r\n <button (click)=\"setChartType(chatTypesEnum.Polar)\" mat-menu-item>\r\n <mat-icon [color]=\"chartType() ===chatTypesEnum.Polar?'primary':''\">radar</mat-icon>\r\n <span [style.font-weight]=\"chartType() ===chatTypesEnum.Bar?'bold':''\">Polar </span>\r\n </button>\r\n <button (click)=\"setChartType(chatTypesEnum.RoseType)\" mat-menu-item>\r\n <mat-icon [color]=\"chartType() ===chatTypesEnum.RoseType?'primary':''\">filter_vintage</mat-icon>\r\n <span [style.font-weight]=\"chartType() ===chatTypesEnum.Bar?'bold':''\">Rose </span>\r\n </button>\r\n\r\n</mat-menu>","export const COLOR_CODES = {\r\n secondary: {\r\n color1: '#FFF5EB', // Very light orange tint (5% of base)\r\n color2: '#FFEBD6', // Light orange tint (10% of base)\r\n color3: '#FFE1C2', // Light-medium orange tint (15% of base)\r\n color4: '#FFD7AD', // Medium orange tint (20% of base)\r\n color5: '#FFCD99', // Medium-deep orange tint (25% of base)\r\n color6: '#FFC285', // Deeper orange tint (30% of base)\r\n color7: '#FFB870', // Even deeper orange tint (35% of base)\r\n color8: '#F68C1E' // Base color\r\n },\r\n blue: {\r\n color1: '#DAE5FC', // Very light tint (5% of base)\r\n color2: '#C0D2F9', // Light tint (10% of base)\r\n color3: '#A6C0F7', // Light-medium tint (15% of base)\r\n color4: '#8DADF5', // Medium tint (20% of base)\r\n color5: '#739BF2', // Medium-deep tint (25% of base)\r\n color6: '#5988F0', // Deeper tint (30% of base)\r\n color7: '#3F76ED', // Even deeper tint (35% of base)\r\n color8: '#2563EB', // Base color\r\n },\r\n green: {\r\n color1: '#ECF2DB', // Very light tint (5% of base)\r\n color2: '#DFE9C2', // Light tint (10% of base)\r\n color3: '#D2E0A9', // Light-medium tint (15% of base)\r\n color4: '#C5D790', // Medium tint (20% of base)\r\n color5: '#B8CE77', // Medium-deep tint (25% of base)\r\n color6: '#ABC55E', // Deeper tint (30% of base)\r\n color7: '#9EBC45', // Even deeper tint (35% of base)\r\n color8: '#91B32C', // Base color\r\n },\r\n\r\n blueviolet: {\r\n color1: '#EBDBFA', // Very light tint (5% of base)\r\n color2: '#DDC2F7', // Light tint (10% of base)\r\n color3: '#CFA9F3', // Light-medium tint (15% of base)\r\n color4: '#C290F0', // Medium tint (20% of base)\r\n color5: '#B477EC', // Medium-deep tint (25% of base)\r\n color6: '#A65DE9', // Deeper tint (30% of base)\r\n color7: '#9844E5', // Even deeper tint (35% of base)\r\n color8: '#8A2BE2', // Base color\r\n },\r\n red: {\r\n color1: '#FDE5E1', // Very light tint (5% of base)\r\n color2: '#FBD3CB', // Light tint (10% of base)\r\n color3: '#FAC1B6', // Light-medium tint (15% of base)\r\n color4: '#F8AFA1', // Medium tint (20% of base)\r\n color5: '#F79D8B', // Medium-deep tint (25% of base)\r\n color6: '#F58A76', // Deeper tint (30% of base)\r\n color7: '#F47860', // Even deeper tint (35% of base)\r\n color8: '#F2664B', // Base color\r\n },\r\n purple: {\r\n color1: '#E5DDEE', // Very light tint (5% of base)\r\n color2: '#D3C4E2', // Light tint (10% of base)\r\n color3: '#C1ACD6', // Light-medium tint (15% of base)\r\n color4: '#AF94C9', // Medium tint (20% of base)\r\n color5: '#9D7CBD', // Medium-deep tint (25% of base)\r\n color6: '#8A63B1', // Deeper tint (30% of base)\r\n color7: '#784BA5', // Even deeper tint (35% of base)\r\n color8: '#663399', // Base color\r\n },\r\n // Spectrum Harmony - Best for business applications and financial data\r\n spectrumHarmony: {\r\n color1: '#E3F2FD', // Light blue - first level\r\n color2: '#BBDEFB', // Slightly deeper blue\r\n color3: '#DCEDC8', // Light green - second level\r\n color4: '#C5E1A5', // Slightly deeper green\r\n color5: '#FFF9C4', // Light yellow - third level\r\n color6: '#FFECB3', // Light amber - fourth level\r\n color7: '#FFE082', // Medium amber\r\n color8: '#FFCCBC' // Light red/orange - fifth level\r\n },\r\n\r\n // Vibrant Distinction - Best for complex hierarchical data requiring quick differentiation\r\n vibrantDistinction: {\r\n color1: '#E8F5E9', // Mint green - first level\r\n color2: '#C8E6C9', // Medium mint\r\n color3: '#E1F5FE', // Light blue - second level\r\n color4: '#B3E5FC', // Medium light blue\r\n color5: '#F3E5F5', // Lavender - third level\r\n color6: '#FFF8E1', // Light amber - fourth level\r\n color7: '#FFECB3', // Medium amber\r\n color8: '#FFEBEE' // Light pink - fifth level\r\n },\r\n\r\n // Natural Progression - Best for environmental data and science applications\r\n naturalProgression: {\r\n color1: '#E0F7FA', // Light cyan - first level\r\n color2: '#B2EBF2', // Medium cyan\r\n color3: '#C8E6C9', // Light green - second level\r\n color4: '#A5D6A7', // Medium green\r\n color5: '#F0F4C3', // Light lime - third level\r\n color6: '#FFE0B2', // Light orange - fourth level\r\n color7: '#FFCC80', // Medium orange\r\n color8: '#FFCDD2' // Light red - fifth level\r\n },\r\n\r\n // Colorblind-Friendly - Best for accessibility-focused and public-facing applications\r\n colorblindFriendly: {\r\n color1: '#F5F5F5', // Light gray - first level\r\n color2: '#E0E0E0', // Medium light gray\r\n color3: '#BBDEFB', // Light blue - second level\r\n color4: '#90CAF9', // Medium light blue\r\n color5: '#FFECB3', // Light amber - third level\r\n color6: '#C8E6C9', // Light green - fourth level\r\n color7: '#A5D6A7', // Medium green\r\n color8: '#E1BEE7' // Light purple - fifth level\r\n },\r\n\r\n // Corporate Structure - Best for formal reports and corporate environments\r\n corporateStructure: {\r\n color1: '#ECEFF1', // Very light blue-gray - first level\r\n color2: '#CFD8DC', // Light blue-gray - second level\r\n color3: '#B0BEC5', // Medium blue-gray - third level\r\n color4: '#90A4AE', // Medium-dark blue-gray - fourth level\r\n color5: '#78909C', // Dark blue-gray - fifth level\r\n color6: '#607D8B', // Deeper blue-gray\r\n color7: '#546E7A', // Very dark blue-gray\r\n color8: '#455A64' // Extremely dark blue-gray\r\n }\r\n};\r\n\r\n// You can implement a function to get random color codes similar to the original example\r\nlet colorDeck: any[] = [];\r\n\r\nexport const randomColorCode = () => {\r\n // If the deck is empty, refill and shuffle it\r\n if (colorDeck.length === 0) {\r\n colorDeck = [...Object.values(COLOR_CODES)];\r\n\r\n // Fisher-Yates shuffle algorithm\r\n for (let i = colorDeck.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [colorDeck[i], colorDeck[j]] = [colorDeck[j], colorDeck[i]];\r\n }\r\n }\r\n\r\n // Take the top color from our shuffled deck\r\n return colorDeck.pop();\r\n};","export enum SectionTypeGroups {\r\n Transactions = 'transactions',\r\n Processes = 'processes',\r\n System = 'system',\r\n FormPreview = \"formPreview\",\r\n Home = \"home\",\r\n Transaction = \"transaction\",\r\n Report = \"Report\"\r\n}\r\n\r\nexport interface DocumentSectionConfigurationsInterface {\r\n sectionTitle: string;\r\n icon: string;\r\n getSectionList:\r\n {\r\n submissionId: string;\r\n httpEndPoint: string\r\n }\r\n documentDetailsConfig?: {\r\n title: string;\r\n };\r\n sectionGroup: SectionTypeGroups\r\n docuListConfig?: DocumentLitsConfigInterface\r\n\r\n\r\n}\r\nexport interface DocumentLitsConfigInterface {\r\n\r\n segments: any[];\r\n activeSegment: string;\r\n labelConfiguration: DocumentLitsLabelConfigInterface[]\r\n\r\n}\r\nexport enum DocumentLitsLabelConfigInterfaceValueType {\r\n currency = 'currency',\r\n number = 'number',\r\n string = 'string',\r\n date = 'date',\r\n daysAgo = 'daysAgo',\r\n systemReference = 'systemReference'\r\n}\r\nexport interface DocumentLitsLabelConfigInterface {\r\n label: string;\r\n formControlName: string;\r\n isHidden?: boolean;\r\n stepName: string | null;\r\n valueType: DocumentLitsLabelConfigInterfaceValueType\r\n}\r\n\r\nexport interface GridListLabelConfigInterface {\r\n labelConfiguration: DocumentLitsLabelConfigInterface[]\r\n}","/**\r\n * Compares previous and current objects, returning only properties that changed.\r\n * - Properties in prev but not in current: set to undefined\r\n * - Properties in current but not in prev: included with current value\r\n * - Properties in both with different values: included with current value\r\n * \r\n * @example\r\n * // prev = {a: 8, b: 0}, current = {b: 5}\r\n * // result = {b: 5, a: undefined}\r\n */\r\nexport function getChangedProperties<T extends Record<string, any>>(\r\n prevPassed: T | null | undefined, \r\n currentPassed: T | null | undefined\r\n ): Partial<T> {\r\n // Handle edge cases\r\n // remove undefined in prev \r\n const prev = prevPassed ? Object.keys(prevPassed).reduce((acc, key) => {\r\n if (prevPassed[key] !== undefined) {\r\n (acc as any)[key] = prevPassed[key];\r\n }\r\n return acc;\r\n }, {} as Partial<T>) : undefined;\r\n // remove undefined in current\r\n const current = currentPassed ? Object.keys(currentPassed).reduce((acc, key) => {\r\n if (currentPassed[key] !== undefined) {\r\n (acc as any)[key] = currentPassed[key];\r\n }\r\n return acc;\r\n }, {} as Partial<T>) : undefined;\r\n // if both are undefined return empty object\r\n\r\n if (!prev && !current) return {};\r\n if (!prev) return { ...current } as Partial<T>;\r\n if (!current) {\r\n return Object.keys(prev).reduce((acc, key) => {\r\n (acc as any)[key] = undefined;\r\n return acc;\r\n }, {} as Partial<T>);\r\n }\r\n \r\n const changedProperties: Partial<T> = {};\r\n \r\n // Check properties from prev\r\n for (const key in prev) {\r\n if (!(key in current)) {\r\n // Property removed in current\r\n changedProperties[key] = undefined;\r\n } else if (!_isEqual(prev[key], current[key])) {\r\n // Property value changed\r\n changedProperties[key] = current[key];\r\n }\r\n }\r\n \r\n // Check for new properties in current\r\n for (const key in current) {\r\n if (!(key in prev)) {\r\n // New property added\r\n changedProperties[key] = current[key];\r\n }\r\n }\r\n \r\n return changedProperties;\r\n }\r\n \r\nexport function _isEqual(prev: any, next: any): boolean {\r\n if (prev === next) return true;\r\n\r\n const prevType = typeof prev;\r\n const nextType = typeof next;\r\n\r\n if (prevType !== nextType) return false;\r\n\r\n if (prevType === 'number') {\r\n return (prev === next) || (Number.isNaN(prev) && Number.isNaN(next));\r\n }\r\n\r\n if (prevType === 'string' || prevType === 'boolean') {\r\n return prev === next;\r\n }\r\n\r\n if (Array.isArray(prev) && Array.isArray(next)) {\r\n if (prev.length !== next.length) return false;\r\n for (let i = 0; i < prev.length; i++) {\r\n if (!_isEqual(prev[i], next[i])) return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (prevType === 'object' && prev !== null && next !== null) {\r\n const prevConstructor = prev.constructor;\r\n const nextConstructor = next.constructor;\r\n\r\n if (prevConstructor !== nextConstructor) return false;\r\n\r\n if (prevConstructor === Date) {\r\n return prev.getTime() === next.getTime();\r\n }\r\n\r\n if (prevConstructor === RegExp) {\r\n return prev.source === next.source && prev.flags === next.flags;\r\n }\r\n\r\n const prevKeys = Object.keys(prev);\r\n const nextKeys = Object.keys(next);\r\n\r\n if (prevKeys.length !== nextKeys.length) return false;\r\n\r\n for (const key of prevKeys) {\r\n if (!Object.prototype.hasOwnProperty.call(next, key)) return false;\r\n if (!_isEqual(prev[key], next[key])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return prev === null && next === null;\r\n}","import { DocumentLitsLabelConfigInterface } from \"../../../../types/DocumentSectionConfigurationsInterface\";\r\n\r\n\r\nexport interface GroupConfig {\r\n name: string;\r\n propertyLabel: string;\r\n IS_GROUP_CONFIG: boolean;\r\n LEVELS_BEFORE:number[]\r\n IS_CLOSED: boolean;\r\n level: number;\r\n totals?: {\r\n [key: string]: number\r\n\r\n },\r\n realTotal?: {\r\n [key: string]: number\r\n\r\n },\r\n}\r\nexport function groupData(items: any[], keys: string[], level: number = 0): Map<any, any> {\r\n if (keys.length === 0) return new Map([[level, items]]); // No more keys, return items wrapped in a Map\r\n\r\n const key = keys[0];\r\n if(!key) return new Map([[level, items]]);\r\n const restKeys = keys.slice(1);\r\n const grouped = new Map();\r\n \r\n for (const item of items) {\r\n const keyValue = item[key];\r\n \r\n if (!grouped.has(keyValue)) {\r\n grouped.set(keyValue, []);\r\n }\r\n \r\n grouped.get(keyValue).push(item);\r\n }\r\n\r\n if (restKeys.length > 0) {\r\n grouped.forEach((value, key) => { \r\n grouped.set(key, groupData(value, restKeys, level + 1));\r\n });\r\n }\r\n\r\n return grouped;\r\n}\r\n\r\nexport function matrixTableGroupedData(\r\n array: any[],\r\n propertyName: string[],\r\n closedGroups: string[],\r\n listConfig: DocumentLitsLabelConfigInterface[]\r\n): Array<GroupConfig | { [key: string]: any }> {\r\n // Use a Map to handle grouping which can be more efficient for lookups and updates\r\n const numberProperties = listConfig.filter((config) => config.valueType === 'number'\r\n || config.valueType === 'currency').map((config) => config.formControlName)\r\n const noneEmptyPropertyNames = propertyName.filter(n=> !!n&&(n.length>0));\r\n const noneEmptyArray = array.filter(a=>!!a && Object.keys(a).length>0)\r\n const groupedData = groupData(noneEmptyArray, noneEmptyPropertyNames);\r\n const result = flattenGroupedData(groupedData, propertyName);\r\n return result\r\n\r\n\r\n function getSums(data: any[]) {\r\n if (!Array.isArray(data)) {\r\n return {}\r\n }\r\n const sums: any = {\r\n IS_SUM_ROW: true\r\n }\r\n numberProperties.forEach((property) => {\r\n sums[property] = `${data.reduce((acc, item) => acc + Number(item[property] || 0), 0)}`\r\n })\r\n return sums\r\n }\r\n function flattenGroupedData(grouped: Map<any, any>, keys: string[], currentLevel = 0): any[] {\r\n let result: any[] = [];\r\n if (keys.length === currentLevel) {\r\n return Array.from(grouped.values()).flat();\r\n }\r\n\r\n grouped.forEach((value, key) => {\r\n\r\n const isClosed = closedGroups.includes(key);\r\n let _data = []\r\n\r\n _data = flattenGroupedData(value, keys, currentLevel + 1)\r\n\r\n const objectProperty = propertyName[currentLevel]\r\n const propertyConfig = listConfig.find(l => l.formControlName === objectProperty)\r\n const groupConfig: GroupConfig = {\r\n name: key,\r\n propertyLabel: propertyConfig?.label || objectProperty || '',\r\n IS_GROUP_CONFIG: true,\r\n LEVELS_BEFORE:Array.from({ length: currentLevel }, (_, i) => i + 1),\r\n level: currentLevel,\r\n totals: getSums(_data),\r\n IS_CLOSED: isClosed\r\n\r\n };\r\n \r\n result.push(groupConfig);\r\n result = result.concat(isClosed ? [] : _data)\r\n\r\n\r\n });\r\n return result;\r\n }\r\n\r\n}\r\n\r\n\r\n","import { combineLatest, map, Observable } from \"rxjs\";\r\nimport { NgxTMatrixTableStoreService } from \"./ngx-tmatrix-table-store.service\";\r\nimport { matrixTableGroupedData } from \"../functions/groupedBy\";\r\nimport { IDocumentListConfigLocal } from \"../../../../types/IMatrixTableState\";\r\n\r\nexport function NgxTMatrixTableStoreSelectors(store: NgxTMatrixTableStoreService) {\r\n const state$ = store.select(state => state);\r\n const reportName$ = store.select(state => state.reportName);\r\n const list$ = store.select(state => state.list);\r\n const listConfig$ = store.select(state => state.listConfig);\r\n const aggregates$ = store.select(state => state.aggregates);\r\n const groupOptions$ = store.select(state => state.groupOptions);\r\n const closedGroups$ = store.select(state => state.closedGroups);\r\n const isOpen$ = store.select(state => state.isOpen);\r\n const groupChart$ = store.select(state => state.groupChart);\r\n const draggedGroup$ = store.select(state => state.draggedGroup);\r\n const scrollIndex$ = store.select(state => state.scrollIndex);\r\n\r\n const tableColumns$:Observable<IDocumentListConfigLocal[] | null | undefined> = listConfig$\r\n let itemsToDisplay = 0\r\n combineLatest(\r\n [\r\n groupOptions$,\r\n listConfig$\r\n ]\r\n )\r\n .pipe(\r\n map(([\r\n groupOptions,\r\n listConfig\r\n \r\n \r\n ]) => (\r\n [{formControlName: 'tree',label: ''}, ...listConfig || []] as any)\r\n .filter((col: any) => !col.isHidden).map(\r\n (col: any) =>({\r\n ...col,\r\n INCLUDED_IN_GROUP:Boolean(groupOptions?.columns?.includes(col.formControlName))\r\n })\r\n )\r\n \r\n )\r\n )\r\n const displayedColumns$ = tableColumns$.pipe(\r\n map(tableColumns => tableColumns?.map((config: any) => config.formControlName) || [])\r\n )\r\n const groupLabelConfig$ = groupOptions$.pipe(\r\n map(groupOptions => groupOptions?.columns?.map((col, index) => ({ level: index, formControlName: index.toString(), label: '' })) || [])\r\n )\r\n const getGroupedData$ = combineLatest(\r\n [list$,\r\n listConfig$,\r\n groupOptions$,\r\n closedGroups$,\r\n scrollIndex$]\r\n ).pipe(\r\n map(\r\n ([list,listConfig,groupOptions, closedGroups,scrollIndex]) => {\r\n const groupBy = groupOptions?.columns || [];\r\n const data = matrixTableGroupedData(list || [], groupBy, closedGroups, listConfig || []);\r\n const filteredData = data.filter(d => !(d.name === undefined && d.IS_GROUP_CONFIG))\r\n const numberOfFilteredItems = filteredData.length;\r\n const pageSize = 100; // Define your desired multiple\r\n \r\n if (numberOfFilteredItems === 0) {\r\n return filteredData.slice(0, 0);\r\n }\r\n if(scrollIndex <= pageSize){\r\n return filteredData.slice(0, pageSize);\r\n }\r\n itemsToDisplay = Math.ceil((scrollIndex + 1) / pageSize) * pageSize\r\n \r\n return filteredData.slice(0, itemsToDisplay )\r\n \r\n }\r\n )\r\n )\r\n const groupedColumns$ = combineLatest(\r\n [\r\n groupOptions$,\r\n listConfig$\r\n ]\r\n ).pipe(\r\n map(([\r\n groupOptions,\r\n listConfig\r\n ]) => \r\n (groupOptions?.columns?.filter((col) => !groupOptions.hiddenColumns?.includes(col)) || []).map(\r\n groupCol=>({\r\n formControlName:groupCol,\r\n label:listConfig?.find((config) => config.formControlName === groupCol)?.label || ''\r\n })\r\n )\r\n \r\n\r\n \r\n \r\n )\r\n )\r\n return {\r\n state$,\r\n reportName$,\r\n list$,\r\n listConfig$,\r\n closedGroups$,\r\n isOpen$,\r\n aggregates$,\r\n groupOptions$,\r\n tableColumns$,\r\n displayedColumns$,\r\n groupLabelConfig$,\r\n getGroupedData$ ,\r\n groupedColumns$ ,\r\n groupChart$ ,\r\n draggedGroup$,\r\n scrollIndex$ \r\n\r\n }\r\n}","import { DocumentLitsLabelConfigInterface } from \"ngx-t-forms-types\";\r\nimport { NgxTMatrixTableStoreService } from \"./ngx-tmatrix-table-store.service\";\r\nimport { GroupSettingsModel } from \"../interface/GroupSettingsModel\";\r\nimport { _isEqual } from \"../../../shared/functions/isEqual\";\r\nimport { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\r\nimport { GroupChartConfig } from \"../ngx-t-matrix-table.component\";\r\n\r\nexport function NgxTMatrixTableStoreActions(store:NgxTMatrixTableStoreService) {\r\n \r\n return {\r\n setReportName: store.updater((state, reportName: string | null) => ({\r\n ...state,\r\n reportName\r\n })),\r\n \r\n setList: store.updater((state, list: any[] | null) => ({\r\n ...state,\r\n list\r\n })),\r\n\r\n setListConfig: store.updater((state, listConfig: DocumentLitsLabelConfigInterface[] | null | undefined) => ({\r\n ...state,\r\n listConfig\r\n })),\r\n\r\n setAggregates: store.updater((state, aggregates: DocumentLitsLabelConfigInterface[] | null) => ({\r\n ...state,\r\n aggregates\r\n })),\r\n\r\n setGroupOptions: store.updater((state, groupOptions: GroupSettingsModel | null) => ({\r\n ...state,\r\n groupOptions\r\n })),\r\n toggleMenu: store.updater((state, row: any) => ({\r\n ...state,\r\n isOpen:_isEqual(state.isOpen, row) ? undefined : row\r\n })),\r\n setGroupChart: store.updater((state, groupChart: GroupChartConfig | null) => ({\r\n ...state,\r\n groupChart\r\n })),\r\n setDraggedGroup : store.updater((state, draggedGroup: string) => ({\r\n ...state,\r\n draggedGroup\r\n })),\r\n setScrollIndex: store.updater((state, scrollIndex: number) => ({\r\n ...state,\r\n scrollIndex\r\n })),\r\n toggleCloseGroup: store.updater((state, name: any) => {\r\n const closedGroups = state.closedGroups || [];\r\n const isClosed = closedGroups.includes(name);\r\n return {\r\n ...state,\r\n closedGroups: isClosed ? closedGroups.filter(g => g !== name) : [...closedGroups, name]\r\n };\r\n }),\r\n removeGroupColumn: store.updater((state, columnName: string) => {\r\n return {\r\n ...state,\r\n groupOptions: state.groupOptions ? {\r\n ...state.groupOptions,\r\n columns: state.groupOptions.columns?.filter((col) => col !== columnName)\r\n } : null\r\n }\r\n }),\r\n dropGroupColumn: store.updater((state) => {\r\n const newGroup = state.draggedGroup\r\n const doesNotInclude = !state.groupOptions?.columns?.includes(newGroup || '');\r\n if (doesNotInclude && newGroup !== undefined && newGroup !== '') {\r\n return {\r\n ...state,\r\n groupOptions: {\r\n ...state.groupOptions,\r\n columns: [...(state.groupOptions?.columns || []), newGroup]\r\n }\r\n }\r\n }\r\n return state\r\n }),\r\n dropGroupingToSortGroups: store.updater((state, event: CdkDragDrop<string[]>) => {\r\n const newColumns = [...(state.groupOptions?.columns || [])];\r\n moveItemInArray(newColumns, event.previousIndex, event.currentIndex);\r\n return {\r\n ...state,\r\n groupOptions: {\r\n ...state.groupOptions,\r\n columns: newColumns\r\n }\r\n }\r\n }),\r\n addToGrouping: store.updater((state, formControlName: string) => {\r\n let columns = state.groupOptions?.columns || [];\r\n if (!columns.includes(formControlName)) {\r\n columns = [...columns, formControlName];\r\n } else{\r\n columns =columns.filter((col) => col !== formControlName)\r\n }\r\n return {\r\n ...state,\r\n groupOptions: {\r\n ...state.groupOptions,\r\n columns\r\n }\r\n\r\n }\r\n })\r\n\r\n };\r\n}","export function toCamelCase(arrayOfObjects: any[]): any[] {\r\n return arrayOfObjects.map((obj) => {\r\n const newObj: any = {};\r\n Object.keys(obj).forEach((key) => {\r\n const newKey = ''.concat(key);\r\n const camelCaseKey = camelize(newKey) as string;\r\n newObj[camelCaseKey] = obj[key];\r\n });\r\n\r\n return newObj;\r\n });\r\n}\r\n\r\nexport function camelize(str: string) {\r\n if (!!str) {\r\n return str\r\n .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word: string, index: number) {\r\n return index === 0 ? word.toLowerCase() : word.toUpperCase();\r\n })\r\n .replace(/\\s+/g, '');\r\n } else {\r\n return;\r\n }\r\n}\r\n","import * as XLSX from 'xlsx';\r\nimport { toCamelCase } from './keysToCamelCase';\r\n\r\n\r\nconst getFileName = (name: string) => {\r\n let timeSpan = new Date().toISOString();\r\n let sheetName = name || 'ExportResult';\r\n let fileName = `${sheetName}-${timeSpan}`;\r\n return {\r\n sheetName,\r\n fileName,\r\n };\r\n};\r\nexport class TableUtil {\r\n static exportTableToExcel(tableId: string, name: string) {\r\n let { sheetName, fileName } = getFileName(name);\r\n let targetTableElm = document.getElementById(tableId);\r\n let wb = XLSX.utils.table_to_book(targetTableElm, <XLSX.Table2SheetOpts>{\r\n sheet: sheetName,\r\n });\r\n XLSX.writeFile(wb, `${fileName}.xlsx`);\r\n }\r\n\r\n static exportArrayToExcel(arr: any[], name: string) {\r\n const { sheetName, fileName } = getFileName(name);\r\n const wb = XLSX.utils.book_new();\r\n\r\n // Process the main array\r\n const mainArray = arr.map(item => this.processSimpleObject(item));\r\n const mainSheet = XLSX.utils.json_to_sheet(mainArray);\r\n XLSX.utils.book_append_sheet(wb, mainSheet, this.sanitizeSheetName(sheetName));\r\n\r\n // Process nested arrays\r\n arr.forEach((item, index) => {\r\n const arrayProperties = this.findArrayProperties(item);\r\n\r\n arrayProperties.forEach((arrayData, propertyName) => {\r\n // Only process if the array contains data\r\n if (arrayData.length > 0) {\r\n // Create a sheet name combining property name and parent index\r\n const nestedSheetName = this.sanitizeSheetName(`${propertyName}_${index + 1}`);\r\n\r\n // Process the nested array items\r\n const processedArray = arrayData.map(nestedItem => {\r\n if (typeof nestedItem === 'object' && nestedItem !== null) {\r\n return this.processSimpleObject(nestedItem);\r\n }\r\n // If it's a primitive value, wrap it in an object\r\n return { value: nestedItem };\r\n });\r\n\r\n // Create and append the sheet if it has data\r\n if (processedArray.length > 0) {\r\n const nestedSheet = XLSX.utils.json_to_sheet(processedArray);\r\n try {\r\n XLSX.utils.book_append_sheet(wb, nestedSheet, nestedSheetName);\r\n } catch (e) {\r\n const msg = e instanceof Error ? e.message : 'Unknown error';\r\n console.warn(`Could not create sheet for ${nestedSheetName}: ${msg}`);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n // Write the workbook to file\r\n XLSX.writeFile(wb, `${fileName}.xlsx`);\r\n }\r\n\r\n static onFileChange(event: any): Promise<any[]> {\r\n return new Promise<any[]>((resolve, reject) => {\r\n try {\r\n const target: DataTransfer = <DataTransfer>event.target;\r\n if (target.files.length !== 1)\r\n throw new Error('Cannot use multiple files');\r\n const reader: FileReader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const bstr: string = e.target.result;\r\n const workbook: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });\r\n const firstSheetName = workbook.SheetNames[0];\r\n if (!firstSheetName) throw new Error('No sheet found');\r\n const worksheet = workbook.Sheets[firstSheetName];\r\n if (!worksheet) throw new Error('No worksheet found');\r\n const arrayData = XLSX.utils.sheet_to_json(worksheet, { raw: false });\r\n // Iterate through each row and format date cells\r\n arrayData.forEach((row: any) => {\r\n for (const key in row) {\r\n if (\r\n row.hasOwnProperty(key) &&\r\n typeof row[key] === 'number' &&\r\n XLSX.SSF.isValidDate(row[key])\r\n ) {\r\n row[key] = XLSX.SSF.format_date(row[key], 'yyyy-mm-dd');\r\n }\r\n }\r\n });\r\n // Do something with arrayData\r\n resolve(toCamelCase(arrayData));\r\n };\r\n reader.onerror = (e) => reject(e);\r\n const file = target.files[0]\r\n if (!file) throw new Error('No file found');\r\n reader.readAsBinaryString(file);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n }\r\n private static processSimpleObject(obj: any): any {\r\n const newObj: any = {};\r\n for (const key in obj) {\r\n if (typeof obj[key] === 'object' && obj[key] !== null) {\r\n // If it's not an array, convert to string\r\n if (!Array.isArray(obj[key])) {\r\n newObj[key] = JSON.stringify(obj[key]);\r\n }\r\n // Arrays will be handled separately, so we skip them here\r\n } else {\r\n newObj[key] = obj[key];\r\n }\r\n }\r\n return newObj;\r\n }\r\n private static findArrayProperties(obj: any): Map<string, any[]> {\r\n const arrayProps = new Map<string, any[]>();\r\n for (const key in obj) {\r\n if (Array.isArray(obj[key])) {\r\n arrayProps.set(key, obj[key]);\r\n }\r\n }\r\n return arrayProps;\r\n }\r\n private static sanitizeSheetName(name: string): string {\r\n // Excel sheet names can't exceed 31 characters and can't contain certain characters\r\n return name.replace(/[\\[\\]\\*\\/\\\\\\?\\:]/g, '_').substring(0, 31);\r\n }\r\n\r\n}\r\n","import { combineLatest, Observable,switchMap, tap } from \"rxjs\";\r\nimport { NgxTMatrixTableStoreService } from \"./ngx-tmatrix-table-store.service\";\r\nimport { TableUtil } from \"../../../shared/functions/tableutills\";\r\n\r\nexport function NgxTMatrixTableStoreEffects(store: NgxTMatrixTableStoreService) {\r\n const exportData = store.effect(\r\n (trigger$: Observable<void>) => trigger$.pipe(\r\n switchMap(() => combineLatest([\r\n store.selectors.getGroupedData$,\r\n store.selectors.reportName$\r\n ]).pipe(\r\n tap(([\r\n data, reportName\r\n ]) => {\r\n TableUtil.exportArrayToExcel(data || [], reportName || 'report')\r\n })\r\n ))\r\n )\r\n )\r\n const mainShowChart = store.effect(\r\n (trigger$: Observable<void>) => trigger$.pipe(\r\n switchMap(() => combineLatest([\r\n store.selectors.getGroupedData$,\r\n store.selectors.listConfig$,\r\n store.selectors.groupOptions$\r\n ]).pipe(\r\n tap(([\r\n data, listConfig, groupOptions\r\n ]) => {\r\n const mainGroups = data.filter(row => !!row?.IS_GROUP_CONFIG && row?.level === 0)\r\n const numberProperties = listConfig?.filter((config) => config.valueType === 'number' || config.valueType === 'currency') || []\r\n const groupChart = { groups: mainGroups, numberProperties, mainTitle: groupOptions?.columns?.[0] || '' }\r\n store.actions.setGroupChart(groupChart)\r\n })\r\n ))\r\n )\r\n )\r\n\r\n const showReport = store.effect(\r\n (row$: Observable<any>) => row$.pipe(\r\n switchMap((row) => combineLatest([\r\n store.selectors.getGroupedData$,\r\n store.selectors.listConfig$\r\n ]).pipe(\r\n tap(([data, listConfig]) => {\r\n if (!!row?.IS_GROUP_CONFIG && row?.level !== undefined) {\r\n const i = data.map(d => d?.name).indexOf(row.name)\r\n const mainGroups = []\r\n for (let index = i + 1; index < data.length; index++) {\r\n const nextRow = data[index];\r\n if (mainGroups.length === 0 && !nextRow?.IS_GROUP_CONFIG\r\n || nextRow?.IS_GROUP_CONFIG && nextRow?.level === row.level\r\n || mainGroups.length === 0 && nextRow?.level === row.level) {\r\n break\r\n }\r\n if (nextRow?.IS_GROUP_CONFIG && nextRow?.level === row.level + 1) {\r\n mainGroups.push(nextRow)\r\n }\r\n }\r\n const numberProperties = listConfig?.filter((config) => config.valueType === 'number' || config.valueType === 'currency') || []\r\n const groupChart = {\r\n groups: mainGroups,\r\n numberProperties,\r\n mainTitle: row.propertyLabel + ': ' + row.name\r\n }\r\n store.actions.setGroupChart(groupChart)\r\n }\r\n })\r\n ))\r\n ))\r\n\r\n const foldUnFoldGroup = store.effect(\r\n (row$: Observable<any>) => row$.pipe(\r\n switchMap((row) => combineLatest([\r\n store.selectors.getGroupedData$\r\n ]).pipe(\r\n tap(([data]) => {\r\n const i = data.map(d => d?.name).indexOf(row.name)\r\n const mainGroups = []\r\n for (let index = i + 1; index < data.length; index++) {\r\n const nextRow = data[index];\r\n if (mainGroups.length === 0 && !nextRow?.IS_GROUP_CONFIG\r\n || nextRow?.IS_GROUP_CONFIG && nextRow?.level === row.level\r\n || mainGroups.length === 0 && nextRow?.level === row.level) {\r\n break\r\n }\r\n\r\n if (nextRow?.IS_GROUP_CONFIG && nextRow?.level === row.level + 1) {\r\n mainGroups.push(nextRow)\r\n store.actions.toggleCloseGroup(nextRow.name)\r\n }\r\n\r\n\r\n }\r\n\r\n })\r\n ))\r\n ))\r\n\r\n return {\r\n exportData,\r\n mainShowChart, foldUnFoldGroup, showReport\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { ComponentStore } from '@ngrx/component-store';\r\nimport { IMatrixTableState } from '../../../../types/IMatrixTableState';\r\nimport { NgxTMatrixTableStoreSelectors } from './NgxTMatrixTable-selectors';\r\nimport { NgxTMatrixTableStoreActions } from './NgxTMatrixTable-actions';\r\nimport { NgxTMatrixTableStoreEffects } from './NgxTMatrixTable-effects';\r\nexport const initialMscoaState: IMatrixTableState = {\r\n reportName: null,\r\n list: null,\r\n listConfig: null,\r\n aggregates: null,\r\n groupOptions: null,\r\n closedGroups: [],\r\n isOpen: undefined,\r\n groupChart: null,\r\n draggedGroup: '',\r\n scrollIndex: 0\r\n};\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgxTMatrixTableStoreService extends ComponentStore<IMatrixTableState> {\r\n\r\n constructor() { \r\n super(initialMscoaState);\r\n }\r\n readonly selectors = NgxTMatrixTableStoreSelectors(this);\r\n readonly actions = NgxTMatrixTableStoreActions(this);\r\n readonly effects = NgxTMatrixTableStoreEffects(this); // Assuming effects are also part of actions for simplicity\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, inject, Input, OnInit, ViewChild, } from '@angular/core';\r\n\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\n\r\nimport { GroupSettingsModel } from './interface/GroupSettingsModel';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CdkDragDrop, CdkDropList, CdkDrag } from '@angular/cdk/drag-drop';\r\n\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { GroupingChartComponent } from './components/grouping-chart/grouping-chart.component';\r\n\r\nimport { COLOR_CODES, randomColorCode } from './constants/colorCodes';\r\n\r\nimport { DocumentLitsLabelConfigInterface, DocumentLitsLabelConfigInterfaceValueType } from '../../../types/DocumentSectionConfigurationsInterface';\r\n\r\nimport { _isEqual } from '../../shared/functions/isEqual';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { NgxTMatrixTableStoreService } from './store/ngx-tmatrix-table-store.service';\r\nimport { combineLatest, distinctUntilChanged, map, of } from 'rxjs';\r\nimport { FormatDataPipe } from '../../pipes/format-Data.pipe';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n@Component({\r\n selector: 'app-ngx-t-matrix-table',\r\n standalone: true,\r\n imports: [CommonModule, GroupingChartComponent, DragDropModule, MatChipsModule,\r\n CdkDropList, CdkDrag, MatMenuModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatTableModule,\r\n MatToolbarModule,\r\n FormatDataPipe,\r\n MatProgressSpinnerModule,\r\n ScrollingModule,\r\n MatDividerModule],\r\n providers: [NgxTMatrixTableStoreService,],\r\n \r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './ngx-t-matrix-table.component.html',\r\n styleUrl: './ngx-t-matrix-table.component.scss',\r\n\r\n})\r\nexport class NgxTMatrixTableComponent implements OnInit {\r\n @ViewChild('viewPortScroll') scrollContainer!: ElementRef<HTMLElement>;\r\n \r\n get tableContainerHeight (){\r\n return this.scrollContainer?.nativeElement.clientHeight;\r\n }\r\n store = inject(NgxTMatrixTableStoreService)\r\n\r\n @Input() set list(value: any[] | null) {\r\n this.store.actions.setList(value);\r\n }\r\n @Input() set reportName(value: string | null) {\r\n this.store.actions.setReportName(value);\r\n }\r\n\r\n @Input() set listConfig(value: DocumentLitsLabelConfigInterface[] | null | undefined) {\r\n this.store.actions.setListConfig(value);\r\n }\r\n\r\n @Input() set aggregates(value: DocumentLitsLabelConfigInterface[] | null) {\r\n this.store.actions.setAggregates(value);\r\n }\r\n\r\n @Input() set groupOptions(value: GroupSettingsModel) {\r\n this.store.actions.setGroupOptions(value);\r\n }\r\n\r\n tableColumns$ = this.store.selectors.tableColumns$;\r\n displayedColumns$ = this.store.selectors.displayedColumns$;\r\n groupLabelConfig$ = this.store.selectors.groupLabelConfig$;\r\n groupOptions$ = this.store.selectors.groupOptions$;\r\n getGroupedData$ = this.store.selectors.getGroupedData$; \r\n groupedColumns$ = this.store.selectors.groupedColumns$;\r\n isOpen$ = this.store.selectors.isOpen$;\r\n groupChart$ = this.store.selectors.groupChart$;\r\n closedGroups$ = this.store.selectors.closedGroups$;\r\n draggedGroup$ = this.store.selectors.draggedGroup$;\r\n vm$ = combineLatest([\r\n this. groupOptions$,\r\n this.tableColumns$,\r\n this.displayedColumns$,\r\n this.groupLabelConfig$,\r\n this.getGroupedData$.pipe( distinctUntilChanged(\r\n (prev, curr) =>\r\n _isEqual(prev, curr)\r\n )),\r\n this.groupedColumns$,\r\n this.isOpen$,\r\n this.closedGroups$,\r\n this.groupChart$,\r\n this.draggedGroup$\r\n ]).pipe(\r\n map(\r\n ([\r\n groupOptions,\r\n tableColumns, \r\n displayedColumns, \r\n groupLabelConfig, \r\n getGroupedData, \r\n groupedColumns,\r\n isOpen,\r\n closedGroups,\r\n groupChart,\r\n draggedGroup\r\n ]) => ({\r\n groupOptions,\r\n tableColumns,\r\n displayedColumns,\r\n groupLabelConfig,\r\n getGroupedData,\r\n groupedColumns,\r\n isOpen,\r\n closedGroups,\r\n groupChart,\r\n draggedGroup\r\n })\r\n )\r\n \r\n )\r\n\r\n\r\n ValueTypes = DocumentLitsLabelConfigInterfaceValueType\r\n\r\n constructor(public dialog: MatDialog) {\r\n\r\n }\r\n ngOnInit(): void {\r\n this.setLevelColors()\r\n }\r\n\r\n\r\n // @HostListener('document:click', ['$event'])\r\n // onClickOutside(event: Event) {\r\n // if (!this.elementRef.nativeElement.contains(event.target)) {\r\n // this.isOpen = undefined\r\n // }\r\n // }\r\n toggleMenu(row: any) {\r\n this.store.actions.toggleMenu(row);\r\n }\r\n\r\n\r\n remove(groupCol: String) {\r\n this.store.actions.removeGroupColumn(groupCol as string);\r\n }\r\n drop(event: CdkDragDrop<TemplateStringsArray, any>) {\r\n this.store.actions.dropGroupColumn();\r\n }\r\n\r\n\r\n export() {\r\n this.store.effects.exportData(of())\r\n }\r\n dropChip(event: CdkDragDrop<string[]>) {\r\n this.store.actions.dropGroupingToSortGroups(event);\r\n\r\n }\r\n addToGrouping(formControlName: string) {\r\n this.store.actions.addToGrouping(formControlName);\r\n }\r\n\r\n\r\n toggleCloseGroup(name: string) {\r\n this.store.actions.toggleCloseGroup(name);\r\n\r\n }\r\n\r\n mainShowChart() {\r\n this.store.effects.mainShowChart(of())\r\n }\r\n foldUnFoldGroup(row: any) {\r\n this.store.effects.foldUnFoldGroup(row);\r\n }\r\nsetDraggedGroup(col:string){\r\n this.store.actions.setDraggedGroup(col)\r\n}\r\n showReport(row: any) {\r\n this.store.effects.showReport(of(row))\r\n }\r\n\r\n \r\n // Coding \r\n setLevelColors() {\r\n // Set the CSS variables\r\n Object.keys(this.levelColors).forEach((key, index) => {\r\n document.body.style.setProperty(\r\n `--custom-level-color-${index + 1}`,\r\n this.levelColors[key]\r\n );\r\n });\r\n }\r\n levelColors: any = randomColorCode()\r\n get colorPalletArray() {\r\n const colors = COLOR_CODES\r\n return Object.values(colors).map(v => Object.values(v))\r\n }\r\n selectColor(colors: string[]) {\r\n const c = colors.reduce((acc, color, index) => {\r\n acc[`color${index + 1}`] = color;\r\n return acc;\r\n }, {} as Record<string, string>);\r\n this.updateColors(c)\r\n\r\n }\r\n // Method to update colors dynamically\r\n updateColors(newColors: { [key: string]: string }) {\r\n this.levelColors = { ...this.levelColors, ...newColors };\r\n this.setLevelColors();\r\n }\r\n\r\n\r\nscrollIndex(event:any){\r\n this.store.actions.setScrollIndex(event)\r\n}\r\n\r\n}\r\n\r\nexport interface GroupChartConfig {\r\n groups: any[];\r\n numberProperties: DocumentLitsLabelConfigInterface[];\r\n mainTitle: string;\r\n}","<ng-container *ngIf=\"( vm$ |async) as vm\">\r\n\r\n @if (\r\n !!vm.groupChart\r\n ) {\r\n\r\n <mat-toolbar class=\"chartToolbar\">\r\n <h1 style=\" font-weight: bold;\r\n font-size: 1.4rem; \r\n text-transform: capitalize;\">\r\n {{vm.groupChart.mainTitle}}\r\n </h1>\r\n <span class=\"spacer\"></span>\r\n <button (click)=\"vm.groupChart = null\" mat-stroked-button>\r\n Close\r\n <mat-icon>\r\n close\r\n </mat-icon>\r\n </button>\r\n </mat-toolbar>\r\n\r\n\r\n\r\n <mat-divider></mat-divider>\r\n <br>\r\n <app-grouping-chart [groups]=\"vm.groupChart.groups\"\r\n [numberProperties]=\"vm.groupChart.numberProperties\"></app-grouping-chart>\r\n }@else {\r\n\r\n\r\n <section class=\"tableContainer\" #tableContainer>\r\n <mat-toolbar style=\"background: none;\" (cdkDropListDropped)=\"dropChip($event)\"\r\n [cdkDropListData]=\"vm.groupOptions?.columns ||[]\" cdkDropList>\r\n\r\n\r\n @for(groupCol of vm.groupedColumns; track groupCol){\r\n <mat-chip-option color=\"tertiary\" class=\"dragBox\" [style.margin-left]=\"$index !==0? '5px':''\" cdkDrag selected\r\n (removed)=\"remove(groupCol.formControlName)\">\r\n <div class=\"placeholder\" *cdkDragPlaceholder></div>\r\n {{ groupCol.label }}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + groupCol.label\">\r\n <mat-icon color=\"warn\">cancel</mat-icon>\r\n </button>\r\n </mat-chip-option>\r\n }\r\n @if (vm.groupedColumns.length === 0) {\r\n\r\n <div\r\n style=\"font-size: 14px; font-weight: 400; opacity: 0.7; padding: 8px; color: #666; display: flex; align-items: center;\">\r\n Drag column headers here to group your data\r\n </div>\r\n\r\n\r\n }\r\n\r\n\r\n <span class=\"spacer\"></span>\r\n\r\n <button [matMenuTriggerFor]=\"colorPallet\" mat-icon-button matTooltip=\"Select table color coding\">\r\n <mat-icon>\r\n palette\r\n </mat-icon>\r\n </button>\r\n\r\n <button (click)=\"mainShowChart()\" mat-icon-button matTooltip=\"Show main grouping chart analytics\">\r\n <mat-icon>\r\n analytics\r\n </mat-icon>\r\n </button>\r\n <button (click)=\"export()\" mat-icon-button matTooltip=\"Export to excel\">\r\n <mat-icon>\r\n download\r\n </mat-icon>\r\n </button>\r\n\r\n </mat-toolbar>\r\n\r\n\r\n @defer (on viewport; prefetch on idle) {\r\n <cdk-virtual-scroll-viewport (scrolledIndexChange)=\"scrollIndex($event)\" \r\n #viewPortScroll [itemSize]=\"30\"\r\n style=\"resize: vertical;height:400px;\" >\r\n <table (cdkDropListDropped)=\"drop($event)\" \r\n [multiTemplateDataRows]=\"true\"\r\n cdkDropList mat-table [dataSource]=\"vm.getGroupedData||[]\"\r\n style=\"border-collapse: collapse;\" class=\"example-table\" matSort matSortActive=\"created\" matSortDisableClear\r\n matSortDirection=\"desc\">\r\n @for (col of vm.tableColumns||[]; track col.formControlName) {\r\n <ng-container [matColumnDef]=\"col.formControlName\">\r\n <th cdkDrag (cdkDragStarted)=\"setDraggedGroup(col.formControlName)\"\r\n [attr.data-column-size]=\"col.formControlName\"\r\n style=\"width: fit-content !important; white-space: nowrap !important;\" mat-header-cell *matHeaderCellDef>\r\n @if($index === 0 && vm.closedGroups.length > 0){\r\n <button class=\"cancelGrouping\" (click)=\"vm.closedGroups= []\" color=\"warn\" mat-icon-button>\r\n <mat-icon>highlight_off</mat-icon>\r\n </button>\r\n } @else {\r\n <div class=\"colTitle\" style=\"display: inline-flex; align-items: center;\"\r\n [style.color]=\"col.INCLUDED_IN_GROUP?'':''\" [matTooltip]=\"'Click to group by '+col.label\"\r\n (click)=\"addToGrouping(col.formControlName)\" matRipple>\r\n {{col.label}}\r\n </div>\r\n }\r\n </th>\r\n <td mat-cell style=\"\r\n width: fit-content !important;\r\n white-space: nowrap !important;\" [style.border-top]=\"!!row?.IS_SUM_ROW && $index !==0? '1px solid black':''\"\r\n [style.border-bottom-color]=\"!!row?.IS_GROUP_CONFIG ?'#ffffff00':''\"\r\n [style.background]=\"!!row?.IS_GROUP_CONFIG?'':'none'\"\r\n [style.overflow]=\"!!row?.IS_GROUP_CONFIG ?'visible':''\" *matCellDef=\"let row\">\r\n\r\n @if (!!row?.IS_GROUP_CONFIG ) {\r\n @if( $index ===0){\r\n <div disabled=\"true\" class=\"levelClass\" *ngFor=\"let item of row.LEVELS_BEFORE\" mat-button>\r\n <span>- <div class=\"verticalCenterLine\"></div></span>\r\n </div>\r\n <button (click)=\"toggleCloseGroup(row['name']);\" mat-button>\r\n <mat-icon>{{row['IS_CLOSED'] ?'keyboard_arrow_right':'keyboard_arrow_down'}}</mat-icon>\r\n <span\r\n style=\"color: var(--mat-table-header-headline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));\">\r\n {{row['name']}}\r\n </span>\r\n </button>\r\n\r\n <span class=\"rowMenu\">\r\n <button [color]=\"vm.isOpen?.name === row?.name && vm.isOpen?.level === row.level?'warn':''\"\r\n class=\"groupOptions\" mat-icon-button (click)=\"toggleMenu(row)\">\r\n\r\n <mat-icon>\r\n {{vm.isOpen?.name === row?.name && vm.isOpen?.level === row.level? 'close':'more_horiz'}}\r\n </mat-icon>\r\n </button>\r\n @if(vm.isOpen?.name === row?.name && vm.isOpen?.level === row.level){\r\n <button (click)=\"showReport(row)\" mat-icon-button>\r\n <mat-icon>\r\n analytics\r\n </mat-icon>\r\n </button>\r\n <button (click)=\"foldUnFoldGroup(row)\" mat-icon-button>\r\n <mat-icon>\r\n compress\r\n </mat-icon>\r\n </button>\r\n }\r\n\r\n\r\n </span>\r\n\r\n\r\n } @else if (row['totals'][col.formControlName]) {\r\n <h5 [style.opacity]=\"row['IS_CLOSED']&& row['level'] !==0 ? '0.5':1\">\r\n {{(row['totals'][col.formControlName]) |formatData: col.valueType}}\r\n\r\n </h5>\r\n }\r\n }\r\n\r\n @if (!row['IS_GROUP_CONFIG'] && $index ===0 ) {\r\n @for (item of row['LEVELS_BEFORE']||[]; track item) {\r\n <div disabled=\"true\" class=\"levelClass\" mat-button>\r\n <span>\r\n @if ($last) {\r\n •\r\n }@else {\r\n -\r\n }\r\n\r\n <div class=\"verticalCenterLine\"></div>\r\n </span>\r\n </div>\r\n }\r\n\r\n }\r\n @if (!row?.IS_GROUP_CONFIG && $index !==0 ){\r\n\r\n <div \r\n class=\"row-value-col\"\r\n >\r\n {{ row[col.formControlName]|formatData: col.valueType }}\r\n\r\n\r\n\r\n </div>\r\n\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n <tr mat-header-row *matHeaderRowDef=\"vm.displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: vm.displayedColumns;\" [class.is-group-row]=\"!!row?.IS_GROUP_CONFIG\"\r\n [class]=\"'row-'+row.level\" [class.is-sum-row]=\"!!row['IS_SUM_ROW']\"\r\n style=\"border-bottom: solid 1px rgba(0, 0, 0, .04)\"></tr>\r\n </table>\r\n </cdk-virtual-scroll-viewport>\r\n } @placeholder {\r\n <div style=\"display: flex; justify-content: center; align-items: center; padding: 40px; flex-direction: column;\">\r\n <mat-spinner diameter=\"50\"></mat-spinner>\r\n <p style=\"margin-top: 15px;\">Loading table data...</p>\r\n </div>\r\n } @loading {\r\n <div style=\"padding: 20px; text-align: center;\">\r\n <mat-spinner diameter=\"50\"></mat-spinner>\r\n <p style=\"margin-top: 10px;\">Preparing table view...</p>\r\n </div>\r\n } @error {\r\n <p style=\"color: red; text-align: center; padding: 20px;\">Table failed to load.</p>\r\n }\r\n </section>\r\n }\r\n\r\n</ng-container>\r\n\r\n\r\n<mat-menu #colorPallet=\"matMenu\">\r\n <p>Select Table color coding</p>\r\n\r\n <button *ngFor=\"let item of colorPalletArray\" (click)=\"selectColor(item)\" mat-menu-item>\r\n\r\n <div [style.background]=\"color\" *ngFor=\"let color of item\" style=\"width: 16px;height:24px;display:inline-block\">\r\n\r\n </div>\r\n\r\n\r\n\r\n </button>\r\n\r\n</mat-menu>","import { InjectionToken } from \"@angular/core\";\r\nimport { NgxTReportsConfig } from \"../../types/NgxTReportsConfig\";\r\nexport const NGX_T_REPORTS_CONFIG_TOKEN = new InjectionToken<NgxTReportsConfig>('NGX_T_REPORTS_CONFIG');","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatCardModule, MatCardContent, MatCardHeader, MatCardTitle, MatCardSubtitle } from '@angular/material/card';\r\nimport { ElementEditorConfigSectionInterface, ElementEditorInnerSectionElementInterface, FormColumnInputs } from 'ngx-t-forms-types';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { assignDeepPropertyToObject, TDynamicDataEditComponent } from 'ngx-t-forms';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { _isEqual } from '../../shared/functions/isEqual';\r\n@Component({\r\n selector: 'lib-element-editor',\r\n standalone: true,\r\n imports: [\r\n MatCardModule,\r\n MatCardContent,\r\n MatCardHeader,\r\n MatCardTitle,\r\n MatCardSubtitle,\r\n MatDividerModule,\r\n CommonModule,\r\n MatToolbarModule,\r\n MatProgressSpinnerModule,\r\n MatExpansionModule,\r\n TDynamicDataEditComponent,\r\n MatIconModule,\r\n MatButtonModule\r\n\r\n ],\r\n templateUrl: './element-editor.component.html',\r\n styleUrl: './element-editor.component.css'\r\n})\r\nexport class ElementEditorComponent {\r\n\r\n @Input() inEdit : any = {}\r\n\r\n @Input() label: string = ''\r\n @Input() subTitle: string = ''\r\n @Input() editorSections: ElementEditorConfigSectionInterface[] = []\r\n @Input() formInputs: FormColumnInputs[] = []\r\n @Input() saveButtonLabel: string = \"Save \"\r\n @Output() closeEditor = new EventEmitter<void>()\r\n @Output() saveElement = new EventEmitter<any>()\r\n newValue: any = null\r\n elementConfigurationChanged = (value: any, ele: ElementEditorInnerSectionElementInterface) => {\r\n\r\n\r\n this.newValue = {\r\n ...this.inEdit\r\n }\r\n\r\n assignDeepPropertyToObject(\r\n this.newValue,\r\n ele.deepBind,\r\n value\r\n );\r\n \r\n }\r\n\r\n get saveIsDisabled() {\r\n\r\n if (!this.newValue) return true\r\n if (this.editorSections.length === 0) return true\r\n\r\n return Boolean(_isEqual(this.newValue, this.inEdit))\r\n }\r\n elementBlur = (event: any, element: ElementEditorInnerSectionElementInterface) => {\r\n\r\n }\r\n save() {\r\n this.saveElement.emit(this.newValue)\r\n this.newValue = null\r\n\r\n }\r\n close() {\r\n this.closeEditor.emit()\r\n }\r\n}\r\n","<mat-card \r\n\r\nstyle=\"\r\n\r\nbackground: var(--mat-sys-surface-container, var(--mat-app-surface));\r\nmargin:0px;\r\nborder:solid 1px var(--mat-divider-color, var(--mat-app-outline))\">\r\n \r\n <mat-card-header >\r\n <mat-card-title>\r\n {{label}}\r\n </mat-card-title>\r\n <mat-card-subtitle> {{subTitle }}</mat-card-subtitle>\r\n \r\n </mat-card-header>\r\n \r\n\r\n\r\n \r\n <mat-toolbar class=\"section-header\">\r\n <span class=\"header\">Element configuration</span>\r\n <span class=\"spacer\"></span>\r\n </mat-toolbar>\r\n <mat-divider></mat-divider>\r\n\r\n @defer (on viewport) {\r\n \r\n <mat-accordion togglePosition=\"before\">\r\n @for(section of (editorSections||[]); track section.id) {\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{section.label}}\r\n <span class=\"spacer\"></span>\r\n \r\n <span class=\"showItemValue\" *ngIf=\"section.showItemValue && !!(inEdit)\">\r\n {{inEdit[section.showItemValue]}}\r\n </span>\r\n <mat-divider style=\"position: absolute; left:0px; width:100%; bottom:0px;\"></mat-divider>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n \r\n <div style=\"margin-top: 16px;\"></div>\r\n \r\n <!-- Element type selector (only in first section) -->\r\n \r\n \r\n <!-- Section elements -->\r\n @for(element of section.elements; track element.id) {\r\n <p style=\"margin-bottom: 16px; margin-top: 8px;\">\r\n @defer (on viewport) {\r\n <lib-t-dynamic-data-edit \r\n [editorConfig]=\"element\" [data]=\"inEdit\"\r\n [validationErrors]=\"element.computedErrors||[]\"\r\n (valueChange)=\"elementConfigurationChanged($event, element)\" \r\n [formInputs]=\"formInputs\"\r\n (blur)=\"elementBlur($event, element)\">\r\n </lib-t-dynamic-data-edit>\r\n \r\n \r\n } @placeholder {\r\n <div style=\"padding: 50px; display:flex; justify-content:center; align-items:center; text-align: center;\">\r\n <mat-spinner diameter=\"18\"></mat-spinner>\r\n </div>\r\n }\r\n </p>\r\n }\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n } @placeholder {\r\n <div style=\"padding: 50px; display:flex; justify-content:center; align-items:center; text-align: center;\">\r\n <mat-spinner diameter=\"50\" />\r\n </div>\r\n } @error {\r\n \r\n <h1>Error loading element editor</h1>\r\n <p>An error occurred while loading the element editor. Please try again later.</p>\r\n \r\n }\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n\r\n <br>\r\n <mat-divider></mat-divider>\r\n \r\n <mat-card-actions >\r\n <button (click)=\"close()\" class=\"\" mat-button>close</button>\r\n <span class=\"spacer\"></span>\r\n <button mat-flat-button \r\n \r\n (click)=\"save()\"\r\n color=\"primary\">{{\r\n saveButtonLabel\r\n }}</button>\r\n \r\n </mat-card-actions>\r\n</mat-card>","import { ElementEditorConfigSectionInterface, ElementEditorTypes, SpecialElementKeys } from \"ngx-t-forms-types\";\r\n\r\nexport enum ConfigTypes {\r\n SheetConfig = 'SheetConfig',\r\n}\r\nexport const SheetConfig: ElementEditorConfig = {\r\n label: \"Matrix Report Configuration\",\r\n subTitle: \"Customize how your data appears and organizes in the report\",\r\n saveButtonLabel: \"Apply Report Settings\",\r\n editorSections: [\r\n \r\n {\r\n label: \"Data Sources\",\r\n id: \"dataSources\",\r\n elements: [\r\n {\r\n name: SpecialElementKeys.Default,\r\n deepBind: ['dataSources'],\r\n editType: ElementEditorTypes.DataSourcePicker,\r\n hint: `Connect and manage data sources for your report. Select from REST APIs or create MongoDB aggregation pipelines.`,\r\n label: 'Connect Data',\r\n id: \"10c7237d-b0a8-4964-97e6-811b93569c68\"\r\n },\r\n ]\r\n },\r\n {\r\n label: \"Column Layout\",\r\n id: \"tableColumns\",\r\n elements: [\r\n {\r\n name: SpecialElementKeys.Default,\r\n deepBind: ['listConfig'],\r\n editType: ElementEditorTypes.ListLabelConfigEditor,\r\n fetchOptions: ['ALL_POSSIBLE_FIELDS'],\r\n hint: `Customize your table display by selecting fields, arranging columns, and setting visibility options.`,\r\n label: 'Visible Columns',\r\n id: \"6ed1283c-63e9-435e-a435-16d3a0c6d3f3\"\r\n }\r\n ]\r\n } ,\r\n \r\n {\r\n label: \"Data Hierarchy & Grouping\",\r\n id: \"dataGrouping\",\r\n elements: [\r\n {\r\n name: SpecialElementKeys.Default,\r\n deepBind: ['groupOptions','columns'],\r\n editType: ElementEditorTypes.ChipOptionsCreator,\r\n hint: `Define columns for grouping and hierarchy. Ensure the entered column matches column form control names.`,\r\n label: 'Group By',\r\n id: \"36877d92-4331-498a-b02f-4d0eaef17372\"\r\n },\r\n {\r\n name: SpecialElementKeys.Default,\r\n deepBind: ['groupOptions','hiddenColumns'],\r\n editType: ElementEditorTypes.ChipOptionsCreator,\r\n hint: `Defined grouped columns that should be hidden. Ensure the entered column matches column form control names.`,\r\n label: 'Define hidden grouped columns',\r\n id: \"2452e44f-d0c9-4935-a743-7d89fbd9a095\"\r\n }\r\n ]\r\n },\r\n \r\n {\r\n label: \"Date Range configuration\",\r\n id: \"dataGrouping\",\r\n elements: [\r\n {\r\n name: SpecialElementKeys.Default,\r\n deepBind: ['dateRangeMin'],\r\n editType: ElementEditorTypes.OptionSelect,\r\n fetchOptions: ['EXTERNAL_DATA_INTEGRATION_OPTIONS'],\r\n hint: `Minimum date for the report. This is used to filter the data in the report.`,\r\n label: 'Min Date',\r\n id: \"5d31a27a-a4d1-43db-9845-d1a2ce666e17\"\r\n },\r\n {\r\n name: SpecialElementKeys.Default,\r\n deepBind: ['dateRangeMax'],\r\n editType: ElementEditorTypes.OptionSelect,\r\n fetchOptions: ['EXTERNAL_DATA_INTEGRATION_OPTIONS'],\r\n hint: `Maximum date for the report. `,\r\n label: 'max Date',\r\n id: \"739ce399-3f25-42c1-b2fe-47d2bf14aa38\"\r\n },\r\n {\r\n name: SpecialElementKeys.Default,\r\n deepBind: ['dateRangeComparisonStart'],\r\n editType: ElementEditorTypes.OptionSelect,\r\n fetchOptions: ['EXTERNAL_DATA_INTEGRATION_OPTIONS'],\r\n hint: `Highlighted date comparison start date for the picker. `,\r\n label: 'Comparison Start',\r\n id: \"e34f377b-f824-4331-924d-5c3e9ee5f08e\"\r\n },\r\n {\r\n name: SpecialElementKeys.Default,\r\n deepBind: ['dateRangeComparisonEnd'],\r\n editType: ElementEditorTypes.OptionSelect,\r\n fetchOptions: ['EXTERNAL_DATA_INTEGRATION_OPTIONS'],\r\n hint: `Highlighted date comparison end date for the picker. `,\r\n label: 'Comparison End',\r\n id: \"1e65d445-b3ed-4ab6-8689-1f7fe2d85da6\"\r\n },\r\n \r\n ]\r\n },\r\n ]\r\n}\r\n\r\nexport interface ElementEditorConfig {\r\n label: string;\r\n subTitle: string;\r\n saveButtonLabel: string;\r\n editorSections: ElementEditorConfigSectionInterface[]\r\n}\r\n\r\nexport const REPORT_SHEET_SIDE_MENU_OPTIONS = [\r\n {\r\n title: \"Sheet Configuration\",\r\n subTitle: \"Configure how your data appears and organizes in the report\",\r\n config: ConfigTypes.SheetConfig,\r\n icon: 'construction',\r\n color: '#1976d2'\r\n },\r\n \r\n]","import { ElementTypes, FormColumnInputs, IDateRangePickerInput, InputDataTypes } from \"ngx-t-forms-types\";\r\nconst REPORT_DATE_RANGE_PICKER :IDateRangePickerInput={\r\n \"id\": \"491523bc-4170-476c-95c9-0a4041e073e2\",\r\n \"formControlName\": \"dateRange\",\r\n \"sectionId\": \"9bb19b6a-829c-49fb-8cd9-9df753140d92\",\r\n \"label\": \"Date range\",\r\n \"element\":ElementTypes.DateRangePicker ,\r\n \"dataType\":InputDataTypes.Date,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"startDateControl\": \"start\",\r\n \"endDateControl\": \"end\"\r\n}\r\nexport const REPORT_SHEET_INPUTS:FormColumnInputs[] =[\r\n REPORT_DATE_RANGE_PICKER as FormColumnInputs,\r\n]","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\r\nimport moment from 'moment-timezone';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TimeZoneAdapterService extends MomentDateAdapter {\r\n// This will store the user's browser/device timezone\r\n private userTimezone: string;\r\n\r\n constructor(@Optional() @Inject(MAT_DATE_LOCALE) dateLocale: string) {\r\n super(dateLocale);\r\n \r\n // Get user's device locale if not specified otherwise\r\n if (!dateLocale) {\r\n this.setLocale(navigator.language);\r\n }\r\n \r\n // Get the user's timezone from their device\r\n this.userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n }\r\n\r\n // Override parse method to handle user timezone\r\n override parse(value: any, parseFormat: string): moment.Moment | null {\r\n if (value && typeof value === 'string') {\r\n return moment.tz(value, parseFormat, this.locale, true, this.userTimezone);\r\n }\r\n return value ? moment.tz(value, this.userTimezone).locale(this.locale) : null;\r\n }\r\n\r\n // Override format to display in user timezone\r\n override format(date: moment.Moment, displayFormat: string): string {\r\n if (!this.isValid(date)) {\r\n return '';\r\n }\r\n \r\n return date.tz(this.userTimezone).locale(this.locale).format(displayFormat);\r\n }\r\n\r\n // Override create date to use user timezone\r\n override createDate(year: number, month: number, date: number): moment.Moment {\r\n return moment.tz([year, month, date], this.userTimezone).locale(this.locale);\r\n }\r\n\r\n // Override to use timezone\r\n override today(): moment.Moment {\r\n return moment().tz(this.userTimezone).locale(this.locale);\r\n }\r\n\r\n // Make sure deserialize maintains timezone\r\n override deserialize(value: any): moment.Moment | null {\r\n let date;\r\n if (value instanceof Date) {\r\n date = moment(value).tz(this.userTimezone).locale(this.locale);\r\n }\r\n if (typeof value === 'string') {\r\n if (!value) {\r\n return null;\r\n }\r\n date = moment(value, moment.ISO_8601).tz(this.userTimezone).locale(this.locale);\r\n }\r\n if (date && this.isValid(date)) {\r\n return date;\r\n }\r\n return super.deserialize(value);\r\n }\r\n}\r\n","import { Component, inject, Input, Output, EventEmitter, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport { BehaviorSubject, catchError, Observable, take, tap, Subscription, combineLatest, distinctUntilChanged, map } from 'rxjs';\r\nimport { APIDataFetchingConfigurationInterface, ElementEditorInnerSectionElementInterface, InClassFormUtilsInterface, IUserSignature, MongoDbPipeLineConfigInterface, NgxTFormsConfig } from 'ngx-t-forms-types';\r\n\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatToolbar } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { NgxTMatrixTableComponent } from '../ngx-t-matrix-table/ngx-t-matrix-table.component';\r\nimport { IReportSheet } from '../../../types/report';\r\nimport { _isEqual } from '../../shared/functions/isEqual';\r\nimport { NGX_T_REPORTS_CONFIG_TOKEN } from '../../injection-tokens';\r\nimport { ElementEditorComponent } from '../element-editor/element-editor.component';\r\nimport { ConfigTypes, ElementEditorConfig, REPORT_SHEET_SIDE_MENU_OPTIONS, SheetConfig } from '../../config/ngx-t-matrix-table-config';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { getSectionElements, NGX_T_FORMS_CONFIG_TOKEN } from 'ngx-t-forms';\r\nimport { PointGroup } from 'signature_pad';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { REPORT_SHEET_INPUTS } from '../../config/Report-inputs';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatDateFormats } from '@angular/material/core';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { TimeZoneAdapterService } from '../../services';\r\nimport moment from 'moment';\r\nexport const CUSTOM_DATE_FORMATS: MatDateFormats = {\r\n parse: {\r\n dateInput: 'L', // Keep this for parsing\r\n },\r\n display: {\r\n // Be more explicit about the format you want\r\n dateInput: 'DD MMM YYYY', // This will show dates like \"16 May 2024\"\r\n // Or use 'DD/MM/YYYY' for a more compact format\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n};\r\n@Component({\r\n selector: 'app-report-sheet',\r\n standalone: true,\r\n imports: [CommonModule, MatToolbar, MatIconModule, NgxTMatrixTableComponent,\r\n MatTooltipModule,\r\n MatDividerModule,\r\n MatFormFieldModule, MatDatepickerModule, FormsModule, ReactiveFormsModule,\r\n MatProgressSpinnerModule, \r\n ElementEditorComponent, \r\n MatButtonModule],\r\n templateUrl: './report-sheet.component.html',\r\n providers: [\r\n { provide: MAT_DATE_LOCALE, useFactory: () => navigator.language },\r\n { provide: DateAdapter, useClass: TimeZoneAdapterService },\r\n { provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS }\r\n\r\n ],\r\n styleUrl: './report-sheet.component.scss'\r\n})\r\nexport class ReportSheetComponent implements OnDestroy ,OnInit {\r\n \r\n\r\n public _config: IReportSheet | null = null\r\n NGX_T_REPORTS_CONFIG_TOKEN = inject(NGX_T_REPORTS_CONFIG_TOKEN)\r\n public readonly NGX_T_FORMS_CONFIG = inject<NgxTFormsConfig>(NGX_T_FORMS_CONFIG_TOKEN as any)\r\n EXTERNAL_DATA_INTEGRATION = this.NGX_T_REPORTS_CONFIG_TOKEN.dataIntegration\r\n externalDataIntegration$ = this.EXTERNAL_DATA_INTEGRATION().pipe(\r\n distinctUntilChanged(\r\n (prev, curr) => _isEqual(prev, curr)\r\n )\r\n )\r\n @Input() reportName: string | null = null\r\n @Input() editMode: boolean = false\r\n @Input() set config(config: IReportSheet | null) {\r\n\r\n if (_isEqual(this._config, config)) return\r\n this._config = config\r\n this.loadData()\r\n }\r\n get config() {\r\n return this._config\r\n }\r\n sideMenuOptions = REPORT_SHEET_SIDE_MENU_OPTIONS\r\n\r\n\r\n @Output() configChange = new EventEmitter<IReportSheet | null>()\r\n error$ = new BehaviorSubject<string | undefined>(undefined)\r\n dataList$ = new BehaviorSubject<any[]>([])\r\n loading$ = new BehaviorSubject<boolean>(false)\r\n\r\n// Add a class property to track the debounce timer\r\nprivate loadDataDebounceTimer: any = null;\r\n\r\n// Modified loadData method with debounce\r\nloadData() {\r\n // Clear any existing timer to restart the countdown\r\n if (this.loadDataDebounceTimer) {\r\n clearTimeout(this.loadDataDebounceTimer);\r\n }\r\n \r\n // Set a new timer that will execute after 300ms of inactivity\r\n this.loadDataDebounceTimer = setTimeout(() => {\r\n const dataSource = this.config?.dataSources.at(0);\r\n console.error(\"Data Source\", this.config);\r\n \r\n if (!dataSource) {\r\n this.error$.next(\"No data source found\");\r\n return;\r\n }\r\n \r\n dataSource.source === 'api'\r\n ? this.loadApiData(dataSource.config as APIDataFetchingConfigurationInterface)\r\n : this.loadMongoData(dataSource.config as MongoDbPipeLineConfigInterface);\r\n \r\n // Clear the timer reference after execution\r\n this.loadDataDebounceTimer = null;\r\n }, 300);\r\n}\r\n loadMongoData(config: MongoDbPipeLineConfigInterface) {\r\n if (!config.pipeline || config.pipeline.length === 0) {\r\n this.error$.next(\"No pipeline found\")\r\n return\r\n }\r\n if (!config.workflowId) {\r\n this.error$.next(\"No workflowId found\")\r\n return\r\n }\r\n this.loading$.next(true)\r\n this.NGX_T_REPORTS_CONFIG_TOKEN.runPipeLine(\r\n config.pipeline,\r\n config.workflowId\r\n ).pipe(\r\n take(1),\r\n tap(\r\n (data) => {\r\n this.dataList$.next(data.results)\r\n this.loading$.next(false)\r\n this.error$.next(undefined)\r\n\r\n }\r\n ),\r\n catchError((error) => {\r\n console.error(\"Error\", error)\r\n const msg = error instanceof Error ? error.message : \"Unknown error\"\r\n this.error$.next(msg)\r\n this.loading$.next(false)\r\n\r\n\r\n return error\r\n })\r\n\r\n ).subscribe()\r\n\r\n }\r\n loadApiData(config: APIDataFetchingConfigurationInterface) {\r\n const missingInputs: string[] = []\r\n const postData = config.backEndConfig.minimumInputRequired.reduce((acc, curr) => {\r\n const rangeValue = this.range.value\r\n if (curr.type === \"default\") {\r\n acc[curr.name] = curr.defaultValue\r\n return acc\r\n }\r\n if (curr.type === \"mapto\" && rangeValue[curr.name]) {\r\n acc[curr.name] = rangeValue[curr.name]\r\n return acc\r\n }\r\n missingInputs.push(curr.name)\r\n return acc\r\n }, {} as any)\r\n\r\n if (missingInputs.length > 0) {\r\n this.error$.next(`Missing inputs: ${missingInputs.join(\", \")}`)\r\n return\r\n }\r\n\r\n this.loading$.next(true)\r\n\r\n this.NGX_T_REPORTS_CONFIG_TOKEN.postToServer(config.httpEndPoint, postData).pipe(\r\n take(1),\r\n tap((response) => {\r\n \r\n this.dataList$.next(response as any[])\r\n this.loading$.next(false)\r\n this.error$.next(undefined)\r\n }),\r\n catchError((error) => {\r\n const msg = !error.error.message && error instanceof Error ? error.message : error.error.message\r\n console.error(\"Error\", error)\r\n this.error$.next(msg)\r\n this.loading$.next(false)\r\n\r\n\r\n return error\r\n })\r\n ).subscribe()\r\n/************* ✨ Windsurf Command ⭐ *************/\r\n/**\r\n * Loads data from an API based on the provided configuration.\r\n * \r\n * @param config - The configuration object specifying the API endpoint, method, and other parameters\r\n * required for fetching the data.\r\n */\r\n\r\n/******* f6089262-9e73-4765-b244-aec461c2f1be *******/ console.log(\"API Data Loading\", config)\r\n\r\n }\r\n get listConfig() {\r\n return this.config?.listConfig || []\r\n }\r\n set listConfig(value: any) {\r\n if (this._config) {\r\n this._config = {\r\n ...this._config,\r\n listConfig: value\r\n }\r\n this.configChange.emit(this._config)\r\n\r\n }\r\n }\r\n get groupingConfig() {\r\n return this.config?.groupOptions || {}\r\n }\r\n\r\n set groupingConfig(value: any) {\r\n if (this._config) {\r\n this._config = {\r\n ...this._config,\r\n groupOptions: value\r\n }\r\n this.configChange.emit(this._config)\r\n }\r\n }\r\n\r\n configInEdit: string | null = null\r\n setConfigInEdit(type: ConfigTypes) {\r\n this.configInEdit = type\r\n\r\n }\r\n showSidePanel: boolean = false\r\n\r\n setShowSidePanel() {\r\n this.showSidePanel = !this.showSidePanel\r\n if (!this.showSidePanel) {\r\n this.configInEdit = null\r\n }\r\n }\r\n get configActiveConfig(): ElementEditorConfig | null {\r\n if (this.configInEdit === null) return null\r\n const config = {\r\n ...SheetConfig\r\n }\r\n\r\n return {\r\n ...config,\r\n editorSections: config.editorSections.map((section) => {\r\n const elements = getSectionElements(\r\n section.elements, {} as any,\r\n this.NGX_T_FORMS_CONFIG, this.formsUtils, []) as ElementEditorInnerSectionElementInterface[]\r\n return {\r\n ...section,\r\n elements: [...elements],\r\n }\r\n })\r\n }\r\n }\r\n\r\n saveElement(value: any) {\r\n let newConfig = {\r\n ...this.config,\r\n ...value\r\n }\r\n\r\n this.configChange.emit(\r\n newConfig as IReportSheet\r\n )\r\n this.configInEdit = null\r\n\r\n\r\n }\r\n\r\n\r\n\r\n set configActiveConfig(config: ElementEditorConfig | null) {\r\n this.configInEdit = null\r\n\r\n }\r\n formsUtils: InClassFormUtilsInterface = {\r\n httpGetDataFunction: (url: string, options: any) => this.NGX_T_FORMS_CONFIG.formBuilder.httpGetDataFunction(url, options),\r\n httpPostDataFunction: (url: string, data: any, options: any) => this.NGX_T_FORMS_CONFIG.formBuilder.httpPostDataFunction(url, data, options),\r\n submitForm: () => new Observable<void>(subscriber => { subscriber.complete(); }),\r\n setSubmissionStatusValue: (status: any) => { },\r\n saveFormData: function (): Observable<void> {\r\n throw new Error('Function not implemented.');\r\n },\r\n runPipeLine: function (pipeline: any, workflowId: string): Observable<{ results: any; message: string; }> {\r\n throw new Error('Function not implemented.');\r\n },\r\n fileUpload: function (file: string, fileName: string, fileType: string): Observable<{ url: string; }> {\r\n throw new Error('Function not implemented.');\r\n },\r\n getUserSignature: function (): Observable<IUserSignature> {\r\n throw new Error('Function not implemented.');\r\n },\r\n saveUserSignature: function (signature: PointGroup[]): Observable<void> {\r\n throw new Error('Function not implemented.');\r\n }\r\n }\r\n range: FormGroup = new FormGroup({\r\n startDate: new FormControl(moment().subtract(1, 'year')),\r\n endDate: new FormControl(moment()), //\r\n });\r\n report_inputs = REPORT_SHEET_INPUTS\r\n ngOnInit(): void {\r\n this.subscription.add(\r\n this.minMaxDateAndComp$.pipe(\r\n distinctUntilChanged(\r\n (prev, curr) => _isEqual(prev, curr)\r\n ),\r\n tap((data) => {\r\n if (data.minDate) {\r\n this.range.patchValue({\r\n startDate: data.minDate\r\n })\r\n }\r\n if (data.maxDate) {\r\n this.range.patchValue({\r\n endDate: data.maxDate\r\n })\r\n }\r\n }),\r\n ).subscribe()\r\n )\r\n }\r\n subscription = new Subscription()\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe()\r\n\r\n\r\n }\r\nconfig$ = combineLatest([\r\n this.dataList$.asObservable(),\r\n this.externalDataIntegration$\r\n]).pipe(\r\n map(([dataList, dataIntegration]) => {\r\n // Create a completely new object\r\n const configCopy = this._config ? JSON.parse(JSON.stringify(this._config)) : {};\r\n \r\n return Object.freeze({\r\n ...configCopy,\r\n ALL_POSSIBLE_FIELDS: [...new Set(dataList.map((i) => Object.keys(i)).flat())],\r\n EXTERNAL_DATA_INTEGRATION_OPTIONS: Object.keys(dataIntegration).map(\r\n (key) => ({\r\n value: key,\r\n label: key.replace(/([A-Z])/g, ' $1').trim()\r\n })\r\n )\r\n });\r\n })\r\n);\r\n get minMaxDateAndComp$() {\r\n return combineLatest(\r\n [this.config$, this.externalDataIntegration$]\r\n ).pipe(\r\n map(\r\n ([config, dataIntegration]) => {\r\n const integrationMinKey = config?.dateRangeMin || '';\r\n const integrationMaxKey = config?.dateRangeMax || '';\r\n const integrationCompStartKey = config?.dateRangeComparisonStart || '';\r\n const integrationCompEndKey = config?.dateRangeComparisonEnd || '';\r\n\r\n\r\n\r\n // Convert to moment objects if values exist, otherwise null\r\n const minDate = dataIntegration[integrationMinKey]\r\n ? moment(dataIntegration[integrationMinKey])\r\n : null;\r\n const maxDate = dataIntegration[integrationMaxKey]\r\n ? moment(dataIntegration[integrationMaxKey])\r\n : null;\r\n const compStartDate = dataIntegration[integrationCompStartKey]\r\n ? moment(dataIntegration[integrationCompStartKey])\r\n : null;\r\n const compEndDate = dataIntegration[integrationCompEndKey]\r\n\r\n ? moment(dataIntegration[integrationCompEndKey])\r\n : null;\r\n\r\n return {\r\n minDate,\r\n maxDate,\r\n compStartDate,\r\n compEndDate\r\n };\r\n }\r\n )\r\n );\r\n }\r\n\r\n dateChanged:null |Record<string, any> = null\r\n dateRangeChanged(event: any, control: string) {\r\n const value = event.value\r\n\r\n if (this.range) {\r\n this.range.patchValue({\r\n [control]: value\r\n })\r\n this.dateChanged = {\r\n ...this.dateChanged,\r\n [control]: value\r\n }\r\n }\r\n this.loadData()\r\n }\r\n\r\n}\r\n","@if(error$|async){\r\n<mat-toolbar class=\"error-toolbar\">\r\n <mat-icon color=\"warn\" aria-hidden=\"false\" aria-label=\"Error loading transactions\">error_outline</mat-icon>\r\n <span class=\"error-message\">\r\n <div class=\"error-title\">\r\n Failed To load report sheet\r\n </div>\r\n <div class=\"error-details\">\r\n {{error$|async}}\r\n </div>\r\n </span>\r\n <span class=\"spacer\"></span>\r\n <button (click)=\"loadData()\" mat-flat-button color=\"primary\" aria-label=\"Retry loading transactions\">\r\n <mat-icon>refresh</mat-icon>\r\n Retry\r\n </button>\r\n</mat-toolbar>\r\n}\r\n\r\n\r\n\r\n<div class=\"report-sheet-container\">\r\n <div class=\"report-sheet-content\">\r\n @if(loading$|async){\r\n <div\r\n style=\"max-width:400px; margin:auto; padding: 20px; height: 80%; display: flex; align-items: center; justify-content: center;\">\r\n <div style=\"display: flex; flex-direction: column; align-items: center;\">\r\n <mat-spinner diameter=\"40\" mode=\"indeterminate\"></mat-spinner>\r\n <div style=\"text-align: center; margin-top: 10px;\">Loading Report...</div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n }@else {\r\n <mat-toolbar class=\"report-inputs-toolbar\">\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" appearance=\"fill\" class=\"date-range-input\">\r\n <mat-label>Enter a date range</mat-label>\r\n <mat-date-range-input [min]=\"(minMaxDateAndComp$|async)?.minDate\" [max]=\"(minMaxDateAndComp$|async)?.maxDate\" [formGroup]=\"range\"\r\n \r\n [rangePicker]=\"picker\"\r\n [comparisonStart]=\"(minMaxDateAndComp$|async)?.compStartDate\"\r\n [comparisonEnd]=\"(minMaxDateAndComp$|async)?.compEndDate\"\r\n >\r\n <input matStartDate (dateChange)=\"dateRangeChanged($event, 'startDate')\" formControlName=\"startDate\"\r\n placeholder=\"Start date\">\r\n <input (dateChange)=\"dateRangeChanged($event, 'endDate')\" matEndDate formControlName=\"endDate\"\r\n placeholder=\"End date\">\r\n </mat-date-range-input>\r\n\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker touchUi #picker>\r\n <mat-date-range-picker-actions>\r\n <button mat-button matDateRangePickerCancel>Cancel</button>\r\n <button mat-raised-button color=\"primary\" style=\"min-width:120px;border-radius:16px\" matDateRangePickerApply>Apply</button>\r\n </mat-date-range-picker-actions>\r\n </mat-date-range-picker>\r\n\r\n @if (range?.controls?.['startDate']?.hasError('matStartDateInvalid')) {\r\n <mat-error>Invalid start date</mat-error>\r\n }\r\n @if (range?.controls?.['endDate']?.hasError('matEndDateInvalid')) {\r\n <mat-error>Invalid end date</mat-error>\r\n }\r\n <button matSuffix mat-icon-button style=\" margin-right: px;\r\n margin-left: px;\" color=\"primary\" (click)=\"loadData()\" matTooltip=\"Refresh data\" [matTooltipPosition]=\"'before'\">\r\n <mat-icon>\r\n refresh\r\n </mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n\r\n\r\n\r\n </mat-toolbar>\r\n <mat-divider></mat-divider>\r\n\r\n <app-ngx-t-matrix-table\r\n \r\n [list]=\"dataList$|async\" [listConfig]=\"listConfig\" [groupOptions]=\"groupingConfig\"\r\n [reportName]=\"reportName\">\r\n <ng-content ></ng-content>\r\n \r\n </app-ngx-t-matrix-table>}\r\n </div>\r\n <div class=\"report-sheet-sidebar-right\">\r\n\r\n\r\n @if(showSidePanel && configActiveConfig === null){\r\n <div class=\"side-buttons-container\">\r\n @for(item of sideMenuOptions; track item.config){\r\n <button (click)=\"setConfigInEdit(item.config)\" mat-icon-button [matTooltip]=\"item.title\"\r\n [matTooltipPosition]=\"'before'\">\r\n <mat-icon [style.color]=\"item.color\">{{item.icon}}</mat-icon>\r\n\r\n </button>\r\n\r\n }\r\n </div>\r\n }\r\n\r\n\r\n @if(configActiveConfig && configInEdit !== null){\r\n <lib-element-editor [inEdit]=\"config$|async\" [label]=\"configActiveConfig.label\"\r\n [subTitle]=\"configActiveConfig.subTitle\" [editorSections]=\"configActiveConfig.editorSections\"\r\n [formInputs]=\" report_inputs \" [saveButtonLabel]=\"configActiveConfig.saveButtonLabel\"\r\n (closeEditor)=\"configActiveConfig = null\" (saveElement)=\"saveElement($event)\">\r\n </lib-element-editor>\r\n }\r\n\r\n @if(editMode && configInEdit === null){\r\n <button (click)=\"setShowSidePanel()\" mat-flat-button class=\"config-options\" color=\"accent\">\r\n <mat-icon>\r\n {{\r\n showSidePanel ? 'navigate_next' : 'navigate_before'\r\n }}\r\n\r\n </mat-icon>\r\n <span class=\"label\">\r\n {{\r\n showSidePanel ? 'Hide side panel' : 'Show side panel'\r\n }}\r\n\r\n </span>\r\n\r\n </button>\r\n }\r\n\r\n\r\n\r\n </div>\r\n\r\n</div>\r\n\r\n\r\n\r\n<!-- @for(item of tMatrixTableConfigMenu; track item.config){\r\n <button (click)=\"setActiveConfig(item.config)\" mat-menu-item>\r\n <mat-icon>{{item.icon}}</mat-icon>\r\n <span>\r\n <div>{{item.title}}</div>\r\n <small>\r\n {{item.subTitle}}\r\n </small>\r\n </span>\r\n \r\n </button>\r\n \r\n <mat-divider></mat-divider>\r\n \r\n } -->","/*\r\n * Public API Surface of ngx-t-reports\r\n */\r\n\r\n\r\nexport * from './lib/components/index'\r\nexport * from './lib/services/index'\r\nexport * from './lib/injection-tokens/index'\r\nexport * from './types/index'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i10","i11","moment","i5","i6","i7","i8","i9"],"mappings":"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"}