Skip to content

Commit 8d8bcab

Browse files
authored
Merge pull request #2045 from bcgov/feature/ALCS-2351
Add Tags and File Status to Commissioner View
2 parents bcbaf52 + f6bf2ec commit 8d8bcab

16 files changed

+137
-11
lines changed

alcs-frontend/src/app/features/commissioner/application/commissioner-application.component.html

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
<div class="layout">
22
<div class="application">
3-
<app-details-header [application]="application" heading="Application" days="Business Days"></app-details-header>
3+
<app-details-header
4+
[application]="application"
5+
heading="Application"
6+
days="Business Days"
7+
[isTagSectionHidden]="false"
8+
[submissionStatusService]="applicationStatusService"
9+
[showStatus]="true"
10+
></app-details-header>
411
<section class="content">
512
<app-commissioner-decisions
613
*ngIf="application?.decisions"

alcs-frontend/src/app/features/commissioner/application/commissioner-application.component.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ import { createMock, DeepMocked } from '@golevelup/ts-jest';
55
import { CommissionerService } from '../../../services/commissioner/commissioner.service';
66

77
import { CommissionerApplicationComponent } from './commissioner-application.component';
8+
import { ApplicationSubmissionStatusService } from '../../../services/application/application-submission-status/application-submission-status.service';
89

910
describe('CommissionerApplicationComponent', () => {
1011
let component: CommissionerApplicationComponent;
1112
let fixture: ComponentFixture<CommissionerApplicationComponent>;
1213
let mockCommissionerService: DeepMocked<CommissionerService>;
14+
let mockApplicationSubmissionStatusService: DeepMocked<ApplicationSubmissionStatusService>;
1315

1416
beforeEach(async () => {
1517
mockCommissionerService = createMock();
18+
mockApplicationSubmissionStatusService = createMock();
1619

1720
await TestBed.configureTestingModule({
1821
imports: [RouterTestingModule],
@@ -22,6 +25,10 @@ describe('CommissionerApplicationComponent', () => {
2225
provide: CommissionerService,
2326
useValue: mockCommissionerService,
2427
},
28+
{
29+
provide: ApplicationSubmissionStatusService,
30+
useValue: mockApplicationSubmissionStatusService,
31+
},
2532
],
2633
schemas: [NO_ERRORS_SCHEMA],
2734
}).compileComponents();

alcs-frontend/src/app/features/commissioner/application/commissioner-application.component.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,15 @@ import { DOCUMENT_TYPE } from '../../../shared/document/document.dto';
66
import { environment } from '../../../../environments/environment';
77
import { CommissionerApplicationDto } from '../../../services/commissioner/commissioner.dto';
88
import { CommissionerService } from '../../../services/commissioner/commissioner.service';
9+
import { FileTagService } from '../../../services/common/file-tag.service';
10+
import { ApplicationTagService } from '../../../services/application/application-tag/application-tag.service';
11+
import { ApplicationSubmissionStatusService } from '../../../services/application/application-submission-status/application-submission-status.service';
912

1013
@Component({
1114
selector: 'app-commissioner-application',
1215
templateUrl: './commissioner-application.component.html',
1316
styleUrls: ['./commissioner-application.component.scss'],
17+
providers: [{ provide: FileTagService, useClass: ApplicationTagService }],
1418
})
1519
export class CommissionerApplicationComponent implements OnInit, OnDestroy {
1620
destroy = new Subject<void>();
@@ -20,6 +24,7 @@ export class CommissionerApplicationComponent implements OnInit, OnDestroy {
2024

2125
constructor(
2226
private commissionerService: CommissionerService,
27+
public applicationStatusService: ApplicationSubmissionStatusService,
2328
private route: ActivatedRoute,
2429
private titleService: Title,
2530
) {}

alcs-frontend/src/app/shared/details-header/details-header.component.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ <h5 class="detail-heading">
4343
</div>
4444
</div>
4545
<div class="tag-container">
46-
<app-tags-header [application]="_application" *ngIf="!isTagSectionHidden"></app-tags-header>
46+
<app-tags-header [application]="_application" *ngIf="!isTagSectionHidden && !isCommissioner"></app-tags-header>
47+
<app-commissioner-tags-header
48+
[application]="_application"
49+
*ngIf="!isTagSectionHidden && isCommissioner"
50+
></app-commissioner-tags-header>
4751
</div>
4852
</div>
4953
</div>

alcs-frontend/src/app/shared/shared.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ import { TagsHeaderComponent } from './tags/tags-header/tags-header.component';
7878
import { MatChipsModule } from '@angular/material/chips';
7979
import { TagChipComponent } from './tags/tag-chip/tag-chip.component';
8080
import { DomSanitizer } from '@angular/platform-browser';
81+
import { CommissionerTagsHeaderComponent } from './tags/commissioner-tags-header/commissioner-tags-header.component';
8182

8283
@NgModule({
8384
declarations: [
@@ -121,6 +122,7 @@ import { DomSanitizer } from '@angular/platform-browser';
121122
TruncatePipe,
122123
TagsHeaderComponent,
123124
TagChipComponent,
125+
CommissionerTagsHeaderComponent,
124126
],
125127
imports: [
126128
CommonModule,
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<div
2+
class="tag-container"
3+
[ngClass]="{ hovered: hovered, clicked: clicked }"
4+
(mouseleave)="hovered = false"
5+
(mouseenter)="hovered = true"
6+
>
7+
<app-tag-chip *ngFor="let tag of tags" [tag]="tag" [removable]="false"></app-tag-chip>
8+
</div>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
.tag-container {
2+
width: 100%;
3+
margin-left: -10px;
4+
margin-top: -5px;
5+
border: 1px solid transparent;
6+
border-radius: 4px;
7+
padding: 5px;
8+
9+
&.hovered {
10+
border: 1px solid #aaaaaa;
11+
}
12+
13+
&.clicked {
14+
border: 1px solid #929292;
15+
}
16+
}
17+
18+
.category {
19+
color: #a0a0a0;
20+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { CommissionerTagsHeaderComponent } from './commissioner-tags-header.component';
4+
import { createMock, DeepMocked } from '@golevelup/ts-jest';
5+
import { FileTagService } from '../../../services/common/file-tag.service';
6+
7+
describe('CommissionerTagsHeaderComponent', () => {
8+
let component: CommissionerTagsHeaderComponent;
9+
let fixture: ComponentFixture<CommissionerTagsHeaderComponent>;
10+
let mockFileTagService: DeepMocked<FileTagService>;
11+
12+
beforeEach(async () => {
13+
mockFileTagService = createMock();
14+
15+
await TestBed.configureTestingModule({
16+
declarations: [CommissionerTagsHeaderComponent],
17+
providers: [
18+
{
19+
provide: FileTagService,
20+
useValue: mockFileTagService,
21+
},
22+
],
23+
}).compileComponents();
24+
25+
fixture = TestBed.createComponent(CommissionerTagsHeaderComponent);
26+
component = fixture.componentInstance;
27+
fixture.detectChanges();
28+
});
29+
30+
it('should create', () => {
31+
expect(component).toBeTruthy();
32+
});
33+
});
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';
2+
import { TagDto } from '../../../services/tag/tag.dto';
3+
import { FileTagService } from '../../../services/common/file-tag.service';
4+
import { ApplicationDto } from '../../../services/application/application.dto';
5+
import { CommissionerApplicationDto } from '../../../services/commissioner/commissioner.dto';
6+
import { NoticeOfIntentDto } from '../../../services/notice-of-intent/notice-of-intent.dto';
7+
import { NotificationDto } from '../../../services/notification/notification.dto';
8+
9+
@Component({
10+
selector: 'app-commissioner-tags-header',
11+
templateUrl: './commissioner-tags-header.component.html',
12+
styleUrl: './commissioner-tags-header.component.scss',
13+
})
14+
export class CommissionerTagsHeaderComponent implements OnInit, OnChanges {
15+
tags: TagDto[] = [];
16+
17+
hovered = false;
18+
clicked = false;
19+
20+
@Input() application: ApplicationDto | CommissionerApplicationDto | NoticeOfIntentDto | NotificationDto | undefined;
21+
@Input() isHidden: boolean = false;
22+
23+
constructor(private fileTagService: FileTagService) {}
24+
25+
ngOnInit(): void {}
26+
27+
ngOnChanges(changes: SimpleChanges): void {
28+
if (changes['application'] && changes['application'].currentValue !== undefined) {
29+
this.initFileTags();
30+
}
31+
}
32+
async initFileTags() {
33+
const res = await this.fileTagService.getTags(this.application?.fileNumber!);
34+
this.tags = res!;
35+
}
36+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
<mat-chip-row (removed)="onRemove()"
1+
<mat-chip-row (removed)="onRemove()" [ngClass]="{ removable: !removable }"
22
>{{ tag.name }}
3-
<button matChipRemove [attr.aria-label]="'remove ' + tag">
3+
<button matChipRemove [attr.aria-label]="'remove ' + tag" *ngIf="removable">
44
<mat-icon svgIcon="cancel_filled"></mat-icon>
55
</button>
66
</mat-chip-row>

0 commit comments

Comments
 (0)