diff --git a/webui/src/features/mail/MailBouncePage.tsx b/webui/src/features/mail/MailBouncePage.tsx index 3720d85..9544336 100644 --- a/webui/src/features/mail/MailBouncePage.tsx +++ b/webui/src/features/mail/MailBouncePage.tsx @@ -1,6 +1,6 @@ import { useEffect, useMemo, useState } from "react"; import { ArrowLeft, Plus, RefreshCw, RotateCw, Trash2 } from "lucide-react"; -import { +import { FormGrid, ContentGrid, ActionBlockerHint, Button, Card, @@ -208,19 +208,19 @@ export default function MailBouncePage({ settings }: { settings: ApiSettings }) {error && {error}} {message && {message}} - + source.id} emptyText="No bounce mailbox watchers configured." /> item.id} emptyText="No bounce observations recorded." /> - + !busy && setAddOpen(false)} footer={<> setAddOpen(false)} disabled={Boolean(busy)} disabledReason={busy ? "Wait for the current bounce-processing action to finish." : undefined}>Cancel void addSource()} disabled={Boolean(saveWatcherBlocker)} disabledReason={saveWatcherBlocker}>Add watcher>}> - + {imapProfiles.length === 0 && setFolder(event.target.value)} placeholder="INBOX" /> - + {error}} {success && {success}} - !busy && closeProfileEditor()} - className="admin-dialog admin-dialog-wide mail-profile-dialog" + className="mail-profile-dialog" closeDisabled={busy} footer={editing === "new" ? <> @@ -1343,7 +1343,7 @@ function ProfileForm({ documentation={MAIL_PROFILE_DOCUMENTATION} /> } {showProfileFields && - + setDraft({ ...draft, name: event.target.value })} /> setDraft({ ...draft, slug: event.target.value })} placeholder="i18n:govoplan-mail.generated_from_name.33d69a91" /> setDraft({ ...draft, isActive: event.target.value === "active" })}>i18n:govoplan-mail.active.a733b809i18n:govoplan-mail.inactive.09af574c @@ -1355,7 +1355,7 @@ function ProfileForm({ onChange={(checked) => setDraft({ ...draft, inheritToLowerScopes: checked })} label="Visible to lower scopes" /> - + } {editTarget.kind === "profile" && existingProfile && @@ -1363,7 +1363,7 @@ function ProfileForm({ } {editTarget.kind === "server" && - + setDraft({ ...draft, serverName: event.target.value })} /> @@ -1387,11 +1387,11 @@ function ProfileForm({ onChange={(checked) => setDraft({ ...draft, serverInheritToLowerScopes: checked })} label="Visible to lower scopes" /> - + } {editTarget.kind === "credentials" && - + {creatingCredential && setReuseCredentialId(event.target.value)}> @@ -1455,7 +1455,7 @@ function ProfileForm({ The selected credential remains independently managed and will be linked to this server. } - + } {policyMessages.length > 0 && ( diff --git a/webui/src/features/mail/MailboxPage.tsx b/webui/src/features/mail/MailboxPage.tsx index 4b299ba..ab2eb9f 100644 --- a/webui/src/features/mail/MailboxPage.tsx +++ b/webui/src/features/mail/MailboxPage.tsx @@ -1,6 +1,6 @@ import { useEffect, useMemo, useRef, useState } from "react"; import { Activity, ChevronRight, Home, Mail, Paperclip, RefreshCw, Search, X } from "lucide-react"; -import { +import { ToolbarGroup, ActionToolbar, ActionBlockerHint, Button, DataGridPaginationBar, @@ -407,7 +407,7 @@ export default function MailboxPage({ settings, auth }: { settings: ApiSettings; - + i18n:govoplan-mail.imap_profile.5165df81 selectProfile(event.target.value)}> @@ -415,8 +415,8 @@ export default function MailboxPage({ settings, auth }: { settings: ApiSettings; {imapProfiles.map((profile) => {profile.name})} - {selectedProfile?.imap ? transportLabel(selectedProfile) : "i18n:govoplan-mail.no_imap_profile_selected.e7d1516f"} - + {selectedProfile?.imap ? transportLabel(selectedProfile) : "i18n:govoplan-mail.no_imap_profile_selected.e7d1516f"} + {hasAnyScope(auth, ["mail:bounce:read", "mail:bounce:manage"]) && navigate("/mail/bounces")} title="Open bounce processing"> @@ -435,8 +435,8 @@ export default function MailboxPage({ settings, auth }: { settings: ApiSettings; i18n:govoplan-mail.messages.f1702b46 - - + + {noImapProfiles &&