fix(alerts+diag): quickToggle SMTP-Datenverlust + Diagnostics Viewer-Gate
Alerts: quickToggle schickte den Channel durch buildPayload(), das SMTP-
Settings aus einem flachen ChannelFormValues rekonstruiert. Bei Email-
Channels wurde damit jedes aktiv/inaktiv-Toggle zum SMTP-Config-Wipe,
weil die Flat-Fields (smtp_host, smtp_port, from, ...) undefined waren.
Fix: raw Channel-Objekt mit geändertem active-Flag direkt PUT-ten.
testFire-Button fehlte disabled={isViewer} + Tooltip.
Diagnostics: kein isViewer-Check, Viewer sahen funktionierende Run-
Buttons und bekamen 403 ohne Erklärung. Fix: isViewer aus Auth-Store,
disabled-Prop in ToolCard, alle 5 Cards + Enter-Handler gegattet.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -147,7 +147,7 @@ export default function AlertsPage() {
|
||||
})
|
||||
const quickToggle = useMutation({
|
||||
mutationFn: async ({ id, row, checked }: { id: number; row: Channel; checked: boolean }) => {
|
||||
await apiClient.put(`/alerts/channels/${id}`, buildPayload({ ...row, active: checked } as ChannelFormValues))
|
||||
await apiClient.put(`/alerts/channels/${id}`, { ...row, active: checked })
|
||||
},
|
||||
onSuccess: () => { void qc.invalidateQueries({ queryKey: ['alerts', 'channels'] }) },
|
||||
onError: (e: Error) => message.error(e.message),
|
||||
@@ -284,11 +284,14 @@ export default function AlertsPage() {
|
||||
subtitle={t('alerts.intro')}
|
||||
extra={
|
||||
<Space>
|
||||
<Button icon={<ExperimentOutlined />}
|
||||
onClick={() => testFire.mutate()}
|
||||
loading={testFire.isPending}>
|
||||
{t('alerts.test')}
|
||||
</Button>
|
||||
<Tooltip title={isViewer ? t('auth.viewerBadge') : undefined}>
|
||||
<Button icon={<ExperimentOutlined />}
|
||||
onClick={() => testFire.mutate()}
|
||||
loading={testFire.isPending}
|
||||
disabled={isViewer}>
|
||||
{t('alerts.test')}
|
||||
</Button>
|
||||
</Tooltip>
|
||||
</Space>
|
||||
}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user