diff --git a/src/lib/components/workflow-actions.svelte b/src/lib/components/workflow-actions.svelte
index 49b17854c7..7dfd88e8eb 100644
--- a/src/lib/components/workflow-actions.svelte
+++ b/src/lib/components/workflow-actions.svelte
@@ -7,8 +7,11 @@
import SignalConfirmationModal from '$lib/components/workflow/client-actions/signal-confirmation-modal.svelte';
import TerminateConfirmationModal from '$lib/components/workflow/client-actions/terminate-confirmation-modal.svelte';
import UpdateConfirmationModal from '$lib/components/workflow/client-actions/update-confirmation-modal.svelte';
+ import Button from '$lib/holocene/button.svelte';
import { MenuDivider, MenuItem } from '$lib/holocene/menu';
- import SplitButton from '$lib/holocene/split-button.svelte';
+ import MenuButton from '$lib/holocene/menu/menu-button.svelte';
+ import MenuContainer from '$lib/holocene/menu/menu-container.svelte';
+ import Menu from '$lib/holocene/menu/menu.svelte';
import { translate } from '$lib/i18n/translate';
import { isCloud } from '$lib/stores/advanced-visibility';
import { coreUserStore } from '$lib/stores/core-user';
@@ -25,88 +28,97 @@
import { workflowTerminateEnabled } from '$lib/utilities/workflow-terminate-enabled';
import { workflowUpdateEnabled } from '$lib/utilities/workflow-update-enabled';
- export let workflow: WorkflowExecution;
- export let namespace: string;
- export let cancelInProgress: boolean;
- export let isRunning: boolean;
- export let first: string | undefined = undefined;
- export let next: string | undefined = undefined;
+ interface Props {
+ workflow: WorkflowExecution;
+ namespace: string;
+ cancelInProgress: boolean;
+ isRunning: boolean;
+ first?: string;
+ next?: string;
+ }
+
+ let { workflow, namespace, cancelInProgress, isRunning, first, next }: Props =
+ $props();
- let cancelConfirmationModalOpen = false;
- let terminateConfirmationModalOpen = false;
- let resetConfirmationModalOpen = false;
- let signalConfirmationModalOpen = false;
- let updateConfirmationModalOpen = false;
+ let cancelConfirmationModalOpen = $state(false);
+ let terminateConfirmationModalOpen = $state(false);
+ let resetConfirmationModalOpen = $state(false);
+ let signalConfirmationModalOpen = $state(false);
+ let updateConfirmationModalOpen = $state(false);
- let resetDescription: string;
let coreUser = coreUserStore();
- $: cancelEnabled = workflowCancelEnabled(
- $page.data.settings,
- $coreUser,
- namespace,
+ let cancelEnabled = $derived(
+ workflowCancelEnabled($page.data.settings, $coreUser, namespace),
);
- $: signalEnabled = workflowSignalEnabled(
- $page.data.settings,
- $coreUser,
- namespace,
+ let signalEnabled = $derived(
+ workflowSignalEnabled($page.data.settings, $coreUser, namespace),
);
- $: updateEnabled = workflowUpdateEnabled(
- $page.data.settings,
- $coreUser,
- namespace,
+ let updateEnabled = $derived(
+ workflowUpdateEnabled($page.data.settings, $coreUser, namespace),
);
- $: terminateEnabled = workflowTerminateEnabled(
- $page.data.settings,
- $coreUser,
- namespace,
+ let terminateEnabled = $derived(
+ workflowTerminateEnabled($page.data.settings, $coreUser, namespace),
);
- $: resetAuthorized = workflowResetEnabled(
- $page.data.settings,
- $coreUser,
- namespace,
+ let resetAuthorized = $derived(
+ workflowResetEnabled($page.data.settings, $coreUser, namespace),
);
// https://github.com/temporalio/temporal/releases/tag/v1.27.1
- $: canResetWithPendingChildWorkflows =
+ let canResetWithPendingChildWorkflows = $derived(
minimumVersionRequired('1.27.1', $temporalVersion) ||
- $isCloud ||
- workflow.pendingChildren.length === 0;
+ $isCloud ||
+ workflow.pendingChildren.length === 0,
+ );
- $: resetEnabled =
+ let resetEnabled = $derived(
resetAuthorized &&
- canResetWithPendingChildWorkflows &&
- $resetEvents.length > 0;
- $: actionsDisabled = !resetEnabled && !signalEnabled && !terminateEnabled;
-
- let workflowActions: {
- label: string;
- onClick: () => void;
- enabled: boolean;
- testId: string;
- destructive?: boolean;
- description?: string;
- }[];
+ canResetWithPendingChildWorkflows &&
+ $resetEvents.length > 0,
+ );
+ let actionsDisabled = $derived(
+ !resetEnabled && !signalEnabled && !terminateEnabled,
+ );
- $: {
+ const getResetDescription = ({
+ resetAuthorized,
+ canResetWithPendingChildWorkflows,
+ resetEvents,
+ }) => {
if (!resetAuthorized) {
- resetDescription = translate('workflows.reset-disabled-unauthorized');
+ return translate('workflows.reset-disabled-unauthorized');
} else if (resetAuthorized && !canResetWithPendingChildWorkflows) {
- resetDescription = translate('workflows.reset-disabled-pending-children');
+ return translate('workflows.reset-disabled-pending-children');
} else if (
resetAuthorized &&
canResetWithPendingChildWorkflows &&
- $resetEvents.length === 0
+ resetEvents.length === 0
) {
- resetDescription = translate('workflows.reset-disabled-no-events');
+ return translate('workflows.reset-disabled-no-events');
}
- }
+ return '';
+ };
+
+ let resetDescription = $derived(
+ getResetDescription({
+ resetAuthorized,
+ canResetWithPendingChildWorkflows,
+ resetEvents: $resetEvents,
+ }),
+ );
- $: workflowActions = [
+ let workflowActions: {
+ label: string;
+ onClick: () => void;
+ enabled: boolean;
+ testId: string;
+ destructive?: boolean;
+ description?: string;
+ }[] = $derived([
{
label: translate('workflows.reset'),
onClick: () => (resetConfirmationModalOpen = true),
@@ -138,89 +150,113 @@
? ''
: translate('workflows.terminate-disabled'),
},
- ];
+ ]);
-{#if isRunning}
-