@burdenoff/fluidgrids-fe-sdk 2026.716.8 → 2026.716.10

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.
Files changed (39) hide show
  1. package/dist/ExecutionDetailPage-4RT4QFRT.js +6 -0
  2. package/dist/{ExecutionDetailPage-2HRRVYS3.js.map → ExecutionDetailPage-4RT4QFRT.js.map} +1 -1
  3. package/dist/ExecutionsListPage-I63SHREF.js +8 -0
  4. package/dist/{ExecutionsListPage-MEWGRSFS.js.map → ExecutionsListPage-I63SHREF.js.map} +1 -1
  5. package/dist/WorkflowBuilder-OX66PGQF.js +14 -0
  6. package/dist/{WorkflowBuilder-434XQXAL.js.map → WorkflowBuilder-OX66PGQF.js.map} +1 -1
  7. package/dist/WorkflowsList-4RBTKPUJ.js +8 -0
  8. package/dist/{WorkflowsList-W5JQQNLC.js.map → WorkflowsList-4RBTKPUJ.js.map} +1 -1
  9. package/dist/{blocks-3SRVXNOP.js → blocks-SUGKRWWO.js} +4 -4
  10. package/dist/{blocks-3SRVXNOP.js.map → blocks-SUGKRWWO.js.map} +1 -1
  11. package/dist/{chunk-HU3YI534.js → chunk-2WM6MEUY.js} +127 -117
  12. package/dist/chunk-2WM6MEUY.js.map +1 -0
  13. package/dist/{chunk-423UETZP.js → chunk-4J3LA5VT.js} +141 -115
  14. package/dist/chunk-4J3LA5VT.js.map +1 -0
  15. package/dist/{chunk-NAC4WYE5.js → chunk-4NTHFDKQ.js} +41 -3
  16. package/dist/chunk-4NTHFDKQ.js.map +1 -0
  17. package/dist/{chunk-7L75LV5R.js → chunk-5W4EAURJ.js} +3 -3
  18. package/dist/{chunk-7L75LV5R.js.map → chunk-5W4EAURJ.js.map} +1 -1
  19. package/dist/{chunk-T7PRWFLD.js → chunk-6MZFOWEO.js} +33 -23
  20. package/dist/chunk-6MZFOWEO.js.map +1 -0
  21. package/dist/{chunk-UJWICZR2.js → chunk-JXH7PRTS.js} +4 -4
  22. package/dist/{chunk-UJWICZR2.js.map → chunk-JXH7PRTS.js.map} +1 -1
  23. package/dist/{chunk-ZZFYYL2I.js → chunk-OHIRHNRJ.js} +61 -43
  24. package/dist/chunk-OHIRHNRJ.js.map +1 -0
  25. package/dist/{chunk-EIYBPBSN.js → chunk-WTKD76BY.js} +3 -3
  26. package/dist/{chunk-EIYBPBSN.js.map → chunk-WTKD76BY.js.map} +1 -1
  27. package/dist/index.d.ts +37 -18
  28. package/dist/index.js +15 -15
  29. package/dist/index.js.map +1 -1
  30. package/package.json +1 -1
  31. package/dist/ExecutionDetailPage-2HRRVYS3.js +0 -6
  32. package/dist/ExecutionsListPage-MEWGRSFS.js +0 -8
  33. package/dist/WorkflowBuilder-434XQXAL.js +0 -14
  34. package/dist/WorkflowsList-W5JQQNLC.js +0 -8
  35. package/dist/chunk-423UETZP.js.map +0 -1
  36. package/dist/chunk-HU3YI534.js.map +0 -1
  37. package/dist/chunk-NAC4WYE5.js.map +0 -1
  38. package/dist/chunk-T7PRWFLD.js.map +0 -1
  39. package/dist/chunk-ZZFYYL2I.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules/executions/pages/ExecutionsListPage.tsx"],"names":[],"mappings":"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","file":"chunk-UJWICZR2.js","sourcesContent":["import { useCallback, useMemo, useRef } from \"react\";\nimport { useNavigate, useSearchParams } from \"react-router-dom\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n ExecutionFilters,\n ExecutionStats,\n ExecutionTable,\n ExecutionCards,\n ExecutionTimeline,\n Pagination,\n} from \"../components\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\nimport {\n useExecutionsWithStore,\n useExecutionStats,\n useExecutionActions,\n useAutoRefresh,\n} from \"../hooks/useExecutions\";\nimport { useWorkflowDefinitions } from \"../../../hooks/useWorkflows\";\nimport type { WorkflowRun, RunStatus, ExecutionAction } from \"../types\";\n\nexport function ExecutionsListPage() {\n const navigate = useNavigate();\n\n // Store state\n const {\n viewMode,\n setViewMode,\n setSelectedExecution,\n selection,\n clearSelection,\n setStatusFilter,\n setWorkflowFilter,\n autoRefresh,\n autoRefreshInterval,\n } = useExecutionsStore();\n\n // Seed the workflow filter from the URL (?workflowKey=...) synchronously —\n // BEFORE useExecutionsWithStore() below reads it — so the first runs query\n // already carries the filter and no stale unfiltered request is fired. Lets\n // \"View Runs\" in the builder open this list scoped to one workflow; arriving\n // without the param (e.g. the sidebar \"Runs\" link) clears any stale filter.\n // Sync only when the URL param actually changes (tracked via a ref) so manual\n // dropdown changes — which update the store but not the URL — aren't reverted.\n const [searchParams] = useSearchParams();\n const workflowKeyParam = searchParams.get(\"workflowKey\") ?? \"\";\n const lastWorkflowKeyParam = useRef<string | null>(null);\n if (lastWorkflowKeyParam.current !== workflowKeyParam) {\n lastWorkflowKeyParam.current = workflowKeyParam;\n if (useExecutionsStore.getState().filter.workflowKey !== workflowKeyParam) {\n setWorkflowFilter(workflowKeyParam);\n }\n }\n\n // Data fetching\n const { executions, total, loading, error, refetch } =\n useExecutionsWithStore();\n const {\n stats,\n loading: statsLoading,\n refetch: refetchStats,\n } = useExecutionStats();\n const { workflows } = useWorkflowDefinitions({ limit: 100 });\n const { cancelExecution, pauseExecution, resumeExecution } =\n useExecutionActions();\n\n // Auto-refresh\n useAutoRefresh(\n useCallback(() => {\n refetch();\n refetchStats();\n }, [refetch, refetchStats]),\n autoRefresh,\n autoRefreshInterval,\n );\n\n // Transform stats for component\n const executionStats = useMemo(() => {\n if (!stats) return null;\n return {\n total: stats.runsCountTotal,\n running: stats.runsRunningCount,\n completed: stats.runsCompletedCount,\n failed: stats.runsFailedCount,\n cancelled: stats.runsCancelledCount ?? 0,\n pending: stats.runsPendingCount,\n waiting: stats.runsWaitingCount ?? 0,\n successRate: stats.workflowSuccessRate,\n avgDuration: stats.avgWorkflowExecutionTimeSeconds,\n };\n }, [stats]);\n\n // Transform workflows for filter\n const workflowOptions = useMemo(\n () =>\n workflows.map((w) => ({\n workflowKey: w.workflowKey,\n name: w.name,\n })),\n [workflows],\n );\n\n // Handlers\n const handleRowClick = (execution: WorkflowRun) => {\n setSelectedExecution(execution);\n navigate(`../runs/${execution.id}`);\n };\n\n const handleAction = async (\n action: ExecutionAction,\n execution: WorkflowRun,\n ) => {\n switch (action) {\n case \"cancel\":\n await cancelExecution(execution.id);\n break;\n case \"pause\":\n await pauseExecution(execution.id);\n break;\n case \"resume\":\n await resumeExecution(execution.id);\n break;\n case \"retry\":\n // Navigate to detail page for retry\n navigate(`../runs/${execution.id}`);\n break;\n case \"view\":\n navigate(`../runs/${execution.id}`);\n break;\n case \"delete\":\n // TODO: implement delete action\n break;\n }\n refetch();\n };\n\n const handleFilterByStatus = (status: RunStatus | \"all\") => {\n setStatusFilter(status);\n };\n\n const handleBulkAction = async (action: \"cancel\" | \"pause\" | \"resume\") => {\n if (selection.runIds.length === 0) return;\n\n const promises = selection.runIds.map((id) => {\n switch (action) {\n case \"cancel\":\n return cancelExecution(id);\n case \"pause\":\n return pauseExecution(id);\n case \"resume\":\n return resumeExecution(id);\n }\n });\n\n const results = await Promise.allSettled(promises);\n const failures = results.filter((r) => r.status === \"rejected\");\n if (failures.length > 0) {\n console.error(\n `Bulk action partially failed: ${failures.length}/${results.length} failed`,\n );\n }\n clearSelection();\n refetch();\n };\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n Executions\n </h1>\n <p className=\"text-text-secondary mt-1\">\n Monitor and manage your workflow runs\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n {/* View Mode Toggle */}\n <div className=\"flex items-center bg-background-secondary rounded-lg border border-border-secondary p-1\">\n <button\n onClick={() => setViewMode(\"table\")}\n className={`p-2 rounded ${\n viewMode === \"table\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title=\"Table View\"\n >\n <Icon icon=\"mdi:table\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"cards\")}\n className={`p-2 rounded ${\n viewMode === \"cards\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title=\"Card View\"\n >\n <Icon icon=\"mdi:view-grid\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"timeline\")}\n className={`p-2 rounded ${\n viewMode === \"timeline\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title=\"Timeline View\"\n >\n <Icon icon=\"mdi:timeline\" width={18} />\n </button>\n </div>\n\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n Back to Workflows\n </Button>\n </div>\n </div>\n\n {/* Stats Cards */}\n <div className=\"mb-6\">\n <ExecutionStats\n stats={executionStats}\n loading={statsLoading}\n onFilterByStatus={handleFilterByStatus}\n />\n </div>\n\n {/* Filters */}\n <div className=\"mb-6\">\n <ExecutionFilters workflows={workflowOptions} onRefresh={refetch} />\n </div>\n\n {/* Bulk Actions */}\n {selection.runIds.length > 0 && (\n <div className=\"mb-4 p-3 bg-action-primary-bg/10 rounded-lg flex flex-wrap items-center gap-3\">\n <span className=\"text-sm text-text-primary\">\n {selection.runIds.length} execution\n {selection.runIds.length > 1 ? \"s\" : \"\"} selected\n </span>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"cancel\")}\n >\n <Icon icon=\"mdi:stop\" className=\"mr-1\" width={14} />\n Cancel\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"pause\")}\n >\n <Icon icon=\"mdi:pause\" className=\"mr-1\" width={14} />\n Pause\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"resume\")}\n >\n <Icon icon=\"mdi:play\" className=\"mr-1\" width={14} />\n Resume\n </Button>\n </div>\n <button\n onClick={clearSelection}\n className=\"ml-auto text-sm text-text-secondary hover:text-text-primary\"\n >\n Clear selection\n </button>\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div className=\"mb-6 p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)]\">\n <Icon icon=\"mdi:alert-circle\" width={20} />\n <span className=\"font-medium\">Error loading executions</span>\n </div>\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">\n {error.message}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={refetch}\n className=\"mt-3 border-[var(--color-status-error-border)] text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]\"\n >\n Retry\n </Button>\n </div>\n )}\n\n {/* Executions View — switches between table, cards, and timeline */}\n {viewMode === \"table\" && (\n <ExecutionTable\n executions={executions}\n loading={loading}\n onRowClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"cards\" && (\n <ExecutionCards\n executions={executions}\n loading={loading}\n onCardClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"timeline\" && (\n <ExecutionTimeline\n executions={executions}\n loading={loading}\n onItemClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n\n {/* Pagination */}\n <Pagination totalItems={total} />\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/modules/executions/pages/ExecutionsListPage.tsx"],"names":[],"mappings":";;;;;;;;AAsBO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,WAAW,WAAA,EAAY;AAG7B,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,WAAA;AAAA,IACA,oBAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,MACE,kBAAA,EAAmB;AASvB,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,GAAA,CAAI,aAAa,CAAA,IAAK,EAAA;AAC5D,EAAA,MAAM,oBAAA,GAAuB,OAAsB,IAAI,CAAA;AACvD,EAAA,IAAI,oBAAA,CAAqB,YAAY,gBAAA,EAAkB;AACrD,IAAA,oBAAA,CAAqB,OAAA,GAAU,gBAAA;AAC/B,IAAA,IAAI,kBAAA,CAAmB,QAAA,EAAS,CAAE,MAAA,CAAO,gBAAgB,gBAAA,EAAkB;AACzE,MAAA,iBAAA,CAAkB,gBAAgB,CAAA;AAAA,IACpC;AAAA,EACF;AAGA,EAAA,MAAM,EAAE,UAAA,EAAY,KAAA,EAAO,SAAS,KAAA,EAAO,OAAA,KACzC,sBAAA,EAAuB;AACzB,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,OAAA,EAAS,YAAA;AAAA,IACT,OAAA,EAAS;AAAA,MACP,iBAAA,EAAkB;AACtB,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,uBAAuB,EAAE,KAAA,EAAO,KAAK,CAAA;AAC3D,EAAA,MAAM,EAAE,eAAA,EAAiB,cAAA,EAAgB,eAAA,KACvC,mBAAA,EAAoB;AAGtB,EAAA,cAAA;AAAA,IACE,YAAY,MAAM;AAChB,MAAA,OAAA,EAAQ;AACR,MAAA,YAAA,EAAa;AAAA,IACf,CAAA,EAAG,CAAC,OAAA,EAAS,YAAY,CAAC,CAAA;AAAA,IAC1B,WAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAM,cAAA,GAAiB,QAAQ,MAAM;AACnC,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,IAAA,OAAO;AAAA,MACL,OAAO,KAAA,CAAM,cAAA;AAAA,MACb,SAAS,KAAA,CAAM,gBAAA;AAAA,MACf,WAAW,KAAA,CAAM,kBAAA;AAAA,MACjB,QAAQ,KAAA,CAAM,eAAA;AAAA,MACd,SAAA,EAAW,MAAM,kBAAA,IAAsB,CAAA;AAAA,MACvC,SAAS,KAAA,CAAM,gBAAA;AAAA,MACf,OAAA,EAAS,MAAM,gBAAA,IAAoB,CAAA;AAAA,MACnC,aAAa,KAAA,CAAM,mBAAA;AAAA,MACnB,aAAa,KAAA,CAAM;AAAA,KACrB;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAA,MAAM,eAAA,GAAkB,OAAA;AAAA,IACtB,MACE,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACpB,aAAa,CAAA,CAAE,WAAA;AAAA,MACf,MAAM,CAAA,CAAE;AAAA,KACV,CAAE,CAAA;AAAA,IACJ,CAAC,SAAS;AAAA,GACZ;AAGA,EAAA,MAAM,cAAA,GAAiB,CAAC,SAAA,KAA2B;AACjD,IAAA,oBAAA,CAAqB,SAAS,CAAA;AAC9B,IAAA,QAAA,CAAS,CAAA,QAAA,EAAW,SAAA,CAAU,EAAE,CAAA,CAAE,CAAA;AAAA,EACpC,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,OACnB,MAAA,EACA,SAAA,KACG;AACH,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,QAAA;AACH,QAAA,MAAM,eAAA,CAAgB,UAAU,EAAE,CAAA;AAClC,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,MAAM,cAAA,CAAe,UAAU,EAAE,CAAA;AACjC,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,MAAM,eAAA,CAAgB,UAAU,EAAE,CAAA;AAClC,QAAA;AAAA,MACF,KAAK,OAAA;AAEH,QAAA,QAAA,CAAS,CAAA,QAAA,EAAW,SAAA,CAAU,EAAE,CAAA,CAAE,CAAA;AAClC,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,QAAA,CAAS,CAAA,QAAA,EAAW,SAAA,CAAU,EAAE,CAAA,CAAE,CAAA;AAClC,QAAA;AAGA;AAEJ,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,MAAA,KAA8B;AAC1D,IAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,OAAO,MAAA,KAA0C;AACxE,IAAA,IAAI,SAAA,CAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAEnC,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,MAAA,CAAO,GAAA,CAAI,CAAC,EAAA,KAAO;AAC5C,MAAA,QAAQ,MAAA;AAAQ,QACd,KAAK,QAAA;AACH,UAAA,OAAO,gBAAgB,EAAE,CAAA;AAAA,QAC3B,KAAK,OAAA;AACH,UAAA,OAAO,eAAe,EAAE,CAAA;AAAA,QAC1B,KAAK,QAAA;AACH,UAAA,OAAO,gBAAgB,EAAE,CAAA;AAAA;AAC7B,IACF,CAAC,CAAA;AAED,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA;AACjD,IAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,UAAU,CAAA;AAC9D,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,CAAA,8BAAA,EAAiC,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAQ,MAAM,CAAA,OAAA;AAAA,OACpE;AAAA,IACF;AACA,IAAA,cAAA,EAAe;AACf,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EAEb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yEAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,YAAA,EAEjE,CAAA;AAAA,wBACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAA,EAA2B,QAAA,EAAA,uCAAA,EAExC;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAEb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yFAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAM,WAAA,CAAY,OAAO,CAAA;AAAA,cAClC,SAAA,EAAW,CAAA,YAAA,EACT,QAAA,KAAa,OAAA,GACT,6CACA,6CACN,CAAA,CAAA;AAAA,cACA,KAAA,EAAM,YAAA;AAAA,cAEN,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,WAAA,EAAY,OAAO,EAAA,EAAI;AAAA;AAAA,WACpC;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAM,WAAA,CAAY,OAAO,CAAA;AAAA,cAClC,SAAA,EAAW,CAAA,YAAA,EACT,QAAA,KAAa,OAAA,GACT,6CACA,6CACN,CAAA,CAAA;AAAA,cACA,KAAA,EAAM,WAAA;AAAA,cAEN,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,eAAA,EAAgB,OAAO,EAAA,EAAI;AAAA;AAAA,WACxC;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAM,WAAA,CAAY,UAAU,CAAA;AAAA,cACrC,SAAA,EAAW,CAAA,YAAA,EACT,QAAA,KAAa,UAAA,GACT,6CACA,6CACN,CAAA,CAAA;AAAA,cACA,KAAA,EAAM,eAAA;AAAA,cAEN,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,cAAA,EAAe,OAAO,EAAA,EAAI;AAAA;AAAA;AACvC,SAAA,EACF,CAAA;AAAA,wBAEA,IAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,SAAS,MAAM,QAAA,CAAS,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAK,IAAA,EAAK,gBAAA,EAAiB,SAAA,EAAU,MAAA,EAAO,OAAO,EAAA,EAAI,CAAA;AAAA,UAAE;AAAA,SAAA,EAE5D;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,kBAAA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,cAAA;AAAA,QACP,OAAA,EAAS,YAAA;AAAA,QACT,gBAAA,EAAkB;AAAA;AAAA,KACpB,EACF,CAAA;AAAA,oBAGA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,kBAAA,GAAA,CAAC,oBAAiB,SAAA,EAAW,eAAA,EAAiB,SAAA,EAAW,OAAA,EAAS,CAAA,EACpE,CAAA;AAAA,IAGC,UAAU,MAAA,CAAO,MAAA,GAAS,qBACzB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+EAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,QAAA,SAAA,CAAU,MAAA,CAAO,MAAA;AAAA,QAAO,YAAA;AAAA,QACxB,SAAA,CAAU,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,EAAA;AAAA,QAAG;AAAA,OAAA,EAC1C,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,QAAQ,CAAA;AAAA,YAExC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAK,IAAA,EAAK,UAAA,EAAW,SAAA,EAAU,MAAA,EAAO,OAAO,EAAA,EAAI,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA,SAEtD;AAAA,wBACA,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,OAAO,CAAA;AAAA,YAEvC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAK,IAAA,EAAK,WAAA,EAAY,SAAA,EAAU,MAAA,EAAO,OAAO,EAAA,EAAI,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA,SAEvD;AAAA,wBACA,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,QAAQ,CAAA;AAAA,YAExC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAK,IAAA,EAAK,UAAA,EAAW,SAAA,EAAU,MAAA,EAAO,OAAO,EAAA,EAAI,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA;AAEtD,OAAA,EACF,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,cAAA;AAAA,UACT,SAAA,EAAU,6DAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,IAID,KAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+GAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+DAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,wBACzC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,0BAAA,EAAwB;AAAA,OAAA,EACxD,CAAA;AAAA,sBACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oDAAA,EACV,gBAAM,OAAA,EACT,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,OAAA;AAAA,UACT,SAAA,EAAU,qIAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,IAID,aAAa,OAAA,oBACZ,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,UAAA;AAAA,QACA,OAAA;AAAA,QACA,UAAA,EAAY,cAAA;AAAA,QACZ,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,IAED,aAAa,OAAA,oBACZ,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,UAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA,EAAa,cAAA;AAAA,QACb,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,IAED,aAAa,UAAA,oBACZ,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,UAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA,EAAa,cAAA;AAAA,QACb,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBAIF,GAAA,CAAC,UAAA,EAAA,EAAW,UAAA,EAAY,KAAA,EAAO;AAAA,GAAA,EACjC,CAAA;AAEJ","file":"chunk-JXH7PRTS.js","sourcesContent":["import { useCallback, useMemo, useRef } from \"react\";\nimport { useNavigate, useSearchParams } from \"react-router-dom\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n ExecutionFilters,\n ExecutionStats,\n ExecutionTable,\n ExecutionCards,\n ExecutionTimeline,\n Pagination,\n} from \"../components\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\nimport {\n useExecutionsWithStore,\n useExecutionStats,\n useExecutionActions,\n useAutoRefresh,\n} from \"../hooks/useExecutions\";\nimport { useWorkflowDefinitions } from \"../../../hooks/useWorkflows\";\nimport type { WorkflowRun, RunStatus, ExecutionAction } from \"../types\";\n\nexport function ExecutionsListPage() {\n const navigate = useNavigate();\n\n // Store state\n const {\n viewMode,\n setViewMode,\n setSelectedExecution,\n selection,\n clearSelection,\n setStatusFilter,\n setWorkflowFilter,\n autoRefresh,\n autoRefreshInterval,\n } = useExecutionsStore();\n\n // Seed the workflow filter from the URL (?workflowKey=...) synchronously —\n // BEFORE useExecutionsWithStore() below reads it — so the first runs query\n // already carries the filter and no stale unfiltered request is fired. Lets\n // \"View Runs\" in the builder open this list scoped to one workflow; arriving\n // without the param (e.g. the sidebar \"Runs\" link) clears any stale filter.\n // Sync only when the URL param actually changes (tracked via a ref) so manual\n // dropdown changes — which update the store but not the URL — aren't reverted.\n const [searchParams] = useSearchParams();\n const workflowKeyParam = searchParams.get(\"workflowKey\") ?? \"\";\n const lastWorkflowKeyParam = useRef<string | null>(null);\n if (lastWorkflowKeyParam.current !== workflowKeyParam) {\n lastWorkflowKeyParam.current = workflowKeyParam;\n if (useExecutionsStore.getState().filter.workflowKey !== workflowKeyParam) {\n setWorkflowFilter(workflowKeyParam);\n }\n }\n\n // Data fetching\n const { executions, total, loading, error, refetch } =\n useExecutionsWithStore();\n const {\n stats,\n loading: statsLoading,\n refetch: refetchStats,\n } = useExecutionStats();\n const { workflows } = useWorkflowDefinitions({ limit: 100 });\n const { cancelExecution, pauseExecution, resumeExecution } =\n useExecutionActions();\n\n // Auto-refresh\n useAutoRefresh(\n useCallback(() => {\n refetch();\n refetchStats();\n }, [refetch, refetchStats]),\n autoRefresh,\n autoRefreshInterval,\n );\n\n // Transform stats for component\n const executionStats = useMemo(() => {\n if (!stats) return null;\n return {\n total: stats.runsCountTotal,\n running: stats.runsRunningCount,\n completed: stats.runsCompletedCount,\n failed: stats.runsFailedCount,\n cancelled: stats.runsCancelledCount ?? 0,\n pending: stats.runsPendingCount,\n waiting: stats.runsWaitingCount ?? 0,\n successRate: stats.workflowSuccessRate,\n avgDuration: stats.avgWorkflowExecutionTimeSeconds,\n };\n }, [stats]);\n\n // Transform workflows for filter\n const workflowOptions = useMemo(\n () =>\n workflows.map((w) => ({\n workflowKey: w.workflowKey,\n name: w.name,\n })),\n [workflows],\n );\n\n // Handlers\n const handleRowClick = (execution: WorkflowRun) => {\n setSelectedExecution(execution);\n navigate(`../runs/${execution.id}`);\n };\n\n const handleAction = async (\n action: ExecutionAction,\n execution: WorkflowRun,\n ) => {\n switch (action) {\n case \"cancel\":\n await cancelExecution(execution.id);\n break;\n case \"pause\":\n await pauseExecution(execution.id);\n break;\n case \"resume\":\n await resumeExecution(execution.id);\n break;\n case \"retry\":\n // Navigate to detail page for retry\n navigate(`../runs/${execution.id}`);\n break;\n case \"view\":\n navigate(`../runs/${execution.id}`);\n break;\n case \"delete\":\n // TODO: implement delete action\n break;\n }\n refetch();\n };\n\n const handleFilterByStatus = (status: RunStatus | \"all\") => {\n setStatusFilter(status);\n };\n\n const handleBulkAction = async (action: \"cancel\" | \"pause\" | \"resume\") => {\n if (selection.runIds.length === 0) return;\n\n const promises = selection.runIds.map((id) => {\n switch (action) {\n case \"cancel\":\n return cancelExecution(id);\n case \"pause\":\n return pauseExecution(id);\n case \"resume\":\n return resumeExecution(id);\n }\n });\n\n const results = await Promise.allSettled(promises);\n const failures = results.filter((r) => r.status === \"rejected\");\n if (failures.length > 0) {\n console.error(\n `Bulk action partially failed: ${failures.length}/${results.length} failed`,\n );\n }\n clearSelection();\n refetch();\n };\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n Executions\n </h1>\n <p className=\"text-text-secondary mt-1\">\n Monitor and manage your workflow runs\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n {/* View Mode Toggle */}\n <div className=\"flex items-center bg-background-secondary rounded-lg border border-border-secondary p-1\">\n <button\n onClick={() => setViewMode(\"table\")}\n className={`p-2 rounded ${\n viewMode === \"table\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title=\"Table View\"\n >\n <Icon icon=\"mdi:table\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"cards\")}\n className={`p-2 rounded ${\n viewMode === \"cards\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title=\"Card View\"\n >\n <Icon icon=\"mdi:view-grid\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"timeline\")}\n className={`p-2 rounded ${\n viewMode === \"timeline\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title=\"Timeline View\"\n >\n <Icon icon=\"mdi:timeline\" width={18} />\n </button>\n </div>\n\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n Back to Workflows\n </Button>\n </div>\n </div>\n\n {/* Stats Cards */}\n <div className=\"mb-6\">\n <ExecutionStats\n stats={executionStats}\n loading={statsLoading}\n onFilterByStatus={handleFilterByStatus}\n />\n </div>\n\n {/* Filters */}\n <div className=\"mb-6\">\n <ExecutionFilters workflows={workflowOptions} onRefresh={refetch} />\n </div>\n\n {/* Bulk Actions */}\n {selection.runIds.length > 0 && (\n <div className=\"mb-4 p-3 bg-action-primary-bg/10 rounded-lg flex flex-wrap items-center gap-3\">\n <span className=\"text-sm text-text-primary\">\n {selection.runIds.length} execution\n {selection.runIds.length > 1 ? \"s\" : \"\"} selected\n </span>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"cancel\")}\n >\n <Icon icon=\"mdi:stop\" className=\"mr-1\" width={14} />\n Cancel\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"pause\")}\n >\n <Icon icon=\"mdi:pause\" className=\"mr-1\" width={14} />\n Pause\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"resume\")}\n >\n <Icon icon=\"mdi:play\" className=\"mr-1\" width={14} />\n Resume\n </Button>\n </div>\n <button\n onClick={clearSelection}\n className=\"ml-auto text-sm text-text-secondary hover:text-text-primary\"\n >\n Clear selection\n </button>\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div className=\"mb-6 p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)]\">\n <Icon icon=\"mdi:alert-circle\" width={20} />\n <span className=\"font-medium\">Error loading executions</span>\n </div>\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">\n {error.message}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={refetch}\n className=\"mt-3 border-[var(--color-status-error-border)] text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]\"\n >\n Retry\n </Button>\n </div>\n )}\n\n {/* Executions View — switches between table, cards, and timeline */}\n {viewMode === \"table\" && (\n <ExecutionTable\n executions={executions}\n loading={loading}\n onRowClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"cards\" && (\n <ExecutionCards\n executions={executions}\n loading={loading}\n onCardClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"timeline\" && (\n <ExecutionTimeline\n executions={executions}\n loading={loading}\n onItemClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n\n {/* Pagination */}\n <Pagination totalItems={total} />\n </div>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { WorkflowDefinitionsDocument, WorkflowDefinitionDocument, WorkflowVersionsDocument, CreateWorkflowDefinitionDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, DeleteWorkflowDefinitionDocument, DuplicateWorkflowDocument, RestoreWorkflowVersionDocument, TriggerWorkflowDocument, WorkflowRunsDocument, WorkflowRunDocument, DashboardSummaryDocument, ActivateWorkflowDefinitionDocument, DeactivateWorkflowDefinitionDocument } from './chunk-NAC4WYE5.js';
1
+ import { WorkflowDefinitionsDocument, WorkflowDefinitionDocument, WorkflowVersionsDocument, throwIfResultError, CreateWorkflowDefinitionDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, DeleteWorkflowDefinitionDocument, DuplicateWorkflowDocument, RestoreWorkflowVersionDocument, TriggerWorkflowDocument, WorkflowRunsDocument, WorkflowRunDocument, DashboardSummaryDocument, ActivateWorkflowDefinitionDocument, DeactivateWorkflowDefinitionDocument } from './chunk-4NTHFDKQ.js';
2
2
  import { getFluidGridsClient } from './chunk-5BDQNSP3.js';
3
3
  import { getFluidGridsConfig } from './chunk-WWU2O2SR.js';
4
4
  import { useState, useCallback, useEffect } from 'react';
@@ -215,11 +215,13 @@ function useCreateWorkflow() {
215
215
  }
216
216
  };
217
217
  const client = getFluidGridsClient();
218
- const result = await client.mutate({
219
- mutation: CREATE_WORKFLOW_DEFINITION,
220
- variables: { input: inputWithProductContext },
221
- refetchQueries: [{ query: WORKFLOW_DEFINITIONS }]
222
- });
218
+ const result = throwIfResultError(
219
+ await client.mutate({
220
+ mutation: CREATE_WORKFLOW_DEFINITION,
221
+ variables: { input: inputWithProductContext },
222
+ refetchQueries: [{ query: WORKFLOW_DEFINITIONS }]
223
+ })
224
+ );
223
225
  const data = result.data?.createWorkflowDefinition ?? null;
224
226
  setWorkflow(data);
225
227
  return data;
@@ -249,10 +251,12 @@ function useUpdateWorkflow() {
249
251
  setError(null);
250
252
  try {
251
253
  const client = getFluidGridsClient();
252
- const result = await client.mutate({
253
- mutation: UPDATE_WORKFLOW_DEFINITION,
254
- variables: { id, input }
255
- });
254
+ const result = throwIfResultError(
255
+ await client.mutate({
256
+ mutation: UPDATE_WORKFLOW_DEFINITION,
257
+ variables: { id, input }
258
+ })
259
+ );
256
260
  const data = result.data?.updateWorkflowDefinition ?? null;
257
261
  setWorkflow(data);
258
262
  return data;
@@ -282,10 +286,12 @@ function useCreateWorkflowVersion() {
282
286
  setError(null);
283
287
  try {
284
288
  const client = getFluidGridsClient();
285
- const response = await client.mutate({
286
- mutation: CREATE_WORKFLOW_VERSION,
287
- variables: { workflowKey, input }
288
- });
289
+ const response = throwIfResultError(
290
+ await client.mutate({
291
+ mutation: CREATE_WORKFLOW_VERSION,
292
+ variables: { workflowKey, input }
293
+ })
294
+ );
289
295
  const data = response.data?.createWorkflowVersion ?? null;
290
296
  setResult(data);
291
297
  return data;
@@ -314,11 +320,13 @@ function useDeleteWorkflow() {
314
320
  setError(null);
315
321
  try {
316
322
  const client = getFluidGridsClient();
317
- const result = await client.mutate({
318
- mutation: DELETE_WORKFLOW_DEFINITION,
319
- variables: { workflowKey, ...version ? { version } : {} },
320
- refetchQueries: [{ query: WORKFLOW_DEFINITIONS }]
321
- });
323
+ const result = throwIfResultError(
324
+ await client.mutate({
325
+ mutation: DELETE_WORKFLOW_DEFINITION,
326
+ variables: { workflowKey, ...version ? { version } : {} },
327
+ refetchQueries: [{ query: WORKFLOW_DEFINITIONS }]
328
+ })
329
+ );
322
330
  return result.data?.deleteWorkflowDefinition ?? false;
323
331
  } catch (err) {
324
332
  setError(err);
@@ -345,11 +353,13 @@ function useDuplicateWorkflow() {
345
353
  setError(null);
346
354
  try {
347
355
  const client = getFluidGridsClient();
348
- const response = await client.mutate({
349
- mutation: DUPLICATE_WORKFLOW,
350
- variables: { workflowKey, version, input },
351
- refetchQueries: [{ query: WORKFLOW_DEFINITIONS }]
352
- });
356
+ const response = throwIfResultError(
357
+ await client.mutate({
358
+ mutation: DUPLICATE_WORKFLOW,
359
+ variables: { workflowKey, version, input },
360
+ refetchQueries: [{ query: WORKFLOW_DEFINITIONS }]
361
+ })
362
+ );
353
363
  const data = response.data?.duplicateWorkflow ?? null;
354
364
  setResult(data);
355
365
  return data;
@@ -379,11 +389,13 @@ function useRestoreWorkflowVersion() {
379
389
  setError(null);
380
390
  try {
381
391
  const client = getFluidGridsClient();
382
- const response = await client.mutate({
383
- mutation: RESTORE_WORKFLOW_VERSION,
384
- variables: { workflowKey, version },
385
- refetchQueries: [{ query: WORKFLOW_DEFINITIONS }]
386
- });
392
+ const response = throwIfResultError(
393
+ await client.mutate({
394
+ mutation: RESTORE_WORKFLOW_VERSION,
395
+ variables: { workflowKey, version },
396
+ refetchQueries: [{ query: WORKFLOW_DEFINITIONS }]
397
+ })
398
+ );
387
399
  const data = response.data?.restoreWorkflowVersion ?? null;
388
400
  setResult(data);
389
401
  return data;
@@ -412,10 +424,12 @@ function useTriggerWorkflow() {
412
424
  setError(null);
413
425
  try {
414
426
  const client = getFluidGridsClient();
415
- const response = await client.mutate({
416
- mutation: TRIGGER_WORKFLOW,
417
- variables: { input }
418
- });
427
+ const response = throwIfResultError(
428
+ await client.mutate({
429
+ mutation: TRIGGER_WORKFLOW,
430
+ variables: { input }
431
+ })
432
+ );
419
433
  const data = response.data?.triggerWorkflow ?? null;
420
434
  setResult(data);
421
435
  return data;
@@ -544,10 +558,12 @@ function useActivateWorkflow() {
544
558
  setLoading(true);
545
559
  try {
546
560
  const client = getFluidGridsClient();
547
- const result = await client.mutate({
548
- mutation: ACTIVATE_WORKFLOW_DEFINITION,
549
- variables: { id }
550
- });
561
+ const result = throwIfResultError(
562
+ await client.mutate({
563
+ mutation: ACTIVATE_WORKFLOW_DEFINITION,
564
+ variables: { id }
565
+ })
566
+ );
551
567
  return result.data?.activateWorkflowDefinition ?? null;
552
568
  } catch (err) {
553
569
  console.error("Error activating workflow:", err);
@@ -564,10 +580,12 @@ function useDeactivateWorkflow() {
564
580
  setLoading(true);
565
581
  try {
566
582
  const client = getFluidGridsClient();
567
- const result = await client.mutate({
568
- mutation: DEACTIVATE_WORKFLOW_DEFINITION,
569
- variables: { id }
570
- });
583
+ const result = throwIfResultError(
584
+ await client.mutate({
585
+ mutation: DEACTIVATE_WORKFLOW_DEFINITION,
586
+ variables: { id }
587
+ })
588
+ );
571
589
  return result.data?.deactivateWorkflowDefinition ?? null;
572
590
  } catch (err) {
573
591
  console.error("Error deactivating workflow:", err);
@@ -580,5 +598,5 @@ function useDeactivateWorkflow() {
580
598
  }
581
599
 
582
600
  export { useActivateWorkflow, useCreateWorkflow, useCreateWorkflowVersion, useDashboardSummary, useDeactivateWorkflow, useDeleteWorkflow, useDuplicateWorkflow, useLazyWorkflowDefinition, useRestoreWorkflowVersion, useTriggerWorkflow, useUpdateWorkflow, useWorkflowDefinition, useWorkflowDefinitions, useWorkflowRun, useWorkflowRuns, useWorkflowVersions };
583
- //# sourceMappingURL=chunk-ZZFYYL2I.js.map
584
- //# sourceMappingURL=chunk-ZZFYYL2I.js.map
601
+ //# sourceMappingURL=chunk-OHIRHNRJ.js.map
602
+ //# sourceMappingURL=chunk-OHIRHNRJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useWorkflows.ts"],"names":[],"mappings":"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","file":"chunk-OHIRHNRJ.js","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { getFluidGridsClient } from \"../graphql/client\";\nimport { getFluidGridsConfig } from \"../config\";\nimport {\n WorkflowDefinitionsDocument,\n WorkflowDefinitionDocument,\n WorkflowVersionsDocument,\n CreateWorkflowDefinitionDocument,\n UpdateWorkflowDefinitionDocument,\n CreateWorkflowVersionDocument,\n DeleteWorkflowDefinitionDocument,\n DuplicateWorkflowDocument,\n TriggerWorkflowDocument,\n WorkflowRunsDocument,\n WorkflowRunDocument,\n DashboardSummaryDocument,\n RestoreWorkflowVersionDocument,\n ActivateWorkflowDefinitionDocument,\n DeactivateWorkflowDefinitionDocument,\n} from \"../generated/operations\";\nimport type {\n ActivateWorkflowDefinitionMutation,\n DeactivateWorkflowDefinitionMutation,\n} from \"../generated/operations\";\nimport type {\n WorkflowDefinition,\n ListWorkflowDefinitionsInput,\n CreateWorkflowDefinitionInput,\n UpdateWorkflowDefinitionInput,\n TriggerWorkflowInput,\n} from \"../generated/graphql-types\";\n\nimport { throwIfResultError } from \"../graphql/errors\";\n\n// Alias for backward compatibility\nconst WORKFLOW_DEFINITIONS = WorkflowDefinitionsDocument;\nconst WORKFLOW_DEFINITION = WorkflowDefinitionDocument;\nconst WORKFLOW_VERSIONS = WorkflowVersionsDocument;\nconst CREATE_WORKFLOW_DEFINITION = CreateWorkflowDefinitionDocument;\nconst UPDATE_WORKFLOW_DEFINITION = UpdateWorkflowDefinitionDocument;\nconst CREATE_WORKFLOW_VERSION = CreateWorkflowVersionDocument;\nconst DELETE_WORKFLOW_DEFINITION = DeleteWorkflowDefinitionDocument;\nconst DUPLICATE_WORKFLOW = DuplicateWorkflowDocument;\nconst TRIGGER_WORKFLOW = TriggerWorkflowDocument;\nconst WORKFLOW_RUNS = WorkflowRunsDocument;\nconst WORKFLOW_RUN = WorkflowRunDocument;\nconst DASHBOARD_SUMMARY = DashboardSummaryDocument;\nconst RESTORE_WORKFLOW_VERSION = RestoreWorkflowVersionDocument;\n\n// ============================================================================\n// Workflow Definition Hooks\n// ============================================================================\n\ninterface WorkflowDefinitionsData {\n workflowDefinitions: {\n items: WorkflowDefinition[];\n total: number;\n hasMore: boolean;\n };\n}\n\ninterface WorkflowDefinitionData {\n workflowDefinition: WorkflowDefinition | null;\n}\n\ninterface WorkflowVersionsData {\n workflowVersions: WorkflowDefinition[];\n}\n\n/**\n * Check if an error is Apollo's \"Store reset while query was in flight\" error (error 89)\n * This happens when the shell's MultiGatewayProvider cleans up during re-renders\n */\nfunction isStoreResetError(err: unknown): boolean {\n if (err instanceof Error) {\n // Check for error 89 in the message URL or error text\n return (\n err.message.includes(\"message%22%3A89\") ||\n err.message.includes(\"Store reset while query was in flight\")\n );\n }\n return false;\n}\n\n/**\n * Hook to fetch list of workflow definitions\n * Uses Apollo Client with the WORKFLOW_DEFINITIONS query\n * Automatically filters by productId if configured\n */\nexport function useWorkflowDefinitions(\n input: ListWorkflowDefinitionsInput = {},\n) {\n const [workflows, setWorkflows] = useState<WorkflowDefinition[]>([]);\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 const [retryCount, setRetryCount] = useState(0);\n\n // Add productId filter if configured\n const config = getFluidGridsConfig();\n const inputWithProductFilter = {\n ...input,\n customFilters: {\n ...(input.customFilters || {}),\n ...(config.productId ? { productId: config.productId } : {}),\n },\n };\n\n // Stringify input to use as stable dependency\n const inputKey = JSON.stringify(inputWithProductFilter);\n\n const fetchData = useCallback(\n async (isRetry = false) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<WorkflowDefinitionsData>({\n query: WORKFLOW_DEFINITIONS,\n variables: { input: JSON.parse(inputKey) },\n fetchPolicy: \"network-only\",\n });\n setWorkflows(result.data?.workflowDefinitions?.items ?? []);\n setTotal(result.data?.workflowDefinitions?.total ?? 0);\n setHasMore(result.data?.workflowDefinitions?.hasMore ?? false);\n // Reset retry count on success\n if (isRetry) setRetryCount(0);\n } catch (err) {\n // Handle Apollo error 89 \"Store reset while query was in flight\"\n // This occurs when shell's MultiGatewayProvider cleans up during re-renders\n // Retry after a short delay to allow client to stabilize\n if (isStoreResetError(err)) {\n console.warn(\n \"[useWorkflowDefinitions] Store reset error - will retry\",\n );\n if (retryCount < 3) {\n setRetryCount((prev) => prev + 1);\n // Don't set loading to false, will retry\n return;\n }\n console.warn(\"[useWorkflowDefinitions] Max retries reached\");\n }\n console.error(\"[useWorkflowDefinitions] Error:\", err);\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n },\n [inputKey, retryCount],\n );\n\n // Initial fetch and retry on store reset\n useEffect(() => {\n fetchData(retryCount > 0);\n }, [fetchData, retryCount]);\n\n // Retry with delay when retryCount increases\n useEffect(() => {\n if (retryCount > 0 && retryCount <= 3) {\n const timer = setTimeout(() => {\n fetchData(true);\n }, 500 * retryCount); // Exponential backoff: 500ms, 1000ms, 1500ms\n return () => clearTimeout(timer);\n }\n }, [retryCount, fetchData]);\n\n return {\n workflows,\n total,\n hasMore,\n loading,\n error,\n refetch: () => fetchData(false),\n };\n}\n\n/**\n * Hook to fetch a single workflow definition\n */\nexport function useWorkflowDefinition(workflowKey?: string, id?: string) {\n const [workflow, setWorkflow] = useState<WorkflowDefinition | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!workflowKey && !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<WorkflowDefinitionData>({\n query: WORKFLOW_DEFINITION,\n variables: { workflowKey, id },\n fetchPolicy: \"cache-first\",\n });\n setWorkflow(result.data?.workflowDefinition ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [workflowKey, id]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n workflow,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Lazy hook to fetch workflow definition on demand\n */\nexport function useLazyWorkflowDefinition() {\n const [workflow, setWorkflow] = useState<WorkflowDefinition | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const getWorkflow = useCallback(\n async (workflowKey?: string, id?: string, version?: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<WorkflowDefinitionData>({\n query: WORKFLOW_DEFINITION,\n variables: { workflowKey, id, ...(version ? { version } : {}) },\n fetchPolicy: \"network-only\",\n });\n const data = result.data?.workflowDefinition ?? null;\n setWorkflow(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n getWorkflow,\n workflow,\n loading,\n error,\n };\n}\n\n/**\n * Hook to fetch workflow versions\n */\nexport function useWorkflowVersions(workflowKey: string) {\n const [versions, setVersions] = useState<WorkflowDefinition[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!workflowKey) {\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<WorkflowVersionsData>({\n query: WORKFLOW_VERSIONS,\n variables: { workflowKey },\n fetchPolicy: \"network-only\",\n });\n setVersions(result.data?.workflowVersions ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [workflowKey]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n versions,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Workflow Mutation Hooks\n// ============================================================================\n\ninterface CreateWorkflowData {\n createWorkflowDefinition: WorkflowDefinition;\n}\n\ninterface UpdateWorkflowData {\n updateWorkflowDefinition: WorkflowDefinition;\n}\n\ninterface CreateVersionData {\n createWorkflowVersion: {\n success: boolean;\n message?: string;\n workflow?: WorkflowDefinition;\n };\n}\n\ninterface DuplicateWorkflowData {\n duplicateWorkflow: {\n success: boolean;\n message?: string;\n workflow?: WorkflowDefinition;\n };\n}\n\ninterface TriggerWorkflowData {\n triggerWorkflow: {\n runId: string;\n workflowKey: string;\n version: string;\n triggerNodeId: string;\n status: string;\n };\n}\n\n/**\n * Hook to create a new workflow definition\n * Automatically adds productId and productName to context if configured\n */\nexport function useCreateWorkflow() {\n const [workflow, setWorkflow] = useState<WorkflowDefinition | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const createWorkflow = useCallback(\n async (input: CreateWorkflowDefinitionInput) => {\n setLoading(true);\n setError(null);\n try {\n const config = getFluidGridsConfig();\n\n // Add productId to context for product-level isolation\n const inputWithProductContext = {\n ...input,\n context: {\n ...(input.context || {}),\n ...(config.productId ? { productId: config.productId } : {}),\n ...(config.productName ? { productName: config.productName } : {}),\n },\n };\n\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<CreateWorkflowData>({\n mutation: CREATE_WORKFLOW_DEFINITION,\n variables: { input: inputWithProductContext },\n refetchQueries: [{ query: WORKFLOW_DEFINITIONS }],\n }),\n );\n const data = result.data?.createWorkflowDefinition ?? null;\n setWorkflow(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n createWorkflow,\n workflow,\n loading,\n error,\n };\n}\n\n/**\n * Hook to update a workflow definition\n */\nexport function useUpdateWorkflow() {\n const [workflow, setWorkflow] = useState<WorkflowDefinition | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const updateWorkflow = useCallback(\n async (id: string, input: UpdateWorkflowDefinitionInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<UpdateWorkflowData>({\n mutation: UPDATE_WORKFLOW_DEFINITION,\n variables: { id, input },\n }),\n );\n const data = result.data?.updateWorkflowDefinition ?? null;\n setWorkflow(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n updateWorkflow,\n workflow,\n loading,\n error,\n };\n}\n\n/**\n * Hook to create a new workflow version\n */\nexport function useCreateWorkflowVersion() {\n const [result, setResult] = useState<\n CreateVersionData[\"createWorkflowVersion\"] | null\n >(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const createVersion = useCallback(\n async (\n workflowKey: string,\n input: { version: string; definitionJson: unknown; description?: string },\n ) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const response = throwIfResultError(\n await client.mutate<CreateVersionData>({\n mutation: CREATE_WORKFLOW_VERSION,\n variables: { workflowKey, input },\n }),\n );\n const data = response.data?.createWorkflowVersion ?? null;\n setResult(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n createVersion,\n result,\n loading,\n error,\n };\n}\n\n/**\n * Hook to delete a workflow definition.\n * - If version is provided: deletes that specific version only.\n * - If version is omitted: deletes ALL versions for the workflowKey (removes the entire workflow).\n */\nexport function useDeleteWorkflow() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const deleteWorkflow = useCallback(\n async (workflowKey: string, version?: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate({\n mutation: DELETE_WORKFLOW_DEFINITION,\n variables: { workflowKey, ...(version ? { version } : {}) },\n refetchQueries: [{ query: WORKFLOW_DEFINITIONS }],\n }),\n );\n return (\n (result.data as { deleteWorkflowDefinition?: boolean })\n ?.deleteWorkflowDefinition ?? false\n );\n } catch (err) {\n setError(err as Error);\n return false;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n deleteWorkflow,\n loading,\n error,\n };\n}\n\n/**\n * Hook to duplicate a workflow\n */\nexport function useDuplicateWorkflow() {\n const [result, setResult] = useState<\n DuplicateWorkflowData[\"duplicateWorkflow\"] | null\n >(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const duplicateWorkflow = useCallback(\n async (\n workflowKey: string,\n version: string,\n input: { newWorkflowKey: string; newVersion?: string },\n ) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const response = throwIfResultError(\n await client.mutate<DuplicateWorkflowData>({\n mutation: DUPLICATE_WORKFLOW,\n variables: { workflowKey, version, input },\n refetchQueries: [{ query: WORKFLOW_DEFINITIONS }],\n }),\n );\n const data = response.data?.duplicateWorkflow ?? null;\n setResult(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n duplicateWorkflow,\n result,\n loading,\n error,\n };\n}\n\n/**\n * Hook to restore a previous workflow version (creates a new DRAFT from the old version's definitionJson)\n */\nexport function useRestoreWorkflowVersion() {\n const [result, setResult] = useState<{\n success: boolean;\n message?: string;\n workflow?: WorkflowDefinition;\n } | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const restoreVersion = useCallback(\n async (workflowKey: string, version: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const response = throwIfResultError(\n await client.mutate<{\n restoreWorkflowVersion: {\n success: boolean;\n message?: string;\n workflow?: WorkflowDefinition;\n };\n }>({\n mutation: RESTORE_WORKFLOW_VERSION,\n variables: { workflowKey, version },\n refetchQueries: [{ query: WORKFLOW_DEFINITIONS }],\n }),\n );\n const data = response.data?.restoreWorkflowVersion ?? null;\n setResult(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n restoreVersion,\n result,\n loading,\n error,\n };\n}\n\n/**\n * Hook to trigger a workflow execution\n */\nexport function useTriggerWorkflow() {\n const [result, setResult] = useState<\n TriggerWorkflowData[\"triggerWorkflow\"] | null\n >(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const triggerWorkflow = useCallback(async (input: TriggerWorkflowInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const response = throwIfResultError(\n await client.mutate<TriggerWorkflowData>({\n mutation: TRIGGER_WORKFLOW,\n variables: { input },\n }),\n );\n const data = response.data?.triggerWorkflow ?? null;\n setResult(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 triggerWorkflow,\n result,\n loading,\n error,\n };\n}\n\n// ============================================================================\n// Workflow Runs Hooks\n// ============================================================================\n\ninterface WorkflowRunsData {\n workflowRuns: {\n items: unknown[];\n total: number;\n hasMore: boolean;\n };\n}\n\ninterface WorkflowRunData {\n workflowRun: unknown;\n}\n\n/**\n * Hook to fetch workflow runs\n */\nexport function useWorkflowRuns(\n input: {\n workflowKey?: string;\n status?: string;\n limit?: number;\n offset?: number;\n } = {},\n) {\n const [runs, setRuns] = useState<unknown[]>([]);\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 fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<WorkflowRunsData>({\n query: WORKFLOW_RUNS,\n variables: { input },\n fetchPolicy: \"cache-first\",\n });\n setRuns(result.data?.workflowRuns?.items ?? []);\n setTotal(result.data?.workflowRuns?.total ?? 0);\n setHasMore(result.data?.workflowRuns?.hasMore ?? false);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [input]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n runs,\n total,\n hasMore,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch a single workflow run with node states\n */\nexport function useWorkflowRun(id: string) {\n const [run, setRun] = useState<unknown>(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<WorkflowRunData>({\n query: WORKFLOW_RUN,\n variables: { id },\n fetchPolicy: \"cache-first\",\n });\n setRun(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 run,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Dashboard Hook\n// ============================================================================\n\ninterface DashboardSummaryData {\n dashboardSummary: {\n workflowsCount: number;\n activeWorkflowsCount: number;\n archivedWorkflowsCount: number;\n runsCountTotal: number;\n runsCompletedCount: number;\n runsFailedCount: number;\n runsRunningCount: number;\n runsPendingCount: number;\n workflowSuccessRate: number;\n nodeUsageStats: unknown[];\n recentRuns: unknown[];\n recentWorkflows: unknown[];\n };\n}\n\n/**\n * Hook to fetch dashboard summary\n */\nexport function useDashboardSummary(\n options: { workspaceId?: string; tenantId?: string; projectId?: string } = {},\n) {\n const [summary, setSummary] = useState<\n DashboardSummaryData[\"dashboardSummary\"] | null\n >(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<DashboardSummaryData>({\n query: DASHBOARD_SUMMARY,\n variables: options,\n fetchPolicy: \"cache-first\",\n });\n setSummary(result.data?.dashboardSummary ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [options]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n summary,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Activate / Deactivate Workflow Hooks\n// ============================================================================\n\nconst ACTIVATE_WORKFLOW_DEFINITION = ActivateWorkflowDefinitionDocument;\nconst DEACTIVATE_WORKFLOW_DEFINITION = DeactivateWorkflowDefinitionDocument;\n\n/**\n * Hook to activate a workflow definition (set status to ACTIVE)\n */\nexport function useActivateWorkflow() {\n const [loading, setLoading] = useState(false);\n\n const activateWorkflow = useCallback(async (id: string) => {\n setLoading(true);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<ActivateWorkflowDefinitionMutation>({\n mutation: ACTIVATE_WORKFLOW_DEFINITION,\n variables: { id },\n }),\n );\n return result.data?.activateWorkflowDefinition ?? null;\n } catch (err) {\n console.error(\"Error activating workflow:\", err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { activateWorkflow, loading };\n}\n\n/**\n * Hook to deactivate a workflow definition (set status back to DRAFT)\n */\nexport function useDeactivateWorkflow() {\n const [loading, setLoading] = useState(false);\n\n const deactivateWorkflow = useCallback(async (id: string) => {\n setLoading(true);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<DeactivateWorkflowDefinitionMutation>({\n mutation: DEACTIVATE_WORKFLOW_DEFINITION,\n variables: { id },\n }),\n );\n return result.data?.deactivateWorkflowDefinition ?? null;\n } catch (err) {\n console.error(\"Error deactivating workflow:\", err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { deactivateWorkflow, loading };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { useExecution, useExecutionLogs, useExecutionActions, useAutoRefresh, ExecutionStatusBadge, NodeTimeline } from './chunk-T7PRWFLD.js';
1
+ import { useExecution, useExecutionLogs, useExecutionActions, useAutoRefresh, ExecutionStatusBadge, NodeTimeline } from './chunk-6MZFOWEO.js';
2
2
  import { useState, useCallback } from 'react';
3
3
  import { useParams, useNavigate, Link } from 'react-router-dom';
4
4
  import { Icon } from '@iconify/react';
@@ -520,5 +520,5 @@ function ExecutionDetailPage() {
520
520
  }
521
521
 
522
522
  export { ExecutionDetailPage };
523
- //# sourceMappingURL=chunk-EIYBPBSN.js.map
524
- //# sourceMappingURL=chunk-EIYBPBSN.js.map
523
+ //# sourceMappingURL=chunk-WTKD76BY.js.map
524
+ //# sourceMappingURL=chunk-WTKD76BY.js.map