diff --git a/webui/src/features/workflow/WorkflowPage.tsx b/webui/src/features/workflow/WorkflowPage.tsx
index cd98c29..9dda5d1 100644
--- a/webui/src/features/workflow/WorkflowPage.tsx
+++ b/webui/src/features/workflow/WorkflowPage.tsx
@@ -14,7 +14,6 @@ import {
GitFork,
ListChecks,
Plus,
- RefreshCw,
RotateCcw,
Save,
Settings2,
@@ -23,7 +22,7 @@ import {
} from "lucide-react";
import { ReactFlowProvider } from "@xyflow/react";
import { useSearchParams } from "react-router";
-import { ToolbarGroup, ActionToolbar,
+import { ActionToolbar,
Button,
ConfirmDialog,
ContentGrid,
@@ -46,6 +45,7 @@ import { ToolbarGroup, ActionToolbar,
StatePanel,
StatusBadge,
ToggleSwitch,
+ WorkspaceActionBar,
WorkspaceFrame,
WorkspaceLayout,
hasScope,
@@ -111,7 +111,7 @@ export default function WorkflowPage({
settings: ApiSettings;
auth: AuthInfo;
}) {
- const { requestNavigation } = useUnsavedChanges();
+ const { requestDiscard, requestNavigation } = useUnsavedChanges();
const [searchParams, setSearchParams] = useSearchParams();
const requestedDefinitionId = searchParams.get("definition");
const requestedRunId = searchParams.get("run");
@@ -606,20 +606,13 @@ export default function WorkflowPage({
contentLabel="Workflow editor"
contentClassName="workflow-workspace"
primary={<>
-
- Workflows
-
-
- }
- variant="ghost"
- onClick={() => void reload(draft?.id)}
- disabled={loading || working}
- />
+ void reload(draft?.id), loading: loading || working }}
+ contextActions={<>
+ Workflows
{hasScope(auth, "workflow:instance:admin") ? (
) : null}
- }
+ helpAction={}
+ createAction={}
variant="primary"
onClick={createNew}
disabled={!canWrite}
disabledReason={!canWrite ? "Workflow definition write permission is required." : undefined}
- />
-
-
+ />}
+ />
{draft && displayedGraph ? (
<>
-
-
+
-
-
+ }
+ primaryActions={
{draft.id ? (
Activate
) : null}
-
- {draft.id && draft.standard?.kind !== "baseline" ? (
- }
- variant="danger"
- onClick={() => setDeleteOpen(true)}
- disabled={!canEdit || working}
- />
- ) : null}
-
-
+ }
+ destructiveActions={draft.id && draft.standard?.kind !== "baseline" ? (
+ }
+ variant="danger"
+ onClick={() => setDeleteOpen(true)}
+ disabled={!canEdit || working}
+ />
+ ) : undefined}
+ discardAction={{
+ label: <> Discard>,
+ onClick: () => requestDiscard(() => void reload(draft.id))
+ }}
+ saveAction={{
+ label: <> Save>,
+ onClick: () => void saveDraft(),
+ disabled: !canEdit || readOnly
+ }}
+ />
{error ? (