diff --git a/webui/src/features/notifications/NotificationCenterPage.tsx b/webui/src/features/notifications/NotificationCenterPage.tsx index d1ed035..8246e4d 100644 --- a/webui/src/features/notifications/NotificationCenterPage.tsx +++ b/webui/src/features/notifications/NotificationCenterPage.tsx @@ -1,6 +1,6 @@ import { useEffect, useMemo, useState } from "react"; import { Bell, Check, ExternalLink, RefreshCw, Send, XCircle } from "lucide-react"; -import { Button, DismissibleAlert, hasScope, type ApiSettings, type AuthInfo } from "@govoplan/core-webui"; +import { AdminIconButton, Button, DismissibleAlert, SegmentedControl, StatusBadge, hasScope, type ApiSettings, type AuthInfo } from "@govoplan/core-webui"; import { deliverPendingNotifications, listNotifications, updateNotification, type NotificationMessage } from "../../api/notifications"; import { safeNotificationActionUrl } from "../../security/actionUrl"; @@ -99,17 +99,16 @@ export default function NotificationCenterPage({ settings, auth }: { settings: A Notifications {unreadCount > 0 ? {unreadCount} : null} - - -
- {statusFilters.map((status) => ( - - ))} +
+ ({ id: status, label: status }))} + value={statusFilter} + onChange={setStatusFilter} + ariaLabel="Notification status" + width="fill" + />
{loading ?
Loading notifications
: null} {!loading && notifications.length === 0 ?
No notifications in this view.
: null} @@ -177,7 +176,7 @@ function NotificationDetails({ notification }: { notification: NotificationMessa
- {formatStatus(notification.status)} + {notification.channel} {formatDate(notification.created_at)}
diff --git a/webui/src/styles/notifications.css b/webui/src/styles/notifications.css index 9fc9d51..25be1a9 100644 --- a/webui/src/styles/notifications.css +++ b/webui/src/styles/notifications.css @@ -65,40 +65,9 @@ font-weight: 800; } -.notifications-icon-button.btn { - width: 34px; - min-width: 34px; - height: 34px; - justify-content: center; - padding: 0; -} - -.notifications-filter-row { - display: flex; - gap: 5px; - padding: 8px; - border-bottom: var(--border-line); - overflow-x: auto; -} - -.notifications-filter-row button { - min-height: 28px; - border: 0; - border-radius: 4px; - background: transparent; - color: var(--muted); - cursor: pointer; - font: inherit; - font-size: 12px; - font-weight: 700; - padding: 0 8px; - text-transform: capitalize; -} - -.notifications-filter-row button:hover, -.notifications-filter-row button.is-active { - background: var(--sidebar-hover-bg); - color: var(--text-strong); +.notifications-status-filter { + width: calc(100% - 16px); + margin: 8px; } .notifications-list { @@ -230,29 +199,6 @@ font-weight: 700; } -.notifications-status { - border-radius: 999px; - background: var(--panel-soft); - color: var(--text); - padding: 3px 8px; -} - -.notifications-status.status-failed { - background: var(--danger-soft); - color: var(--danger-text); -} - -.notifications-status.status-sent { - background: var(--success-soft); - color: var(--green); -} - -.notifications-status.status-queued, -.notifications-status.status-pending { - background: var(--warning-bg); - color: var(--warning-text); -} - .notifications-action-link { width: max-content; max-width: 100%;