@burdenoff/fluidgrids-fe-sdk 2026.629.1 → 2026.701.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExecutionDetailPage-DYWM65JQ.js +6 -0
- package/dist/{ExecutionDetailPage-3EVS3WEC.js.map → ExecutionDetailPage-DYWM65JQ.js.map} +1 -1
- package/dist/ExecutionsListPage-RD54UMAN.js +8 -0
- package/dist/{ExecutionsListPage-NH2JLL2D.js.map → ExecutionsListPage-RD54UMAN.js.map} +1 -1
- package/dist/{WorkflowBuilder-Q44GW3KQ.js → WorkflowBuilder-PGCX2I7G.js} +3 -3
- package/dist/{WorkflowBuilder-Q44GW3KQ.js.map → WorkflowBuilder-PGCX2I7G.js.map} +1 -1
- package/dist/{chunk-WD52O45G.js → chunk-3IJ4L2HA.js} +8 -4
- package/dist/chunk-3IJ4L2HA.js.map +1 -0
- package/dist/{chunk-YMHXH7ZK.js → chunk-5LQLF5FT.js} +154 -9
- package/dist/chunk-5LQLF5FT.js.map +1 -0
- package/dist/{chunk-GY66IQWN.js → chunk-64YSUEQW.js} +3 -3
- package/dist/{chunk-GY66IQWN.js.map → chunk-64YSUEQW.js.map} +1 -1
- package/dist/{chunk-UOCR65PI.js → chunk-ZYEMMWTI.js} +15 -5
- package/dist/chunk-ZYEMMWTI.js.map +1 -0
- package/dist/index.js +12 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/ExecutionDetailPage-3EVS3WEC.js +0 -6
- package/dist/ExecutionsListPage-NH2JLL2D.js +0 -8
- package/dist/chunk-UOCR65PI.js.map +0 -1
- package/dist/chunk-WD52O45G.js.map +0 -1
- package/dist/chunk-YMHXH7ZK.js.map +0 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { ExecutionDetailPage } from './chunk-64YSUEQW.js';
|
|
2
|
+
import './chunk-3IJ4L2HA.js';
|
|
3
|
+
import './chunk-FGYVIXQ7.js';
|
|
4
|
+
import './chunk-5BDQNSP3.js';
|
|
5
|
+
//# sourceMappingURL=ExecutionDetailPage-DYWM65JQ.js.map
|
|
6
|
+
//# sourceMappingURL=ExecutionDetailPage-DYWM65JQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-DYWM65JQ.js"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { ExecutionsListPage } from './chunk-ZYEMMWTI.js';
|
|
2
|
+
import './chunk-3IJ4L2HA.js';
|
|
3
|
+
import './chunk-4FFPGQD3.js';
|
|
4
|
+
import './chunk-FGYVIXQ7.js';
|
|
5
|
+
import './chunk-5BDQNSP3.js';
|
|
6
|
+
import './chunk-WWU2O2SR.js';
|
|
7
|
+
//# sourceMappingURL=ExecutionsListPage-RD54UMAN.js.map
|
|
8
|
+
//# sourceMappingURL=ExecutionsListPage-RD54UMAN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-RD54UMAN.js"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { WorkflowBuilder } from './chunk-
|
|
1
|
+
export { WorkflowBuilder } from './chunk-5LQLF5FT.js';
|
|
2
2
|
import './chunk-7VEOUEIN.js';
|
|
3
3
|
import './chunk-BQXHJIER.js';
|
|
4
4
|
import './chunk-KU64CCSV.js';
|
|
@@ -9,5 +9,5 @@ import './chunk-WWU2O2SR.js';
|
|
|
9
9
|
import './chunk-LUGJJ7LL.js';
|
|
10
10
|
import './chunk-XQP33UJR.js';
|
|
11
11
|
import './chunk-Z54K22LP.js';
|
|
12
|
-
//# sourceMappingURL=WorkflowBuilder-
|
|
13
|
-
//# sourceMappingURL=WorkflowBuilder-
|
|
12
|
+
//# sourceMappingURL=WorkflowBuilder-PGCX2I7G.js.map
|
|
13
|
+
//# sourceMappingURL=WorkflowBuilder-PGCX2I7G.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-PGCX2I7G.js"}
|
|
@@ -3,7 +3,7 @@ import { getFluidGridsClient } from './chunk-5BDQNSP3.js';
|
|
|
3
3
|
import { Icon } from '@iconify/react';
|
|
4
4
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
import { create } from 'zustand';
|
|
6
|
-
import { useState, useCallback, useMemo, useEffect } from 'react';
|
|
6
|
+
import { useState, useCallback, useMemo, useEffect, useRef } from 'react';
|
|
7
7
|
import { Button } from '@burdenoff/fe-libs/button';
|
|
8
8
|
import { useNavigate } from 'react-router-dom';
|
|
9
9
|
import { gql } from '@apollo/client';
|
|
@@ -1737,7 +1737,9 @@ function useExecutions(input = {}) {
|
|
|
1737
1737
|
const [loading, setLoading] = useState(true);
|
|
1738
1738
|
const [error, setError] = useState(null);
|
|
1739
1739
|
const inputKey = JSON.stringify(input);
|
|
1740
|
+
const reqIdRef = useRef(0);
|
|
1740
1741
|
const fetchData = useCallback(async () => {
|
|
1742
|
+
const reqId = ++reqIdRef.current;
|
|
1741
1743
|
setLoading(true);
|
|
1742
1744
|
setError(null);
|
|
1743
1745
|
try {
|
|
@@ -1747,13 +1749,15 @@ function useExecutions(input = {}) {
|
|
|
1747
1749
|
variables: { input: JSON.parse(inputKey) },
|
|
1748
1750
|
fetchPolicy: "network-only"
|
|
1749
1751
|
});
|
|
1752
|
+
if (reqId !== reqIdRef.current) return;
|
|
1750
1753
|
setExecutions(result.data?.workflowRuns?.items ?? []);
|
|
1751
1754
|
setTotal(result.data?.workflowRuns?.total ?? 0);
|
|
1752
1755
|
setHasMore(result.data?.workflowRuns?.hasMore ?? false);
|
|
1753
1756
|
} catch (err) {
|
|
1757
|
+
if (reqId !== reqIdRef.current) return;
|
|
1754
1758
|
setError(err);
|
|
1755
1759
|
} finally {
|
|
1756
|
-
setLoading(false);
|
|
1760
|
+
if (reqId === reqIdRef.current) setLoading(false);
|
|
1757
1761
|
}
|
|
1758
1762
|
}, [inputKey]);
|
|
1759
1763
|
useEffect(() => {
|
|
@@ -2011,5 +2015,5 @@ function useAutoRefresh(refetchFn, enabled = true, interval = 5e3) {
|
|
|
2011
2015
|
}
|
|
2012
2016
|
|
|
2013
2017
|
export { ExecutionCards, ExecutionFilters, ExecutionStats, ExecutionStatusBadge, ExecutionTable, ExecutionTimeline, NodeTimeline, Pagination, useAutoRefresh, useExecution, useExecutionActions, useExecutionLogs, useExecutionStats, useExecutionsStore, useExecutionsWithStore };
|
|
2014
|
-
//# sourceMappingURL=chunk-
|
|
2015
|
-
//# sourceMappingURL=chunk-
|
|
2018
|
+
//# sourceMappingURL=chunk-3IJ4L2HA.js.map
|
|
2019
|
+
//# sourceMappingURL=chunk-3IJ4L2HA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/executions/types/index.ts","../src/modules/executions/components/ExecutionStatusBadge.tsx","../src/modules/executions/store/executionsStore.ts","../src/modules/executions/components/ExecutionFilters.tsx","../src/modules/executions/components/ExecutionStats.tsx","../src/modules/executions/components/ExecutionTable.tsx","../src/modules/executions/components/ExecutionCards.tsx","../src/modules/executions/components/ExecutionTimeline.tsx","../src/modules/executions/components/NodeTimeline.tsx","../src/modules/executions/components/Pagination.tsx","../src/stubs/subscription-stubs.ts","../src/modules/executions/hooks/useExecutions.ts"],"names":["jsxs","jsx","Icon","formatDuration","formatDate","Button","useState","formatTime","useCallback","useMemo"],"mappings":"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","file":"chunk-3IJ4L2HA.js","sourcesContent":["/**\n * Workflow Execution Types\n * Comprehensive type definitions for workflow runs, executions, and node states\n */\n\n// ============================================================================\n// Enums & Status Types\n// ============================================================================\n\nexport type RunStatus =\n | \"PENDING\"\n | \"RUNNING\"\n | \"COMPLETED\"\n | \"FAILED\"\n | \"CANCELLED\"\n | \"WAITING\"\n | \"TERMINATED\";\n\nexport type NodeStatus =\n | \"PENDING\"\n | \"RUNNING\"\n | \"COMPLETED\"\n | \"FAILED\"\n | \"SKIPPED\"\n | \"DELAYED\"\n | \"CANCELLED\"\n | \"TIMEOUT\"\n | \"WAITING_SUBWORKFLOW\";\n\nexport type ErrorType =\n | \"TIMEOUT\"\n | \"TRANSIENT\"\n | \"DEPENDENCY\"\n | \"AUTHORIZATION\"\n | \"VALIDATION\"\n | \"PERMANENT\"\n | \"UNKNOWN\";\n\n// ============================================================================\n// Core Entity Types\n// ============================================================================\n\nexport interface WorkflowRun {\n id: string;\n workflowId: string;\n workflowKey: string;\n version: string;\n triggerNodeId: string;\n triggerData?: unknown;\n status: RunStatus;\n context?: unknown;\n triggeredById?: string;\n parentRunId?: string;\n createdAt: string;\n updatedAt: string;\n startedAt?: string;\n completedAt?: string;\n duration?: number;\n errorMessage?: string;\n errorType?: ErrorType;\n totalNodes?: number;\n completedNodes?: number;\n failedNodes?: number;\n skippedNodes?: number;\n progress: number;\n nodeStates?: NodeState[];\n workflow?: {\n id: string;\n name: string;\n description?: string;\n };\n}\n\nexport interface NodeState {\n id: string;\n runId: string;\n nodeId: string;\n nodeType: string;\n nodeVersion: string;\n status: NodeStatus;\n attemptCount: number;\n inputArgs?: unknown;\n output?: unknown;\n error?: string;\n errorType?: ErrorType;\n startTime?: string;\n endTime?: string;\n duration?: number;\n resumeTime?: string;\n childRunId?: string;\n instanceKey?: string;\n context?: unknown;\n metadata?: unknown;\n}\n\nexport interface ExecutionLog {\n id: string;\n runId: string;\n level: \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\";\n message: string;\n nodeId?: string;\n nodeType?: string;\n timestamp: string;\n metadata?: unknown;\n}\n\n// ============================================================================\n// Filter & Pagination Types\n// ============================================================================\n\nexport interface ExecutionsFilter {\n status: RunStatus | \"all\";\n workflowKey: string;\n dateRange: DateRange;\n search: string;\n}\n\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n preset:\n | \"today\"\n | \"yesterday\"\n | \"7days\"\n | \"30days\"\n | \"90days\"\n | \"custom\"\n | \"all\";\n}\n\nexport interface ListExecutionsInput {\n limit?: number;\n offset?: number;\n status?: RunStatus;\n workflowKey?: string;\n workspaceId?: string;\n startDate?: string;\n endDate?: string;\n}\n\nexport interface ExecutionsListResponse {\n items: WorkflowRun[];\n total: number;\n hasMore: boolean;\n}\n\n// ============================================================================\n// UI State Types\n// ============================================================================\n\nexport type ExecutionsViewMode = \"table\" | \"timeline\" | \"cards\";\n\nexport interface ExecutionSelection {\n runIds: string[];\n allSelected: boolean;\n}\n\nexport interface ExecutionsPagination {\n page: number;\n pageSize: number;\n total: number;\n}\n\n// ============================================================================\n// Dashboard & Stats Types\n// ============================================================================\n\nexport interface ExecutionStats {\n total: number;\n running: number;\n completed: number;\n failed: number;\n cancelled: number;\n pending: number;\n waiting: number;\n successRate: number;\n avgDuration: number;\n}\n\nexport interface TimeSeriesDataPoint {\n timestamp: string;\n workflowRuns: number;\n successfulRuns: number;\n failedRuns: number;\n cancelledRuns: number;\n nodeExecutions: number;\n totalDuration?: number;\n averageDuration?: number;\n}\n\nexport interface NodeUsageStat {\n nodeType: string;\n totalExecutions: number;\n successCount: number;\n failureCount: number;\n avgExecutionTime: number;\n}\n\n// ============================================================================\n// Action Types\n// ============================================================================\n\nexport type ExecutionAction =\n | \"cancel\"\n | \"pause\"\n | \"resume\"\n | \"retry\"\n | \"view\"\n | \"delete\";\n\nexport interface BulkExecutionAction {\n action: ExecutionAction;\n runIds: string[];\n}\n\n// ============================================================================\n// Helper Types\n// ============================================================================\n\nexport interface StatusConfig {\n label: string;\n color: string;\n bgColor: string;\n borderColor: string;\n icon: string;\n}\n\nexport const RUN_STATUS_CONFIG: Record<RunStatus, StatusConfig> = {\n PENDING: {\n label: \"Pending\",\n color: \"text-gray-600 dark:text-gray-400\",\n bgColor: \"bg-gray-50 dark:bg-gray-800\",\n borderColor: \"border-gray-200 dark:border-gray-700\",\n icon: \"mdi:clock-outline\",\n },\n RUNNING: {\n label: \"Running\",\n color: \"text-blue-600 dark:text-blue-400\",\n bgColor: \"bg-blue-50 dark:bg-blue-900/20\",\n borderColor: \"border-blue-200 dark:border-blue-800\",\n icon: \"mdi:play-circle-outline\",\n },\n COMPLETED: {\n label: \"Completed\",\n color: \"text-green-600 dark:text-green-400\",\n bgColor: \"bg-green-50 dark:bg-green-900/20\",\n borderColor: \"border-green-200 dark:border-green-800\",\n icon: \"mdi:check-circle-outline\",\n },\n FAILED: {\n label: \"Failed\",\n color: \"text-red-600 dark:text-red-400\",\n bgColor: \"bg-red-50 dark:bg-red-900/20\",\n borderColor: \"border-red-200 dark:border-red-800\",\n icon: \"mdi:alert-circle-outline\",\n },\n CANCELLED: {\n label: \"Cancelled\",\n color: \"text-orange-600 dark:text-orange-400\",\n bgColor: \"bg-orange-50 dark:bg-orange-900/20\",\n borderColor: \"border-orange-200 dark:border-orange-800\",\n icon: \"mdi:cancel\",\n },\n WAITING: {\n label: \"Waiting\",\n color: \"text-purple-600 dark:text-purple-400\",\n bgColor: \"bg-purple-50 dark:bg-purple-900/20\",\n borderColor: \"border-purple-200 dark:border-purple-800\",\n icon: \"mdi:timer-sand\",\n },\n TERMINATED: {\n label: \"Terminated\",\n color: \"text-gray-600 dark:text-gray-400\",\n bgColor: \"bg-gray-50 dark:bg-gray-800\",\n borderColor: \"border-gray-300 dark:border-gray-600\",\n icon: \"mdi:stop-circle-outline\",\n },\n};\n\nexport const NODE_STATUS_CONFIG: Record<NodeStatus, StatusConfig> = {\n PENDING: {\n label: \"Pending\",\n color: \"text-gray-600 dark:text-gray-400\",\n bgColor: \"bg-gray-50 dark:bg-gray-800\",\n borderColor: \"border-gray-200 dark:border-gray-700\",\n icon: \"mdi:clock-outline\",\n },\n RUNNING: {\n label: \"Running\",\n color: \"text-blue-600 dark:text-blue-400\",\n bgColor: \"bg-blue-50 dark:bg-blue-900/20\",\n borderColor: \"border-blue-200 dark:border-blue-800\",\n icon: \"mdi:play-circle-outline\",\n },\n COMPLETED: {\n label: \"Completed\",\n color: \"text-green-600 dark:text-green-400\",\n bgColor: \"bg-green-50 dark:bg-green-900/20\",\n borderColor: \"border-green-200 dark:border-green-800\",\n icon: \"mdi:check-circle-outline\",\n },\n FAILED: {\n label: \"Failed\",\n color: \"text-red-600 dark:text-red-400\",\n bgColor: \"bg-red-50 dark:bg-red-900/20\",\n borderColor: \"border-red-200 dark:border-red-800\",\n icon: \"mdi:alert-circle-outline\",\n },\n SKIPPED: {\n label: \"Skipped\",\n color: \"text-gray-500 dark:text-gray-500\",\n bgColor: \"bg-gray-100 dark:bg-gray-700\",\n borderColor: \"border-gray-200 dark:border-gray-600\",\n icon: \"mdi:skip-next\",\n },\n DELAYED: {\n label: \"Delayed\",\n color: \"text-yellow-600 dark:text-yellow-400\",\n bgColor: \"bg-yellow-50 dark:bg-yellow-900/20\",\n borderColor: \"border-yellow-200 dark:border-yellow-800\",\n icon: \"mdi:clock-alert-outline\",\n },\n CANCELLED: {\n label: \"Cancelled\",\n color: \"text-orange-600 dark:text-orange-400\",\n bgColor: \"bg-orange-50 dark:bg-orange-900/20\",\n borderColor: \"border-orange-200 dark:border-orange-800\",\n icon: \"mdi:cancel\",\n },\n TIMEOUT: {\n label: \"Timeout\",\n color: \"text-red-600 dark:text-red-400\",\n bgColor: \"bg-red-50 dark:bg-red-900/20\",\n borderColor: \"border-red-200 dark:border-red-800\",\n icon: \"mdi:timer-off-outline\",\n },\n WAITING_SUBWORKFLOW: {\n label: \"Waiting\",\n color: \"text-purple-600 dark:text-purple-400\",\n bgColor: \"bg-purple-50 dark:bg-purple-900/20\",\n borderColor: \"border-purple-200 dark:border-purple-800\",\n icon: \"mdi:subdirectory-arrow-right\",\n },\n};\n","import { Icon } from \"@iconify/react\";\nimport type { RunStatus, NodeStatus } from \"../types\";\nimport { RUN_STATUS_CONFIG, NODE_STATUS_CONFIG } from \"../types\";\n\ninterface ExecutionStatusBadgeProps {\n status: RunStatus;\n size?: \"sm\" | \"md\" | \"lg\";\n showIcon?: boolean;\n showLabel?: boolean;\n animated?: boolean;\n}\n\nexport function ExecutionStatusBadge({\n status,\n size = \"md\",\n showIcon = true,\n showLabel = true,\n animated = true,\n}: ExecutionStatusBadgeProps) {\n const config = RUN_STATUS_CONFIG[status];\n\n const sizeClasses = {\n sm: \"px-1.5 py-0.5 text-xs gap-1\",\n md: \"px-2 py-1 text-sm gap-1.5\",\n lg: \"px-3 py-1.5 text-base gap-2\",\n };\n\n const iconSizes = {\n sm: 12,\n md: 14,\n lg: 16,\n };\n\n const isRunning = status === \"RUNNING\";\n\n return (\n <span\n className={`\n inline-flex items-center rounded-full font-medium\n ${config.bgColor} ${config.color} border ${config.borderColor}\n ${sizeClasses[size]}\n ${animated && isRunning ? \"animate-pulse\" : \"\"}\n `}\n >\n {showIcon && (\n <Icon\n icon={config.icon}\n width={iconSizes[size]}\n height={iconSizes[size]}\n className={animated && isRunning ? \"animate-spin\" : \"\"}\n />\n )}\n {showLabel && <span>{config.label}</span>}\n </span>\n );\n}\n\ninterface NodeStatusBadgeProps {\n status: NodeStatus;\n size?: \"sm\" | \"md\" | \"lg\";\n showIcon?: boolean;\n showLabel?: boolean;\n animated?: boolean;\n}\n\nexport function NodeStatusBadge({\n status,\n size = \"md\",\n showIcon = true,\n showLabel = true,\n animated = true,\n}: NodeStatusBadgeProps) {\n const config = NODE_STATUS_CONFIG[status];\n\n const sizeClasses = {\n sm: \"px-1.5 py-0.5 text-xs gap-1\",\n md: \"px-2 py-1 text-sm gap-1.5\",\n lg: \"px-3 py-1.5 text-base gap-2\",\n };\n\n const iconSizes = {\n sm: 12,\n md: 14,\n lg: 16,\n };\n\n const isRunning = status === \"RUNNING\";\n\n return (\n <span\n className={`\n inline-flex items-center rounded-full font-medium\n ${config.bgColor} ${config.color} border ${config.borderColor}\n ${sizeClasses[size]}\n ${animated && isRunning ? \"animate-pulse\" : \"\"}\n `}\n >\n {showIcon && (\n <Icon\n icon={config.icon}\n width={iconSizes[size]}\n height={iconSizes[size]}\n className={animated && isRunning ? \"animate-spin\" : \"\"}\n />\n )}\n {showLabel && <span>{config.label}</span>}\n </span>\n );\n}\n","import { create } from \"zustand\";\nimport type {\n RunStatus,\n ExecutionsFilter,\n ExecutionsViewMode,\n ExecutionSelection,\n ExecutionsPagination,\n DateRange,\n WorkflowRun,\n} from \"../types\";\n\ninterface ExecutionsState {\n // View state\n viewMode: ExecutionsViewMode;\n selectedExecution: WorkflowRun | null;\n expandedRows: Set<string>;\n\n // Selection\n selection: ExecutionSelection;\n\n // Filters\n filter: ExecutionsFilter;\n\n // Pagination\n pagination: ExecutionsPagination;\n\n // UI state\n isFilterPanelOpen: boolean;\n isDetailsPanelOpen: boolean;\n autoRefresh: boolean;\n autoRefreshInterval: number;\n\n // Real-time\n liveRunIds: Set<string>;\n\n // Actions - View\n setViewMode: (mode: ExecutionsViewMode) => void;\n setSelectedExecution: (execution: WorkflowRun | null) => void;\n toggleRowExpanded: (runId: string) => void;\n\n // Actions - Selection\n setSelection: (selection: ExecutionSelection) => void;\n toggleSelectRun: (runId: string) => void;\n selectAll: (runIds: string[]) => void;\n clearSelection: () => void;\n\n // Actions - Filter\n updateFilter: (filter: Partial<ExecutionsFilter>) => void;\n setStatusFilter: (status: RunStatus | \"all\") => void;\n setWorkflowFilter: (workflowKey: string) => void;\n setDateRange: (dateRange: DateRange) => void;\n setSearchQuery: (search: string) => void;\n resetFilters: () => void;\n\n // Actions - Pagination\n setPage: (page: number) => void;\n setPageSize: (pageSize: number) => void;\n setTotal: (total: number) => void;\n\n // Actions - UI\n toggleFilterPanel: () => void;\n toggleDetailsPanel: () => void;\n setAutoRefresh: (enabled: boolean) => void;\n setAutoRefreshInterval: (interval: number) => void;\n\n // Actions - Real-time\n addLiveRun: (runId: string) => void;\n removeLiveRun: (runId: string) => void;\n clearLiveRuns: () => void;\n}\n\nconst defaultFilter: ExecutionsFilter = {\n status: \"all\",\n workflowKey: \"\",\n dateRange: {\n start: null,\n end: null,\n preset: \"all\",\n },\n search: \"\",\n};\n\nconst defaultPagination: ExecutionsPagination = {\n page: 1,\n pageSize: 25,\n total: 0,\n};\n\nexport const useExecutionsStore = create<ExecutionsState>((set) => ({\n // Initial state\n viewMode: \"table\",\n selectedExecution: null,\n expandedRows: new Set(),\n\n selection: {\n runIds: [],\n allSelected: false,\n },\n\n filter: defaultFilter,\n pagination: defaultPagination,\n\n isFilterPanelOpen: false,\n isDetailsPanelOpen: false,\n autoRefresh: true,\n autoRefreshInterval: 5000,\n\n liveRunIds: new Set(),\n\n // Actions - View\n setViewMode: (mode) => set({ viewMode: mode }),\n\n setSelectedExecution: (execution) =>\n set({\n selectedExecution: execution,\n isDetailsPanelOpen: execution !== null,\n }),\n\n toggleRowExpanded: (runId) =>\n set((state) => {\n const newExpanded = new Set(state.expandedRows);\n if (newExpanded.has(runId)) {\n newExpanded.delete(runId);\n } else {\n newExpanded.add(runId);\n }\n return { expandedRows: newExpanded };\n }),\n\n // Actions - Selection\n setSelection: (selection) => set({ selection }),\n\n toggleSelectRun: (runId) =>\n set((state) => {\n const isSelected = state.selection.runIds.includes(runId);\n const newRunIds = isSelected\n ? state.selection.runIds.filter((id) => id !== runId)\n : [...state.selection.runIds, runId];\n return {\n selection: {\n runIds: newRunIds,\n allSelected: false,\n },\n };\n }),\n\n selectAll: (runIds) =>\n set((state) => ({\n selection: {\n runIds: state.selection.allSelected ? [] : runIds,\n allSelected: !state.selection.allSelected,\n },\n })),\n\n clearSelection: () =>\n set({\n selection: {\n runIds: [],\n allSelected: false,\n },\n }),\n\n // Actions - Filter\n updateFilter: (filterUpdate) =>\n set((state) => ({\n filter: { ...state.filter, ...filterUpdate },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setStatusFilter: (status) =>\n set((state) => ({\n filter: { ...state.filter, status },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setWorkflowFilter: (workflowKey) =>\n set((state) => ({\n filter: { ...state.filter, workflowKey },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setDateRange: (dateRange) =>\n set((state) => ({\n filter: { ...state.filter, dateRange },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setSearchQuery: (search) =>\n set((state) => ({\n filter: { ...state.filter, search },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n resetFilters: () =>\n set({\n filter: defaultFilter,\n pagination: { ...defaultPagination },\n }),\n\n // Actions - Pagination\n setPage: (page) =>\n set((state) => ({\n pagination: { ...state.pagination, page },\n })),\n\n setPageSize: (pageSize) =>\n set((state) => ({\n pagination: { ...state.pagination, pageSize, page: 1 },\n })),\n\n setTotal: (total) =>\n set((state) => ({\n pagination: { ...state.pagination, total },\n })),\n\n // Actions - UI\n toggleFilterPanel: () =>\n set((state) => ({\n isFilterPanelOpen: !state.isFilterPanelOpen,\n })),\n\n toggleDetailsPanel: () =>\n set((state) => ({\n isDetailsPanelOpen: !state.isDetailsPanelOpen,\n })),\n\n setAutoRefresh: (enabled) => set({ autoRefresh: enabled }),\n\n setAutoRefreshInterval: (interval) => set({ autoRefreshInterval: interval }),\n\n // Actions - Real-time\n addLiveRun: (runId) =>\n set((state) => {\n const newLiveRunIds = new Set(state.liveRunIds);\n newLiveRunIds.add(runId);\n return { liveRunIds: newLiveRunIds };\n }),\n\n removeLiveRun: (runId) =>\n set((state) => {\n const newLiveRunIds = new Set(state.liveRunIds);\n newLiveRunIds.delete(runId);\n return { liveRunIds: newLiveRunIds };\n }),\n\n clearLiveRuns: () => set({ liveRunIds: new Set() }),\n}));\n","import { useState, useCallback } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\nimport type { RunStatus, DateRange } from \"../types\";\n\nconst STATUS_OPTIONS: Array<{ value: RunStatus | \"all\"; label: string }> = [\n { value: \"all\", label: \"All Statuses\" },\n { value: \"RUNNING\", label: \"Running\" },\n { value: \"COMPLETED\", label: \"Completed\" },\n { value: \"FAILED\", label: \"Failed\" },\n { value: \"PENDING\", label: \"Pending\" },\n { value: \"CANCELLED\", label: \"Cancelled\" },\n { value: \"WAITING\", label: \"Waiting\" },\n { value: \"TERMINATED\", label: \"Terminated\" },\n];\n\nconst DATE_PRESETS: Array<{ value: DateRange[\"preset\"]; label: string }> = [\n { value: \"all\", label: \"All Time\" },\n { value: \"today\", label: \"Today\" },\n { value: \"yesterday\", label: \"Yesterday\" },\n { value: \"7days\", label: \"Last 7 Days\" },\n { value: \"30days\", label: \"Last 30 Days\" },\n { value: \"90days\", label: \"Last 90 Days\" },\n { value: \"custom\", label: \"Custom Range\" },\n];\n\ninterface ExecutionFiltersProps {\n workflows?: Array<{ workflowKey: string; name: string }>;\n onRefresh?: () => void;\n}\n\nexport function ExecutionFilters({\n workflows = [],\n onRefresh,\n}: ExecutionFiltersProps) {\n const {\n filter,\n setStatusFilter,\n setWorkflowFilter,\n setDateRange,\n setSearchQuery,\n resetFilters,\n autoRefresh,\n setAutoRefresh,\n } = useExecutionsStore();\n\n const [showCustomDate, setShowCustomDate] = useState(false);\n\n const handleDatePresetChange = useCallback(\n (preset: DateRange[\"preset\"]) => {\n const now = new Date();\n let start: Date | null = null;\n let end: Date | null = null;\n\n switch (preset) {\n case \"today\":\n start = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n end = now;\n break;\n case \"yesterday\":\n start = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() - 1,\n );\n end = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n break;\n case \"7days\":\n start = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);\n end = now;\n break;\n case \"30days\":\n start = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);\n end = now;\n break;\n case \"90days\":\n start = new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000);\n end = now;\n break;\n case \"custom\":\n setShowCustomDate(true);\n return;\n default:\n start = null;\n end = null;\n }\n\n setShowCustomDate(false);\n setDateRange({ start, end, preset });\n },\n [setDateRange],\n );\n\n const activeFiltersCount = [\n filter.status !== \"all\",\n filter.workflowKey !== \"\",\n filter.dateRange.preset !== \"all\",\n filter.search !== \"\",\n ].filter(Boolean).length;\n\n return (\n <div className=\"space-y-4\">\n {/* Search and Quick Filters Row */}\n <div className=\"flex flex-col sm:flex-row gap-3\">\n {/* Search */}\n <div className=\"relative flex-1\">\n <Icon\n icon=\"mdi:magnify\"\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary\"\n width={18}\n />\n <input\n type=\"text\"\n placeholder=\"Search by workflow name or run ID...\"\n value={filter.search}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full pl-[3.25rem] pr-4 py-2 bg-background-secondary border border-border-secondary rounded-lg text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-action-primary-bg focus:border-transparent\"\n />\n {filter.search && (\n <button\n onClick={() => setSearchQuery(\"\")}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary hover:text-text-primary\"\n >\n <Icon icon=\"mdi:close\" width={18} />\n </button>\n )}\n </div>\n\n {/* Status Filter */}\n <select\n value={filter.status}\n onChange={(e) => setStatusFilter(e.target.value as RunStatus | \"all\")}\n className=\"px-3 py-2 bg-background-secondary border border-border-secondary rounded-lg text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg\"\n >\n {STATUS_OPTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n {/* Workflow Filter */}\n {workflows.length > 0 && (\n <select\n value={filter.workflowKey}\n onChange={(e) => setWorkflowFilter(e.target.value)}\n className=\"px-3 py-2 bg-background-secondary border border-border-secondary rounded-lg text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg max-w-[200px]\"\n >\n <option value=\"\">All Workflows</option>\n {workflows.map((wf) => (\n <option key={wf.workflowKey} value={wf.workflowKey}>\n {wf.name}\n </option>\n ))}\n </select>\n )}\n\n {/* Date Range */}\n <select\n value={filter.dateRange.preset}\n onChange={(e) =>\n handleDatePresetChange(e.target.value as DateRange[\"preset\"])\n }\n className=\"px-3 py-2 bg-background-secondary border border-border-secondary rounded-lg text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg\"\n >\n {DATE_PRESETS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n\n {/* Custom Date Range Inputs */}\n {showCustomDate && (\n <div className=\"flex flex-wrap gap-3 items-center p-3 bg-background-secondary rounded-lg border border-border-secondary\">\n <label className=\"text-sm text-text-secondary\">From:</label>\n <input\n type=\"datetime-local\"\n value={filter.dateRange.start?.toISOString().slice(0, 16) ?? \"\"}\n onChange={(e) =>\n setDateRange({\n ...filter.dateRange,\n start: e.target.value ? new Date(e.target.value) : null,\n preset: \"custom\",\n })\n }\n className=\"px-3 py-1.5 bg-background-primary border border-border-secondary rounded text-text-primary text-sm\"\n />\n <label className=\"text-sm text-text-secondary\">To:</label>\n <input\n type=\"datetime-local\"\n value={filter.dateRange.end?.toISOString().slice(0, 16) ?? \"\"}\n onChange={(e) =>\n setDateRange({\n ...filter.dateRange,\n end: e.target.value ? new Date(e.target.value) : null,\n preset: \"custom\",\n })\n }\n className=\"px-3 py-1.5 bg-background-primary border border-border-secondary rounded text-text-primary text-sm\"\n />\n <button\n onClick={() => setShowCustomDate(false)}\n className=\"text-text-secondary hover:text-text-primary\"\n >\n <Icon icon=\"mdi:close\" width={18} />\n </button>\n </div>\n )}\n\n {/* Actions Row */}\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n {/* Auto-refresh Toggle */}\n <label className=\"inline-flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={autoRefresh}\n onChange={(e) => setAutoRefresh(e.target.checked)}\n className=\"w-4 h-4 rounded border-border-secondary text-action-primary-bg focus:ring-action-primary-bg\"\n />\n <span className=\"text-sm text-text-secondary\">Auto-refresh</span>\n </label>\n\n {/* Refresh Button */}\n {onRefresh && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onRefresh}\n className=\"gap-1.5\"\n >\n <Icon icon=\"mdi:refresh\" width={16} />\n Refresh\n </Button>\n )}\n </div>\n\n <div className=\"flex items-center gap-3\">\n {/* Active Filters Count */}\n {activeFiltersCount > 0 && (\n <span className=\"text-sm text-text-secondary\">\n {activeFiltersCount} filter{activeFiltersCount > 1 ? \"s\" : \"\"}{\" \"}\n active\n </span>\n )}\n\n {/* Reset Filters */}\n {activeFiltersCount > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={resetFilters}\n className=\"gap-1.5\"\n >\n <Icon icon=\"mdi:filter-remove\" width={16} />\n Clear Filters\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import { Icon } from \"@iconify/react\";\nimport type { RunStatus } from \"../types\";\n\ninterface StatCardProps {\n label: string;\n value: number | string;\n icon: string;\n color: string;\n trend?: {\n value: number;\n isPositive: boolean;\n };\n onClick?: () => void;\n}\n\nfunction StatCard({\n label,\n value,\n icon,\n color,\n trend,\n onClick,\n}: StatCardProps) {\n return (\n <button\n onClick={onClick}\n disabled={!onClick}\n className={`\n flex flex-col p-4 bg-background-secondary rounded-lg border border-border-secondary\n hover:border-border-primary transition-colors\n ${onClick ? \"cursor-pointer\" : \"cursor-default\"}\n text-left w-full\n `}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <Icon icon={icon} className={color} width={24} />\n {trend && (\n <span\n className={`text-xs font-medium ${\n trend.isPositive\n ? \"text-[var(--color-status-success-text)]\"\n : \"text-[var(--color-status-error-text)]\"\n }`}\n >\n {trend.isPositive ? \"+\" : \"-\"}\n {Math.abs(trend.value)}%\n </span>\n )}\n </div>\n <div className=\"text-2xl font-bold text-text-primary\">{value}</div>\n <div className=\"text-sm text-text-secondary mt-1\">{label}</div>\n </button>\n );\n}\n\ninterface ExecutionStatsProps {\n stats: {\n total: number;\n running: number;\n completed: number;\n failed: number;\n cancelled: number;\n pending: number;\n waiting: number;\n successRate: number;\n avgDuration: number;\n } | null;\n loading?: boolean;\n onFilterByStatus?: (status: RunStatus | \"all\") => void;\n}\n\nexport function ExecutionStats({\n stats,\n loading,\n onFilterByStatus,\n}: ExecutionStatsProps) {\n if (loading) {\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 lg:grid-cols-6 gap-4\">\n {[...Array(6)].map((_, i) => (\n <div\n key={i}\n className=\"h-24 bg-background-secondary rounded-lg border border-border-secondary animate-pulse\"\n />\n ))}\n </div>\n );\n }\n\n if (!stats) {\n return null;\n }\n\n const formatDuration = (seconds: number): string => {\n if (seconds < 60) return `${Math.round(seconds)}s`;\n if (seconds < 3600) return `${Math.round(seconds / 60)}m`;\n return `${Math.round(seconds / 3600)}h`;\n };\n\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-4\">\n <StatCard\n label=\"Total Runs\"\n value={stats.total.toLocaleString()}\n icon=\"mdi:play-box-multiple\"\n color=\"text-text-primary\"\n onClick={() => onFilterByStatus?.(\"all\")}\n />\n <StatCard\n label=\"Running\"\n value={stats.running}\n icon=\"mdi:play-circle\"\n color=\"text-[var(--color-status-info-text)]\"\n onClick={() => onFilterByStatus?.(\"RUNNING\")}\n />\n <StatCard\n label=\"Completed\"\n value={stats.completed.toLocaleString()}\n icon=\"mdi:check-circle\"\n color=\"text-[var(--color-status-success-text)]\"\n onClick={() => onFilterByStatus?.(\"COMPLETED\")}\n />\n <StatCard\n label=\"Failed\"\n value={stats.failed}\n icon=\"mdi:alert-circle\"\n color=\"text-[var(--color-status-error-text)]\"\n onClick={() => onFilterByStatus?.(\"FAILED\")}\n />\n <StatCard\n label=\"Success Rate\"\n value={`${(stats.successRate ?? 0).toFixed(1)}%`}\n icon=\"mdi:percent\"\n color=\"text-accent\"\n />\n <StatCard\n label=\"Avg Duration\"\n value={formatDuration(stats.avgDuration ?? 0)}\n icon=\"mdi:timer\"\n color=\"text-[var(--color-status-warning-text)]\"\n />\n </div>\n );\n}\n\ninterface ExecutionMiniStatsProps {\n running: number;\n completed: number;\n failed: number;\n}\n\nexport function ExecutionMiniStats({\n running,\n completed,\n failed,\n}: ExecutionMiniStatsProps) {\n return (\n <div className=\"flex items-center gap-4 text-sm\">\n {running > 0 && (\n <span className=\"flex items-center gap-1 text-[var(--color-status-info-text)]\">\n <Icon icon=\"mdi:play-circle\" width={14} className=\"animate-pulse\" />\n {running} running\n </span>\n )}\n <span className=\"flex items-center gap-1 text-[var(--color-status-success-text)]\">\n <Icon icon=\"mdi:check-circle\" width={14} />\n {completed}\n </span>\n {failed > 0 && (\n <span className=\"flex items-center gap-1 text-[var(--color-status-error-text)]\">\n <Icon icon=\"mdi:alert-circle\" width={14} />\n {failed}\n </span>\n )}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport { ExecutionStatusBadge } from \"./ExecutionStatusBadge\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\nimport type { WorkflowRun } from \"../types\";\n\ninterface ExecutionTableProps {\n executions: WorkflowRun[];\n loading?: boolean;\n onRowClick?: (execution: WorkflowRun) => void;\n onAction?: (\n action: \"cancel\" | \"pause\" | \"resume\" | \"retry\",\n execution: WorkflowRun,\n ) => void;\n}\n\nexport function ExecutionTable({\n executions,\n loading,\n onRowClick,\n onAction,\n}: ExecutionTableProps) {\n const navigate = useNavigate();\n const {\n selection,\n toggleSelectRun,\n selectAll,\n expandedRows,\n toggleRowExpanded,\n } = useExecutionsStore();\n\n const allRunIds = useMemo(() => executions.map((e) => e.id), [executions]);\n\n const formatDuration = (ms?: number): string => {\n if (!ms) return \"-\";\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000)\n return `${Math.round(ms / 60000)}m ${Math.round((ms % 60000) / 1000)}s`;\n return `${Math.round(ms / 3600000)}h ${Math.round((ms % 3600000) / 60000)}m`;\n };\n\n const formatDate = (dateStr?: string): string => {\n if (!dateStr) return \"-\";\n const date = new Date(dateStr);\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n\n // Less than 1 minute\n if (diff < 60000) return \"Just now\";\n // Less than 1 hour\n if (diff < 3600000) return `${Math.round(diff / 60000)}m ago`;\n // Less than 24 hours\n if (diff < 86400000) return `${Math.round(diff / 3600000)}h ago`;\n // Less than 7 days\n if (diff < 604800000) return `${Math.round(diff / 86400000)}d ago`;\n\n return date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n };\n\n const getRowActions = (execution: WorkflowRun) => {\n const actions: Array<{\n icon: string;\n label: string;\n action: \"cancel\" | \"pause\" | \"resume\" | \"retry\";\n disabled?: boolean;\n }> = [];\n\n switch (execution.status) {\n case \"RUNNING\":\n actions.push({ icon: \"mdi:pause\", label: \"Pause\", action: \"pause\" });\n actions.push({ icon: \"mdi:stop\", label: \"Cancel\", action: \"cancel\" });\n break;\n case \"WAITING\":\n actions.push({ icon: \"mdi:play\", label: \"Resume\", action: \"resume\" });\n actions.push({ icon: \"mdi:stop\", label: \"Cancel\", action: \"cancel\" });\n break;\n case \"FAILED\":\n actions.push({ icon: \"mdi:refresh\", label: \"Retry\", action: \"retry\" });\n break;\n case \"PENDING\":\n actions.push({ icon: \"mdi:stop\", label: \"Cancel\", action: \"cancel\" });\n break;\n }\n\n return actions;\n };\n\n if (loading && executions.length === 0) {\n return (\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary overflow-hidden\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full min-w-[800px]\">\n <thead className=\"bg-background-tertiary border-b border-border-secondary\">\n <tr>\n <th className=\"w-10 px-4 py-3\"></th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Status\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Workflow\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Run ID\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Started\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Duration\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Progress\n </th>\n <th className=\"px-4 py-3\"></th>\n </tr>\n </thead>\n <tbody>\n {[...Array(5)].map((_, i) => (\n <tr key={i} className=\"border-b border-border-secondary\">\n <td colSpan={8} className=\"px-4 py-4\">\n <div className=\"h-8 bg-background-tertiary rounded animate-pulse\" />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n }\n\n if (executions.length === 0) {\n return (\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary p-12 text-center\">\n <Icon\n icon=\"mdi:play-box-outline\"\n className=\"mx-auto text-text-secondary mb-4\"\n width={48}\n />\n <h3 className=\"text-lg font-medium text-text-primary mb-2\">\n No executions found\n </h3>\n <p className=\"text-text-secondary mb-4\">\n There are no workflow executions matching your filters.\n </p>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n View Workflows\n </Button>\n </div>\n );\n }\n\n return (\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary overflow-hidden\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full min-w-[800px]\">\n <thead className=\"bg-background-tertiary border-b border-border-secondary\">\n <tr>\n <th className=\"w-10 px-4 py-3\">\n <input\n type=\"checkbox\"\n checked={selection.allSelected}\n onChange={() => selectAll(allRunIds)}\n className=\"w-4 h-4 rounded border-border-secondary\"\n />\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Status\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Workflow\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Run ID\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Started\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Duration\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Progress\n </th>\n <th className=\"px-4 py-3 w-32\"></th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border-secondary\">\n {executions.map((execution) => {\n const isSelected = selection.runIds.includes(execution.id);\n const isExpanded = expandedRows.has(execution.id);\n const actions = getRowActions(execution);\n\n return (\n <>\n <tr\n key={execution.id}\n className={`\n hover:bg-background-tertiary/50 cursor-pointer transition-colors\n ${isSelected ? \"bg-action-primary-bg/10\" : \"\"}\n `}\n onClick={() => onRowClick?.(execution)}\n >\n <td\n className=\"px-4 py-3\"\n onClick={(e) => e.stopPropagation()}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => toggleSelectRun(execution.id)}\n className=\"w-4 h-4 rounded border-border-secondary\"\n />\n </td>\n <td className=\"px-4 py-3\">\n <ExecutionStatusBadge\n status={execution.status}\n size=\"sm\"\n />\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-text-primary\">\n {execution.workflow?.name || execution.workflowKey}\n </span>\n <span className=\"text-xs text-text-secondary\">\n v{execution.version}\n </span>\n </div>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"text-sm font-mono text-text-secondary\">\n {execution.id.slice(0, 8)}...\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"text-sm text-text-secondary\">\n {formatDate(execution.startedAt || execution.createdAt)}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"text-sm text-text-secondary\">\n {formatDuration(execution.duration)}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1 h-2 bg-background-tertiary rounded-full overflow-hidden max-w-[100px]\">\n <div\n className={`h-full transition-all ${\n execution.status === \"FAILED\"\n ? \"bg-[var(--color-status-error-bg)]\"\n : execution.status === \"COMPLETED\"\n ? \"bg-[var(--color-status-success-bg)]\"\n : \"bg-[var(--color-status-info-bg)]\"\n }`}\n style={{ width: `${execution.progress}%` }}\n />\n </div>\n <span className=\"text-xs text-text-secondary min-w-[45px]\">\n {execution.completedNodes ?? 0}/\n {execution.totalNodes ?? 0}\n </span>\n </div>\n </td>\n <td\n className=\"px-4 py-3\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center gap-1\">\n {/* Expand/Collapse */}\n <button\n onClick={() => toggleRowExpanded(execution.id)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary\"\n >\n <Icon\n icon={\n isExpanded ? \"mdi:chevron-up\" : \"mdi:chevron-down\"\n }\n width={18}\n />\n </button>\n\n {/* Quick Actions */}\n {actions.slice(0, 2).map((action) => (\n <button\n key={action.action}\n onClick={() => onAction?.(action.action, execution)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary\"\n title={action.label}\n >\n <Icon icon={action.icon} width={18} />\n </button>\n ))}\n\n {/* View Details */}\n <button\n onClick={() => navigate(`../runs/${execution.id}`)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary\"\n title=\"View Details\"\n >\n <Icon icon=\"mdi:arrow-right\" width={18} />\n </button>\n </div>\n </td>\n </tr>\n\n {/* Expanded Row Content */}\n {isExpanded && (\n <tr key={`${execution.id}-expanded`}>\n <td\n colSpan={8}\n className=\"px-4 py-4 bg-background-tertiary/30\"\n >\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-4\">\n {/* Trigger Info */}\n <div>\n <div className=\"text-xs text-text-secondary mb-1\">\n Trigger Node\n </div>\n <div className=\"text-sm text-text-primary font-medium\">\n {execution.triggerNodeId}\n </div>\n </div>\n\n {/* Node Stats */}\n <div>\n <div className=\"text-xs text-text-secondary mb-1\">\n Node Stats\n </div>\n <div className=\"flex gap-2 text-sm\">\n <span className=\"text-[var(--color-status-success-text)]\">\n {execution.completedNodes ?? 0} completed\n </span>\n {(execution.failedNodes ?? 0) > 0 && (\n <span className=\"text-[var(--color-status-error-text)]\">\n {execution.failedNodes} failed\n </span>\n )}\n {(execution.skippedNodes ?? 0) > 0 && (\n <span className=\"text-tertiary\">\n {execution.skippedNodes} skipped\n </span>\n )}\n </div>\n </div>\n\n {/* Error Message */}\n {execution.errorMessage && (\n <div className=\"col-span-2\">\n <div className=\"text-xs text-text-secondary mb-1\">\n Error\n </div>\n <div className=\"text-sm text-[var(--color-status-error-text)] bg-[var(--color-status-error-bg-subtle)] p-2 rounded\">\n {execution.errorMessage}\n </div>\n </div>\n )}\n\n {/* Full Run ID */}\n <div>\n <div className=\"text-xs text-text-secondary mb-1\">\n Full Run ID\n </div>\n <div className=\"text-sm font-mono text-text-secondary break-all\">\n {execution.id}\n </div>\n </div>\n </div>\n </td>\n </tr>\n )}\n </>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {/* Mobile scroll hint */}\n <div className=\"sm:hidden px-4 py-2 bg-background-tertiary border-t border-border-secondary text-xs text-text-secondary text-center\">\n Swipe to see more columns\n </div>\n </div>\n );\n}\n","/**\n * ExecutionCards — Card-grid view for workflow executions.\n * Displays each execution as a card with status badge, timing info, and progress bar.\n * Used when viewMode is 'cards' in ExecutionsListPage.\n */\nimport { Icon } from \"@iconify/react\";\nimport type { WorkflowRun, RunStatus, ExecutionAction } from \"../types\";\nimport { RUN_STATUS_CONFIG } from \"../types\";\nimport { ExecutionStatusBadge } from \"./ExecutionStatusBadge\";\n\ninterface ExecutionCardsProps {\n executions: WorkflowRun[];\n loading: boolean;\n onCardClick: (execution: WorkflowRun) => void;\n onAction: (action: ExecutionAction, execution: WorkflowRun) => void;\n}\n\nfunction formatDuration(ms?: number): string {\n if (!ms) return \"--\";\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n const mins = Math.floor(ms / 60000);\n const secs = Math.floor((ms % 60000) / 1000);\n return `${mins}m ${secs}s`;\n}\n\nfunction formatRelativeTime(dateStr?: string): string {\n if (!dateStr) return \"--\";\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n if (diffMins < 1) return \"just now\";\n if (diffMins < 60) return `${diffMins}m ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours}h ago`;\n const diffDays = Math.floor(diffHours / 24);\n return `${diffDays}d ago`;\n}\n\nfunction getProgressColor(status: RunStatus): string {\n switch (status) {\n case \"COMPLETED\":\n return \"bg-green-500\";\n case \"FAILED\":\n case \"TERMINATED\":\n return \"bg-red-500\";\n case \"RUNNING\":\n return \"bg-blue-500\";\n case \"CANCELLED\":\n return \"bg-orange-500\";\n default:\n return \"bg-gray-400\";\n }\n}\n\nexport function ExecutionCards({\n executions,\n loading,\n onCardClick,\n onAction,\n}: ExecutionCardsProps) {\n if (loading) {\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div\n key={i}\n className=\"rounded-lg border border-border-secondary bg-background-secondary p-4 animate-pulse\"\n >\n <div className=\"flex justify-between mb-3\">\n <div className=\"h-4 bg-background-tertiary rounded w-32\" />\n <div className=\"h-5 bg-background-tertiary rounded-full w-20\" />\n </div>\n <div className=\"h-3 bg-background-tertiary rounded w-48 mb-2\" />\n <div className=\"h-2 bg-background-tertiary rounded w-full mb-3\" />\n <div className=\"flex justify-between\">\n <div className=\"h-3 bg-background-tertiary rounded w-16\" />\n <div className=\"h-3 bg-background-tertiary rounded w-24\" />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (executions.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16 text-text-secondary\">\n <Icon\n icon=\"mdi:play-circle-outline\"\n width={48}\n className=\"mb-3 opacity-40\"\n />\n <p className=\"text-lg font-medium\">No executions found</p>\n <p className=\"text-sm mt-1\">Run a workflow to see results here</p>\n </div>\n );\n }\n\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">\n {executions.map((execution) => {\n const config = RUN_STATUS_CONFIG[execution.status];\n const canCancel =\n execution.status === \"RUNNING\" || execution.status === \"PENDING\";\n const canPause = execution.status === \"RUNNING\";\n\n return (\n <div\n key={execution.id}\n onClick={() => onCardClick(execution)}\n className={`\n rounded-lg border bg-background-secondary p-4 cursor-pointer\n transition-all duration-200 hover:shadow-md hover:border-border-primary\n ${config.borderColor}\n `}\n >\n {/* Header: workflow key + status */}\n <div className=\"flex items-start justify-between mb-3\">\n <div className=\"min-w-0 flex-1 mr-2\">\n <p className=\"text-sm font-semibold text-text-primary truncate\">\n {execution.workflowKey}\n </p>\n <p className=\"text-xs text-text-tertiary mt-0.5\">\n v{execution.version}\n </p>\n </div>\n <ExecutionStatusBadge status={execution.status} size=\"sm\" />\n </div>\n\n {/* Progress bar */}\n <div className=\"mb-3\">\n <div className=\"flex justify-between text-xs text-text-tertiary mb-1\">\n <span>Progress</span>\n <span>{Math.round(execution.progress)}%</span>\n </div>\n <div className=\"h-1.5 bg-background-tertiary rounded-full overflow-hidden\">\n <div\n className={`h-full rounded-full transition-all duration-500 ${getProgressColor(execution.status)}`}\n style={{ width: `${Math.min(execution.progress, 100)}%` }}\n />\n </div>\n </div>\n\n {/* Node stats */}\n {(execution.totalNodes ?? 0) > 0 && (\n <div className=\"flex gap-3 text-xs text-text-secondary mb-3\">\n <span className=\"flex items-center gap-1\">\n <Icon\n icon=\"mdi:check-circle\"\n width={12}\n className=\"text-green-500\"\n />\n {execution.completedNodes ?? 0}\n </span>\n <span className=\"flex items-center gap-1\">\n <Icon\n icon=\"mdi:alert-circle\"\n width={12}\n className=\"text-red-500\"\n />\n {execution.failedNodes ?? 0}\n </span>\n <span className=\"flex items-center gap-1\">\n <Icon\n icon=\"mdi:skip-next\"\n width={12}\n className=\"text-gray-400\"\n />\n {execution.skippedNodes ?? 0}\n </span>\n <span className=\"flex items-center gap-1 ml-auto\">\n <Icon icon=\"mdi:sigma\" width={12} />\n {execution.totalNodes}\n </span>\n </div>\n )}\n\n {/* Footer: duration + time */}\n <div className=\"flex items-center justify-between text-xs text-text-tertiary pt-2 border-t border-border-secondary\">\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:timer-outline\" width={12} />\n {formatDuration(execution.duration ?? undefined)}\n </span>\n <span>\n {formatRelativeTime(execution.startedAt ?? execution.createdAt)}\n </span>\n </div>\n\n {/* Quick actions on hover */}\n {(canCancel || canPause) && (\n <div className=\"flex gap-1 mt-2 pt-2 border-t border-border-secondary\">\n {canPause && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onAction(\"pause\", execution);\n }}\n className=\"flex items-center gap-1 text-xs px-2 py-1 rounded bg-background-tertiary hover:bg-yellow-50 dark:hover:bg-yellow-900/20 text-text-secondary hover:text-yellow-600 transition-colors\"\n >\n <Icon icon=\"mdi:pause\" width={12} /> Pause\n </button>\n )}\n {canCancel && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onAction(\"cancel\", execution);\n }}\n className=\"flex items-center gap-1 text-xs px-2 py-1 rounded bg-background-tertiary hover:bg-red-50 dark:hover:bg-red-900/20 text-text-secondary hover:text-red-600 transition-colors\"\n >\n <Icon icon=\"mdi:stop\" width={12} /> Cancel\n </button>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * ExecutionTimeline — Chronological timeline view for workflow executions.\n * Displays executions as a vertical timeline with status indicators and duration bars.\n * Used when viewMode is 'timeline' in ExecutionsListPage.\n */\nimport { Icon } from \"@iconify/react\";\nimport type { WorkflowRun, RunStatus, ExecutionAction } from \"../types\";\nimport { RUN_STATUS_CONFIG } from \"../types\";\nimport { ExecutionStatusBadge } from \"./ExecutionStatusBadge\";\n\ninterface ExecutionTimelineProps {\n executions: WorkflowRun[];\n loading: boolean;\n onItemClick: (execution: WorkflowRun) => void;\n onAction: (action: ExecutionAction, execution: WorkflowRun) => void;\n}\n\nfunction formatTime(dateStr?: string): string {\n if (!dateStr) return \"--\";\n return new Date(dateStr).toLocaleTimeString(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n}\n\nfunction formatDate(dateStr?: string): string {\n if (!dateStr) return \"\";\n return new Date(dateStr).toLocaleDateString(undefined, {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction formatDuration(ms?: number): string {\n if (!ms) return \"--\";\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n const mins = Math.floor(ms / 60000);\n const secs = Math.floor((ms % 60000) / 1000);\n return `${mins}m ${secs}s`;\n}\n\nfunction getStatusDotColor(status: RunStatus): string {\n switch (status) {\n case \"COMPLETED\":\n return \"bg-green-500\";\n case \"FAILED\":\n case \"TERMINATED\":\n return \"bg-red-500\";\n case \"RUNNING\":\n return \"bg-blue-500 animate-pulse\";\n case \"CANCELLED\":\n return \"bg-orange-500\";\n case \"WAITING\":\n return \"bg-purple-500\";\n case \"PENDING\":\n default:\n return \"bg-gray-400\";\n }\n}\n\n/** Group executions by date for timeline sections */\nfunction groupByDate(executions: WorkflowRun[]): Map<string, WorkflowRun[]> {\n const groups = new Map<string, WorkflowRun[]>();\n for (const exec of executions) {\n const dateKey = formatDate(exec.startedAt ?? exec.createdAt);\n if (!groups.has(dateKey)) {\n groups.set(dateKey, []);\n }\n groups.get(dateKey)!.push(exec);\n }\n return groups;\n}\n\nexport function ExecutionTimeline({\n executions,\n loading,\n onItemClick,\n onAction,\n}: ExecutionTimelineProps) {\n if (loading) {\n return (\n <div className=\"space-y-6 pl-8\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"flex gap-4 animate-pulse\">\n <div className=\"w-3 h-3 rounded-full bg-background-tertiary mt-1.5 shrink-0\" />\n <div className=\"flex-1\">\n <div className=\"h-4 bg-background-tertiary rounded w-48 mb-2\" />\n <div className=\"h-3 bg-background-tertiary rounded w-32 mb-1\" />\n <div className=\"h-3 bg-background-tertiary rounded w-24\" />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (executions.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16 text-text-secondary\">\n <Icon icon=\"mdi:timeline\" width={48} className=\"mb-3 opacity-40\" />\n <p className=\"text-lg font-medium\">No executions found</p>\n <p className=\"text-sm mt-1\">Run a workflow to see the timeline</p>\n </div>\n );\n }\n\n const grouped = groupByDate(executions);\n\n return (\n <div className=\"space-y-8\">\n {Array.from(grouped.entries()).map(([dateLabel, dateExecutions]) => (\n <div key={dateLabel}>\n {/* Date header */}\n <div className=\"flex items-center gap-2 mb-4\">\n <Icon\n icon=\"mdi:calendar\"\n width={14}\n className=\"text-text-tertiary\"\n />\n <span className=\"text-xs font-semibold text-text-tertiary uppercase tracking-wider\">\n {dateLabel}\n </span>\n <div className=\"flex-1 h-px bg-border-secondary\" />\n <span className=\"text-xs text-text-tertiary\">\n {dateExecutions.length} runs\n </span>\n </div>\n\n {/* Timeline items */}\n <div className=\"relative ml-4\">\n {/* Vertical line */}\n <div className=\"absolute left-[5px] top-0 bottom-0 w-px bg-border-secondary\" />\n\n <div className=\"space-y-4\">\n {dateExecutions.map((execution, idx) => {\n const isLast = idx === dateExecutions.length - 1;\n const canCancel =\n execution.status === \"RUNNING\" ||\n execution.status === \"PENDING\";\n\n return (\n <div\n key={execution.id}\n onClick={() => onItemClick(execution)}\n className=\"relative flex gap-4 cursor-pointer group\"\n >\n {/* Timeline dot */}\n <div className=\"relative z-10 shrink-0 mt-1.5\">\n <div\n className={`w-[11px] h-[11px] rounded-full border-2 border-background-primary ${getStatusDotColor(execution.status)}`}\n />\n </div>\n\n {/* Content */}\n <div\n className={`\n flex-1 rounded-lg border border-border-secondary bg-background-secondary p-3\n transition-all duration-200 group-hover:shadow-sm group-hover:border-border-primary\n ${isLast ? \"\" : \"mb-0\"}\n `}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-text-primary truncate\">\n {execution.workflowKey}\n </span>\n <span className=\"text-xs text-text-tertiary\">\n v{execution.version}\n </span>\n </div>\n <div className=\"flex items-center gap-3 mt-1 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:clock-outline\" width={12} />\n {formatTime(\n execution.startedAt ?? execution.createdAt,\n )}\n </span>\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:timer-outline\" width={12} />\n {formatDuration(execution.duration ?? undefined)}\n </span>\n {(execution.totalNodes ?? 0) > 0 && (\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:puzzle-outline\" width={12} />\n {execution.completedNodes ?? 0}/\n {execution.totalNodes} nodes\n </span>\n )}\n </div>\n {execution.errorMessage && (\n <p className=\"mt-1.5 text-xs text-red-500 dark:text-red-400 truncate max-w-sm\">\n {execution.errorMessage}\n </p>\n )}\n </div>\n\n <div className=\"flex items-center gap-2 shrink-0\">\n <ExecutionStatusBadge\n status={execution.status}\n size=\"sm\"\n />\n {canCancel && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onAction(\"cancel\", execution);\n }}\n className=\"opacity-0 group-hover:opacity-100 p-1 rounded hover:bg-red-50 dark:hover:bg-red-900/20 text-text-tertiary hover:text-red-600 transition-all\"\n title=\"Cancel execution\"\n >\n <Icon icon=\"mdi:stop\" width={14} />\n </button>\n )}\n </div>\n </div>\n\n {/* Progress bar */}\n {execution.status === \"RUNNING\" && (\n <div className=\"mt-2\">\n <div className=\"h-1 bg-background-tertiary rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-blue-500 rounded-full transition-all duration-500 animate-pulse\"\n style={{\n width: `${Math.min(execution.progress, 100)}%`,\n }}\n />\n </div>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { NodeStatusBadge } from \"./ExecutionStatusBadge\";\nimport type { NodeState } from \"../types\";\n\ninterface NodeTimelineProps {\n nodeStates: NodeState[];\n loading?: boolean;\n onRetryNode?: (nodeId: string) => void;\n onViewChildRun?: (childRunId: string) => void;\n}\n\nexport function NodeTimeline({\n nodeStates,\n loading,\n onRetryNode,\n onViewChildRun,\n}: NodeTimelineProps) {\n const [expandedNodes, setExpandedNodes] = useState<Set<string>>(new Set());\n const [selectedTab, setSelectedTab] = useState<\"input\" | \"output\">(\"output\");\n\n const toggleNode = (nodeId: string) => {\n setExpandedNodes((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(nodeId)) {\n newSet.delete(nodeId);\n } else {\n newSet.add(nodeId);\n }\n return newSet;\n });\n };\n\n const formatDuration = (ms?: number): string => {\n if (!ms) return \"-\";\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n };\n\n const formatTime = (dateStr?: string): string => {\n if (!dateStr) return \"-\";\n const date = new Date(dateStr);\n return date.toLocaleTimeString(\"en-US\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n });\n };\n\n // Helper function to safely format JSON data for display\n const formatJsonData = (data: NodeState[\"metadata\"]): string => {\n if (data === null || data === undefined) return \"No data\";\n try {\n return JSON.stringify(data, null, 2);\n } catch {\n return \"Unable to display data\";\n }\n };\n\n // Check if metadata has content\n const hasMetadata = (metadata: NodeState[\"metadata\"]): boolean => {\n if (!metadata || typeof metadata !== \"object\") return false;\n return (\n Object.keys(metadata as Record<string, NodeState[\"metadata\"]>).length > 0\n );\n };\n\n const sortedNodes: NodeState[] = [...nodeStates].sort((a, b) => {\n if (!a.startTime && !b.startTime) return 0;\n if (!a.startTime) return 1;\n if (!b.startTime) return -1;\n return new Date(a.startTime).getTime() - new Date(b.startTime).getTime();\n });\n\n if (loading) {\n return (\n <div className=\"space-y-4\">\n {[...Array(4)].map((_, i) => (\n <div key={i} className=\"flex gap-4 animate-pulse\">\n <div className=\"w-8 h-8 bg-background-tertiary rounded-full\" />\n <div className=\"flex-1 h-20 bg-background-tertiary rounded-lg\" />\n </div>\n ))}\n </div>\n );\n }\n\n if (nodeStates.length === 0) {\n return (\n <div className=\"text-center py-8 text-text-secondary\">\n <Icon icon=\"mdi:timeline-outline\" className=\"mx-auto mb-2\" width={32} />\n <p>No node executions yet</p>\n </div>\n );\n }\n\n return (\n <div className=\"relative\">\n {/* Timeline line */}\n <div className=\"absolute left-4 top-8 bottom-8 w-0.5 bg-border-secondary\" />\n\n <div className=\"space-y-4\">\n {sortedNodes.map((node: NodeState, index: number) => {\n const isExpanded = expandedNodes.has(node.id);\n const nodeError: string | undefined = node.error;\n const hasError = node.status === \"FAILED\" || Boolean(nodeError);\n const isRunning = node.status === \"RUNNING\";\n const isWaitingSubworkflow = node.status === \"WAITING_SUBWORKFLOW\";\n const hasChildRun = Boolean(node.childRunId);\n\n return (\n <div key={node.id} className=\"relative flex gap-4\">\n {/* Timeline dot */}\n <div\n className={`\n relative z-10 w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0\n ${\n node.status === \"COMPLETED\"\n ? \"bg-[var(--color-status-success-bg-subtle)] text-[var(--color-status-success-text)]\"\n : node.status === \"FAILED\"\n ? \"bg-[var(--color-status-error-bg-subtle)] text-[var(--color-status-error-text)]\"\n : node.status === \"RUNNING\"\n ? \"bg-[var(--color-status-info-bg-subtle)] text-[var(--color-status-info-text)]\"\n : node.status === \"SKIPPED\"\n ? \"bg-muted text-tertiary\"\n : \"bg-muted text-tertiary\"\n }\n `}\n >\n <span className=\"text-xs font-bold\">{index + 1}</span>\n {isRunning && (\n <span className=\"absolute inset-0 rounded-full border-2 border-[var(--color-status-info-text)] animate-ping\" />\n )}\n </div>\n\n {/* Node card */}\n <div\n className={`\n flex-1 rounded-lg border transition-all\n ${\n hasError\n ? \"bg-[var(--color-status-error-bg-subtle)] border-[var(--color-status-error-border)]\"\n : isRunning\n ? \"bg-[var(--color-status-info-bg-subtle)] border-[var(--color-status-info-border)]\"\n : \"bg-background-secondary border-border-secondary\"\n }\n `}\n >\n {/* Header */}\n <button\n onClick={() => toggleNode(node.id)}\n className=\"w-full px-4 py-3 flex items-center justify-between text-left\"\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"flex-shrink-0\">\n <NodeStatusBadge\n status={node.status}\n size=\"sm\"\n showLabel={false}\n />\n </div>\n <div className=\"min-w-0\">\n <div className=\"font-medium text-text-primary truncate\">\n {node.nodeId}\n </div>\n <div className=\"text-xs text-text-secondary\">\n {node.nodeType} v{node.nodeVersion}\n </div>\n </div>\n </div>\n\n <div className=\"flex items-center gap-4 flex-shrink-0\">\n {/* Timing info */}\n <div className=\"text-right text-xs text-text-secondary hidden sm:block\">\n <div>{formatTime(node.startTime)}</div>\n <div>{formatDuration(node.duration)}</div>\n </div>\n\n {/* Sub-workflow indicator */}\n {hasChildRun && (\n <span className=\"px-2 py-0.5 text-xs bg-indigo-100 text-indigo-700 rounded flex items-center gap-1\">\n <Icon icon=\"mdi:sitemap\" width={12} />\n Sub-workflow\n </span>\n )}\n\n {/* Waiting for subworkflow indicator */}\n {isWaitingSubworkflow && (\n <span className=\"px-2 py-0.5 text-xs bg-purple-100 text-purple-700 rounded animate-pulse\">\n Waiting...\n </span>\n )}\n\n {/* Attempt count */}\n {node.attemptCount > 1 && (\n <span className=\"px-2 py-0.5 text-xs bg-[var(--color-status-warning-bg-subtle)] text-[var(--color-status-warning-text)] rounded\">\n Attempt {node.attemptCount}\n </span>\n )}\n\n {/* Expand icon */}\n <Icon\n icon={isExpanded ? \"mdi:chevron-up\" : \"mdi:chevron-down\"}\n className=\"text-text-secondary\"\n width={20}\n />\n </div>\n </button>\n\n {/* Expanded content */}\n {isExpanded && (\n <div className=\"px-4 pb-4 border-t border-border-secondary/50\">\n {/* Tabs for Input/Output */}\n <div className=\"flex gap-2 mt-3 mb-3\">\n <button\n onClick={() => setSelectedTab(\"output\")}\n className={`px-3 py-1.5 text-sm rounded ${\n selectedTab === \"output\"\n ? \"bg-action-primary-bg text-white\"\n : \"bg-background-tertiary text-text-secondary\"\n }`}\n >\n Output\n </button>\n <button\n onClick={() => setSelectedTab(\"input\")}\n className={`px-3 py-1.5 text-sm rounded ${\n selectedTab === \"input\"\n ? \"bg-action-primary-bg text-white\"\n : \"bg-background-tertiary text-text-secondary\"\n }`}\n >\n Input\n </button>\n </div>\n\n {/* Data display */}\n <div className=\"bg-background-primary rounded p-3 max-h-64 overflow-auto\">\n <pre className=\"text-xs text-text-primary whitespace-pre-wrap break-words font-mono\">\n {selectedTab === \"output\"\n ? formatJsonData(node.output)\n : formatJsonData(node.inputArgs)}\n </pre>\n </div>\n\n {/* Error display */}\n {node.error && (\n <div className=\"mt-3 p-3 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)] mb-1\">\n <Icon icon=\"mdi:alert-circle\" width={16} />\n <span className=\"font-medium text-sm\">Error</span>\n {node.errorType && (\n <span className=\"text-xs bg-[var(--color-status-error-bg)] px-2 py-0.5 rounded\">\n {node.errorType}\n </span>\n )}\n </div>\n <p className=\"text-sm text-[var(--color-status-error-text)]\">\n {node.error}\n </p>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"mt-3 flex justify-end gap-2\">\n {/* Sub-workflow drill-down */}\n {hasChildRun && onViewChildRun && (\n <button\n onClick={() => onViewChildRun(node.childRunId!)}\n className=\"px-3 py-1.5 text-sm bg-indigo-600 text-white rounded hover:bg-indigo-700 flex items-center gap-1.5\"\n >\n <Icon icon=\"mdi:sitemap\" width={16} />\n View Sub-Workflow Run\n </button>\n )}\n\n {node.status === \"FAILED\" && onRetryNode && (\n <button\n onClick={() => onRetryNode(node.nodeId)}\n className=\"px-3 py-1.5 text-sm bg-action-primary-bg text-white rounded hover:bg-action-primary-bg/90 flex items-center gap-1.5\"\n >\n <Icon icon=\"mdi:refresh\" width={16} />\n Retry Node\n </button>\n )}\n </div>\n\n {/* Metadata */}\n {hasMetadata(node.metadata) && (\n <details className=\"mt-3\">\n <summary className=\"text-xs text-text-secondary cursor-pointer hover:text-text-primary\">\n Metadata\n </summary>\n <pre className=\"mt-2 text-xs text-text-secondary bg-background-tertiary p-2 rounded overflow-auto max-h-32\">\n {formatJsonData(node.metadata)}\n </pre>\n </details>\n )}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { Icon } from \"@iconify/react\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\n\ninterface PaginationProps {\n totalItems?: number;\n showPageSize?: boolean;\n}\n\nexport function Pagination({\n totalItems,\n showPageSize = true,\n}: PaginationProps) {\n const { pagination, setPage, setPageSize } = useExecutionsStore();\n\n const { page, pageSize, total } = pagination;\n const totalPages = Math.ceil((totalItems ?? total) / pageSize);\n const startItem = (page - 1) * pageSize + 1;\n const endItem = Math.min(page * pageSize, totalItems ?? total);\n\n const pageSizeOptions = [10, 25, 50, 100];\n\n const goToPage = (newPage: number) => {\n if (newPage >= 1 && newPage <= totalPages) {\n setPage(newPage);\n }\n };\n\n // Generate page numbers to show\n const getPageNumbers = () => {\n const pages: (number | \"ellipsis\")[] = [];\n const showEllipsisThreshold = 7;\n\n if (totalPages <= showEllipsisThreshold) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n\n if (page > 3) {\n pages.push(\"ellipsis\");\n }\n\n const start = Math.max(2, page - 1);\n const end = Math.min(totalPages - 1, page + 1);\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n if (page < totalPages - 2) {\n pages.push(\"ellipsis\");\n }\n\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n if (totalPages <= 1 && !showPageSize) {\n return null;\n }\n\n return (\n <div className=\"flex flex-col sm:flex-row items-center justify-between gap-4 py-4\">\n {/* Results info */}\n <div className=\"text-sm text-text-secondary\">\n Showing{\" \"}\n <span className=\"font-medium text-text-primary\">{startItem}</span> to{\" \"}\n <span className=\"font-medium text-text-primary\">{endItem}</span> of{\" \"}\n <span className=\"font-medium text-text-primary\">\n {totalItems ?? total}\n </span>{\" \"}\n results\n </div>\n\n <div className=\"flex items-center gap-4\">\n {/* Page size selector */}\n {showPageSize && (\n <div className=\"flex items-center gap-2\">\n <label className=\"text-sm text-text-secondary\">Show</label>\n <select\n value={pageSize}\n onChange={(e) => setPageSize(Number(e.target.value))}\n className=\"px-2 py-1 bg-background-secondary border border-border-secondary rounded text-sm text-text-primary\"\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Page navigation */}\n {totalPages > 1 && (\n <nav className=\"flex items-center gap-1\">\n {/* Previous button */}\n <button\n onClick={() => goToPage(page - 1)}\n disabled={page === 1}\n className=\"p-2 rounded hover:bg-background-tertiary disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Icon\n icon=\"mdi:chevron-left\"\n width={20}\n className=\"text-text-secondary\"\n />\n </button>\n\n {/* Page numbers */}\n <div className=\"hidden sm:flex items-center gap-1\">\n {getPageNumbers().map((pageNum, index) =>\n pageNum === \"ellipsis\" ? (\n <span\n key={`ellipsis-${index}`}\n className=\"px-2 text-text-secondary\"\n >\n ...\n </span>\n ) : (\n <button\n key={pageNum}\n onClick={() => goToPage(pageNum)}\n className={`\n min-w-[32px] h-8 px-2 rounded text-sm font-medium\n ${\n pageNum === page\n ? \"bg-action-primary-bg text-white\"\n : \"hover:bg-background-tertiary text-text-secondary\"\n }\n `}\n >\n {pageNum}\n </button>\n ),\n )}\n </div>\n\n {/* Mobile page indicator */}\n <span className=\"sm:hidden px-3 text-sm text-text-secondary\">\n {page} / {totalPages}\n </span>\n\n {/* Next button */}\n <button\n onClick={() => goToPage(page + 1)}\n disabled={page === totalPages}\n className=\"p-2 rounded hover:bg-background-tertiary disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Icon\n icon=\"mdi:chevron-right\"\n width={20}\n className=\"text-text-secondary\"\n />\n </button>\n </nav>\n )}\n </div>\n </div>\n );\n}\n","/**\n * Stub document nodes for subscription operations not yet in the supergraph schema.\n * These will be replaced by codegen-generated documents once the subscription\n * fields are added to the gateway schema.\n *\n * See: src/operations/workflows/subscriptions/ and src/operations/executions/subscriptions/\n */\nimport { gql } from \"@apollo/client\";\n\n// Workflow subscription stubs\nexport const NodeStateUpdatedDocument = gql`\n subscription NodeStateUpdated($runId: String!) {\n _empty\n }\n`;\n\nexport const WorkflowCompletedDocument = gql`\n subscription WorkflowCompleted($runId: String!) {\n _empty\n }\n`;\n\nexport const WorkflowErrorDocument = gql`\n subscription WorkflowError($runId: String!) {\n _empty\n }\n`;\n\n// Execution subscription stubs\nexport const ExecutionUpdatedDocument = gql`\n subscription ExecutionUpdated($runId: String!) {\n _empty\n }\n`;\n\nexport const ExecutionNodeStateUpdatedDocument = gql`\n subscription ExecutionNodeStateUpdated($runId: String!) {\n _empty\n }\n`;\n\nexport const ExecutionCompletedDocument = gql`\n subscription ExecutionCompleted($runId: String!) {\n _empty\n }\n`;\n\nexport const ExecutionErrorDocument = gql`\n subscription ExecutionError($runId: String!) {\n _empty\n }\n`;\n","import { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\nimport { getFluidGridsClient } from \"../../../graphql/client\";\nimport {\n EXECUTIONS_LIST,\n EXECUTION_DETAIL,\n NODE_STATES,\n EXECUTION_LOGS,\n ACTIVE_EXECUTIONS,\n EXECUTION_STATS,\n PAUSE_EXECUTION,\n RESUME_EXECUTION,\n CANCEL_EXECUTION,\n RETRY_NODE,\n TERMINATE_EXECUTION,\n} from \"../graphql/operations\";\nimport type {\n WorkflowRun,\n NodeState,\n ExecutionLog,\n ListExecutionsInput,\n ExecutionsListResponse,\n RunStatus,\n} from \"../types\";\nimport type {\n PauseExecutionMutation,\n ResumeExecutionMutation,\n CancelExecutionMutation,\n RetryNodeMutation,\n TerminateExecutionMutation,\n} from \"../../../generated/operations\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\n\n// ============================================================================\n// Type Definitions for GraphQL Responses\n// ============================================================================\n\ninterface ExecutionsListData {\n workflowRuns: ExecutionsListResponse;\n}\n\ninterface ExecutionDetailData {\n workflowRun: WorkflowRun | null;\n}\n\ninterface NodeStatesData {\n nodeStates: NodeState[];\n}\n\ninterface ExecutionLogsData {\n workflowExecutionLogs: ExecutionLog[];\n}\n\ninterface ActiveExecutionsData {\n activeWorkflows: Array<{\n runId: string;\n workflowKey: string;\n version: string;\n status: RunStatus;\n startedAt: string;\n duration: number;\n progress: number;\n currentNode?: string;\n }>;\n}\n\ninterface ExecutionStatsData {\n dashboardSummary: {\n runsCountTotal: number;\n runsCompletedCount: number;\n runsFailedCount: number;\n runsRunningCount: number;\n runsPendingCount: number;\n runsCancelledCount: number;\n runsWaitingCount: number;\n runsCompletedLast24h: number;\n runsFailedLast24h: number;\n runsCompletedLast7d: number;\n runsFailedLast7d: number;\n avgWorkflowExecutionTimeSeconds: number;\n workflowSuccessRate: number;\n nodeUsageStats: Array<{\n nodeType: string;\n totalExecutions: number;\n successCount: number;\n failureCount: number;\n avgExecutionTime: number;\n }>;\n recentRuns: WorkflowRun[];\n };\n}\n\n// ============================================================================\n// Hook: useExecutions - List executions with filters\n// ============================================================================\n\nexport function useExecutions(input: ListExecutionsInput = {}) {\n const [executions, setExecutions] = useState<WorkflowRun[]>([]);\n const [total, setTotal] = useState(0);\n const [hasMore, setHasMore] = useState(false);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const inputKey = JSON.stringify(input);\n\n // Monotonic request id: when the input changes rapidly (e.g. a URL workflow\n // filter is applied right after mount), an earlier, less-filtered request can\n // resolve after the latest one. Only the latest request may write state, so\n // stale responses can't clobber the filtered results.\n const reqIdRef = useRef(0);\n\n const fetchData = useCallback(async () => {\n const reqId = ++reqIdRef.current;\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionsListData>({\n query: EXECUTIONS_LIST,\n variables: { input: JSON.parse(inputKey) },\n fetchPolicy: \"network-only\",\n });\n if (reqId !== reqIdRef.current) return; // superseded by a newer request\n setExecutions(result.data?.workflowRuns?.items ?? []);\n setTotal(result.data?.workflowRuns?.total ?? 0);\n setHasMore(result.data?.workflowRuns?.hasMore ?? false);\n } catch (err) {\n if (reqId !== reqIdRef.current) return;\n setError(err as Error);\n } finally {\n if (reqId === reqIdRef.current) setLoading(false);\n }\n }, [inputKey]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n executions,\n total,\n hasMore,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useExecution - Single execution details\n// ============================================================================\n\nexport function useExecution(id: string | undefined) {\n const [execution, setExecution] = useState<WorkflowRun | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!id) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionDetailData>({\n query: EXECUTION_DETAIL,\n variables: { id },\n fetchPolicy: \"network-only\",\n });\n setExecution(result.data?.workflowRun ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [id]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n execution,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useLazyExecution - Fetch execution on demand\n// ============================================================================\n\nexport function useLazyExecution() {\n const [execution, setExecution] = useState<WorkflowRun | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const getExecution = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionDetailData>({\n query: EXECUTION_DETAIL,\n variables: { id },\n fetchPolicy: \"network-only\",\n });\n const data = result.data?.workflowRun ?? null;\n setExecution(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return {\n getExecution,\n execution,\n loading,\n error,\n };\n}\n\n// ============================================================================\n// Hook: useNodeStates - Node states for a run\n// ============================================================================\n\nexport function useNodeStates(runId: string | undefined) {\n const [nodeStates, setNodeStates] = useState<NodeState[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!runId) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeStatesData>({\n query: NODE_STATES,\n variables: { runId },\n fetchPolicy: \"network-only\",\n });\n setNodeStates(result.data?.nodeStates ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [runId]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n nodeStates,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useExecutionLogs - Execution logs\n// ============================================================================\n\nexport function useExecutionLogs(\n runId: string | undefined,\n limit: number = 100,\n) {\n const [logs, setLogs] = useState<ExecutionLog[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!runId) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionLogsData>({\n query: EXECUTION_LOGS,\n variables: { runId, limit },\n fetchPolicy: \"network-only\",\n });\n setLogs(result.data?.workflowExecutionLogs ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [runId, limit]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n logs,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useActiveExecutions - Running workflows\n// ============================================================================\n\nexport function useActiveExecutions(\n options: { limit?: number; userId?: string } = {},\n) {\n const [executions, setExecutions] = useState<\n ActiveExecutionsData[\"activeWorkflows\"]\n >([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const optionsKey = JSON.stringify(options);\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ActiveExecutionsData>({\n query: ACTIVE_EXECUTIONS,\n variables: JSON.parse(optionsKey),\n fetchPolicy: \"network-only\",\n });\n setExecutions(result.data?.activeWorkflows ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [optionsKey]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n executions,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useExecutionStats - Dashboard statistics\n// ============================================================================\n\nexport function useExecutionStats(\n options: {\n workspaceId?: string;\n tenantId?: string;\n projectId?: string;\n } = {},\n) {\n const [stats, setStats] = useState<\n ExecutionStatsData[\"dashboardSummary\"] | null\n >(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const optionsKey = JSON.stringify(options);\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionStatsData>({\n query: EXECUTION_STATS,\n variables: JSON.parse(optionsKey),\n fetchPolicy: \"network-only\",\n });\n setStats(result.data?.dashboardSummary ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [optionsKey]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n stats,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useExecutionActions - Mutations for execution control\n// ============================================================================\n\nexport function useExecutionActions() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const pauseExecution = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.mutate<PauseExecutionMutation>({\n mutation: PAUSE_EXECUTION,\n variables: { id },\n });\n return result.data?.pauseWorkflowRun ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const resumeExecution = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.mutate<ResumeExecutionMutation>({\n mutation: RESUME_EXECUTION,\n variables: { id },\n });\n return result.data?.resumeWorkflowRun ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const cancelExecution = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.mutate<CancelExecutionMutation>({\n mutation: CANCEL_EXECUTION,\n variables: { id },\n });\n return result.data?.cancelWorkflowRun ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const retryNode = useCallback(async (runId: string, nodeId: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.mutate<RetryNodeMutation>({\n mutation: RETRY_NODE,\n variables: { id: runId, nodeId },\n });\n return result.data?.retryNode ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const terminateExecution = useCallback(\n async (runId: string, reason?: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.mutate<TerminateExecutionMutation>({\n mutation: TERMINATE_EXECUTION,\n variables: { runId, reason },\n });\n return result.data?.terminateWorkflow ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n pauseExecution,\n resumeExecution,\n cancelExecution,\n retryNode,\n terminateExecution,\n loading,\n error,\n };\n}\n\n// ============================================================================\n// Hook: useExecutionsWithStore - Combined hook with store integration\n// ============================================================================\n\nexport function useExecutionsWithStore() {\n const { filter, pagination, setTotal } = useExecutionsStore();\n\n const input = useMemo<ListExecutionsInput>(() => {\n const baseInput: ListExecutionsInput = {\n limit: pagination.pageSize,\n offset: (pagination.page - 1) * pagination.pageSize,\n };\n\n if (filter.status !== \"all\") {\n baseInput.status = filter.status;\n }\n\n if (filter.workflowKey) {\n baseInput.workflowKey = filter.workflowKey;\n }\n\n if (filter.dateRange.start) {\n baseInput.startDate = filter.dateRange.start.toISOString();\n }\n\n if (filter.dateRange.end) {\n baseInput.endDate = filter.dateRange.end.toISOString();\n }\n\n return baseInput;\n }, [filter, pagination.page, pagination.pageSize]);\n\n const result = useExecutions(input);\n\n useEffect(() => {\n if (result.total !== pagination.total) {\n setTotal(result.total);\n }\n }, [result.total, pagination.total, setTotal]);\n\n return result;\n}\n\n// ============================================================================\n// Hook: useAutoRefresh - Auto-refresh executions\n// ============================================================================\n\nexport function useAutoRefresh(\n refetchFn: () => void,\n enabled: boolean = true,\n interval: number = 5000,\n) {\n useEffect(() => {\n if (!enabled) return;\n\n const timer = setInterval(() => {\n refetchFn();\n }, interval);\n\n return () => clearInterval(timer);\n }, [enabled, interval, refetchFn]);\n}\n"]}
|