From 410e780eee49d740aeb8265b29a98ce0f4e02fbd Mon Sep 17 00:00:00 2001 From: master <> Date: Fri, 27 Mar 2026 17:06:17 +0200 Subject: [PATCH] Fix remaining UX inconsistencies: eyebrow, duplicate headings, delete confirm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EYE1 + NAME1: Notifications page - Remove "Operations" inline eyebrow paragraph - Rename "Notification Operations" → "Notifications" to match sidebar label DUP1: Remove "Channels" h2 from Notifications tab panel (tab label suffices) DUP2: Remove "Users" h2 from Identity & Access tab panel (tab label suffices) DEST2: Notifications channel delete confirmation - Replace unguarded deleteChannel() with confirmDeleteChannel() + app-confirm-dialog - Confirmation message names the channel being deleted Co-Authored-By: Claude Opus 4.6 (1M context) --- .../features/notify/notify-panel.component.html | 12 ++++++++---- .../app/features/notify/notify-panel.component.ts | 15 ++++++++++++++- .../admin/admin-settings-page.component.ts | 1 - 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/Web/StellaOps.Web/src/app/features/notify/notify-panel.component.html b/src/Web/StellaOps.Web/src/app/features/notify/notify-panel.component.html index a422f3e76..117cab5ac 100644 --- a/src/Web/StellaOps.Web/src/app/features/notify/notify-panel.component.html +++ b/src/Web/StellaOps.Web/src/app/features/notify/notify-panel.component.html @@ -1,8 +1,7 @@
-

Operations

-

Notification Operations

+

Notifications

Monitor delivery health, test channels, and verify live notification outcomes.

@@ -58,7 +57,6 @@ @case ('channels') {
-

Channels

- +
@@ -391,4 +389,10 @@ } } + +
diff --git a/src/Web/StellaOps.Web/src/app/features/notify/notify-panel.component.ts b/src/Web/StellaOps.Web/src/app/features/notify/notify-panel.component.ts index 125f47b5b..065bf584c 100644 --- a/src/Web/StellaOps.Web/src/app/features/notify/notify-panel.component.ts +++ b/src/Web/StellaOps.Web/src/app/features/notify/notify-panel.component.ts @@ -4,6 +4,7 @@ import { Component, OnDestroy, OnInit, + ViewChild, computed, inject, signal, @@ -36,6 +37,7 @@ import { StellaPageTab, } from '../../shared/components/stella-page-tabs/stella-page-tabs.component'; import { PageActionOutletComponent } from '../../shared/components/page-action-outlet/page-action-outlet.component'; +import { ConfirmDialogComponent } from '../../shared/components/confirm-dialog/confirm-dialog.component'; type NotifyTab = 'channels' | 'rules' | 'deliveries'; @@ -68,7 +70,7 @@ type DeliveryFilter = @Component({ selector: 'app-notify-panel', - imports: [CommonModule, ReactiveFormsModule, RouterLink, StellaPageTabsComponent, PageActionOutletComponent], + imports: [CommonModule, ReactiveFormsModule, RouterLink, StellaPageTabsComponent, PageActionOutletComponent, ConfirmDialogComponent], templateUrl: './notify-panel.component.html', styleUrls: ['./notify-panel.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush @@ -348,6 +350,17 @@ export class NotifyPanelComponent implements OnInit, OnDestroy { } } + @ViewChild('deleteChannelConfirm') deleteChannelConfirm!: ConfirmDialogComponent; + + readonly deleteChannelMessage = computed(() => { + const name = this.channelForm.get('name')?.value ?? 'this channel'; + return `Delete channel '${name}'? This cannot be undone.`; + }); + + confirmDeleteChannel(): void { + this.deleteChannelConfirm.open(); + } + async deleteChannel(): Promise { const channelId = this.selectedChannelId(); if (!channelId) { diff --git a/src/Web/StellaOps.Web/src/app/features/settings/admin/admin-settings-page.component.ts b/src/Web/StellaOps.Web/src/app/features/settings/admin/admin-settings-page.component.ts index 57b08ae04..001ecbd5c 100644 --- a/src/Web/StellaOps.Web/src/app/features/settings/admin/admin-settings-page.component.ts +++ b/src/Web/StellaOps.Web/src/app/features/settings/admin/admin-settings-page.component.ts @@ -100,7 +100,6 @@ const TABS: readonly StellaPageTab[] = [ @case ('users') {
-

Users

Least privilege is selected first, and the form explains how credentials are completed after account creation.