src/app/features/reporting/reporting/report-row/report-row.component.ts

Extends

ReportRow

Relationships

Used by

No results matching.

Depends on

import {
  Component,
  ChangeDetectionStrategy,
  effect,
  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({
  changeDetection: ChangeDetectionStrategy.OnPush,
  selector: "app-report-row",
  templateUrl: "./report-row.component.html",
  styleUrls: ["./report-row.component.scss"],
  imports: [MatTableModule, MatButtonModule, FontAwesomeModule],
})
export class ReportRowComponent {
  rows = input<ReportRow[]>([]);

  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);

  constructor() {
    effect(() => {
      this.dataSource.data = this.rows();
    });
  }
}

results matching ""

    No results matching ""