Skip to content

Commit 004766b

Browse files
authored
Merge pull request #1991 from bcgov/feature/ALCS-2302-noi-condition-types-on-admin
ALCS-2302 Implement NOI decision type into admin
2 parents 8f8d55d + 14d5737 commit 004766b

15 files changed

+458
-26
lines changed

alcs-frontend/src/app/features/admin/admin.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { BoardManagementComponent } from './board-management/board-management.co
44
import { CardStatusComponent } from './card-status/card-status.component';
55
import { CeoCriterionComponent } from './ceo-criterion/ceo-criterion.component';
66
import { ConfigurationComponent } from './configuration/configuration.component';
7-
import { DecisionConditionTypesComponent } from './decision-condition-types/decision-condition-types.component';
7+
import { DecisionConditionContainerComponent } from './decision-condition-types/decision-condition-container.component';
88
import { DecisionMakerComponent } from './decision-maker/decision-maker.component';
99
import { HolidayComponent } from './holiday/holiday.component';
1010
import { LocalGovernmentComponent } from './local-government/local-government.component';
@@ -41,7 +41,7 @@ export const childRoutes = [
4141
path: 'dct',
4242
menuTitle: 'Decision Condition Types',
4343
icon: 'hvac',
44-
component: DecisionConditionTypesComponent,
44+
component: DecisionConditionContainerComponent,
4545
},
4646
{
4747
path: 'noi',

alcs-frontend/src/app/features/admin/admin.module.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { CeoCriterionComponent } from './ceo-criterion/ceo-criterion.component';
1616
import { ConfigurationComponent } from './configuration/configuration.component';
1717
import { MaintenanceBannerConfirmationDialogComponent } from './configuration/maintenance-banner-confirmation-dialog/maintenance-banner-confirmation-dialog.component';
1818
import { DecisionConditionTypesDialogComponent } from './decision-condition-types/decision-condition-types-dialog/decision-condition-types-dialog.component';
19+
import { DecisionConditionContainerComponent } from './decision-condition-types/decision-condition-container.component';
1920
import { DecisionConditionTypesComponent } from './decision-condition-types/decision-condition-types.component';
2021
import { DecisionMakerDialogComponent } from './decision-maker/decision-maker-dialog/decision-maker-dialog.component';
2122
import { DecisionMakerComponent } from './decision-maker/decision-maker.component';
@@ -54,8 +55,8 @@ const routes: Routes = [
5455
UnarchiveComponent,
5556
DecisionMakerComponent,
5657
DecisionMakerDialogComponent,
57-
DecisionConditionTypesComponent,
5858
DecisionConditionTypesDialogComponent,
59+
DecisionConditionTypesComponent,
5960
CardStatusComponent,
6061
CardStatusDialogComponent,
6162
BoardManagementComponent,
@@ -67,6 +68,7 @@ const routes: Routes = [
6768
TagComponent,
6869
TagDialogComponent,
6970
TagContainerComponent,
71+
DecisionConditionContainerComponent,
7072
],
7173
imports: [
7274
CommonModule,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<mat-tab-group id="conditions" mat-align-tabs="start">
2+
<mat-tab>
3+
<ng-template mat-tab-label>
4+
<span class="tab-label">Application</span>
5+
</ng-template>
6+
<br />
7+
<app-decision-condition-types [service]="applicationService" />
8+
</mat-tab>
9+
10+
<mat-tab>
11+
<ng-template mat-tab-label>
12+
<span class="tab-label">Notice of Intent</span>
13+
</ng-template>
14+
<br />
15+
<app-decision-condition-types [service]="noiService" />
16+
</mat-tab>
17+
</mat-tab-group>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.tab-label {
2+
font-weight: 700;
3+
font-size: 16px;
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { Component } from '@angular/core';
2+
import { ApplicationDecisionConditionTypesService } from '../../../services/application/application-decision-condition-types/application-decision-condition-types.service';
3+
import { NoticeofIntentDecisionConditionTypesService } from '../../../services/notice-of-intent/notice-of-intent-decision-condition-types/notice-of-intent-decision-condition-types.service';
4+
5+
@Component({
6+
selector: 'app-decision-condition-container',
7+
templateUrl: './decision-condition-container.component.html',
8+
styleUrls: ['./decision-condition-container.component.scss'],
9+
})
10+
export class DecisionConditionContainerComponent {
11+
12+
applicationService: ApplicationDecisionConditionTypesService;
13+
noiService: NoticeofIntentDecisionConditionTypesService;
14+
15+
constructor(
16+
private aplicationDecisionConditionTypesService: ApplicationDecisionConditionTypesService,
17+
private noiDecisionConditionTypesService: NoticeofIntentDecisionConditionTypesService,
18+
) {
19+
this.applicationService = this.aplicationDecisionConditionTypesService;
20+
this.noiService = this.noiDecisionConditionTypesService;
21+
}
22+
}

alcs-frontend/src/app/features/admin/decision-condition-types/decision-condition-types-dialog/decision-condition-types-dialog.component.spec.ts

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { NO_ERRORS_SCHEMA } from '@angular/core';
22
import { ComponentFixture, TestBed } from '@angular/core/testing';
33
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
44
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
5-
import { CeoCriterionService } from '../../../../services/ceo-criterion/ceo-criterion.service';
65
import { ApplicationDecisionConditionTypesService } from '../../../../services/application/application-decision-condition-types/application-decision-condition-types.service';
76

87
import { DecisionConditionTypesDialogComponent } from './decision-condition-types-dialog.component';

alcs-frontend/src/app/features/admin/decision-condition-types/decision-condition-types-dialog/decision-condition-types-dialog.component.ts

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { Component, Inject } from '@angular/core';
22
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
3-
import { ApplicationDecisionConditionTypeDto } from '../../../../services/application/decision/application-decision-v2/application-decision-v2.dto';
43
import { ApplicationDecisionConditionTypesService } from '../../../../services/application/application-decision-condition-types/application-decision-condition-types.service';
4+
import { DecisionDialogDataInterface } from '../decision-dialog-data.interface';
5+
import { NoticeofIntentDecisionConditionTypesService } from '../../../../services/notice-of-intent/notice-of-intent-decision-condition-types/notice-of-intent-decision-condition-types.service';
56

67
@Component({
78
selector: 'app-decision-condition-types-dialog',
@@ -15,18 +16,18 @@ export class DecisionConditionTypesDialogComponent {
1516

1617
isLoading = false;
1718
isEdit = false;
18-
19+
service: ApplicationDecisionConditionTypesService | NoticeofIntentDecisionConditionTypesService | undefined;
1920
constructor(
20-
@Inject(MAT_DIALOG_DATA) public data: ApplicationDecisionConditionTypeDto | undefined,
21+
@Inject(MAT_DIALOG_DATA) public data: DecisionDialogDataInterface | undefined,
2122
private dialogRef: MatDialogRef<DecisionConditionTypesDialogComponent>,
22-
private decisionConditionTypesService: ApplicationDecisionConditionTypesService
2323
) {
24-
if (data) {
25-
this.description = data.description;
26-
this.label = data.label;
27-
this.code = data.code;
24+
this.service = data?.service;
25+
if (data?.content) {
26+
this.description = data.content.description;
27+
this.label = data.content.label;
28+
this.code = data.content.code;
2829
}
29-
this.isEdit = !!data;
30+
this.isEdit = !!data?.content;
3031
}
3132

3233
async onSubmit() {
@@ -37,11 +38,11 @@ export class DecisionConditionTypesDialogComponent {
3738
label: this.label,
3839
description: this.description,
3940
};
40-
41+
if (!this.service) return;
4142
if (this.isEdit) {
42-
await this.decisionConditionTypesService.update(this.code, dto);
43+
await this.service.update(this.code, dto);
4344
} else {
44-
await this.decisionConditionTypesService.create(dto);
45+
await this.service.create(dto);
4546
}
4647
this.isLoading = false;
4748
this.dialogRef.close(true);

alcs-frontend/src/app/features/admin/decision-condition-types/decision-condition-types.component.ts

+22-10
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
1-
import { Component, OnInit } from '@angular/core';
1+
import { Component, Input, OnInit } from '@angular/core';
22
import { MatDialog } from '@angular/material/dialog';
33
import { Subject } from 'rxjs';
44
import { ApplicationDecisionConditionTypeDto } from '../../../services/application/decision/application-decision-v2/application-decision-v2.dto';
5-
import { ApplicationDecisionConditionTypesService } from '../../../services/application/application-decision-condition-types/application-decision-condition-types.service';
65
import { ConfirmationDialogService } from '../../../shared/confirmation-dialog/confirmation-dialog.service';
76
import { DecisionConditionTypesDialogComponent } from './decision-condition-types-dialog/decision-condition-types-dialog.component';
7+
import { ApplicationDecisionConditionTypesService } from '../../../services/application/application-decision-condition-types/application-decision-condition-types.service';
8+
import { NoticeofIntentDecisionConditionTypesService } from '../../../services/notice-of-intent/notice-of-intent-decision-condition-types/notice-of-intent-decision-condition-types.service';
9+
import { NoticeOfIntentDecisionConditionTypeDto } from '../../../services/notice-of-intent/decision-v2/notice-of-intent-decision.dto';
810

911
@Component({
1012
selector: 'app-decision-condition-types',
1113
templateUrl: './decision-condition-types.component.html',
1214
styleUrls: ['./decision-condition-types.component.scss'],
1315
})
1416
export class DecisionConditionTypesComponent implements OnInit {
17+
18+
@Input() public service: ApplicationDecisionConditionTypesService | NoticeofIntentDecisionConditionTypesService | undefined;
19+
1520
destroy = new Subject<void>();
1621

17-
decisionConditionTypeDtos: ApplicationDecisionConditionTypeDto[] = [];
22+
decisionConditionTypeDtos: ApplicationDecisionConditionTypeDto[] | NoticeOfIntentDecisionConditionTypeDto[] = [];
1823
displayedColumns: string[] = ['label', 'description', 'code', 'actions'];
1924

2025
constructor(
21-
private decisionConditionTypesService: ApplicationDecisionConditionTypesService,
2226
public dialog: MatDialog,
2327
private confirmationDialogService: ConfirmationDialogService
2428
) {}
@@ -28,14 +32,18 @@ export class DecisionConditionTypesComponent implements OnInit {
2832
}
2933

3034
async fetch() {
31-
this.decisionConditionTypeDtos = await this.decisionConditionTypesService.fetch();
35+
if (!this.service) return;
36+
this.decisionConditionTypeDtos = await this.service.fetch();
3237
}
3338

3439
async onCreate() {
3540
const dialog = this.dialog.open(DecisionConditionTypesDialogComponent, {
3641
minWidth: '600px',
3742
maxWidth: '800px',
3843
width: '70%',
44+
data: {
45+
service: this.service,
46+
},
3947
});
4048
dialog.beforeClosed().subscribe(async (result) => {
4149
if (result) {
@@ -44,12 +52,15 @@ export class DecisionConditionTypesComponent implements OnInit {
4452
});
4553
}
4654

47-
async onEdit(decisionConditionTypeDto: ApplicationDecisionConditionTypeDto) {
55+
async onEdit(dto: ApplicationDecisionConditionTypeDto | NoticeOfIntentDecisionConditionTypeDto) {
4856
const dialog = this.dialog.open(DecisionConditionTypesDialogComponent, {
4957
minWidth: '600px',
5058
maxWidth: '800px',
5159
width: '70%',
52-
data: decisionConditionTypeDto,
60+
data: {
61+
service: this.service,
62+
content: dto,
63+
},
5364
});
5465
dialog.beforeClosed().subscribe(async (result) => {
5566
if (result) {
@@ -58,14 +69,15 @@ export class DecisionConditionTypesComponent implements OnInit {
5869
});
5970
}
6071

61-
async onDelete(decisionConditionTypeDto: ApplicationDecisionConditionTypeDto) {
72+
async onDelete(dto: ApplicationDecisionConditionTypeDto | NoticeOfIntentDecisionConditionTypeDto) {
6273
this.confirmationDialogService
6374
.openDialog({
64-
body: `Are you sure you want to delete ${decisionConditionTypeDto.label}?`,
75+
body: `Are you sure you want to delete ${dto.label}?`,
6576
})
6677
.subscribe(async (answer) => {
6778
if (answer) {
68-
await this.decisionConditionTypesService.delete(decisionConditionTypeDto.code);
79+
if (!this.service) return;
80+
await this.service.delete(dto.code);
6981
await this.fetch();
7082
}
7183
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { NoticeofIntentDecisionConditionTypesService } from "../../../services/notice-of-intent/notice-of-intent-decision-condition-types/notice-of-intent-decision-condition-types.service";
2+
import { ApplicationDecisionConditionTypesService } from "../../../services/application/application-decision-condition-types/application-decision-condition-types.service";
3+
import { ApplicationDecisionConditionTypeDto } from "../../../services/application/decision/application-decision-v2/application-decision-v2.dto";
4+
5+
export interface DecisionDialogDataInterface {
6+
service: ApplicationDecisionConditionTypesService | NoticeofIntentDecisionConditionTypesService;
7+
content: ApplicationDecisionConditionTypeDto;
8+
}

0 commit comments

Comments
 (0)