From 8ddb13a5823d33a3062d496ba4b40f9aaf5770bc Mon Sep 17 00:00:00 2001 From: Scott Berg <saberg3@wisc.edu> Date: Thu, 8 Aug 2019 11:09:59 -0500 Subject: [PATCH] Move audit logic to pipes. --- src/app/dars/audit/audit.component.html | 8 ++--- src/app/dars/audit/audit.component.scss | 5 +-- src/app/dars/audit/audit.component.ts | 32 +------------------ src/app/dars/dars.module.ts | 8 +++-- src/app/dars/pipes/requirement-body.pipe.ts | 25 +++++++++++++++ ...-line.pipe.ts => requirement-line.pipe.ts} | 4 +-- src/app/dars/pipes/requirement-title.pipe.ts | 15 +++++++++ src/app/dars/pipes/school-college.pipe.ts | 3 +- 8 files changed, 55 insertions(+), 45 deletions(-) create mode 100644 src/app/dars/pipes/requirement-body.pipe.ts rename src/app/dars/pipes/{audit-line.pipe.ts => requirement-line.pipe.ts} (86%) create mode 100644 src/app/dars/pipes/requirement-title.pipe.ts diff --git a/src/app/dars/audit/audit.component.html b/src/app/dars/audit/audit.component.html index 3c4aa43..5dd8cbf 100644 --- a/src/app/dars/audit/audit.component.html +++ b/src/app/dars/audit/audit.component.html @@ -134,7 +134,7 @@ <ng-container *ngFor="let requirement of audit.requirements; trackBy: trackReq"> <!-- START OF ACCORDION REQUIREMENT --> - <mat-expansion-panel #requirementPanel [expanded]="false" [disabled]="getRequirementBody(requirement).length === 0"> + <mat-expansion-panel #requirementPanel [expanded]="false" [disabled]="(requirement | requirementBody).length === 0"> <mat-expansion-panel-header class="reqExpansionPanelHeader" collapsedHeight="auto" expandedHeight="auto"> <mat-panel-title class="requirement-title status-{{requirement.status.status.toLowerCase()}}"> @@ -172,7 +172,7 @@ </div> <div> <p> - <ng-container *ngFor="let line of getRequirementTitle(requirement)"> + <ng-container *ngFor="let line of (requirement | requirementTitle)"> {{line}} </ng-container> </p> @@ -180,7 +180,7 @@ </mat-panel-title> </mat-expansion-panel-header> - <div *ngFor="let reqBody of getRequirementBody(requirement); trackBy: trackByIndex"> + <div *ngFor="let reqBody of requirement | requirementBody; trackBy: trackByIndex"> <div class="content-type content-type-{{reqBody.contentType}}" matTooltip="{{reqBody.contentType}}" matTooltipPosition="left"> <ng-container [ngSwitch]="reqBody.template"> @@ -227,7 +227,7 @@ <ng-container *ngSwitchCase="'lines'"> <p *ngFor="let line of asLineBody(reqBody).lines; trackBy: trackByIndex" - [innerHTML]="line | auditLine:reqBody.contentType"></p> + [innerHTML]="line | requirementLine:reqBody.contentType"></p> </ng-container> </ng-container> diff --git a/src/app/dars/audit/audit.component.scss b/src/app/dars/audit/audit.component.scss index 86b1546..71729a4 100644 --- a/src/app/dars/audit/audit.component.scss +++ b/src/app/dars/audit/audit.component.scss @@ -114,14 +114,11 @@ $black: #000000; .reqExpansionPanelHeader[aria-disabled='true'] { .requirement-title { - padding-left: 3.1em; + padding-left: 44px; } .requirement-toggle { display: none; } - .requirement-icon { - display: none; - } } .requirement-title { display: flex; diff --git a/src/app/dars/audit/audit.component.ts b/src/app/dars/audit/audit.component.ts index 54388b4..7183694 100644 --- a/src/app/dars/audit/audit.component.ts +++ b/src/app/dars/audit/audit.component.ts @@ -47,7 +47,7 @@ export class DarsAuditComponent implements OnInit { public ngOnInit() { // Filter out LEGEND from audit data - this.audit.requirements = this.audit.requirements.filter(function( + this.audit.requirements = this.audit.requirements.filter(function ( requirement, ) { return requirement.requirementName !== 'LEGEND'; @@ -63,36 +63,6 @@ export class DarsAuditComponent implements OnInit { this.requirements.closeAll(); } - public getRequirementTitle(requirement: Requirement): string[] { - const title = requirement.requirementContents.find( - (r): r is ContentType => - r.contentType === 'okRequirementTitle' || - r.contentType === 'hText' || - 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': - case 'hText': - 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}`; } diff --git a/src/app/dars/dars.module.ts b/src/app/dars/dars.module.ts index 210611f..fae4a58 100644 --- a/src/app/dars/dars.module.ts +++ b/src/app/dars/dars.module.ts @@ -11,7 +11,9 @@ import { MatStepperModule } from '@angular/material'; import { AlertContainerComponent } from '../shared/components/alert-container/alert-container.component'; import { StoreModule } from '@ngrx/store'; import { darsReducer } from './store/reducer'; -import { AuditLinePipe } from './pipes/audit-line.pipe'; +import { RequirementTitlePipe } from './pipes/requirement-title.pipe'; +import { RequirementBodyPipe } from './pipes/requirement-body.pipe'; +import { RequirementLinePipe } from './pipes/requirement-line.pipe'; import { SchoolOrCollegePipe } from './pipes/school-college.pipe'; import { AuditNamePipe } from './pipes/name-format.pipe'; import { NewDegreeAuditDialogComponent } from './new-degree-audit-dialog/new-degree-audit-dialog.component'; @@ -29,7 +31,9 @@ import { RouterModule } from '@angular/router'; ], exports: [MatStepperModule], declarations: [ - AuditLinePipe, + RequirementTitlePipe, + RequirementBodyPipe, + RequirementLinePipe, SchoolOrCollegePipe, AuditNamePipe, NewDegreeAuditDialogComponent, diff --git a/src/app/dars/pipes/requirement-body.pipe.ts b/src/app/dars/pipes/requirement-body.pipe.ts new file mode 100644 index 0000000..eb64a20 --- /dev/null +++ b/src/app/dars/pipes/requirement-body.pipe.ts @@ -0,0 +1,25 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { Requirement, ContentType, SubRequirementCourses } from '../models/audit/requirement'; + +@Pipe({ name: 'requirementBody', pure: true }) +export class RequirementBodyPipe implements PipeTransform { + transform(requirement: Requirement) { + return requirement.requirementContents.reduce< + ( + | ContentType & { template: 'lines' } + | SubRequirementCourses & { template: 'courses' })[] + >((acc, item) => { + switch (item.contentType) { + case 'okRequirementTitle': + case 'noRequirementTitle': + case 'hText': + return acc; + case 'okSubrequirementCourses': + case 'noSubrequirementCourses': + return [...acc, { ...item, template: 'courses' }]; + default: + return [...acc, { ...item, template: 'lines' }]; + } + }, []); + } +} diff --git a/src/app/dars/pipes/audit-line.pipe.ts b/src/app/dars/pipes/requirement-line.pipe.ts similarity index 86% rename from src/app/dars/pipes/audit-line.pipe.ts rename to src/app/dars/pipes/requirement-line.pipe.ts index 3b0223c..c4355a5 100644 --- a/src/app/dars/pipes/audit-line.pipe.ts +++ b/src/app/dars/pipes/requirement-line.pipe.ts @@ -1,8 +1,8 @@ import { Pipe, PipeTransform } from '@angular/core'; import { ContentType } from '../models/audit/requirement'; -@Pipe({ name: 'auditLine' }) -export class AuditLinePipe implements PipeTransform { +@Pipe({ name: 'requirementLine' }) +export class RequirementLinePipe implements PipeTransform { replaceIcon(line: string, search: string, icon: string): string { return line.replace(search, `<i class="material-icons">${icon}</i>`); } diff --git a/src/app/dars/pipes/requirement-title.pipe.ts b/src/app/dars/pipes/requirement-title.pipe.ts new file mode 100644 index 0000000..cff7cff --- /dev/null +++ b/src/app/dars/pipes/requirement-title.pipe.ts @@ -0,0 +1,15 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { Requirement, ContentType } from '../models/audit/requirement'; + +@Pipe({ name: 'requirementTitle', pure: true }) +export class RequirementTitlePipe implements PipeTransform { + transform(requirement: Requirement): string[] { + const title = requirement.requirementContents.find( + (r): r is ContentType => + r.contentType === 'okRequirementTitle' || + r.contentType === 'hText' || + r.contentType === 'noRequirementTitle', + ); + return title ? title.lines : ['No title found']; + } +} diff --git a/src/app/dars/pipes/school-college.pipe.ts b/src/app/dars/pipes/school-college.pipe.ts index 8123b90..20bf836 100644 --- a/src/app/dars/pipes/school-college.pipe.ts +++ b/src/app/dars/pipes/school-college.pipe.ts @@ -1,7 +1,6 @@ import { Pipe, PipeTransform } from '@angular/core'; -import { ContentType } from '../models/audit/requirement'; -@Pipe({ name: 'schoolOrCollege' }) +@Pipe({ name: 'schoolOrCollege', pure: true }) export class SchoolOrCollegePipe implements PipeTransform { transform(string: string): string { if (string.includes(', School of')) { -- GitLab