refactor(webui): adopt semantic workspace actions

This commit is contained in:
2026-08-19 18:47:46 +02:00
parent ce334fee7d
commit d005065e50
+33 -39
View File
@@ -10,7 +10,6 @@ import {
Paperclip,
Pencil,
Plus,
RefreshCw,
Reply,
Search,
Send,
@@ -20,7 +19,6 @@ import {
} from "lucide-react";
import { FormGrid,
ActionBlockerHint,
ActionToolbar,
Button,
ConfirmDialog,
CountBadge,
@@ -43,6 +41,7 @@ import { FormGrid,
usePlatformLanguage,
useUnsavedChanges,
useUnsavedDraftGuard,
WorkspaceActionBar,
type ApiSettings,
type AuthInfo
} from "@govoplan/core-webui";
@@ -589,29 +588,25 @@ export default function PostboxPage({
<main className="workspace-data-page module-entry-page postbox-page">
<div className="postbox-shell">
<aside className="postbox-directory" data-view-surface="postbox.inbox.directory">
<ActionToolbar surface="panel-header" className="postbox-bar">
<div className="postbox-bar-title">
<WorkspaceActionBar
scope="collection-pane"
variant="collection"
refreshable
reloadAction={{ onReload: () => void loadDirectory(), loading: loadingDirectory || busy }}
className="postbox-bar"
contextActions={<div className="postbox-bar-title">
<Inbox size={17} aria-hidden="true" />
<strong>Postbox</strong>
<DocumentationHelpLink reference={POSTBOX_DOCUMENTATION} />
</div>
<div className="postbox-icon-actions">
<IconButton
</div>}
helpAction={<DocumentationHelpLink reference={POSTBOX_DOCUMENTATION} />}
createAction={<IconButton
label="New unified view"
icon={<Plus size={16} />}
onClick={openNewGrouping}
disabled={busy}
disabledReason={postboxBusyReason(false, busy)}
/>
<IconButton
label="Refresh"
icon={<RefreshCw size={16} />}
onClick={() => requestDiscard(() => void loadDirectory())}
disabled={loadingDirectory || busy}
disabledReason={postboxBusyReason(loadingDirectory, busy)}
/>
</div>
</ActionToolbar>
/>}
/>
<div className="postbox-scope-control">
<label htmlFor="postbox-scope">Inbox view</label>
@@ -688,8 +683,13 @@ export default function PostboxPage({
</aside>
<section className="postbox-message-list" data-view-surface="postbox.inbox.messages">
<ActionToolbar surface="panel-header" className="postbox-bar">
<div className="postbox-bar-title">
<WorkspaceActionBar
scope="collection-pane"
variant="collection"
refreshable
reloadAction={{ onReload: () => void loadMessages(), loading: loadingMessages || busy, label: "Refresh messages" }}
className="postbox-bar"
contextActions={<div className="postbox-bar-title">
{selectedPostbox ? (
<>
<Building2 size={17} aria-hidden="true" />
@@ -707,24 +707,15 @@ export default function PostboxPage({
</>
)}
<CountBadge tone="neutral">{total}</CountBadge>
</div>
<div className="postbox-icon-actions">
<IconButton
</div>}
createAction={<IconButton
label="New message"
icon={<Send size={16} />}
onClick={openCompose}
disabled={Boolean(composeDisabledReason)}
disabledReason={composeDisabledReason}
/>
<IconButton
label="Refresh messages"
icon={<RefreshCw size={16} />}
onClick={() => requestDiscard(() => void loadMessages())}
disabled={loadingMessages || busy}
disabledReason={postboxBusyReason(loadingMessages, busy)}
/>
</div>
</ActionToolbar>
/>}
/>
<div className="postbox-message-filters">
<FilterBar surface="control" wrap="never" className="postbox-search-row">
<input
@@ -852,12 +843,15 @@ export default function PostboxPage({
</section>
<section className="postbox-detail">
<ActionToolbar surface="panel-header" className="postbox-bar">
<div className="postbox-bar-title">
<WorkspaceActionBar
scope="detail-pane"
variant="detail"
className="postbox-bar"
contextActions={<div className="postbox-bar-title">
<MailOpen size={17} aria-hidden="true" />
<strong>{selectedMessage?.subject || "Message"}</strong>
</div>
<div className="button-row compact-actions">
</div>}
primaryActions={<div className="button-row compact-actions">
<Button
onClick={openReply}
disabled={Boolean(replyDisabledReason)}
@@ -872,8 +866,8 @@ export default function PostboxPage({
>
<CheckCheck size={16} /> Acknowledge
</Button>
</div>
</ActionToolbar>
</div>}
/>
{selectedMessage ? (
<MessageDetail
message={selectedMessage}