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

Scott Berg
committed
import { MatAccordion } from '@angular/material';
@Component({
selector: 'cse-dars-audit',
templateUrl: './audit.component.html',
styleUrls: ['./audit.component.scss'],
encapsulation: ViewEncapsulation.None,
public metadata: any = {};

Scott Berg
committed
public auditId: number;
public courseTerms: string[] = [
'term',
'course',
'credits',
'grade',
'title',
'note',
];

Scott Berg
committed
@Input() audit: Audit;
@ViewChild(MatAccordion) requirements: MatAccordion;
public ngOnInit() {
console.log(this.audit);
}

Scott Berg
committed
public openAllRequirements() {
this.requirements.openAll();
}
public closeAllRequirements() {
this.requirements.closeAll();
}
public getRequirementTitle(requirement: Requirement): string[] {
const title = requirement.requirementContents.find(
(r): r is ContentType =>

Scott Berg
committed
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' });

Scott Berg
committed
}