Aam-Digital/ndb-core

View on GitHub
src/app/features/reporting/reporting/report-row/report-row.component.ts

Summary

Maintainability
A
0 mins
Test Coverage
F
46%
import { Component, Input } from "@angular/core";
import { getGroupingInformationString, ReportRow } from "../../report-row";
import { FlatTreeControl } from "@angular/cdk/tree";
import {
  MatTreeFlatDataSource,
  MatTreeFlattener,
} from "@angular/material/tree";
import { MatTableModule } from "@angular/material/table";
import { MatButtonModule } from "@angular/material/button";
import { FontAwesomeModule } from "@fortawesome/angular-fontawesome";

interface FlattenedReportRow extends ReportRow {
  level: number;
  isExpandable: boolean;
}

@Component({
  selector: "app-report-row",
  templateUrl: "./report-row.component.html",
  styleUrls: ["./report-row.component.scss"],
  imports: [MatTableModule, MatButtonModule, FontAwesomeModule],
  standalone: true,
})
export class ReportRowComponent {
  @Input() set rows(rows: ReportRow[]) {
    this.dataSource.data = rows;
  }

  displayedColumns: string[] = ["name", "count"];

  getGroupedByString = getGroupingInformationString;
  treeFlattener = new MatTreeFlattener<ReportRow, FlattenedReportRow>(
    (row, level) => ({
      level: level,
      isExpandable: !!row.subRows && row.subRows.length > 0,
      ...row,
    }),
    (row) => row.level,
    (row) => row.isExpandable,
    (row) => row.subRows,
  );
  treeControl = new FlatTreeControl<FlattenedReportRow>(
    (row) => row.level,
    (row) => row.isExpandable,
  );
  dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
}