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, }) export class DarsAuditComponent implements OnInit { public metadata: any = {}; public auditId: number; public courseTerms: string[] = [ 'term', 'course', 'credits', 'grade', 'title', 'note', ]; @Input() audit: Audit; @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' }); } }