@burdenoff/fluidgrids-fe-sdk 2026.1007.5 → 2026.1008.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-HPAU7U3E.js +12 -0
- package/dist/{ExecutionDetailPage-3QKAXLHE.js.map → ExecutionDetailPage-HPAU7U3E.js.map} +1 -1
- package/dist/ExecutionsListPage-TLXVEIRK.js +11 -0
- package/dist/{ExecutionsListPage-KZLKLSSC.js.map → ExecutionsListPage-TLXVEIRK.js.map} +1 -1
- package/dist/{WorkflowBuilder-B3VBBZVG.js → WorkflowBuilder-YJLWNBT3.js} +7 -7
- package/dist/{WorkflowBuilder-B3VBBZVG.js.map → WorkflowBuilder-YJLWNBT3.js.map} +1 -1
- package/dist/WorkflowsList-YSZWXFMZ.js +14 -0
- package/dist/{WorkflowsList-3Q7SSUYR.js.map → WorkflowsList-YSZWXFMZ.js.map} +1 -1
- package/dist/{chunk-GKSXZFDY.js → chunk-2C6CUHM3.js} +4 -4
- package/dist/{chunk-GKSXZFDY.js.map → chunk-2C6CUHM3.js.map} +1 -1
- package/dist/{chunk-ZLYJKIKG.js → chunk-2ORIFA6I.js} +3 -3
- package/dist/{chunk-ZLYJKIKG.js.map → chunk-2ORIFA6I.js.map} +1 -1
- package/dist/chunk-F2BBRTLB.js +204 -0
- package/dist/chunk-F2BBRTLB.js.map +1 -0
- package/dist/{chunk-FKOUPL6Z.js → chunk-FAPYERDO.js} +3 -3
- package/dist/{chunk-FKOUPL6Z.js.map → chunk-FAPYERDO.js.map} +1 -1
- package/dist/{chunk-5TITRVCU.js → chunk-I2766GDR.js} +4 -4
- package/dist/{chunk-5TITRVCU.js.map → chunk-I2766GDR.js.map} +1 -1
- package/dist/{chunk-G3RPRMP5.js → chunk-IOV4YPQU.js} +4 -4
- package/dist/{chunk-G3RPRMP5.js.map → chunk-IOV4YPQU.js.map} +1 -1
- package/dist/{chunk-RJPBWDZM.js → chunk-KIJDG6MG.js} +5 -5
- package/dist/{chunk-RJPBWDZM.js.map → chunk-KIJDG6MG.js.map} +1 -1
- package/dist/{chunk-LW722GAN.js → chunk-LVKUOMLJ.js} +5 -4
- package/dist/chunk-LVKUOMLJ.js.map +1 -0
- package/dist/{chunk-SJORR3EX.js → chunk-NG32SZ75.js} +5 -153
- package/dist/chunk-NG32SZ75.js.map +1 -0
- package/dist/{chunk-2DN6NTKM.js → chunk-W73HBP7B.js} +5 -5
- package/dist/{chunk-2DN6NTKM.js.map → chunk-W73HBP7B.js.map} +1 -1
- package/dist/{chunk-IVWSTICA.js → chunk-W7APOU2R.js} +19 -10
- package/dist/chunk-W7APOU2R.js.map +1 -0
- package/dist/{chunk-67CQSSWO.js → chunk-WKALLY4E.js} +4 -4
- package/dist/{chunk-67CQSSWO.js.map → chunk-WKALLY4E.js.map} +1 -1
- package/dist/{chunk-5A7GP6O7.js → chunk-WNFZXH3Z.js} +3 -3
- package/dist/{chunk-5A7GP6O7.js.map → chunk-WNFZXH3Z.js.map} +1 -1
- package/dist/{chunk-BNSM27CU.js → chunk-WXNDAONY.js} +3 -3
- package/dist/{chunk-BNSM27CU.js.map → chunk-WXNDAONY.js.map} +1 -1
- package/dist/{chunk-ZZRRG37Q.js → chunk-WYQ4OBES.js} +3 -3
- package/dist/{chunk-ZZRRG37Q.js.map → chunk-WYQ4OBES.js.map} +1 -1
- package/dist/{chunk-5BDQNSP3.js → chunk-ZBMMEE5U.js} +6 -4
- package/dist/chunk-ZBMMEE5U.js.map +1 -0
- package/dist/client-YFAZ23OL.js +3 -0
- package/dist/{client-AMUUS7VE.js.map → client-YFAZ23OL.js.map} +1 -1
- package/dist/{config-5UMLMALY.js → config-YHUOLDAL.js} +3 -3
- package/dist/{config-5UMLMALY.js.map → config-YHUOLDAL.js.map} +1 -1
- package/dist/executions.js +6 -6
- package/dist/history.js +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.js +23 -23
- package/dist/nodes.js +2 -2
- package/dist/observability.js +3 -3
- package/dist/settings.js +3 -3
- package/dist/templates.js +5 -5
- package/dist/workflow-builder.js +6 -6
- package/dist/workflows-list.js +4 -4
- package/package.json +1 -1
- package/dist/ExecutionDetailPage-3QKAXLHE.js +0 -12
- package/dist/ExecutionsListPage-KZLKLSSC.js +0 -11
- package/dist/WorkflowsList-3Q7SSUYR.js +0 -14
- package/dist/chunk-5BDQNSP3.js.map +0 -1
- package/dist/chunk-IVWSTICA.js.map +0 -1
- package/dist/chunk-LW722GAN.js.map +0 -1
- package/dist/chunk-SJORR3EX.js.map +0 -1
- package/dist/chunk-U4AJLVHA.js +0 -52
- package/dist/chunk-U4AJLVHA.js.map +0 -1
- package/dist/client-AMUUS7VE.js +0 -3
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { ExecutionDetailPage } from './chunk-KIJDG6MG.js';
|
|
2
|
+
import './chunk-NG32SZ75.js';
|
|
3
|
+
import './chunk-NK32XOQN.js';
|
|
4
|
+
import './chunk-W23ZXNKU.js';
|
|
5
|
+
import './chunk-3ZYUGTIT.js';
|
|
6
|
+
import './chunk-F2BBRTLB.js';
|
|
7
|
+
import './chunk-3P4YQ7DO.js';
|
|
8
|
+
import './chunk-LMO5ASOE.js';
|
|
9
|
+
import './chunk-7YWBH2A5.js';
|
|
10
|
+
import './chunk-ZBMMEE5U.js';
|
|
11
|
+
//# sourceMappingURL=ExecutionDetailPage-HPAU7U3E.js.map
|
|
12
|
+
//# sourceMappingURL=ExecutionDetailPage-HPAU7U3E.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-HPAU7U3E.js"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { ExecutionsListPage } from './chunk-LVKUOMLJ.js';
|
|
2
|
+
import './chunk-NG32SZ75.js';
|
|
3
|
+
import './chunk-NK32XOQN.js';
|
|
4
|
+
import './chunk-2C6CUHM3.js';
|
|
5
|
+
import './chunk-F2BBRTLB.js';
|
|
6
|
+
import './chunk-3P4YQ7DO.js';
|
|
7
|
+
import './chunk-LMO5ASOE.js';
|
|
8
|
+
import './chunk-7YWBH2A5.js';
|
|
9
|
+
import './chunk-ZBMMEE5U.js';
|
|
10
|
+
//# sourceMappingURL=ExecutionsListPage-TLXVEIRK.js.map
|
|
11
|
+
//# sourceMappingURL=ExecutionsListPage-TLXVEIRK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-TLXVEIRK.js"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { WorkflowBuilder } from './chunk-
|
|
1
|
+
export { WorkflowBuilder } from './chunk-W73HBP7B.js';
|
|
2
2
|
import './chunk-KGD6CRSA.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-W7APOU2R.js';
|
|
4
4
|
import './chunk-XQP33UJR.js';
|
|
5
5
|
import './chunk-P5PKRQAO.js';
|
|
6
6
|
import './chunk-NH5YCY37.js';
|
|
@@ -10,12 +10,12 @@ import './chunk-6LXMUIR3.js';
|
|
|
10
10
|
import './chunk-AANIWER2.js';
|
|
11
11
|
import './chunk-W23ZXNKU.js';
|
|
12
12
|
import './chunk-3ZYUGTIT.js';
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
13
|
+
import './chunk-2C6CUHM3.js';
|
|
14
|
+
import './chunk-F2BBRTLB.js';
|
|
15
15
|
import './chunk-3B5YEXSW.js';
|
|
16
16
|
import './chunk-3P4YQ7DO.js';
|
|
17
17
|
import './chunk-LMO5ASOE.js';
|
|
18
18
|
import './chunk-7YWBH2A5.js';
|
|
19
|
-
import './chunk-
|
|
20
|
-
//# sourceMappingURL=WorkflowBuilder-
|
|
21
|
-
//# sourceMappingURL=WorkflowBuilder-
|
|
19
|
+
import './chunk-ZBMMEE5U.js';
|
|
20
|
+
//# sourceMappingURL=WorkflowBuilder-YJLWNBT3.js.map
|
|
21
|
+
//# sourceMappingURL=WorkflowBuilder-YJLWNBT3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-YJLWNBT3.js"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { WorkflowsList } from './chunk-WYQ4OBES.js';
|
|
2
|
+
import './chunk-KGD6CRSA.js';
|
|
3
|
+
import './chunk-AANIWER2.js';
|
|
4
|
+
import './chunk-W23ZXNKU.js';
|
|
5
|
+
import './chunk-3ZYUGTIT.js';
|
|
6
|
+
import './chunk-2C6CUHM3.js';
|
|
7
|
+
import './chunk-F2BBRTLB.js';
|
|
8
|
+
import './chunk-3B5YEXSW.js';
|
|
9
|
+
import './chunk-3P4YQ7DO.js';
|
|
10
|
+
import './chunk-LMO5ASOE.js';
|
|
11
|
+
import './chunk-7YWBH2A5.js';
|
|
12
|
+
import './chunk-ZBMMEE5U.js';
|
|
13
|
+
//# sourceMappingURL=WorkflowsList-YSZWXFMZ.js.map
|
|
14
|
+
//# sourceMappingURL=WorkflowsList-YSZWXFMZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowsList-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowsList-YSZWXFMZ.js"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { getFluidGridsConfig } from './chunk-
|
|
1
|
+
import { getFluidGridsConfig } from './chunk-F2BBRTLB.js';
|
|
2
2
|
import { WorkflowDefinitionsDocument, WorkflowDefinitionDocument, WorkflowVersionsDocument, CreateWorkflowDefinitionDocument, ImportWorkflowDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, DeleteWorkflowDefinitionDocument, DuplicateWorkflowDocument, RestoreWorkflowVersionDocument, TriggerWorkflowDocument, WorkflowRunsDocument, WorkflowRunDocument, DashboardSummaryDocument, ActivateWorkflowDefinitionDocument, DeactivateWorkflowDefinitionDocument } from './chunk-3P4YQ7DO.js';
|
|
3
3
|
import { throwIfResultError } from './chunk-LMO5ASOE.js';
|
|
4
|
-
import { getFluidGridsClient } from './chunk-
|
|
4
|
+
import { getFluidGridsClient } from './chunk-ZBMMEE5U.js';
|
|
5
5
|
import { useState, useCallback, useEffect, useMemo } from 'react';
|
|
6
6
|
|
|
7
7
|
var WORKFLOW_DEFINITIONS = WorkflowDefinitionsDocument;
|
|
@@ -660,5 +660,5 @@ function useDeactivateWorkflow() {
|
|
|
660
660
|
}
|
|
661
661
|
|
|
662
662
|
export { useActivateWorkflow, useCreateWorkflow, useCreateWorkflowVersion, useDashboardSummary, useDeactivateWorkflow, useDeleteWorkflow, useDuplicateWorkflow, useImportWorkflow, useLazyWorkflowDefinition, useRestoreWorkflowVersion, useTriggerWorkflow, useUpdateWorkflow, useWorkflowDefinition, useWorkflowDefinitions, useWorkflowRun, useWorkflowRuns, useWorkflowVersions };
|
|
663
|
-
//# sourceMappingURL=chunk-
|
|
664
|
-
//# sourceMappingURL=chunk-
|
|
663
|
+
//# sourceMappingURL=chunk-2C6CUHM3.js.map
|
|
664
|
+
//# sourceMappingURL=chunk-2C6CUHM3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useWorkflows.ts"],"names":[],"mappings":"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","file":"chunk-GKSXZFDY.js","sourcesContent":["import { useState, useEffect, useCallback, useMemo } 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 ImportWorkflowDocument,\n} from \"../generated/operations\";\nimport type {\n ActivateWorkflowDefinitionMutation,\n DeactivateWorkflowDefinitionMutation,\n ImportWorkflowMutation,\n} from \"../generated/operations\";\nimport type {\n WorkflowDefinition,\n ListWorkflowDefinitionsInput,\n CreateWorkflowDefinitionInput,\n UpdateWorkflowDefinitionInput,\n TriggerWorkflowInput,\n ImportWorkflowInput,\n} from \"../generated/graphql-types\";\n\nimport { throwIfResultError } from \"../graphql/errors\";\nimport type { EntityTagAssignment } from \"./useEntityTags\";\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;\nconst IMPORT_WORKFLOW = ImportWorkflowDocument;\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 // Build workflowKey -> tag assignments from the same list query so the list\n // page does not need a second workflowDefinitions request just for tags.\n const tagsByKey = useMemo(() => {\n const map: Record<string, EntityTagAssignment[]> = {};\n for (const workflow of workflows) {\n const assignments = workflow.tagAssignments;\n if (assignments && assignments.length > 0 && !map[workflow.workflowKey]) {\n map[workflow.workflowKey] = assignments as EntityTagAssignment[];\n }\n }\n return map;\n }, [workflows]);\n\n return {\n workflows,\n total,\n hasMore,\n loading,\n error,\n tagsByKey,\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 (): Promise<WorkflowDefinition[]> => {\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 const fetched = result.data?.workflowVersions ?? [];\n setVersions(fetched);\n return fetched;\n } catch (err) {\n setError(err as Error);\n return [];\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: [\"WorkflowDefinitions\"],\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 * Import a portable workflow definition through the backend validation path.\n *\n * Unlike createWorkflow, this mutation validates node availability and returns\n * structured validation errors before creating a draft.\n */\nexport function useImportWorkflow() {\n const [result, setResult] = useState<\n ImportWorkflowMutation[\"importWorkflow\"] | null\n >(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const importWorkflow = useCallback(async (input: ImportWorkflowInput) => {\n setLoading(true);\n setError(null);\n try {\n const config = getFluidGridsConfig();\n const inputWithProductContext: ImportWorkflowInput = {\n ...input,\n context: {\n ...(input.context || {}),\n ...(config.productId ? { productId: config.productId } : {}),\n ...(config.productName ? { productName: config.productName } : {}),\n },\n };\n const client = getFluidGridsClient();\n const response = throwIfResultError(\n await client.mutate<ImportWorkflowMutation>({\n mutation: IMPORT_WORKFLOW,\n variables: { input: inputWithProductContext },\n refetchQueries: [\"WorkflowDefinitions\"],\n }),\n );\n const data = response.data?.importWorkflow ?? 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 importWorkflow,\n result,\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: [\"WorkflowDefinitions\"],\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: [\"WorkflowDefinitions\"],\n }),\n );\n const data = response.data?.duplicateWorkflow ?? null;\n setResult(data);\n return data;\n } catch (err) {\n // Re-thrown (not swallowed) so callers can inspect the real error —\n // e.g. isQuotaExhaustedError(err.cause) — instead of only ever\n // seeing a generic \"Failed to duplicate workflow\" message. Every\n // existing caller already wraps this call in its own try/catch.\n setError(err as Error);\n throw err;\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: [\"WorkflowDefinitions\"],\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 // Activation changes sibling versions' statuses too (previous\n // ACTIVE becomes ARCHIVED) — refresh the version list everywhere.\n refetchQueries: [\"WorkflowVersions\", \"WorkflowDefinitions\"],\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 refetchQueries: [\"WorkflowVersions\", \"WorkflowDefinitions\"],\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
|
+
{"version":3,"sources":["../src/hooks/useWorkflows.ts"],"names":[],"mappings":"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","file":"chunk-2C6CUHM3.js","sourcesContent":["import { useState, useEffect, useCallback, useMemo } 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 ImportWorkflowDocument,\n} from \"../generated/operations\";\nimport type {\n ActivateWorkflowDefinitionMutation,\n DeactivateWorkflowDefinitionMutation,\n ImportWorkflowMutation,\n} from \"../generated/operations\";\nimport type {\n WorkflowDefinition,\n ListWorkflowDefinitionsInput,\n CreateWorkflowDefinitionInput,\n UpdateWorkflowDefinitionInput,\n TriggerWorkflowInput,\n ImportWorkflowInput,\n} from \"../generated/graphql-types\";\n\nimport { throwIfResultError } from \"../graphql/errors\";\nimport type { EntityTagAssignment } from \"./useEntityTags\";\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;\nconst IMPORT_WORKFLOW = ImportWorkflowDocument;\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 // Build workflowKey -> tag assignments from the same list query so the list\n // page does not need a second workflowDefinitions request just for tags.\n const tagsByKey = useMemo(() => {\n const map: Record<string, EntityTagAssignment[]> = {};\n for (const workflow of workflows) {\n const assignments = workflow.tagAssignments;\n if (assignments && assignments.length > 0 && !map[workflow.workflowKey]) {\n map[workflow.workflowKey] = assignments as EntityTagAssignment[];\n }\n }\n return map;\n }, [workflows]);\n\n return {\n workflows,\n total,\n hasMore,\n loading,\n error,\n tagsByKey,\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 (): Promise<WorkflowDefinition[]> => {\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 const fetched = result.data?.workflowVersions ?? [];\n setVersions(fetched);\n return fetched;\n } catch (err) {\n setError(err as Error);\n return [];\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: [\"WorkflowDefinitions\"],\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 * Import a portable workflow definition through the backend validation path.\n *\n * Unlike createWorkflow, this mutation validates node availability and returns\n * structured validation errors before creating a draft.\n */\nexport function useImportWorkflow() {\n const [result, setResult] = useState<\n ImportWorkflowMutation[\"importWorkflow\"] | null\n >(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const importWorkflow = useCallback(async (input: ImportWorkflowInput) => {\n setLoading(true);\n setError(null);\n try {\n const config = getFluidGridsConfig();\n const inputWithProductContext: ImportWorkflowInput = {\n ...input,\n context: {\n ...(input.context || {}),\n ...(config.productId ? { productId: config.productId } : {}),\n ...(config.productName ? { productName: config.productName } : {}),\n },\n };\n const client = getFluidGridsClient();\n const response = throwIfResultError(\n await client.mutate<ImportWorkflowMutation>({\n mutation: IMPORT_WORKFLOW,\n variables: { input: inputWithProductContext },\n refetchQueries: [\"WorkflowDefinitions\"],\n }),\n );\n const data = response.data?.importWorkflow ?? 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 importWorkflow,\n result,\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: [\"WorkflowDefinitions\"],\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: [\"WorkflowDefinitions\"],\n }),\n );\n const data = response.data?.duplicateWorkflow ?? null;\n setResult(data);\n return data;\n } catch (err) {\n // Re-thrown (not swallowed) so callers can inspect the real error —\n // e.g. isQuotaExhaustedError(err.cause) — instead of only ever\n // seeing a generic \"Failed to duplicate workflow\" message. Every\n // existing caller already wraps this call in its own try/catch.\n setError(err as Error);\n throw err;\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: [\"WorkflowDefinitions\"],\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 // Activation changes sibling versions' statuses too (previous\n // ACTIVE becomes ARCHIVED) — refresh the version list everywhere.\n refetchQueries: [\"WorkflowVersions\", \"WorkflowDefinitions\"],\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 refetchQueries: [\"WorkflowVersions\", \"WorkflowDefinitions\"],\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,6 +1,6 @@
|
|
|
1
1
|
import { NodeEndpointConfigsDocument, NodeEndpointConfigDocument, NodeManifestDocument } from './chunk-3P4YQ7DO.js';
|
|
2
2
|
import { useTr } from './chunk-7YWBH2A5.js';
|
|
3
|
-
import { getFluidGridsClient } from './chunk-
|
|
3
|
+
import { getFluidGridsClient } from './chunk-ZBMMEE5U.js';
|
|
4
4
|
import { useState, useCallback, useEffect, useMemo } from 'react';
|
|
5
5
|
import { useNavigate } from 'react-router';
|
|
6
6
|
import { Icon } from '@iconify/react';
|
|
@@ -501,5 +501,5 @@ function NodesPage() {
|
|
|
501
501
|
}
|
|
502
502
|
|
|
503
503
|
export { NodesPage, fetchAllNodesWithManifests, useLazyNodeManifest, useNodeEndpoint, useNodeEndpoints, useNodeManifest };
|
|
504
|
-
//# sourceMappingURL=chunk-
|
|
505
|
-
//# sourceMappingURL=chunk-
|
|
504
|
+
//# sourceMappingURL=chunk-2ORIFA6I.js.map
|
|
505
|
+
//# sourceMappingURL=chunk-2ORIFA6I.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useNodeEndpoints.ts","../src/modules/nodes/pages/NodesPage.tsx"],"names":["useState"],"mappings":"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","file":"chunk-ZLYJKIKG.js","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { getFluidGridsClient } from \"../graphql/client\";\nimport {\n NodeEndpointConfigsDocument,\n NodeEndpointConfigDocument,\n NodeManifestDocument,\n} from \"../generated/operations\";\nimport type {\n NodeEndpointConfig,\n WorkflowPaginationInput,\n} from \"../generated/graphql-types\";\n\n// Alias for backward compatibility\nconst NODE_ENDPOINT_CONFIGS = NodeEndpointConfigsDocument;\nconst NODE_ENDPOINT_CONFIG = NodeEndpointConfigDocument;\nconst NODE_MANIFEST = NodeManifestDocument;\n\ninterface NodeEndpointConfigsData {\n nodeEndpointConfigs: {\n configs: NodeEndpointConfig[];\n pagination: {\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n };\n}\n\ninterface NodeEndpointConfigData {\n nodeEndpointConfig: NodeEndpointConfig | null;\n}\n\ninterface NodeManifestData {\n nodeManifest: unknown;\n}\n\ninterface UseNodeEndpointsOptions {\n pagination?: WorkflowPaginationInput;\n status?: \"AVAILABLE\" | \"DEPRECATED\" | \"DISABLED\";\n publishType?: \"STORE\" | \"CUSTOM\";\n skip?: boolean;\n}\n\n/**\n * Hook to fetch all node endpoint configurations\n * Uses Apollo Client directly to avoid Vite bundling issues with @apollo/client hooks\n */\nexport function useNodeEndpoints(options: UseNodeEndpointsOptions = {}) {\n const { pagination, status = \"AVAILABLE\", publishType, skip } = options;\n\n const [nodes, setNodes] = useState<NodeEndpointConfig[]>([]);\n const [paginationData, setPaginationData] = useState<\n NodeEndpointConfigsData[\"nodeEndpointConfigs\"][\"pagination\"] | undefined\n >();\n const [loading, setLoading] = useState(!skip);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (skip) return;\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeEndpointConfigsData>({\n query: NODE_ENDPOINT_CONFIGS,\n variables: { pagination, status, publishType },\n fetchPolicy: \"cache-first\",\n });\n setNodes(result.data?.nodeEndpointConfigs?.configs ?? []);\n setPaginationData(result.data?.nodeEndpointConfigs?.pagination);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [pagination, status, publishType, skip]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n nodes,\n pagination: paginationData,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch a single node endpoint configuration\n */\nexport function useNodeEndpoint(nodeType: string, nodeVersion: string) {\n const [node, setNode] = useState<NodeEndpointConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!nodeType || !nodeVersion) {\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<NodeEndpointConfigData>({\n query: NODE_ENDPOINT_CONFIG,\n variables: { nodeType, nodeVersion },\n fetchPolicy: \"cache-first\",\n });\n setNode(result.data?.nodeEndpointConfig ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [nodeType, nodeVersion]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n node,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch node manifest\n */\nexport function useNodeManifest(nodeType: string, version: string) {\n const [manifest, setManifest] = 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 (!nodeType || !version) {\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<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: { nodeType, version },\n fetchPolicy: \"cache-first\",\n });\n setManifest(result.data?.nodeManifest ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [nodeType, version]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n manifest,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Lazy hook for fetching node manifest on demand\n */\nexport function useLazyNodeManifest() {\n const [manifest, setManifest] = useState<unknown>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const getManifest = useCallback(async (nodeType: string, version: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: { nodeType, version },\n });\n const manifestData = result.data?.nodeManifest ?? null;\n setManifest(manifestData);\n return manifestData;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return {\n getManifest,\n manifest,\n loading,\n error,\n };\n}\n\n/**\n * Utility function to fetch all nodes and their manifests (for initial load)\n * This replaces the top-level await pattern in blocks/index.ts\n */\nexport async function fetchAllNodesWithManifests(): Promise<\n NodeEndpointConfig[]\n> {\n const client = getFluidGridsClient();\n\n try {\n // Fetch all node configurations\n const { data: nodesData } = await client.query<NodeEndpointConfigsData>({\n query: NODE_ENDPOINT_CONFIGS,\n variables: {\n status: \"AVAILABLE\",\n pagination: { limit: 100 },\n },\n });\n\n const nodes = nodesData?.nodeEndpointConfigs?.configs ?? [];\n\n // Fetch manifests for each node (in parallel)\n const nodesWithManifests = await Promise.all(\n nodes.map(async (node) => {\n try {\n const { data: manifestData } = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: {\n nodeType: node.nodeType,\n version: node.nodeVersion,\n },\n });\n\n return {\n ...node,\n manifest: manifestData?.nodeManifest ?? null,\n };\n } catch (err) {\n console.error(`Failed to fetch manifest for ${node.nodeType}:`, err);\n return {\n ...node,\n manifest: null,\n };\n }\n }),\n );\n\n return nodesWithManifests;\n } catch (err) {\n console.error(\"Failed to fetch nodes:\", err);\n return [];\n }\n}\n","import { useState, useMemo } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Skeleton,\n Input,\n Badge,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from \"@burdenoff/fe-libs/ui\";\nimport { useNodeEndpoints } from \"../../../hooks/useNodeEndpoints\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport type { NodeEndpointConfig as GqlNodeEndpointConfig } from \"../../../generated/graphql-types\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst NODE_CATEGORIES = [\n { value: \"all\", label: \"All\", icon: \"mdi:view-grid\" },\n { value: \"integration\", label: \"Integration\", icon: \"mdi:connection\" },\n { value: \"data\", label: \"Data\", icon: \"mdi:database\" },\n { value: \"logic\", label: \"Logic\", icon: \"mdi:code-braces\" },\n { value: \"ai-ml\", label: \"AI/ML\", icon: \"mdi:brain\" },\n { value: \"communication\", label: \"Communication\", icon: \"mdi:message-text\" },\n] as const;\n\nconst STATUS_STYLES: Record<\n string,\n { className: string; label: string; icon: string }\n> = {\n AVAILABLE: {\n className: \"bg-emerald-500/15 text-emerald-400 border-emerald-500/30\",\n label: \"Available\",\n icon: \"mdi:check-circle\",\n },\n DEPRECATED: {\n className: \"bg-amber-500/15 text-amber-400 border-amber-500/30\",\n label: \"Deprecated\",\n icon: \"mdi:alert\",\n },\n DISABLED: {\n className: \"bg-zinc-500/15 text-zinc-400 border-zinc-500/30\",\n label: \"Disabled\",\n icon: \"mdi:close-circle\",\n },\n};\n\nconst CATEGORY_COLORS: Record<string, string> = {\n integration: \"bg-violet-500/15 text-violet-400 border-violet-500/30\",\n data: \"bg-blue-500/15 text-blue-400 border-blue-500/30\",\n logic: \"bg-cyan-500/15 text-cyan-400 border-cyan-500/30\",\n \"ai-ml\": \"bg-amber-500/15 text-amber-400 border-amber-500/30\",\n communication: \"bg-rose-500/15 text-rose-400 border-rose-500/30\",\n};\n\n/**\n * Infer a category for a node based on its metadata.\n */\nfunction inferNodeCategory(node: GqlNodeEndpointConfig): string {\n const text = [\n node.name,\n node.nodeType,\n ...(node.keywords ?? []),\n ...(node.kind ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n\n if (\n text.includes(\"ai\") ||\n text.includes(\"ml\") ||\n text.includes(\"llm\") ||\n text.includes(\"model\")\n )\n return \"ai-ml\";\n if (\n text.includes(\"integrat\") ||\n text.includes(\"api\") ||\n text.includes(\"http\") ||\n text.includes(\"webhook\") ||\n text.includes(\"oauth\")\n )\n return \"integration\";\n if (\n text.includes(\"data\") ||\n text.includes(\"transform\") ||\n text.includes(\"filter\") ||\n text.includes(\"aggregate\") ||\n text.includes(\"database\")\n )\n return \"data\";\n if (\n text.includes(\"email\") ||\n text.includes(\"slack\") ||\n text.includes(\"notification\") ||\n text.includes(\"sms\") ||\n text.includes(\"message\")\n )\n return \"communication\";\n if (\n text.includes(\"if\") ||\n text.includes(\"switch\") ||\n text.includes(\"loop\") ||\n text.includes(\"merge\") ||\n text.includes(\"logic\") ||\n text.includes(\"condition\")\n )\n return \"logic\";\n return \"integration\"; // default\n}\n\n// ============================================================================\n// Sub-Components\n// ============================================================================\n\nfunction NodesSkeleton() {\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\">\n {Array.from({ length: 8 }).map((_, i) => (\n <Skeleton key={i} className=\"h-44 rounded-lg bg-card-foreground/10\" />\n ))}\n </div>\n );\n}\n\nfunction EmptyState({ hasFilters }: { hasFilters: boolean }) {\n const tr = useTr();\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <div className=\"rounded-full bg-background-secondary p-4 mb-4\">\n <Icon\n icon=\"mdi:puzzle-outline\"\n width={40}\n className=\"text-text-secondary\"\n />\n </div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-2\">\n {hasFilters\n ? tr(\n \"fluidgrids.nodes.nodesPage.emptyTitleFiltered\",\n \"No matching nodes\",\n )\n : tr(\"fluidgrids.nodes.nodesPage.emptyTitle\", \"No nodes registered\")}\n </h3>\n <p className=\"text-sm text-text-secondary max-w-md\">\n {hasFilters\n ? tr(\n \"fluidgrids.nodes.nodesPage.emptyHintFiltered\",\n \"Try adjusting your search or category filter.\",\n )\n : tr(\n \"fluidgrids.nodes.nodesPage.emptyHint\",\n \"Node endpoint configurations will appear here once registered.\",\n )}\n </p>\n </div>\n );\n}\n\nfunction ErrorState({\n message,\n onRetry,\n}: {\n message: string;\n onRetry: () => void;\n}) {\n const tr = useTr();\n return (\n <div className=\"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\">\n {tr(\"fluidgrids.nodes.nodesPage.errorHeading\", \"Error loading nodes\")}\n </span>\n </div>\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">\n {message}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onRetry}\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 {tr(\"fluidgrids.nodes.nodesPage.errorRetry\", \"Retry\")}\n </Button>\n </div>\n );\n}\n\ninterface NodeCardProps {\n node: GqlNodeEndpointConfig;\n category: string;\n}\n\nfunction NodeCard({ node, category }: NodeCardProps) {\n const tr = useTr();\n const status = STATUS_STYLES[node.status] ?? STATUS_STYLES.AVAILABLE;\n const catColor =\n CATEGORY_COLORS[category] ??\n \"bg-zinc-500/15 text-zinc-400 border-zinc-500/30\";\n const catLabel =\n NODE_CATEGORIES.find((c) => c.value === category)?.label ??\n tr(\"fluidgrids.nodes.nodeCard.categoryFallback\", \"Node\");\n\n return (\n <Card className=\"border border-border-secondary bg-background-secondary hover:border-border-primary transition-all duration-200 flex flex-col\">\n <CardHeader className=\"flex-1 pb-3\">\n <div className=\"flex items-start justify-between gap-2 mb-3\">\n <div className=\"rounded-lg bg-background-tertiary p-2\">\n <Icon\n icon={node.icon ?? node.favicon ?? \"mdi:puzzle\"}\n width={22}\n className=\"text-text-primary\"\n />\n </div>\n <Badge variant=\"outline\" className={status.className}>\n <Icon icon={status.icon} width={12} className=\"mr-1\" />\n {status.label}\n </Badge>\n </div>\n <h3 className=\"font-semibold text-text-primary text-sm leading-tight mb-1 line-clamp-1\">\n {node.name}\n </h3>\n <p className=\"text-xs text-text-secondary line-clamp-2 min-h-[2rem]\">\n {node.description ??\n tr(\n \"fluidgrids.nodes.nodeCard.noDescription\",\n \"No description available.\",\n )}\n </p>\n </CardHeader>\n <div className=\"px-6 pb-4 pt-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className={catColor}>\n {catLabel}\n </Badge>\n <span className=\"text-xs text-text-secondary\">\n v{node.nodeVersion}\n </span>\n </div>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors\">\n <Icon icon=\"mdi:cog\" width={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {tr(\n \"fluidgrids.nodes.nodeCard.configureTooltip\",\n \"Configure node\",\n )}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </div>\n </Card>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function NodesPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const [search, setSearch] = useState(\"\");\n const [activeCategory, setActiveCategory] = useState<string>(\"all\");\n\n // Fetch available nodes (default status=AVAILABLE)\n const { nodes, loading, error, refetch } = useNodeEndpoints({\n pagination: { limit: 200 },\n });\n\n // Fetch deprecated nodes for stats\n const { nodes: deprecatedNodes } = useNodeEndpoints({\n pagination: { limit: 200 },\n status: \"DEPRECATED\",\n });\n\n // Fetch disabled nodes for stats\n const { nodes: disabledNodes } = useNodeEndpoints({\n pagination: { limit: 200 },\n status: \"DISABLED\",\n });\n\n // Categorize nodes\n const categorizedNodes = useMemo(() => {\n return nodes.map((n) => ({\n node: n,\n category: inferNodeCategory(n),\n }));\n }, [nodes]);\n\n // Filter\n const filtered = useMemo(() => {\n let items = categorizedNodes;\n\n if (activeCategory !== \"all\") {\n items = items.filter((item) => item.category === activeCategory);\n }\n\n if (search.trim()) {\n const q = search.toLowerCase();\n items = items.filter(\n (item) =>\n item.node.name.toLowerCase().includes(q) ||\n item.node.nodeType.toLowerCase().includes(q) ||\n (item.node.description ?? \"\").toLowerCase().includes(q) ||\n item.node.keywords?.some((k) => k.toLowerCase().includes(q)),\n );\n }\n\n return items;\n }, [categorizedNodes, activeCategory, search]);\n\n // Stats (combine all statuses)\n const stats = useMemo(() => {\n const active = nodes.length;\n const deprecated = deprecatedNodes.length;\n const total = active + deprecated + disabledNodes.length;\n return { total, active, deprecated };\n }, [nodes, deprecatedNodes, disabledNodes]);\n\n // Category counts\n const categoryCounts = useMemo(() => {\n const counts: Record<string, number> = { all: categorizedNodes.length };\n for (const item of categorizedNodes) {\n counts[item.category] = (counts[item.category] ?? 0) + 1;\n }\n return counts;\n }, [categorizedNodes]);\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 {tr(\"fluidgrids.nodes.nodesPage.title\", \"Node Catalog\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.nodes.nodesPage.subtitle\",\n \"Browse and manage available workflow nodes\",\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <Button variant=\"outline\" onClick={() => refetch()}>\n <Icon icon=\"mdi:refresh\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.nodes.nodesPage.refreshButton\", \"Refresh\")}\n </Button>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\n \"fluidgrids.nodes.nodesPage.backToWorkflowsButton\",\n \"Back to Workflows\",\n )}\n </Button>\n </div>\n </div>\n\n {/* Stats */}\n <div className=\"grid grid-cols-3 gap-3 mb-6\">\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:puzzle\"\n width={18}\n className=\"text-text-secondary\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statTotal\", \"Total Nodes\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-text-primary mt-1\">\n {loading ? \"—\" : stats.total}\n </p>\n </div>\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:check-circle\"\n width={18}\n className=\"text-emerald-400\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statActive\", \"Active\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-emerald-400 mt-1\">\n {loading ? \"—\" : stats.active}\n </p>\n </div>\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon icon=\"mdi:alert\" width={18} className=\"text-amber-400\" />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statDeprecated\", \"Deprecated\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-amber-400 mt-1\">\n {loading ? \"—\" : stats.deprecated}\n </p>\n </div>\n </div>\n\n {/* Search */}\n <div className=\"relative max-w-md mb-6\">\n <Icon\n icon=\"mdi:magnify\"\n width={18}\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary\"\n />\n <Input\n placeholder={tr(\n \"fluidgrids.nodes.nodesPage.searchPlaceholder\",\n \"Search nodes by name, type, or keyword...\",\n )}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-10 bg-background-secondary border-border-secondary\"\n />\n </div>\n\n {/* Category Tabs */}\n <div className=\"flex flex-wrap gap-2 mb-6\">\n {NODE_CATEGORIES.map((cat) => {\n const count = categoryCounts[cat.value] ?? 0;\n const isActive = activeCategory === cat.value;\n return (\n <button\n key={cat.value}\n onClick={() => setActiveCategory(cat.value)}\n className={`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${\n isActive\n ? \"bg-background-tertiary text-text-primary border border-border-primary\"\n : \"bg-background-secondary text-text-secondary border border-border-secondary hover:text-text-primary hover:border-border-primary\"\n }`}\n >\n <Icon icon={cat.icon} width={16} />\n {cat.label}\n <span\n className={`ml-0.5 text-xs ${isActive ? \"text-text-primary\" : \"text-text-secondary\"}`}\n >\n ({count})\n </span>\n </button>\n );\n })}\n </div>\n\n {/* Error State */}\n {error && (\n <div className=\"mb-6\">\n <ErrorState message={error.message} onRetry={refetch} />\n </div>\n )}\n\n {/* Content */}\n {loading ? (\n <NodesSkeleton />\n ) : filtered.length === 0 ? (\n <EmptyState\n hasFilters={search.trim().length > 0 || activeCategory !== \"all\"}\n />\n ) : (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\">\n {filtered.map(({ node, category }) => (\n <NodeCard key={node.id} node={node} category={category} />\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useNodeEndpoints.ts","../src/modules/nodes/pages/NodesPage.tsx"],"names":["useState"],"mappings":"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","file":"chunk-2ORIFA6I.js","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { getFluidGridsClient } from \"../graphql/client\";\nimport {\n NodeEndpointConfigsDocument,\n NodeEndpointConfigDocument,\n NodeManifestDocument,\n} from \"../generated/operations\";\nimport type {\n NodeEndpointConfig,\n WorkflowPaginationInput,\n} from \"../generated/graphql-types\";\n\n// Alias for backward compatibility\nconst NODE_ENDPOINT_CONFIGS = NodeEndpointConfigsDocument;\nconst NODE_ENDPOINT_CONFIG = NodeEndpointConfigDocument;\nconst NODE_MANIFEST = NodeManifestDocument;\n\ninterface NodeEndpointConfigsData {\n nodeEndpointConfigs: {\n configs: NodeEndpointConfig[];\n pagination: {\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n };\n}\n\ninterface NodeEndpointConfigData {\n nodeEndpointConfig: NodeEndpointConfig | null;\n}\n\ninterface NodeManifestData {\n nodeManifest: unknown;\n}\n\ninterface UseNodeEndpointsOptions {\n pagination?: WorkflowPaginationInput;\n status?: \"AVAILABLE\" | \"DEPRECATED\" | \"DISABLED\";\n publishType?: \"STORE\" | \"CUSTOM\";\n skip?: boolean;\n}\n\n/**\n * Hook to fetch all node endpoint configurations\n * Uses Apollo Client directly to avoid Vite bundling issues with @apollo/client hooks\n */\nexport function useNodeEndpoints(options: UseNodeEndpointsOptions = {}) {\n const { pagination, status = \"AVAILABLE\", publishType, skip } = options;\n\n const [nodes, setNodes] = useState<NodeEndpointConfig[]>([]);\n const [paginationData, setPaginationData] = useState<\n NodeEndpointConfigsData[\"nodeEndpointConfigs\"][\"pagination\"] | undefined\n >();\n const [loading, setLoading] = useState(!skip);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (skip) return;\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeEndpointConfigsData>({\n query: NODE_ENDPOINT_CONFIGS,\n variables: { pagination, status, publishType },\n fetchPolicy: \"cache-first\",\n });\n setNodes(result.data?.nodeEndpointConfigs?.configs ?? []);\n setPaginationData(result.data?.nodeEndpointConfigs?.pagination);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [pagination, status, publishType, skip]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n nodes,\n pagination: paginationData,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch a single node endpoint configuration\n */\nexport function useNodeEndpoint(nodeType: string, nodeVersion: string) {\n const [node, setNode] = useState<NodeEndpointConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!nodeType || !nodeVersion) {\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<NodeEndpointConfigData>({\n query: NODE_ENDPOINT_CONFIG,\n variables: { nodeType, nodeVersion },\n fetchPolicy: \"cache-first\",\n });\n setNode(result.data?.nodeEndpointConfig ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [nodeType, nodeVersion]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n node,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch node manifest\n */\nexport function useNodeManifest(nodeType: string, version: string) {\n const [manifest, setManifest] = 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 (!nodeType || !version) {\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<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: { nodeType, version },\n fetchPolicy: \"cache-first\",\n });\n setManifest(result.data?.nodeManifest ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [nodeType, version]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n manifest,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Lazy hook for fetching node manifest on demand\n */\nexport function useLazyNodeManifest() {\n const [manifest, setManifest] = useState<unknown>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const getManifest = useCallback(async (nodeType: string, version: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: { nodeType, version },\n });\n const manifestData = result.data?.nodeManifest ?? null;\n setManifest(manifestData);\n return manifestData;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return {\n getManifest,\n manifest,\n loading,\n error,\n };\n}\n\n/**\n * Utility function to fetch all nodes and their manifests (for initial load)\n * This replaces the top-level await pattern in blocks/index.ts\n */\nexport async function fetchAllNodesWithManifests(): Promise<\n NodeEndpointConfig[]\n> {\n const client = getFluidGridsClient();\n\n try {\n // Fetch all node configurations\n const { data: nodesData } = await client.query<NodeEndpointConfigsData>({\n query: NODE_ENDPOINT_CONFIGS,\n variables: {\n status: \"AVAILABLE\",\n pagination: { limit: 100 },\n },\n });\n\n const nodes = nodesData?.nodeEndpointConfigs?.configs ?? [];\n\n // Fetch manifests for each node (in parallel)\n const nodesWithManifests = await Promise.all(\n nodes.map(async (node) => {\n try {\n const { data: manifestData } = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: {\n nodeType: node.nodeType,\n version: node.nodeVersion,\n },\n });\n\n return {\n ...node,\n manifest: manifestData?.nodeManifest ?? null,\n };\n } catch (err) {\n console.error(`Failed to fetch manifest for ${node.nodeType}:`, err);\n return {\n ...node,\n manifest: null,\n };\n }\n }),\n );\n\n return nodesWithManifests;\n } catch (err) {\n console.error(\"Failed to fetch nodes:\", err);\n return [];\n }\n}\n","import { useState, useMemo } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Skeleton,\n Input,\n Badge,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from \"@burdenoff/fe-libs/ui\";\nimport { useNodeEndpoints } from \"../../../hooks/useNodeEndpoints\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport type { NodeEndpointConfig as GqlNodeEndpointConfig } from \"../../../generated/graphql-types\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst NODE_CATEGORIES = [\n { value: \"all\", label: \"All\", icon: \"mdi:view-grid\" },\n { value: \"integration\", label: \"Integration\", icon: \"mdi:connection\" },\n { value: \"data\", label: \"Data\", icon: \"mdi:database\" },\n { value: \"logic\", label: \"Logic\", icon: \"mdi:code-braces\" },\n { value: \"ai-ml\", label: \"AI/ML\", icon: \"mdi:brain\" },\n { value: \"communication\", label: \"Communication\", icon: \"mdi:message-text\" },\n] as const;\n\nconst STATUS_STYLES: Record<\n string,\n { className: string; label: string; icon: string }\n> = {\n AVAILABLE: {\n className: \"bg-emerald-500/15 text-emerald-400 border-emerald-500/30\",\n label: \"Available\",\n icon: \"mdi:check-circle\",\n },\n DEPRECATED: {\n className: \"bg-amber-500/15 text-amber-400 border-amber-500/30\",\n label: \"Deprecated\",\n icon: \"mdi:alert\",\n },\n DISABLED: {\n className: \"bg-zinc-500/15 text-zinc-400 border-zinc-500/30\",\n label: \"Disabled\",\n icon: \"mdi:close-circle\",\n },\n};\n\nconst CATEGORY_COLORS: Record<string, string> = {\n integration: \"bg-violet-500/15 text-violet-400 border-violet-500/30\",\n data: \"bg-blue-500/15 text-blue-400 border-blue-500/30\",\n logic: \"bg-cyan-500/15 text-cyan-400 border-cyan-500/30\",\n \"ai-ml\": \"bg-amber-500/15 text-amber-400 border-amber-500/30\",\n communication: \"bg-rose-500/15 text-rose-400 border-rose-500/30\",\n};\n\n/**\n * Infer a category for a node based on its metadata.\n */\nfunction inferNodeCategory(node: GqlNodeEndpointConfig): string {\n const text = [\n node.name,\n node.nodeType,\n ...(node.keywords ?? []),\n ...(node.kind ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n\n if (\n text.includes(\"ai\") ||\n text.includes(\"ml\") ||\n text.includes(\"llm\") ||\n text.includes(\"model\")\n )\n return \"ai-ml\";\n if (\n text.includes(\"integrat\") ||\n text.includes(\"api\") ||\n text.includes(\"http\") ||\n text.includes(\"webhook\") ||\n text.includes(\"oauth\")\n )\n return \"integration\";\n if (\n text.includes(\"data\") ||\n text.includes(\"transform\") ||\n text.includes(\"filter\") ||\n text.includes(\"aggregate\") ||\n text.includes(\"database\")\n )\n return \"data\";\n if (\n text.includes(\"email\") ||\n text.includes(\"slack\") ||\n text.includes(\"notification\") ||\n text.includes(\"sms\") ||\n text.includes(\"message\")\n )\n return \"communication\";\n if (\n text.includes(\"if\") ||\n text.includes(\"switch\") ||\n text.includes(\"loop\") ||\n text.includes(\"merge\") ||\n text.includes(\"logic\") ||\n text.includes(\"condition\")\n )\n return \"logic\";\n return \"integration\"; // default\n}\n\n// ============================================================================\n// Sub-Components\n// ============================================================================\n\nfunction NodesSkeleton() {\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\">\n {Array.from({ length: 8 }).map((_, i) => (\n <Skeleton key={i} className=\"h-44 rounded-lg bg-card-foreground/10\" />\n ))}\n </div>\n );\n}\n\nfunction EmptyState({ hasFilters }: { hasFilters: boolean }) {\n const tr = useTr();\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <div className=\"rounded-full bg-background-secondary p-4 mb-4\">\n <Icon\n icon=\"mdi:puzzle-outline\"\n width={40}\n className=\"text-text-secondary\"\n />\n </div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-2\">\n {hasFilters\n ? tr(\n \"fluidgrids.nodes.nodesPage.emptyTitleFiltered\",\n \"No matching nodes\",\n )\n : tr(\"fluidgrids.nodes.nodesPage.emptyTitle\", \"No nodes registered\")}\n </h3>\n <p className=\"text-sm text-text-secondary max-w-md\">\n {hasFilters\n ? tr(\n \"fluidgrids.nodes.nodesPage.emptyHintFiltered\",\n \"Try adjusting your search or category filter.\",\n )\n : tr(\n \"fluidgrids.nodes.nodesPage.emptyHint\",\n \"Node endpoint configurations will appear here once registered.\",\n )}\n </p>\n </div>\n );\n}\n\nfunction ErrorState({\n message,\n onRetry,\n}: {\n message: string;\n onRetry: () => void;\n}) {\n const tr = useTr();\n return (\n <div className=\"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\">\n {tr(\"fluidgrids.nodes.nodesPage.errorHeading\", \"Error loading nodes\")}\n </span>\n </div>\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">\n {message}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onRetry}\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 {tr(\"fluidgrids.nodes.nodesPage.errorRetry\", \"Retry\")}\n </Button>\n </div>\n );\n}\n\ninterface NodeCardProps {\n node: GqlNodeEndpointConfig;\n category: string;\n}\n\nfunction NodeCard({ node, category }: NodeCardProps) {\n const tr = useTr();\n const status = STATUS_STYLES[node.status] ?? STATUS_STYLES.AVAILABLE;\n const catColor =\n CATEGORY_COLORS[category] ??\n \"bg-zinc-500/15 text-zinc-400 border-zinc-500/30\";\n const catLabel =\n NODE_CATEGORIES.find((c) => c.value === category)?.label ??\n tr(\"fluidgrids.nodes.nodeCard.categoryFallback\", \"Node\");\n\n return (\n <Card className=\"border border-border-secondary bg-background-secondary hover:border-border-primary transition-all duration-200 flex flex-col\">\n <CardHeader className=\"flex-1 pb-3\">\n <div className=\"flex items-start justify-between gap-2 mb-3\">\n <div className=\"rounded-lg bg-background-tertiary p-2\">\n <Icon\n icon={node.icon ?? node.favicon ?? \"mdi:puzzle\"}\n width={22}\n className=\"text-text-primary\"\n />\n </div>\n <Badge variant=\"outline\" className={status.className}>\n <Icon icon={status.icon} width={12} className=\"mr-1\" />\n {status.label}\n </Badge>\n </div>\n <h3 className=\"font-semibold text-text-primary text-sm leading-tight mb-1 line-clamp-1\">\n {node.name}\n </h3>\n <p className=\"text-xs text-text-secondary line-clamp-2 min-h-[2rem]\">\n {node.description ??\n tr(\n \"fluidgrids.nodes.nodeCard.noDescription\",\n \"No description available.\",\n )}\n </p>\n </CardHeader>\n <div className=\"px-6 pb-4 pt-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className={catColor}>\n {catLabel}\n </Badge>\n <span className=\"text-xs text-text-secondary\">\n v{node.nodeVersion}\n </span>\n </div>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors\">\n <Icon icon=\"mdi:cog\" width={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {tr(\n \"fluidgrids.nodes.nodeCard.configureTooltip\",\n \"Configure node\",\n )}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </div>\n </Card>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function NodesPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const [search, setSearch] = useState(\"\");\n const [activeCategory, setActiveCategory] = useState<string>(\"all\");\n\n // Fetch available nodes (default status=AVAILABLE)\n const { nodes, loading, error, refetch } = useNodeEndpoints({\n pagination: { limit: 200 },\n });\n\n // Fetch deprecated nodes for stats\n const { nodes: deprecatedNodes } = useNodeEndpoints({\n pagination: { limit: 200 },\n status: \"DEPRECATED\",\n });\n\n // Fetch disabled nodes for stats\n const { nodes: disabledNodes } = useNodeEndpoints({\n pagination: { limit: 200 },\n status: \"DISABLED\",\n });\n\n // Categorize nodes\n const categorizedNodes = useMemo(() => {\n return nodes.map((n) => ({\n node: n,\n category: inferNodeCategory(n),\n }));\n }, [nodes]);\n\n // Filter\n const filtered = useMemo(() => {\n let items = categorizedNodes;\n\n if (activeCategory !== \"all\") {\n items = items.filter((item) => item.category === activeCategory);\n }\n\n if (search.trim()) {\n const q = search.toLowerCase();\n items = items.filter(\n (item) =>\n item.node.name.toLowerCase().includes(q) ||\n item.node.nodeType.toLowerCase().includes(q) ||\n (item.node.description ?? \"\").toLowerCase().includes(q) ||\n item.node.keywords?.some((k) => k.toLowerCase().includes(q)),\n );\n }\n\n return items;\n }, [categorizedNodes, activeCategory, search]);\n\n // Stats (combine all statuses)\n const stats = useMemo(() => {\n const active = nodes.length;\n const deprecated = deprecatedNodes.length;\n const total = active + deprecated + disabledNodes.length;\n return { total, active, deprecated };\n }, [nodes, deprecatedNodes, disabledNodes]);\n\n // Category counts\n const categoryCounts = useMemo(() => {\n const counts: Record<string, number> = { all: categorizedNodes.length };\n for (const item of categorizedNodes) {\n counts[item.category] = (counts[item.category] ?? 0) + 1;\n }\n return counts;\n }, [categorizedNodes]);\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 {tr(\"fluidgrids.nodes.nodesPage.title\", \"Node Catalog\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.nodes.nodesPage.subtitle\",\n \"Browse and manage available workflow nodes\",\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <Button variant=\"outline\" onClick={() => refetch()}>\n <Icon icon=\"mdi:refresh\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.nodes.nodesPage.refreshButton\", \"Refresh\")}\n </Button>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\n \"fluidgrids.nodes.nodesPage.backToWorkflowsButton\",\n \"Back to Workflows\",\n )}\n </Button>\n </div>\n </div>\n\n {/* Stats */}\n <div className=\"grid grid-cols-3 gap-3 mb-6\">\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:puzzle\"\n width={18}\n className=\"text-text-secondary\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statTotal\", \"Total Nodes\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-text-primary mt-1\">\n {loading ? \"—\" : stats.total}\n </p>\n </div>\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:check-circle\"\n width={18}\n className=\"text-emerald-400\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statActive\", \"Active\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-emerald-400 mt-1\">\n {loading ? \"—\" : stats.active}\n </p>\n </div>\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon icon=\"mdi:alert\" width={18} className=\"text-amber-400\" />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statDeprecated\", \"Deprecated\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-amber-400 mt-1\">\n {loading ? \"—\" : stats.deprecated}\n </p>\n </div>\n </div>\n\n {/* Search */}\n <div className=\"relative max-w-md mb-6\">\n <Icon\n icon=\"mdi:magnify\"\n width={18}\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary\"\n />\n <Input\n placeholder={tr(\n \"fluidgrids.nodes.nodesPage.searchPlaceholder\",\n \"Search nodes by name, type, or keyword...\",\n )}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-10 bg-background-secondary border-border-secondary\"\n />\n </div>\n\n {/* Category Tabs */}\n <div className=\"flex flex-wrap gap-2 mb-6\">\n {NODE_CATEGORIES.map((cat) => {\n const count = categoryCounts[cat.value] ?? 0;\n const isActive = activeCategory === cat.value;\n return (\n <button\n key={cat.value}\n onClick={() => setActiveCategory(cat.value)}\n className={`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${\n isActive\n ? \"bg-background-tertiary text-text-primary border border-border-primary\"\n : \"bg-background-secondary text-text-secondary border border-border-secondary hover:text-text-primary hover:border-border-primary\"\n }`}\n >\n <Icon icon={cat.icon} width={16} />\n {cat.label}\n <span\n className={`ml-0.5 text-xs ${isActive ? \"text-text-primary\" : \"text-text-secondary\"}`}\n >\n ({count})\n </span>\n </button>\n );\n })}\n </div>\n\n {/* Error State */}\n {error && (\n <div className=\"mb-6\">\n <ErrorState message={error.message} onRetry={refetch} />\n </div>\n )}\n\n {/* Content */}\n {loading ? (\n <NodesSkeleton />\n ) : filtered.length === 0 ? (\n <EmptyState\n hasFilters={search.trim().length > 0 || activeCategory !== \"all\"}\n />\n ) : (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\">\n {filtered.map(({ node, category }) => (\n <NodeCard key={node.id} node={node} category={category} />\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
|