Skip to content

Commit ac59557

Browse files
authored
fix(attendance): attendance overview tab lists archived activities separately (#2616)
closes #2587
1 parent 01d607a commit ac59557

File tree

3 files changed

+65
-5
lines changed

3 files changed

+65
-5
lines changed

src/app/child-dev-project/attendance/activity-attendance-section/activity-attendance-section.component.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
import { Component, Inject, Input, LOCALE_ID, OnInit } from "@angular/core";
1+
import {
2+
Component,
3+
Inject,
4+
Input,
5+
LOCALE_ID,
6+
OnChanges,
7+
OnInit,
8+
SimpleChanges,
9+
} from "@angular/core";
210
import { RecurringActivity } from "../model/recurring-activity";
311
import { AttendanceDetailsComponent } from "../attendance-details/attendance-details.component";
412
import { AttendanceService } from "../attendance.service";
@@ -32,7 +40,7 @@ import { EntitiesTableComponent } from "../../../core/common-components/entities
3240
],
3341
standalone: true,
3442
})
35-
export class ActivityAttendanceSectionComponent implements OnInit {
43+
export class ActivityAttendanceSectionComponent implements OnInit, OnChanges {
3644
@Input() entity: RecurringActivity;
3745
@Input() forChild?: string;
3846

@@ -88,6 +96,12 @@ export class ActivityAttendanceSectionComponent implements OnInit {
8896
return this.init();
8997
}
9098

99+
ngOnChanges(changes: SimpleChanges): void {
100+
if (changes.entity) {
101+
this.init();
102+
}
103+
}
104+
91105
async init(loadAll: boolean = false) {
92106
this.loading = true;
93107
if (loadAll) {

src/app/child-dev-project/children/child-details/grouped-child-attendance/grouped-child-attendance.component.html

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,29 @@
1010
>
1111
</app-activity-attendance-section>
1212
</mat-tab>
13+
14+
<mat-tab *ngIf="archivedActivities.length > 0" label="Previous Activities">
15+
<p i18n>
16+
This section displays historical activities that have been archived.
17+
</p>
18+
19+
<mat-form-field>
20+
<mat-label i18n>Select activity</mat-label>
21+
<mat-select (selectionChange)="onActivityChange($event.value)">
22+
<mat-option
23+
*ngFor="let archivedActivity of archivedActivities"
24+
[value]="archivedActivity"
25+
>
26+
{{ archivedActivity.title }}
27+
</mat-option>
28+
</mat-select>
29+
</mat-form-field>
30+
<div *ngIf="selectedActivity">
31+
<app-activity-attendance-section
32+
[entity]="selectedActivity"
33+
[forChild]="entity.getId()"
34+
>
35+
</app-activity-attendance-section>
36+
</div>
37+
</mat-tab>
1338
</mat-tab-group>

src/app/child-dev-project/children/child-details/grouped-child-attendance/grouped-child-attendance.component.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { MatProgressBarModule } from "@angular/material/progress-bar";
88
import { MatTabsModule } from "@angular/material/tabs";
99
import { TabStateModule } from "../../../../utils/tab-state/tab-state.module";
1010
import { ActivityAttendanceSectionComponent } from "../../../attendance/activity-attendance-section/activity-attendance-section.component";
11+
import { MatSelectModule } from "@angular/material/select";
1112

1213
@DynamicComponent("GroupedChildAttendance")
1314
@Component({
@@ -22,14 +23,17 @@ import { ActivityAttendanceSectionComponent } from "../../../attendance/activity
2223
TabStateModule,
2324
ActivityAttendanceSectionComponent,
2425
NgForOf,
26+
MatSelectModule,
2527
],
2628
standalone: true,
2729
})
2830
export class GroupedChildAttendanceComponent implements OnInit {
2931
@Input() entity: Entity;
3032

3133
loading: boolean = true;
34+
selectedActivity: RecurringActivity;
3235
activities: RecurringActivity[] = [];
36+
archivedActivities: RecurringActivity[] = [];
3337

3438
constructor(private attendanceService: AttendanceService) {}
3539

@@ -39,9 +43,26 @@ export class GroupedChildAttendanceComponent implements OnInit {
3943

4044
private async loadActivities() {
4145
this.loading = true;
42-
this.activities = (
43-
await this.attendanceService.getActivitiesForChild(this.entity.getId())
44-
).filter((a) => !a.excludedParticipants.includes(this.entity.getId()));
46+
const allActivities = await this.attendanceService.getActivitiesForChild(
47+
this.entity.getId(),
48+
);
49+
50+
this.activities = allActivities.filter(
51+
(a) =>
52+
!a.excludedParticipants.includes(this.entity.getId()) &&
53+
a.isActive == true,
54+
);
55+
56+
this.archivedActivities = allActivities.filter(
57+
(a) =>
58+
!a.excludedParticipants.includes(this.entity.getId()) &&
59+
a.isActive == false,
60+
);
61+
4562
this.loading = false;
4663
}
64+
65+
onActivityChange(selectedArchivedActivity: RecurringActivity) {
66+
this.selectedActivity = selectedArchivedActivity;
67+
}
4768
}

0 commit comments

Comments
 (0)