Skip to content
Snippets Groups Projects
audit.component.ts 2.29 KiB
Newer Older
import {
  Component,
  Input,
  ViewChild,
  OnInit,
  ViewEncapsulation,
} from '@angular/core';
import { Audit } from '../models/audit/audit';
import {
  Requirement,
  ContentType,
  SubRequirementCourses,
  RequirementContents,
  SubRequirementCourse,
} from '../models/audit/requirement';
import { MatAccordion } from '@angular/material';

@Component({
  selector: 'cse-dars-audit',
  templateUrl: './audit.component.html',
  styleUrls: ['./audit.component.scss'],
  encapsulation: ViewEncapsulation.None,
Scott Berg's avatar
Scott Berg committed
export class DarsAuditComponent implements OnInit {
  public courseTerms: string[] = [
    'term',
    'course',
    'credits',
    'grade',
    'title',
    'note',
  ];
Scott Berg's avatar
Scott Berg committed
  @ViewChild(MatAccordion) requirements: MatAccordion;

  public ngOnInit() {
    console.log(this.audit);
  }

  public openAllRequirements() {
    this.requirements.openAll();
  }

  public closeAllRequirements() {
    this.requirements.closeAll();
  }

  public getRequirementTitle(requirement: Requirement): string[] {
    const title = requirement.requirementContents.find(
      (r): r is ContentType =>
        r.contentType === 'okRequirementTitle' ||
        r.contentType === 'noRequirementTitle',
    );
    return title ? title.lines : ['No title found'];
  }

  public getRequirementBody(requirement: Requirement) {
    return requirement.requirementContents.reduce<
      (
        | ContentType & { template: 'lines' }
        | SubRequirementCourses & { template: 'courses' })[]
    >((acc, item) => {
      switch (item.contentType) {
        case 'okRequirementTitle':
        case 'noRequirementTitle':
          return acc;
        case 'okSubrequirementCourses':
        case 'noSubrequirementCourses':
          return [...acc, { ...item, template: 'courses' }];
        default:
          return [...acc, { ...item, template: 'lines' }];
      }
    }, []);
  }

  public trackReq(index: number, req: Requirement) {
    return `${index}-${req.requirementName}`;
  }

  public trackByIndex(index: number, i: any) {
    return index;
  }

  public asCourseBody(reqBody: any) {
    return reqBody as (SubRequirementCourses & { template: 'courses' });
  }

  public asLineBody(reqBody: any) {
    return reqBody as (ContentType & { template: 'lines' });