{"version":3,"file":"ngx-t-forms-section-report.component-DhSaf85h.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/section-report/section-report.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/section-report/section-report.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Signal, computed, inject, input } from '@angular/core';\r\n\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\n\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\n\r\nimport { ElementTypes, FormSlideInterface, validateFormSlide } from 'ngx-t-forms-types';\r\n\r\ninterface SectionReportMetric {\r\n  icon: string;\r\n  name: string;\r\n  value: number;\r\n  color: string;\r\n  description: string;\r\n  trend: string;\r\n  category: string;\r\n  details?: unknown[];\r\n}\r\n\r\n@Component({\r\n  selector: 'lib-section-report',\r\n  imports: [\r\n    MatChipsModule,\r\n    MatIconModule,\r\n    MatSortModule,\r\n    MatTableModule,\r\n    MatToolbarModule,\r\n  ],\r\n  templateUrl: './section-report.component.html',\r\n  styleUrl: './section-report.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SectionReportComponent {\r\n  readonly sectionId = input.required<string>();\r\n\r\n  protected readonly displayedColumns: readonly string[] = ['icon', 'name', 'description', 'value'];\r\n\r\n  readonly #store: FormsStoreService = inject(FormsStoreService);\r\n  protected readonly selectFormInEdit = this.#store.signalSelectors.selectFormInEdit;\r\n\r\n  protected readonly section: Signal<FormSlideInterface | null> = computed<FormSlideInterface | null>(() => {\r\n    const form = this.selectFormInEdit();\r\n    return (\r\n      form?.form.slides.find((slide: FormSlideInterface) => slide.sectionId === this.sectionId()) ||\r\n      null\r\n    );\r\n  });\r\n\r\n  protected readonly sectionData: Signal<SectionReportMetric[]> = computed<SectionReportMetric[]>(\r\n    () => this.#buildMetrics(this.section()),\r\n  );\r\n\r\n  #buildMetrics(data: FormSlideInterface | null): SectionReportMetric[] {\r\n    if (!data) return [];\r\n    const sectionId = this.sectionId();\r\n    const allInputs = data.columns\r\n      .flatMap((column) =>\r\n        column.element === ElementTypes.MultipleInput\r\n          ? [...(column?.formInputs || []), column]\r\n          : [column],\r\n      )\r\n      .filter((input) => input.sectionId === sectionId);\r\n\r\n    const calculatedInputs = allInputs.filter(\r\n      (input) =>\r\n        input.calculatedFieldRules?.formula && input.calculatedFieldRules?.formula !== '',\r\n    );\r\n    const inputsWithManualValidations = allInputs.filter((input) =>\r\n      input.validators?.some((validator) => Object.keys(validator).length > 0),\r\n    );\r\n    const allSectionInputConfigErrors = validateFormSlide(data);\r\n\r\n    return [\r\n      {\r\n        icon: 'input',\r\n        name: 'Total Inputs',\r\n        value: Object.keys(allInputs || {}).length,\r\n        color: '#2196f3',\r\n        description: 'Total number of form inputs in section',\r\n        trend: 'stable',\r\n        category: 'inputs',\r\n      },\r\n      {\r\n        icon: 'calculate',\r\n        name: 'Calculated Fields',\r\n        value: calculatedInputs.length,\r\n        details: calculatedInputs,\r\n        color: '#4caf50',\r\n        description: 'Fields with calculation formulas',\r\n        trend: 'monitoring',\r\n        category: 'calculations',\r\n      },\r\n      {\r\n        icon: 'rule',\r\n        name: 'Manual Validations',\r\n        value: inputsWithManualValidations.length,\r\n        details: inputsWithManualValidations,\r\n        color: '#ff9800',\r\n        description: 'Fields with custom validation rules',\r\n        trend: 'warning',\r\n        category: 'validation',\r\n      },\r\n      {\r\n        icon: 'bug_report',\r\n        name: 'Config Errors',\r\n        value: allSectionInputConfigErrors.length,\r\n        color: '#f44336',\r\n        description: 'Configuration errors detected',\r\n        trend: 'critical',\r\n        category: 'errors',\r\n      },\r\n    ];\r\n  }\r\n}\r\n","@if (section()) {\r\n  <div class=\"report-container\">\r\n    <mat-toolbar style=\"padding: 0px;\">\r\n      <mat-icon class=\"section-icon\">analytics</mat-icon>\r\n      <small>\r\n        Form Section Diagnostic Report\r\n      </small>\r\n\r\n      <span class=\"spacer\"></span>\r\n      <div class=\"status-chips\">\r\n        <div class=\"status-chip\">\r\n          <mat-icon>check_circle</mat-icon>\r\n        </div>\r\n        @if (section()?.sectionIsSeen) {\r\n          <div class=\"status-chip initialized\">\r\n            <mat-icon>task_alt</mat-icon>\r\n            Initialized\r\n          </div>\r\n        }\r\n      </div>\r\n    </mat-toolbar>\r\n\r\n    <table mat-table [dataSource]=\"(sectionData()) || []\" matSort class=\"w-full\">\r\n      <!-- Icon Column -->\r\n      <ng-container matColumnDef=\"icon\">\r\n        <th mat-header-cell *matHeaderCellDef></th>\r\n        <td mat-cell *matCellDef=\"let row\">\r\n          <mat-icon [style.color]=\"row.color\">{{ row.icon }}</mat-icon>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <!-- description Column -->\r\n      <ng-container matColumnDef=\"description\">\r\n        <th mat-header-cell *matHeaderCellDef mat-sort-header>description</th>\r\n        <td mat-cell *matCellDef=\"let row\">{{ row.description }}</td>\r\n      </ng-container>\r\n\r\n      <!-- Name Column -->\r\n      <ng-container matColumnDef=\"name\">\r\n        <th mat-header-cell *matHeaderCellDef mat-sort-header>Type</th>\r\n        <td mat-cell *matCellDef=\"let row\">{{ row.name }}</td>\r\n      </ng-container>\r\n\r\n      <!-- Value Column -->\r\n      <ng-container matColumnDef=\"value\">\r\n        <th mat-header-cell *matHeaderCellDef mat-sort-header>Value</th>\r\n        <td mat-cell *matCellDef=\"let row\">{{ row.value }}</td>\r\n      </ng-container>\r\n\r\n      <!-- Details Column -->\r\n      <ng-container matColumnDef=\"details\">\r\n        <th mat-header-cell *matHeaderCellDef>Details</th>\r\n        <td mat-cell *matCellDef=\"let row\">\r\n          @if (row.details?.length) {\r\n            <mat-chip-set>\r\n              @for (detail of row.details; track $index) {\r\n                <mat-chip class=\"detail-chip\">{{ detail }}</mat-chip>\r\n              }\r\n            </mat-chip-set>\r\n          }\r\n        </td>\r\n      </ng-container>\r\n\r\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n      <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n    </table>\r\n  </div>\r\n}\r\n"],"names":["i1","i2","i3","i4","i5"],"mappings":"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"}