Skip to content
Snippets Groups Projects
Forked from an inaccessible project.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
metadata-table.component.ts 1.67 KiB
import {
  Component,
  Input,
  Output,
  EventEmitter,
  ViewChild,
  OnInit,
} from '@angular/core';
import { AuditMetadata } from '../models/audit-metadata';
import { MatPaginator } from '@angular/material/paginator';
import { MatTableDataSource } from '@angular/material/table';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';

@Component({
  selector: 'cse-dars-metadata-table',
  templateUrl: './metadata-table.component.html',
  styleUrls: ['./metadata-table.component.scss'],
})
export class DarsMetadataTableComponent implements OnInit {
  @Input() public metadata: Observable<AuditMetadata[]>;
  @Input() public title: string;
  @Input() public tagline: string;
  @Input() public button: string;

  @Output() public openAudit = new EventEmitter<AuditMetadata>();
  @Output() buttonClick = new EventEmitter();

  @ViewChild(MatPaginator) paginator: MatPaginator;

  public dataSource: MatTableDataSource<AuditMetadata>;

  public displayedColumns = [
    'view',
    'school',
    'program',
    'honors',
    'plan',
    'status',
    'download',
  ];

  public static sortMetadata(metadata: AuditMetadata[]): AuditMetadata[] {
    return metadata.sort((a, b) => {
      const aDate = new Date(a.darsAuditRunDate);
      const bDate = new Date(b.darsAuditRunDate);

      if (aDate < bDate) {
        return 1;
      }
      if (aDate > bDate) {
        return -1;
      }
      return 0;
    });
  }

  public ngOnInit() {
    this.metadata.subscribe(metadata => {
      const sorted = DarsMetadataTableComponent.sortMetadata(metadata);
      this.dataSource = new MatTableDataSource<AuditMetadata>(sorted);
      this.dataSource.paginator = this.paginator;
    });
  }
}