Skip to content

Commit da6fc01

Browse files
committed
refactor(ui-errors): standardize top-level dismissible p-messages across feature pages
1 parent 91e39f8 commit da6fc01

14 files changed

Lines changed: 34 additions & 56 deletions

File tree

src/app/features/activity/components/activity-log/activity-log.component.html

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<div class="activity-log-page">
2+
<p-messages *ngIf="errors.length > 0" [(value)]="errors" [enableService]="false" [closable]="true"></p-messages>
3+
24
<p-card class="activity-log-header-card">
35
<div class="activity-log-header">
46
<div class="activity-log-header__title">
@@ -28,11 +30,6 @@ <h2>Activity Log</h2>
2830
</div>
2931

3032
<p-card class="activity-log-table-card">
31-
<div class="activity-log-inline-error" *ngIf="errorMessage">
32-
<i class="pi pi-exclamation-triangle"></i>
33-
{{ errorMessage }}
34-
</div>
35-
3633
<p-table
3734
#dt
3835
[value]="filteredRows"

src/app/features/activity/components/activity-log/activity-log.component.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Component, OnDestroy, OnInit, inject } from '@angular/core';
2+
import { Message } from 'primeng/api';
23
import { Table } from 'primeng/table';
34
import { Subject, takeUntil } from 'rxjs';
45
import { ActivityApiClient } from '../../../../core/api/clients/activity-api.client';
@@ -63,7 +64,7 @@ export class ActivityLogComponent implements OnInit, OnDestroy {
6364
isPreviewMode = false;
6465
isLiveConnected = false;
6566
previewDetail: string | null = null;
66-
errorMessage: string | null = null;
67+
errors: Message[] = [];
6768

6869
dateFrom: Date | null = null;
6970
dateTo: Date | null = null;
@@ -142,7 +143,7 @@ export class ActivityLogComponent implements OnInit, OnDestroy {
142143
this.isLoading = true;
143144
this.isPreviewMode = false;
144145
this.previewDetail = null;
145-
this.errorMessage = null;
146+
this.errors = [];
146147

147148
if (this.shouldUsePreviewMode()) {
148149
this.loadPreviewData('Preview mode active. Showing local activity log.');
@@ -166,7 +167,7 @@ export class ActivityLogComponent implements OnInit, OnDestroy {
166167

167168
this.rows = [];
168169
this.filteredRows = [];
169-
this.errorMessage = 'Could not load activity log.';
170+
this.errors = [{ severity: 'error', summary: 'Error', detail: 'Could not load activity log.' }];
170171
this.isLoading = false;
171172
}
172173
});

src/app/features/activity/components/my-activity/my-activity.component.html

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<div class="my-activity-page">
2+
<p-messages *ngIf="errors.length > 0" [(value)]="errors" [enableService]="false" [closable]="true"></p-messages>
3+
24
<p-card class="my-activity-header-card">
35
<div class="my-activity-header">
46
<div class="my-activity-header__title">
@@ -36,11 +38,6 @@ <h3>Activity Timeline</h3>
3638
</div>
3739
</div>
3840

39-
<div class="activity-error" *ngIf="errorMessage">
40-
<i class="pi pi-exclamation-triangle"></i>
41-
{{ errorMessage }}
42-
</div>
43-
4441
<div class="activity-list" *ngIf="!isLoading; else loadingState">
4542
<div class="activity-row" *ngFor="let activity of filteredActivities; let isLast = last" [class.activity-row--last]="isLast">
4643
<div class="activity-row__icon" [ngClass]="getActivityIconChipClass(activity.rawEvent.type)">

src/app/features/activity/components/my-activity/my-activity.component.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Component, OnDestroy, OnInit, inject } from '@angular/core';
2+
import { Message } from 'primeng/api';
23
import { Router } from '@angular/router';
34
import { Subject, takeUntil } from 'rxjs';
45
import { ActivityApiClient } from '../../../../core/api/clients/activity-api.client';
@@ -56,7 +57,7 @@ export class MyActivityComponent implements OnInit, OnDestroy {
5657
isLoading = true;
5758
isPreviewMode = false;
5859
isLiveConnected = false;
59-
errorMessage: string | null = null;
60+
errors: Message[] = [];
6061
previewDetail: string | null = null;
6162

6263
ngOnInit(): void {
@@ -165,7 +166,7 @@ export class MyActivityComponent implements OnInit, OnDestroy {
165166

166167
private loadActivity(): void {
167168
this.isLoading = true;
168-
this.errorMessage = null;
169+
this.errors = [];
169170
this.previewDetail = null;
170171
this.isPreviewMode = false;
171172

@@ -195,7 +196,7 @@ export class MyActivityComponent implements OnInit, OnDestroy {
195196
return;
196197
}
197198

198-
this.errorMessage = 'Could not load your activity feed.';
199+
this.errors = [{ severity: 'error', summary: 'Error', detail: 'Could not load your activity feed.' }];
199200
this.allActivities = [];
200201
this.recentActivities = [];
201202
this.isLoading = false;

src/app/features/calendar/components/task-calendar/task-calendar.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<section class="calendar-page">
2+
<p-messages *ngIf="errors.length > 0" [(value)]="errors" [enableService]="false" [closable]="true"></p-messages>
3+
24
<p-card styleClass="calendar-hero">
35
<div class="calendar-hero__content">
46
<div class="calendar-hero__title">
@@ -18,8 +20,6 @@ <h2>{{ calendarTitle }}</h2>
1820
</div>
1921
</p-card>
2022

21-
<div *ngIf="loadError" class="calendar-warning">{{ loadError }}</div>
22-
2323
<div class="calendar-layout">
2424
<p-card styleClass="calendar-main-card">
2525
<ng-template pTemplate="content">

src/app/features/calendar/components/task-calendar/task-calendar.component.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { CommonModule } from '@angular/common';
22
import { Component, OnDestroy, OnInit, inject } from '@angular/core';
33
import { FormsModule } from '@angular/forms';
44
import { Router } from '@angular/router';
5+
import { Message } from 'primeng/api';
56
import { Subject, takeUntil } from 'rxjs';
67
import { TaskItemsApiClient } from '../../../../core/api/clients/task-items-api.client';
78
import { TaskItemDto } from '../../../../core/api/models/task-item.model';
@@ -33,7 +34,7 @@ export class TaskCalendarComponent implements OnInit, OnDestroy {
3334
isLoading = true;
3435
isPreviewMode = false;
3536
previewDetail: string | null = null;
36-
loadError: string | null = null;
37+
errors: Message[] = [];
3738

3839
tasksForSelectedDate: TaskItemDto[] = [];
3940
private allTasks: TaskItemDto[] = [];
@@ -115,15 +116,15 @@ export class TaskCalendarComponent implements OnInit, OnDestroy {
115116
this.isLoading = true;
116117
this.isPreviewMode = false;
117118
this.previewDetail = null;
118-
this.loadError = null;
119+
this.errors = [];
119120
this.clearData();
120121

121122
const currentUserId = this.authService.currentUserId();
122123
if (!currentUserId) {
123124
if (this.shouldUsePreviewMode()) {
124125
this.loadPreviewData();
125126
} else {
126-
this.loadError = 'Could not resolve current user identity.';
127+
this.errors = [{ severity: 'error', summary: 'Error', detail: 'Could not resolve current user identity.' }];
127128
this.isLoading = false;
128129
}
129130
return;
@@ -147,7 +148,7 @@ export class TaskCalendarComponent implements OnInit, OnDestroy {
147148
return;
148149
}
149150

150-
this.loadError = 'Could not load task due dates right now.';
151+
this.errors = [{ severity: 'error', summary: 'Error', detail: 'Could not load task due dates right now.' }];
151152
this.isLoading = false;
152153
}
153154
});

src/app/features/projects/components/project-details/project-details.component.html

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<div class="project-details-page">
22
<p-confirmDialog [baseZIndex]="1300" [appendTo]="'body'"></p-confirmDialog>
3+
<p-messages *ngIf="errors.length > 0" [(value)]="errors" [enableService]="false" [closable]="true"></p-messages>
34

45
<p-card class="project-details-header-card">
56
<div class="project-details-header">
@@ -131,12 +132,6 @@ <h2>Project Details</h2>
131132

132133
<div class="project-details-grid__col project-details-grid__col--tasks">
133134
<p-card header="Recent Tasks" styleClass="details-card">
134-
<div class="tasks-inline-error" *ngIf="errors.length > 0">
135-
<i class="pi pi-exclamation-triangle"></i>
136-
{{ errors[0].detail }}
137-
<span *ngIf="previewDetail">· {{ previewDetail }}</span>
138-
</div>
139-
140135
<p-table [value]="recentTasks" [loading]="isLoadingDetails" [rowHover]="true" [tableStyle]="{ 'min-width': '42rem' }">
141136
<ng-template pTemplate="header">
142137
<tr>

src/app/features/projects/components/project-kanban/project-kanban.component.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<div class="kanban-page">
22
<p-confirmDialog [baseZIndex]="1300" [appendTo]="'body'"></p-confirmDialog>
3+
<p-messages *ngIf="errors.length > 0" [(value)]="errors" [enableService]="false" [closable]="true"></p-messages>
34

45
<p-card class="kanban-header-card">
56
<div class="kanban-toolbar">
@@ -60,8 +61,6 @@ <h2>Project Kanban Board</h2>
6061
</p-card>
6162

6263
<div class="kanban-content">
63-
<p-messages *ngIf="errors.length > 0" [(value)]="errors" [enableService]="false" [closable]="true"></p-messages>
64-
6564
<div *ngIf="isLoadingProjects || isLoadingTasks" class="kanban-grid">
6665
<p-card class="custom-card" *ngFor="let placeholder of [1,2,3]">
6766
<ng-template pTemplate="header">

src/app/features/projects/components/project-list/project-list.component.html

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<div class="projects-page">
22
<p-confirmDialog [baseZIndex]="1300" [appendTo]="'body'"></p-confirmDialog>
3+
<p-messages *ngIf="errors.length > 0" [(value)]="errors" [enableService]="false" [closable]="true"></p-messages>
34

45
<p-card class="projects-header-card">
56
<div class="projects-header">
@@ -64,11 +65,6 @@ <h2>All Projects</h2>
6465
</div>
6566

6667
<p-card class="projects-table-card">
67-
<div class="projects-inline-error" *ngIf="errors.length > 0">
68-
<i class="pi pi-exclamation-triangle"></i>
69-
{{ errors[0].detail }}
70-
</div>
71-
7268
<p-table
7369
#dt
7470
[value]="projects"

src/app/features/projects/components/project-members/project-members.component.html

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<div class="project-members-page">
2+
<p-messages *ngIf="errors.length > 0" [(value)]="errors" [enableService]="false" [closable]="true"></p-messages>
3+
24
<p-card class="members-header-card">
35
<div class="members-header">
46
<div class="members-header__title">
@@ -52,12 +54,6 @@ <h2>Project Members</h2>
5254
</div>
5355

5456
<p-card class="members-table-card">
55-
<div class="members-inline-error" *ngIf="errorMessage">
56-
<i class="pi pi-exclamation-triangle"></i>
57-
{{ errorMessage }}
58-
<span *ngIf="previewDetail">· {{ previewDetail }}</span>
59-
</div>
60-
6157
<p-table
6258
#dt
6359
[value]="members"

0 commit comments

Comments
 (0)