diff --git a/ui/src/pages/Alerts/SilencesPage.tsx b/ui/src/pages/Alerts/SilencesPage.tsx index dd7572fc..5c85da65 100644 --- a/ui/src/pages/Alerts/SilencesPage.tsx +++ b/ui/src/pages/Alerts/SilencesPage.tsx @@ -3,7 +3,7 @@ import { useSearchParams } from 'react-router'; import { BellOff } from 'lucide-react'; import { Button, FormField, Input, useToast, DataTable, - EmptyState, ConfirmDialog, MonoText, + EmptyState, ConfirmDialog, MonoText, Modal, } from '@cameleer/design-system'; import type { Column } from '@cameleer/design-system'; import { PageLoader } from '../../components/PageLoader'; @@ -14,7 +14,6 @@ import { type AlertSilenceResponse, } from '../../api/queries/alertSilences'; import { describeApiError } from '../../api/errors'; -import sectionStyles from '../../styles/section-card.module.css'; import tableStyles from '../../styles/table-section.module.css'; import css from './alerts-page.module.css'; @@ -29,13 +28,29 @@ export default function SilencesPage() { const [matcherAppSlug, setMatcherAppSlug] = useState(''); const [hours, setHours] = useState(1); const [pendingEnd, setPendingEnd] = useState(null); + const [createOpen, setCreateOpen] = useState(false); const [searchParams] = useSearchParams(); useEffect(() => { const r = searchParams.get('ruleId'); - if (r) setMatcherRuleId(r); + if (r) { + setMatcherRuleId(r); + setCreateOpen(true); + } }, [searchParams]); + const resetForm = () => { + setReason(''); + setMatcherRuleId(''); + setMatcherAppSlug(''); + setHours(1); + }; + + const closeModal = () => { + setCreateOpen(false); + resetForm(); + }; + if (isLoading) return ; if (error) return
Failed to load silences: {describeApiError(error)}
; @@ -58,10 +73,7 @@ export default function SilencesPage() { startsAt: now.toISOString(), endsAt: endsAt.toISOString(), }); - setReason(''); - setMatcherRuleId(''); - setMatcherAppSlug(''); - setHours(1); + closeModal(); toast({ title: 'Silence created', variant: 'success' }); } catch (e) { toast({ title: 'Create failed', description: describeApiError(e), variant: 'error' }); @@ -109,17 +121,38 @@ export default function SilencesPage() { : `${rows.length} active silence${rows.length === 1 ? '' : 's'}`} +
+ +
-
-
+ {rows.length === 0 ? ( + } + title="No silences" + description="Nothing is currently silenced in this environment." + action={ + + } + /> + ) : ( +
+ + columns={columns} + data={rows.map((s) => ({ ...s, id: s.id ?? '' }))} + flush + fillHeight + /> +
+ )} + + +
setMatcherRuleId(e.target.value)} /> @@ -141,28 +174,14 @@ export default function SilencesPage() { placeholder="Maintenance window" /> - +
+ + +
-
- - {rows.length === 0 ? ( - } - title="No silences" - description="Nothing is currently silenced in this environment." - /> - ) : ( -
- - columns={columns} - data={rows.map((s) => ({ ...s, id: s.id ?? '' }))} - flush - fillHeight - /> -
- )} +