Skip to content

Commit a10da92

Browse files
Merge branch 'main' into synchronize-variables
2 parents 1a0b24f + 4cff28e commit a10da92

19 files changed

+623
-250
lines changed

.github/workflows/release.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,21 @@ jobs:
2727
docker tag ${{vars.REGISTRY}}/${{ github.repository }}-${{ matrix.component-name }}:latest ${{vars.REGISTRY}}/${{ github.repository }}-${{ matrix.component-name }}:${{ github.event.release.tag_name }}
2828
docker push ${{vars.REGISTRY}}/${{ github.repository }}-${{ matrix.component-name }}:${{ github.event.release.tag_name }}
2929
30-
deploy-prd:
30+
deploy-prod:
3131
needs: tag-builds
3232
if: ${{ contains(github.event.release.tag_name, '-release') }}
3333
uses: ./.github/workflows/terragrunt-deploy.yml
3434
secrets: inherit
3535
with:
36-
DEFAULT_APPLICATION_ENVIRONMENT: prd
36+
DEFAULT_APPLICATION_ENVIRONMENT: prod
3737
IMAGE_TAG: ${{ github.event.release.tag_name }}
3838
COMMAND: apply
3939
RUN_LIQUIBASE: 'true'
4040
GDB_EXTRACTOR_IMAGE: ${{ needs.node-build.outputs.gdb_digest }}
4141

4242
wfprev-ui:
4343
uses: ./.github/workflows/client-build.yml
44-
needs: [deploy-prd]
44+
needs: [deploy-prod]
4545
with:
46-
DEFAULT_APPLICATION_ENVIRONMENT: prd
46+
DEFAULT_APPLICATION_ENVIRONMENT: prod
4747
secrets: inherit

.github/workflows/terragrunt-deploy.yml

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ on:
3131
options:
3232
- dev
3333
- test
34-
- prd
34+
- prod
3535
IMAGE_TAG:
3636
required: true
3737
type: string
@@ -100,32 +100,6 @@ jobs:
100100
export IMAGE='${{vars.REPOSITORY_HOST}}/${{ github.repository }}-wfprev-api:${{ inputs.IMAGE_TAG }}'
101101
docker pull $IMAGE
102102
echo "IMAGE_API_BY_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' $IMAGE)" >> $GITHUB_OUTPUT
103-
104-
# No image for UI components anymore
105-
# - name: Get digest of UI docker image
106-
# id: getDigestUI
107-
# run: |
108-
# export IMAGE='${{vars.REPOSITORY_HOST}}/${{ github.repository }}-wfprev-war:${{ inputs.IMAGE_TAG }}'
109-
# docker pull $IMAGE
110-
# echo "IMAGE_UI_BY_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' $IMAGE)" >> $GITHUB_OUTPUT
111-
112-
# For future environment configurtion enhancement
113-
# - id: mapEnvironments
114-
# name: Check if deploy is pr-based and which namespace it deploys to
115-
# run: |
116-
# if [ "${{ inputs.DEFAULT_APPLICATION_ENVIRONMENT }}" == "wfint" ]; then
117-
# echo "NAMESPACE_ENV=dev" >> $GITHUB_OUTPUT
118-
# echo "SHORTENED_ENV=int" >> $GITHUB_OUTPUT
119-
# elif [ "${{ inputs.DEFAULT_APPLICATION_ENVIRONMENT }}" == "wfdlv" ]; then
120-
# echo "NAMESPACE_ENV=tools" >> $GITHUB_OUTPUT
121-
# echo "SHORTENED_ENV=dlv" >> $GITHUB_OUTPUT
122-
# elif [ "${{ inputs.DEFAULT_APPLICATION_ENVIRONMENT }}" == "wftst" ]; then
123-
# echo "NAMESPACE_ENV=test" >> $GITHUB_OUTPUT
124-
# echo "SHORTENED_ENV=tst" >> $GITHUB_OUTPUT
125-
# elif [ "${{ inputs.DEFAULT_APPLICATION_ENVIRONMENT }}" == "wfprd" ]; then
126-
# echo "NAMESPACE_ENV=prod" >> $GITHUB_OUTPUT
127-
# echo "SHORTENED_ENV=prd" >> $GITHUB_OUTPUT
128-
# fi
129103
130104
- name: Configure AWS Credentials for ECR target (Tools namespace)
131105
uses: aws-actions/configure-aws-credentials@v2

client/wfprev-war/src/main/angular/src/app/components/edit-project/activities/activities.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@
204204

205205
<div class="form-item full-width comment-container">
206206
<div class="checkbox-container">
207-
<label class="checkbox-label">Outstanding Obligation</label>
207+
<label class="checkbox-label">Outstanding Obligations</label>
208208
<mat-checkbox formControlName="outstandingObligationsInd">Yes</mat-checkbox>
209209
</div>
210210
<div class="textarea-container">

client/wfprev-war/src/main/angular/src/app/components/edit-project/activities/activities.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ export class ActivitiesComponent implements OnChanges, OnInit, CanComponentDeact
456456
const activity = this.activities[index];
457457
if (!activity) return ''; // Handle missing data
458458

459-
return moment(activity.updateDate).format('YYYY-MM-DD');
459+
return moment.utc(activity.updateDate).format('YYYY-MM-DD');
460460
}
461461

462462
toggleActivityStatus(index: number) {

client/wfprev-war/src/main/angular/src/app/components/edit-project/project-details/project-details.component.html

Lines changed: 134 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
<div class="details-container">
22
<form [formGroup]="detailsForm" class="form-grid" *ngIf="projectDetail">
33
<div class="form-item">
4-
<label>Project Type<span class="required">*</span></label>
5-
<select id="projectTypeCode" formControlName="projectTypeCode" [matTooltip]="getCodeDescription(CodeTableKeys.PROJECT_TYPE_CODE)">
6-
<option *ngFor="let item of projectTypeCode" [value]="item.projectTypeCode">
7-
{{ item.description }}
8-
</option>
9-
</select>
4+
<wfprev-select-field
5+
[label]="'Project Type'"
6+
[required]="true"
7+
[control]="getControl('projectTypeCode')"
8+
[options]="projectTypeCode"
9+
[optionValueField]="'projectTypeCode'"
10+
[optionLabelField]="'description'"
11+
[tooltip]="getCodeDescription(CodeTableKeys.PROJECT_TYPE_CODE)"
12+
id="projectTypeCode"
13+
placeholder="Select"
14+
/>
1015
</div>
1116

1217
<div class="form-item funding-stream">
@@ -15,124 +20,163 @@
1520
</div>
1621

1722
<div class="form-item">
18-
<label>Business/Program Area<span class="required">*</span></label>
19-
<select id="programAreaGuid" formControlName="programAreaGuid" [matTooltip]="getCodeDescription(CodeTableKeys.PROGRAM_AREA_GUID)">
20-
<option *ngFor="let item of programAreaCode" [value]="item.programAreaGuid">
21-
{{ item.programAreaName }}
22-
</option>
23-
</select>
23+
<wfprev-select-field
24+
[label]="'Business/Program Area'"
25+
[required]="true"
26+
[control]="getControl('programAreaGuid')"
27+
[options]="programAreaCode"
28+
[optionValueField]="'programAreaGuid'"
29+
[optionLabelField]="'programAreaName'"
30+
[tooltip]="getCodeDescription(CodeTableKeys.PROGRAM_AREA_GUID)"
31+
id="programAreaGuid"
32+
/>
2433
</div>
2534

2635
<div class="form-item">
27-
<label for="closestCommunityName">Closest Community<span class="required">*</span></label>
28-
<input type="text" id="closestCommunityName" formControlName="closestCommunityName" placeholder="Begin Typing"
29-
[matTooltip]="detailsForm.get('closestCommunityName')?.value" />
30-
<div class="error"
31-
*ngIf="detailsForm.get('closestCommunityName')?.hasError('maxlength') && detailsForm.get('closestCommunityName')?.touched">
32-
{{messages.maxLengthExceeded}}
33-
</div>
36+
<wfprev-input-field
37+
[id]="'closestCommunityName'"
38+
[label]="'Closest Community'"
39+
[placeholder]="'Begin Typing'"
40+
[control]="getControl('closestCommunityName')"
41+
[tooltip]="getControl('closestCommunityName')?.value"
42+
[required]="true"
43+
[errorMessages]="{ maxlength: messages.maxLengthExceeded }"
44+
></wfprev-input-field>
45+
3446
</div>
3547

3648
<div class="form-item">
37-
<label>Forest Region<span class="required">*</span></label>
38-
<select id="forestRegionOrgUnitId" formControlName="forestRegionOrgUnitId" [matTooltip]="getCodeDescription(CodeTableKeys.FOREST_REGION_ORG_UNIT_ID)">
39-
<option *ngFor="let item of forestRegionCode" [value]="item.orgUnitId">
40-
{{ item.orgUnitName }}
41-
</option>
42-
</select>
49+
<wfprev-select-field
50+
[label]="'Forest Region'"
51+
[required]="true"
52+
[control]="getControl('forestRegionOrgUnitId')"
53+
[options]="forestRegionCode"
54+
[optionValueField]="'orgUnitId'"
55+
[optionLabelField]="'orgUnitName'"
56+
[tooltip]="getCodeDescription(CodeTableKeys.FOREST_REGION_ORG_UNIT_ID)"
57+
id="forestRegionOrgUnitId"
58+
/>
4359
</div>
4460

4561
<div class="form-item">
46-
<label> Forest District </label>
47-
<select id="forestDistrictOrgUnitId" formControlName="forestDistrictOrgUnitId" [matTooltip]="getCodeDescription(CodeTableKeys.FOREST_DISTRICT_ORG_UNIT_ID)">
48-
<option value="">Select</option>
49-
<option *ngFor="let item of forestDistrictCode" [value]="item.orgUnitId">
50-
{{ item.orgUnitName }}
51-
</option>
52-
</select>
62+
<wfprev-select-field
63+
[label]="'Forest District'"
64+
[required]="false"
65+
[control]="getControl('forestDistrictOrgUnitId')"
66+
[options]="forestDistrictCode"
67+
[optionValueField]="'orgUnitId'"
68+
[optionLabelField]="'orgUnitName'"
69+
[tooltip]="getCodeDescription(CodeTableKeys.FOREST_DISTRICT_ORG_UNIT_ID)"
70+
[placeholder]="'Select'"
71+
id="forestDistrictOrgUnitId"
72+
/>
5373
</div>
5474

5575
<div class="form-item">
56-
<label> BC Parks Region </label>
57-
<select id="bcParksRegionOrgUnitId" formControlName="bcParksRegionOrgUnitId" [matTooltip]="getCodeDescription(CodeTableKeys.BC_PARKS_REGION_ORG_UNIT_ID)">
58-
<option value="">Select</option>
59-
<option *ngFor="let item of bcParksRegionCode" [value]="item.orgUnitId">
60-
{{ item.orgUnitName }}
61-
</option>
62-
</select>
76+
<wfprev-select-field
77+
[label]="'BC Parks Region'"
78+
[required]="false"
79+
[control]="getControl('bcParksRegionOrgUnitId')"
80+
[options]="bcParksRegionCode"
81+
[optionValueField]="'orgUnitId'"
82+
[optionLabelField]="'orgUnitName'"
83+
[tooltip]="getCodeDescription(CodeTableKeys.BC_PARKS_REGION_ORG_UNIT_ID)"
84+
[placeholder]="'Select'"
85+
id="bcParksRegionOrgUnitId"
86+
/>
6387
</div>
6488

6589
<div class="form-item">
66-
<label>BC Parks Section</label>
67-
<select id="bcParksSectionOrgUnitId" formControlName="bcParksSectionOrgUnitId" [matTooltip]="getCodeDescription(CodeTableKeys.BC_PARKS_SECTION_ORG_UNIT_ID)">
68-
<option value="">Select</option>
69-
<option *ngFor="let item of bcParksSectionCode" [value]="item.orgUnitId">
70-
{{ item.orgUnitName }}
71-
</option>
72-
</select>
90+
<wfprev-select-field
91+
[label]="'BC Parks Section'"
92+
[required]="false"
93+
[control]="getControl('bcParksSectionOrgUnitId')"
94+
[options]="bcParksSectionCode"
95+
[optionValueField]="'orgUnitId'"
96+
[optionLabelField]="'orgUnitName'"
97+
[tooltip]="getCodeDescription(CodeTableKeys.BC_PARKS_SECTION_ORG_UNIT_ID)"
98+
[placeholder]="'Select'"
99+
id="bcParksSectionOrgUnitId"
100+
/>
73101
</div>
74102

75103
<div class="form-item">
76-
<label>BCWS Fire Centre<span class="required">*</span></label>
77-
<select id="fireCentre" formControlName="fireCentreId" [matTooltip]="getCodeDescription(CodeTableKeys.FIRE_CENTRE_ID)">
78-
<option *ngFor="let item of fireCentres" [value]="item.properties.MOF_FIRE_CENTRE_ID">
79-
{{ item.properties.MOF_FIRE_CENTRE_NAME }}
80-
</option>
81-
</select>
104+
<wfprev-select-field
105+
[label]="'BCWS Fire Centre'"
106+
[required]="true"
107+
[control]="getControl('fireCentreId')"
108+
[options]="fireCentres"
109+
[optionValueField]="'id'"
110+
[optionLabelField]="'label'"
111+
[tooltip]="getCodeDescription(CodeTableKeys.FIRE_CENTRE_ID)"
112+
id="fireCentreId"
113+
/>
82114
</div>
83115

84116
<div class="form-item">
85-
<label for="projectLead">Project Lead<span class="required">*</span></label>
86-
<input type="text" id="projectLead" formControlName="projectLead" placeholder="Begin Typing"
87-
[matTooltip]="detailsForm.get('projectLead')?.value" />
88-
<div class="error"
89-
*ngIf="detailsForm.get('projectLead')?.hasError('maxlength') && detailsForm.get('projectLead')?.touched">
90-
{{messages.maxLengthExceeded}}
91-
</div>
117+
<wfprev-input-field
118+
[id]="'projectLead'"
119+
[label]="'Project Lead'"
120+
[placeholder]="'Begin Typing'"
121+
[control]="getControl('projectLead')"
122+
[tooltip]="getControl('projectLead')?.value"
123+
[required]="true"
124+
[errorMessages]="{ maxlength: messages.maxLengthExceeded }"
125+
/>
92126
</div>
93127

94128
<div class="form-item">
95-
<label for="projectLeadEmailAddress">Project Lead Email</label>
96-
<input type="email" id="projectLeadEmailAddress" formControlName="projectLeadEmailAddress"
97-
placeholder="Begin Typing" [matTooltip]="detailsForm.get('projectLeadEmailAddress')?.value" />
98-
<div class="error"
99-
*ngIf="detailsForm.get('projectLeadEmailAddress')?.hasError('email') && detailsForm.get('projectLeadEmailAddress')?.touched">
100-
{{messages.invalidEmail}}
101-
</div>
102-
<div class="error"
103-
*ngIf="detailsForm.get('projectLeadEmailAddress')?.hasError('maxlength') && detailsForm.get('projectLeadEmailAddress')?.touched">
104-
{{messages.maxLengthExceeded}}
105-
</div>
129+
<wfprev-input-field
130+
[id]="'projectLeadEmailAddress'"
131+
[label]="'Project Lead Email'"
132+
[placeholder]="'Begin Typing'"
133+
[control]="getControl('projectLeadEmailAddress')"
134+
[tooltip]="getControl('projectLeadEmailAddress')?.value"
135+
[type]="'email'"
136+
[errorMessages]="{
137+
email: messages.invalidEmail,
138+
maxlength: messages.maxLengthExceeded
139+
}"
140+
/>
106141
</div>
107142

108143
<div class="form-item">
109-
<label for="siteUnitName">Planning Unit</label>
110-
<input type="text" id="siteUnitName" formControlName="siteUnitName" placeholder="Begin Typing"
111-
[matTooltip]="detailsForm.get('siteUnitName')?.value" />
112-
<div class="error"
113-
*ngIf="detailsForm.get('siteUnitName')?.hasError('maxlength') && detailsForm.get('siteUnitName')?.touched">
114-
{{messages.maxLengthExceeded}}
115-
</div>
144+
<wfprev-input-field
145+
[id]="'siteUnitName'"
146+
[label]="'Planning Unit'"
147+
[placeholder]="'Begin Typing'"
148+
[control]="getControl('siteUnitName')"
149+
[tooltip]="getControl('siteUnitName')?.value"
150+
[errorMessages]="{ maxlength: messages.maxLengthExceeded }"
151+
/>
116152
</div>
117153

118154
<div class="objective-group">
119155
<div class="form-item objective-field">
120-
<label>Primary Objective<span class="required">*</span></label>
121-
<select id="primaryObjectiveTypeCode" formControlName="primaryObjectiveTypeCode" [matTooltip]="getCodeDescription(CodeTableKeys.PRIMARY_OBJECTIVE_TYPE_CODE)">
122-
<option *ngFor="let item of objectiveTypeCode" [value]="item.objectiveTypeCode">
123-
{{ item.description }}
124-
</option>
125-
</select>
156+
<wfprev-select-field
157+
[label]="'Primary Objective'"
158+
[required]="true"
159+
[control]="getControl('primaryObjectiveTypeCode')"
160+
[options]="objectiveTypeCode"
161+
[optionValueField]="'objectiveTypeCode'"
162+
[optionLabelField]="'description'"
163+
[tooltip]="getCodeDescription(CodeTableKeys.PRIMARY_OBJECTIVE_TYPE_CODE)"
164+
id="primaryObjectiveTypeCode"
165+
/>
126166
</div>
127167

128168
<div class="form-item objective-field">
129-
<label>Secondary Objective</label>
130-
<select id="secondaryObjectiveTypeCode" formControlName="secondaryObjectiveTypeCode" [matTooltip]="getCodeDescription(CodeTableKeys.SECONDARY_OBJECTIVE_TYPE_CODE)">
131-
<option value="">Select</option>
132-
<option *ngFor="let item of objectiveTypeCode" [value]="item.objectiveTypeCode">
133-
{{ item.description }}
134-
</option>
135-
</select>
169+
<wfprev-select-field
170+
[label]="'Secondary Objective'"
171+
[required]="false"
172+
[control]="getControl('secondaryObjectiveTypeCode')"
173+
[options]="objectiveTypeCode"
174+
[optionValueField]="'objectiveTypeCode'"
175+
[optionLabelField]="'description'"
176+
[tooltip]="getCodeDescription(CodeTableKeys.SECONDARY_OBJECTIVE_TYPE_CODE)"
177+
id="secondaryObjectiveTypeCode"
178+
[placeholder]="'Select'"
179+
/>
136180
</div>
137181

138182
<div class="form-item secondary-rationale">

client/wfprev-war/src/main/angular/src/app/components/edit-project/project-details/project-details.component.spec.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -869,7 +869,7 @@ describe('Dropdown tooltips', () => {
869869
];
870870

871871
component.fireCentres = [
872-
{ properties: { MOF_FIRE_CENTRE_ID: 50, MOF_FIRE_CENTRE_NAME: 'Kamloops Fire Centre' } }
872+
{ id: 50, label: 'Kamloops Fire Centre' }
873873
];
874874

875875
component.objectiveTypeCode = [
@@ -1048,4 +1048,14 @@ describe('Dropdown tooltips', () => {
10481048
});
10491049
});
10501050

1051+
it('should return the correct FormControl from detailsForm', () => {
1052+
component.detailsForm = new FormGroup({
1053+
projectLead: new FormControl('Alice')
1054+
});
1055+
1056+
const control = component.getControl('projectLead');
1057+
expect(control.value).toBe('Alice');
1058+
});
1059+
1060+
10511061
});

0 commit comments

Comments
 (0)