@burdenoff/fluidgrids-fe-sdk 2026.510.105
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/README.md +149 -0
- package/dist/ExecutionDetailPage-3EVS3WEC.js +6 -0
- package/dist/ExecutionDetailPage-3EVS3WEC.js.map +1 -0
- package/dist/ExecutionsListPage-NH2JLL2D.js +8 -0
- package/dist/ExecutionsListPage-NH2JLL2D.js.map +1 -0
- package/dist/TemplateConfigurationModal-UJAGRE7X.js +258 -0
- package/dist/TemplateConfigurationModal-UJAGRE7X.js.map +1 -0
- package/dist/TemplateDetailPanel-UXH6KPCH.js +172 -0
- package/dist/TemplateDetailPanel-UXH6KPCH.js.map +1 -0
- package/dist/WorkflowBuilder-BMKFLHVE.js +15 -0
- package/dist/WorkflowBuilder-BMKFLHVE.js.map +1 -0
- package/dist/WorkflowsList-CLI32VRE.js +8 -0
- package/dist/WorkflowsList-CLI32VRE.js.map +1 -0
- package/dist/chunk-4FFPGQD3.js +584 -0
- package/dist/chunk-4FFPGQD3.js.map +1 -0
- package/dist/chunk-5BDQNSP3.js +107 -0
- package/dist/chunk-5BDQNSP3.js.map +1 -0
- package/dist/chunk-6PHBYAEG.js +11494 -0
- package/dist/chunk-6PHBYAEG.js.map +1 -0
- package/dist/chunk-BQXHJIER.js +45 -0
- package/dist/chunk-BQXHJIER.js.map +1 -0
- package/dist/chunk-BXDSTMUA.js +8848 -0
- package/dist/chunk-BXDSTMUA.js.map +1 -0
- package/dist/chunk-CGKBAJMM.js +292 -0
- package/dist/chunk-CGKBAJMM.js.map +1 -0
- package/dist/chunk-FGYVIXQ7.js +979 -0
- package/dist/chunk-FGYVIXQ7.js.map +1 -0
- package/dist/chunk-G7B4SYFM.js +22 -0
- package/dist/chunk-G7B4SYFM.js.map +1 -0
- package/dist/chunk-GSJOLO3A.js +251 -0
- package/dist/chunk-GSJOLO3A.js.map +1 -0
- package/dist/chunk-GSS5PHRL.js +386 -0
- package/dist/chunk-GSS5PHRL.js.map +1 -0
- package/dist/chunk-GY66IQWN.js +524 -0
- package/dist/chunk-GY66IQWN.js.map +1 -0
- package/dist/chunk-LUGJJ7LL.js +297 -0
- package/dist/chunk-LUGJJ7LL.js.map +1 -0
- package/dist/chunk-NDJSUC4W.js +155 -0
- package/dist/chunk-NDJSUC4W.js.map +1 -0
- package/dist/chunk-UOCR65PI.js +262 -0
- package/dist/chunk-UOCR65PI.js.map +1 -0
- package/dist/chunk-WD52O45G.js +2015 -0
- package/dist/chunk-WD52O45G.js.map +1 -0
- package/dist/chunk-WWU2O2SR.js +52 -0
- package/dist/chunk-WWU2O2SR.js.map +1 -0
- package/dist/chunk-XQP33UJR.js +57 -0
- package/dist/chunk-XQP33UJR.js.map +1 -0
- package/dist/chunk-Z54K22LP.js +82 -0
- package/dist/chunk-Z54K22LP.js.map +1 -0
- package/dist/client-AMUUS7VE.js +3 -0
- package/dist/client-AMUUS7VE.js.map +1 -0
- package/dist/config-E4E7M6IN.js +3 -0
- package/dist/config-E4E7M6IN.js.map +1 -0
- package/dist/global-client-OW43ZRDR.js +3 -0
- package/dist/global-client-OW43ZRDR.js.map +1 -0
- package/dist/global-operations-WPTEYCJM.js +3 -0
- package/dist/global-operations-WPTEYCJM.js.map +1 -0
- package/dist/index.d.ts +56706 -0
- package/dist/index.js +6564 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +139 -0
- package/dist/template-input-applicator-657KE4DM.js +3 -0
- package/dist/template-input-applicator-657KE4DM.js.map +1 -0
- package/dist/useImportWorkflowTemplate-2HS5D2OP.js +11 -0
- package/dist/useImportWorkflowTemplate-2HS5D2OP.js.map +1 -0
- package/dist/useTemplateDetail-NK63V3PC.js +6 -0
- package/dist/useTemplateDetail-NK63V3PC.js.map +1 -0
- package/package.json +148 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/FluidGridsProvider.tsx","../src/hooks/store/useGlobalStoreClient.ts","../src/hooks/store/useTemplateDetail.ts"],"names":["useContext","useMemo"],"mappings":"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","file":"chunk-GSJOLO3A.js","sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n type ReactNode,\n} from \"react\";\nimport { ApolloProvider } from \"@apollo/client/react\";\nimport { type ApolloClient } from \"@apollo/client/core\";\nimport {\n createFluidGridsClient,\n setFluidGridsClient,\n resetFluidGridsClient,\n type FluidGridsClientConfig,\n} from \"../graphql/client\";\nimport { createGlobalStoreClient } from \"../graphql/global-client\";\nimport {\n setFluidGridsConfig,\n resetFluidGridsConfig,\n validateTrustedOrigin,\n} from \"../config\";\n\nexport interface FluidGridsProviderProps {\n /** API Gateway URL (workspace gateway) */\n apiGatewayUrl?: string;\n /** Global API Gateway URL (for store operations) */\n globalApiUrl?: string;\n /** Auth token */\n authToken?: string;\n /** Workspace token for x-workspace-authorization header */\n workspaceToken?: string;\n /** Workspace ID */\n workspaceId: string;\n /** Optional host allowlist for embedded deployments */\n trustedOrigins?: string[];\n /** Tenant ID */\n tenantId?: string;\n /** Organization ID */\n organizationId?: string;\n /** Optional: provide your own workspace Apollo client */\n workspaceClient?: ApolloClient;\n /** Optional: provide your own global Apollo client */\n globalClient?: ApolloClient;\n /** @deprecated Use workspaceClient instead */\n apolloClient?: ApolloClient;\n /** Children */\n children: ReactNode;\n}\n\ninterface FluidGridsContextValue {\n apiGatewayUrl?: string;\n globalApiUrl?: string;\n authToken?: string;\n workspaceId: string;\n trustedOrigins?: string[];\n tenantId?: string;\n organizationId?: string;\n workspaceClient?: ApolloClient;\n globalClient?: ApolloClient;\n}\n\nexport const FluidGridsContext = createContext<FluidGridsContextValue | null>(\n null,\n);\n\nexport function FluidGridsProvider({\n apiGatewayUrl,\n globalApiUrl,\n authToken,\n workspaceToken,\n workspaceId,\n trustedOrigins,\n tenantId,\n organizationId,\n workspaceClient: externalWorkspaceClient,\n globalClient: externalGlobalClient,\n apolloClient: legacyClient,\n children,\n}: FluidGridsProviderProps) {\n validateTrustedOrigin(trustedOrigins);\n\n // Create or use provided workspace Apollo client\n const workspaceClient = useMemo(() => {\n // Priority: workspaceClient > apolloClient (legacy) > create new\n if (externalWorkspaceClient) {\n return externalWorkspaceClient;\n }\n if (legacyClient) {\n return legacyClient;\n }\n if (apiGatewayUrl) {\n return createFluidGridsClient({\n apiGatewayUrl,\n authToken,\n workspaceToken,\n workspaceId,\n tenantId,\n });\n }\n throw new Error(\n \"FluidGridsProvider: Either provide workspaceClient or apiGatewayUrl\",\n );\n }, [\n apiGatewayUrl,\n authToken,\n workspaceToken,\n workspaceId,\n tenantId,\n externalWorkspaceClient,\n legacyClient,\n ]);\n\n // Create or use provided global Apollo client\n const globalClient = useMemo(() => {\n if (externalGlobalClient) {\n return externalGlobalClient;\n }\n // Only create if globalApiUrl is provided\n if (globalApiUrl) {\n return createGlobalStoreClient({\n globalApiUrl,\n authToken,\n workspaceId,\n tenantId,\n organizationId,\n });\n }\n // Return undefined if no global client provided (store features won't work)\n return undefined;\n }, [\n globalApiUrl,\n authToken,\n workspaceId,\n tenantId,\n organizationId,\n externalGlobalClient,\n ]);\n\n // Set the module-level workspace client for hooks that need direct access\n useEffect(() => {\n setFluidGridsClient(workspaceClient);\n return () => {\n resetFluidGridsClient();\n };\n }, [workspaceClient]);\n\n // Configure the SDK settings\n useEffect(() => {\n setFluidGridsConfig({\n apiGatewayUrl,\n globalApiUrl,\n authToken,\n workspaceId,\n trustedOrigins,\n tenantId,\n organizationId,\n });\n return () => {\n resetFluidGridsConfig();\n };\n }, [\n apiGatewayUrl,\n globalApiUrl,\n authToken,\n workspaceId,\n trustedOrigins,\n tenantId,\n organizationId,\n ]);\n\n const contextValue = useMemo(() => {\n return {\n apiGatewayUrl,\n globalApiUrl,\n authToken,\n workspaceId,\n trustedOrigins,\n tenantId,\n organizationId,\n workspaceClient,\n globalClient,\n };\n }, [\n apiGatewayUrl,\n globalApiUrl,\n authToken,\n workspaceId,\n trustedOrigins,\n tenantId,\n organizationId,\n workspaceClient,\n globalClient,\n ]);\n\n return (\n <FluidGridsContext.Provider value={contextValue}>\n <ApolloProvider client={workspaceClient}>{children}</ApolloProvider>\n </FluidGridsContext.Provider>\n );\n}\n\nexport function useFluidGridsContext() {\n const context = useContext(FluidGridsContext);\n if (!context) {\n throw new Error(\n \"useFluidGridsContext must be used within FluidGridsProvider\",\n );\n }\n return context;\n}\n","import { useContext } from \"react\";\nimport { FluidGridsContext } from \"../../components/FluidGridsProvider\";\nimport { getGlobalStoreClient } from \"../../graphql/global-client\";\n\n/**\n * Hook to get the Global Store Apollo client\n *\n * Priority:\n * 1. FluidGridsProvider context (if available)\n * 2. Module-level singleton set via setGlobalStoreClient()\n *\n * @throws Error if no global client is available from either source\n */\nexport function useGlobalStoreClient() {\n const context = useContext(FluidGridsContext);\n\n // Try context first (FluidGridsProvider)\n if (context?.globalClient) {\n return context.globalClient;\n }\n\n // Fallback to module-level singleton\n const singletonClient = getGlobalStoreClient();\n if (singletonClient) {\n return singletonClient;\n }\n\n // No client available from either source\n throw new Error(\n \"useGlobalStoreClient: No global client available. \" +\n \"Either wrap your component tree with <FluidGridsProvider globalClient={...}> \" +\n \"or call setGlobalStoreClient(client) before rendering.\",\n );\n}\n","import { useState, useCallback, useContext, useMemo } from \"react\";\nimport { gql } from \"@apollo/client/core\";\nimport { useGlobalStoreClient } from \"./useGlobalStoreClient\";\nimport type { StoreProduct } from \"../../generated/global-types\";\nimport { FluidGridsContext } from \"../../components/FluidGridsProvider\";\nimport { getFluidGridsConfig } from \"../../config\";\n\n// Inline GraphQL document to avoid dependency on generated types\n// (which requires codegen to be run). Will be replaced by generated\n// import once codegen is executed.\nconst GET_WORKFLOW_TEMPLATE_DETAIL = gql`\n query GetWorkflowTemplateDetail($id: ID!) {\n product(id: $id) {\n id\n name\n slug\n type\n description\n longDescription\n icon\n screenshots\n videoUrls\n rating\n reviewCount\n downloads\n viewCount\n price\n pricingModel\n currency\n featured\n content\n manifest\n manifestVersion\n authorName\n license\n category\n tags\n compatibleProducts\n publisher {\n id\n name\n email\n websiteUrl\n logoUrl\n isVerified\n }\n createdAt\n updatedAt\n publishedAt\n }\n }\n`;\n\n/**\n * Hook to lazily fetch full details of a workflow template from the store.\n *\n * Unlike `useWorkflowTemplates` which fetches browse-level metadata,\n * this hook fetches the full product detail including the `content` field\n * which contains the workflow definitionJson.\n *\n * Uses a manual query (not useQuery) to only fetch when explicitly requested.\n */\nexport function useTemplateDetail() {\n const client = useGlobalStoreClient();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Get workspace and organization context for tenant scoping\n const context = useContext(FluidGridsContext);\n const workspaceId = context?.workspaceId ?? getFluidGridsConfig().workspaceId;\n const organizationId = context?.organizationId;\n\n const contextHeaders = useMemo(() => {\n const headers: Record<string, string> = {};\n if (organizationId) {\n headers[\"x-organization-id\"] = organizationId;\n }\n if (workspaceId) {\n headers[\"x-workspace-id\"] = workspaceId;\n }\n return headers;\n }, [organizationId, workspaceId]);\n\n /**\n * Fetch full template detail including content (definitionJson).\n * Returns the full StoreProduct with content populated.\n */\n const fetchTemplateDetail = useCallback(\n async (templateId: string): Promise<StoreProduct | null> => {\n setLoading(true);\n setError(null);\n try {\n const result = await client.query({\n query: GET_WORKFLOW_TEMPLATE_DETAIL,\n variables: { id: templateId },\n fetchPolicy: \"network-only\",\n context:\n Object.keys(contextHeaders).length > 0\n ? { headers: contextHeaders }\n : undefined,\n });\n\n if (result.error) {\n throw result.error;\n }\n\n const data = result.data as { product?: StoreProduct } | undefined;\n return data?.product ?? null;\n } catch (err) {\n const fetchError =\n err instanceof Error\n ? err\n : new Error(\"Failed to fetch template detail\");\n setError(fetchError);\n console.error(\"[useTemplateDetail] Error:\", err);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [client, contextHeaders],\n );\n\n return {\n fetchTemplateDetail,\n loading,\n error,\n };\n}\n"]}
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { useFlowStore } from './chunk-CGKBAJMM.js';
|
|
2
|
+
import { useWorkflowDefinitions, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-4FFPGQD3.js';
|
|
3
|
+
import { config } from './chunk-WWU2O2SR.js';
|
|
4
|
+
import { useNavigate } from 'react-router-dom';
|
|
5
|
+
import { v4 } from 'uuid';
|
|
6
|
+
import { Icon } from '@iconify/react';
|
|
7
|
+
import { Button, Skeleton, TooltipProvider, Card, CardHeader, Badge, Tooltip, TooltipTrigger, TooltipContent, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction } from '@burdenoff/fe-libs/ui';
|
|
8
|
+
import { useState } from 'react';
|
|
9
|
+
import { toast } from 'sonner';
|
|
10
|
+
import { Share2, Copy } from 'lucide-react';
|
|
11
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
12
|
+
|
|
13
|
+
function SharePopup({
|
|
14
|
+
url = window.location.href,
|
|
15
|
+
embedSrc = `${config.fluidgridFrontendUrl}/workflow-view/565201ec-e803-4281-ad39-a135c46daa89/1.0`
|
|
16
|
+
}) {
|
|
17
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
18
|
+
const [width, setWidth] = useState(600);
|
|
19
|
+
const [height, setHeight] = useState(400);
|
|
20
|
+
const [activeTab, setActiveTab] = useState("link");
|
|
21
|
+
const embedCode = `<iframe src="${embedSrc}" width="${width}" height="${height}"></iframe>`;
|
|
22
|
+
const copyToClipboard = (text, message) => {
|
|
23
|
+
navigator.clipboard.writeText(text);
|
|
24
|
+
toast.success(message);
|
|
25
|
+
};
|
|
26
|
+
if (!isOpen) {
|
|
27
|
+
return /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "icon", onClick: () => setIsOpen(true), children: [
|
|
28
|
+
/* @__PURE__ */ jsx(Share2, { className: "h-4 w-4" }),
|
|
29
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Share" })
|
|
30
|
+
] });
|
|
31
|
+
}
|
|
32
|
+
return /* @__PURE__ */ jsx(
|
|
33
|
+
"div",
|
|
34
|
+
{
|
|
35
|
+
className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
|
|
36
|
+
onClick: () => setIsOpen(false),
|
|
37
|
+
children: /* @__PURE__ */ jsxs(
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
className: "bg-card rounded-lg p-6 max-w-md w-full mx-4",
|
|
41
|
+
onClick: (e) => e.stopPropagation(),
|
|
42
|
+
children: [
|
|
43
|
+
/* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center mb-4", children: [
|
|
44
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold", children: "Share" }),
|
|
45
|
+
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", onClick: () => setIsOpen(false), children: "\xD7" })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-2 mb-4", children: [
|
|
48
|
+
/* @__PURE__ */ jsx(
|
|
49
|
+
Button,
|
|
50
|
+
{
|
|
51
|
+
variant: activeTab === "link" ? "default" : "outline",
|
|
52
|
+
size: "sm",
|
|
53
|
+
onClick: () => setActiveTab("link"),
|
|
54
|
+
children: "Share Link"
|
|
55
|
+
}
|
|
56
|
+
),
|
|
57
|
+
/* @__PURE__ */ jsx(
|
|
58
|
+
Button,
|
|
59
|
+
{
|
|
60
|
+
variant: activeTab === "embed" ? "default" : "outline",
|
|
61
|
+
size: "sm",
|
|
62
|
+
onClick: () => setActiveTab("embed"),
|
|
63
|
+
children: "Embed"
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
] }),
|
|
67
|
+
activeTab === "link" && /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
|
|
68
|
+
/* @__PURE__ */ jsx(
|
|
69
|
+
"input",
|
|
70
|
+
{
|
|
71
|
+
readOnly: true,
|
|
72
|
+
value: url,
|
|
73
|
+
className: "flex-1 h-9 px-3 rounded-md border bg-background text-sm"
|
|
74
|
+
}
|
|
75
|
+
),
|
|
76
|
+
/* @__PURE__ */ jsx(
|
|
77
|
+
Button,
|
|
78
|
+
{
|
|
79
|
+
size: "sm",
|
|
80
|
+
onClick: () => copyToClipboard(url, "Link copied to clipboard"),
|
|
81
|
+
children: /* @__PURE__ */ jsx(Copy, { className: "h-4 w-4" })
|
|
82
|
+
}
|
|
83
|
+
)
|
|
84
|
+
] }),
|
|
85
|
+
activeTab === "embed" && /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
86
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
87
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
88
|
+
/* @__PURE__ */ jsx("label", { className: "text-sm font-medium", children: "Width" }),
|
|
89
|
+
/* @__PURE__ */ jsx(
|
|
90
|
+
"input",
|
|
91
|
+
{
|
|
92
|
+
type: "number",
|
|
93
|
+
value: width,
|
|
94
|
+
onChange: (e) => setWidth(Number(e.target.value)),
|
|
95
|
+
className: "w-full h-9 px-3 rounded-md border bg-background text-sm mt-1"
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
] }),
|
|
99
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
100
|
+
/* @__PURE__ */ jsx("label", { className: "text-sm font-medium", children: "Height" }),
|
|
101
|
+
/* @__PURE__ */ jsx(
|
|
102
|
+
"input",
|
|
103
|
+
{
|
|
104
|
+
type: "number",
|
|
105
|
+
value: height,
|
|
106
|
+
onChange: (e) => setHeight(Number(e.target.value)),
|
|
107
|
+
className: "w-full h-9 px-3 rounded-md border bg-background text-sm mt-1"
|
|
108
|
+
}
|
|
109
|
+
)
|
|
110
|
+
] })
|
|
111
|
+
] }),
|
|
112
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
113
|
+
/* @__PURE__ */ jsx("label", { className: "text-sm font-medium", children: "Embed Code" }),
|
|
114
|
+
/* @__PURE__ */ jsxs("div", { className: "relative mt-1", children: [
|
|
115
|
+
/* @__PURE__ */ jsx(
|
|
116
|
+
"input",
|
|
117
|
+
{
|
|
118
|
+
readOnly: true,
|
|
119
|
+
value: embedCode,
|
|
120
|
+
className: "w-full h-9 px-3 pr-12 rounded-md border bg-background text-sm font-mono"
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ jsx(
|
|
124
|
+
Button,
|
|
125
|
+
{
|
|
126
|
+
size: "sm",
|
|
127
|
+
className: "absolute right-1 top-1/2 -translate-y-1/2 h-7",
|
|
128
|
+
onClick: () => copyToClipboard(embedCode, "Embed code copied to clipboard"),
|
|
129
|
+
children: /* @__PURE__ */ jsx(Copy, { className: "h-4 w-4" })
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
] })
|
|
133
|
+
] })
|
|
134
|
+
] })
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
var STATUS_STYLES = {
|
|
142
|
+
DRAFT: { label: "Draft", variant: "secondary" },
|
|
143
|
+
ACTIVE: { label: "Active", variant: "default" },
|
|
144
|
+
ARCHIVED: { label: "Archived", variant: "outline" },
|
|
145
|
+
DEPRECATED: { label: "Deprecated", variant: "destructive" }
|
|
146
|
+
};
|
|
147
|
+
var CardWorkflow = ({
|
|
148
|
+
workflow,
|
|
149
|
+
onUpdateSuccess
|
|
150
|
+
}) => {
|
|
151
|
+
const navigate = useNavigate();
|
|
152
|
+
const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);
|
|
153
|
+
const { duplicateWorkflow: duplicateWorkflowMutation } = useDuplicateWorkflow();
|
|
154
|
+
const { deleteWorkflow: deleteWorkflowMutation } = useDeleteWorkflow();
|
|
155
|
+
const [showDeleteDialog, setShowDeleteDialog] = useState(false);
|
|
156
|
+
const [isDeleting, setIsDeleting] = useState(false);
|
|
157
|
+
async function handleDuplicateWorkflow() {
|
|
158
|
+
try {
|
|
159
|
+
resetWorkflow();
|
|
160
|
+
const result = await duplicateWorkflowMutation(
|
|
161
|
+
workflow.workflow_key,
|
|
162
|
+
workflow.version,
|
|
163
|
+
{
|
|
164
|
+
newWorkflowKey: `${workflow.workflow_key}_copy_${Date.now()}`
|
|
165
|
+
}
|
|
166
|
+
);
|
|
167
|
+
if (result?.success && result.workflow) {
|
|
168
|
+
navigate(
|
|
169
|
+
`../workflow/${result.workflow.workflowKey}/${result.workflow.version}`
|
|
170
|
+
);
|
|
171
|
+
} else {
|
|
172
|
+
throw new Error(result?.message || "Failed to duplicate workflow");
|
|
173
|
+
}
|
|
174
|
+
} catch (error) {
|
|
175
|
+
console.error("Error duplicating workflow:", error);
|
|
176
|
+
toast.error(
|
|
177
|
+
`Error duplicating workflow: ${error instanceof Error ? error.message : String(error)}`
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const handleDeleteWorkflow = async () => {
|
|
182
|
+
if (!workflow.workflow_key) {
|
|
183
|
+
console.error("Workflow ID is required to delete.");
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
setIsDeleting(true);
|
|
187
|
+
try {
|
|
188
|
+
const success = await deleteWorkflowMutation(workflow.workflow_key);
|
|
189
|
+
if (success) {
|
|
190
|
+
setShowDeleteDialog(false);
|
|
191
|
+
}
|
|
192
|
+
} catch (error) {
|
|
193
|
+
console.error("Error deleting workflow:", error);
|
|
194
|
+
toast.error(
|
|
195
|
+
`Error deleting workflow: ${error instanceof Error ? error.message : String(error)}`
|
|
196
|
+
);
|
|
197
|
+
} finally {
|
|
198
|
+
setIsDeleting(false);
|
|
199
|
+
setShowDeleteDialog(false);
|
|
200
|
+
onUpdateSuccess();
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
const handleOnEdit = () => {
|
|
204
|
+
navigate("../workflow/" + workflow.workflow_key + "/" + workflow.version);
|
|
205
|
+
};
|
|
206
|
+
const statusInfo = STATUS_STYLES[workflow.status ?? "DRAFT"] ?? STATUS_STYLES.DRAFT;
|
|
207
|
+
return /* @__PURE__ */ jsxs(TooltipProvider, { children: [
|
|
208
|
+
/* @__PURE__ */ jsxs(Card, { className: "bg-card-foreground/10 min-h-40 p-0 flex flex-col justify-between", children: [
|
|
209
|
+
/* @__PURE__ */ jsxs(CardHeader, { className: "relative", children: [
|
|
210
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 pr-8", children: [
|
|
211
|
+
/* @__PURE__ */ jsx("h1", { className: "text-card-foreground font-bold truncate", children: workflow?.name }),
|
|
212
|
+
/* @__PURE__ */ jsx(
|
|
213
|
+
Badge,
|
|
214
|
+
{
|
|
215
|
+
variant: statusInfo.variant,
|
|
216
|
+
className: "text-[10px] px-1.5 py-0 h-5 shrink-0",
|
|
217
|
+
children: statusInfo.label
|
|
218
|
+
}
|
|
219
|
+
)
|
|
220
|
+
] }),
|
|
221
|
+
/* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
222
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
223
|
+
Button,
|
|
224
|
+
{
|
|
225
|
+
variant: "ghost",
|
|
226
|
+
size: "icon",
|
|
227
|
+
className: "text-primary absolute right-2 top-0",
|
|
228
|
+
onClick: handleOnEdit,
|
|
229
|
+
children: /* @__PURE__ */ jsx(Icon, { icon: "mynaui:edit", className: "size-6 text-primary" })
|
|
230
|
+
}
|
|
231
|
+
) }),
|
|
232
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", children: /* @__PURE__ */ jsx("p", { children: "Edit Workflow" }) })
|
|
233
|
+
] })
|
|
234
|
+
] }),
|
|
235
|
+
/* @__PURE__ */ jsxs("div", { className: "inline-flex justify-between items-center gap-2 border-t border-card-foreground/10 w-full", children: [
|
|
236
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1 p-2", children: [
|
|
237
|
+
/* @__PURE__ */ jsxs("p", { className: "text-card-foreground/60 text-xs", children: [
|
|
238
|
+
"Updated:",
|
|
239
|
+
" ",
|
|
240
|
+
workflow.updated_at ? new Intl.DateTimeFormat("en-US", {
|
|
241
|
+
year: "numeric",
|
|
242
|
+
month: "2-digit",
|
|
243
|
+
day: "2-digit"
|
|
244
|
+
}).format(new Date(workflow.updated_at)) : "N/A"
|
|
245
|
+
] }),
|
|
246
|
+
/* @__PURE__ */ jsxs("p", { className: "text-card-foreground/60 text-xs", children: [
|
|
247
|
+
"Version: ",
|
|
248
|
+
workflow.version,
|
|
249
|
+
workflow.alias ? ` (${workflow.alias})` : "",
|
|
250
|
+
workflow.total_versions && workflow.total_versions > 1 ? ` \xB7 ${workflow.total_versions} versions` : ""
|
|
251
|
+
] })
|
|
252
|
+
] }),
|
|
253
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center p-1", children: [
|
|
254
|
+
/* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
255
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
256
|
+
SharePopup,
|
|
257
|
+
{
|
|
258
|
+
url: `${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`,
|
|
259
|
+
embedSrc: `${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`
|
|
260
|
+
}
|
|
261
|
+
) }),
|
|
262
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", children: /* @__PURE__ */ jsx("p", { children: "Share Workflow" }) })
|
|
263
|
+
] }),
|
|
264
|
+
/* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
265
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", children: /* @__PURE__ */ jsx(
|
|
266
|
+
Icon,
|
|
267
|
+
{
|
|
268
|
+
icon: "mynaui:copy",
|
|
269
|
+
className: "size-6 text-card-foreground/70",
|
|
270
|
+
onClick: () => handleDuplicateWorkflow()
|
|
271
|
+
}
|
|
272
|
+
) }) }),
|
|
273
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", children: /* @__PURE__ */ jsx("p", { children: "Duplicate Workflow" }) })
|
|
274
|
+
] }),
|
|
275
|
+
/* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
276
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
277
|
+
Button,
|
|
278
|
+
{
|
|
279
|
+
variant: "ghost",
|
|
280
|
+
size: "sm",
|
|
281
|
+
onClick: () => setShowDeleteDialog(true),
|
|
282
|
+
children: /* @__PURE__ */ jsx(
|
|
283
|
+
Icon,
|
|
284
|
+
{
|
|
285
|
+
icon: "mynaui:trash",
|
|
286
|
+
className: "size-6 text-[var(--color-status-error-text)]"
|
|
287
|
+
}
|
|
288
|
+
)
|
|
289
|
+
}
|
|
290
|
+
) }),
|
|
291
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", children: /* @__PURE__ */ jsx("p", { children: "Remove Workflow" }) })
|
|
292
|
+
] })
|
|
293
|
+
] })
|
|
294
|
+
] })
|
|
295
|
+
] }),
|
|
296
|
+
/* @__PURE__ */ jsx(AlertDialog, { open: showDeleteDialog, onOpenChange: setShowDeleteDialog, children: /* @__PURE__ */ jsxs(AlertDialogContent, { children: [
|
|
297
|
+
/* @__PURE__ */ jsxs(AlertDialogHeader, { children: [
|
|
298
|
+
/* @__PURE__ */ jsx(AlertDialogTitle, { children: "Delete Workflow" }),
|
|
299
|
+
/* @__PURE__ */ jsxs(AlertDialogDescription, { children: [
|
|
300
|
+
'Are you sure you want to delete workflow "',
|
|
301
|
+
workflow.name,
|
|
302
|
+
'" and all its versions? This action cannot be undone.'
|
|
303
|
+
] })
|
|
304
|
+
] }),
|
|
305
|
+
/* @__PURE__ */ jsxs(AlertDialogFooter, { children: [
|
|
306
|
+
/* @__PURE__ */ jsx(AlertDialogCancel, { disabled: isDeleting, children: "Cancel" }),
|
|
307
|
+
/* @__PURE__ */ jsx(
|
|
308
|
+
AlertDialogAction,
|
|
309
|
+
{
|
|
310
|
+
onClick: handleDeleteWorkflow,
|
|
311
|
+
disabled: isDeleting,
|
|
312
|
+
className: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
|
313
|
+
children: isDeleting ? "Deleting..." : "Delete"
|
|
314
|
+
}
|
|
315
|
+
)
|
|
316
|
+
] })
|
|
317
|
+
] }) })
|
|
318
|
+
] });
|
|
319
|
+
};
|
|
320
|
+
function WorkflowsList() {
|
|
321
|
+
const navigate = useNavigate();
|
|
322
|
+
const { workflows, loading, error, refetch } = useWorkflowDefinitions({
|
|
323
|
+
limit: 100,
|
|
324
|
+
latestOnly: true
|
|
325
|
+
});
|
|
326
|
+
const handleWorkflowUpdateSuccess = () => {
|
|
327
|
+
refetch();
|
|
328
|
+
};
|
|
329
|
+
return /* @__PURE__ */ jsx("main", { className: "h-full w-full", children: /* @__PURE__ */ jsxs("div", { className: "p-4", children: [
|
|
330
|
+
/* @__PURE__ */ jsxs("div", { className: "inline-flex w-full justify-between items-center gap-2", children: [
|
|
331
|
+
/* @__PURE__ */ jsx("h1", { className: "text-xl font-bold", children: "Workflows" }),
|
|
332
|
+
/* @__PURE__ */ jsxs(
|
|
333
|
+
Button,
|
|
334
|
+
{
|
|
335
|
+
variant: "default",
|
|
336
|
+
size: "default",
|
|
337
|
+
className: "text-primary-foreground font-bold",
|
|
338
|
+
onClick: () => navigate(`../workflow/${v4()}/v1`),
|
|
339
|
+
children: [
|
|
340
|
+
/* @__PURE__ */ jsx(
|
|
341
|
+
Icon,
|
|
342
|
+
{
|
|
343
|
+
icon: "mynaui:plus",
|
|
344
|
+
className: "size-6 text-primary-foreground"
|
|
345
|
+
}
|
|
346
|
+
),
|
|
347
|
+
"Create Workflow"
|
|
348
|
+
]
|
|
349
|
+
}
|
|
350
|
+
)
|
|
351
|
+
] }),
|
|
352
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 2xl:grid-cols-4 gap-4 mt-4", children: loading ? /* @__PURE__ */ jsxs(Skeleton, { className: "bg-card-foreground/10 min-h-40 p-6 flex flex-col justify-between", children: [
|
|
353
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "bg-card-foreground/20 w-full h-8" }),
|
|
354
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
355
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "bg-card-foreground/15 w-full h-6 mr-4" }),
|
|
356
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "bg-card-foreground/15 w-8 h-6" }),
|
|
357
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "bg-card-foreground/15 w-8 h-6" })
|
|
358
|
+
] })
|
|
359
|
+
] }) : error ? /* @__PURE__ */ jsxs("div", { className: "text-destructive p-4", children: [
|
|
360
|
+
"Error loading workflows: ",
|
|
361
|
+
error.message
|
|
362
|
+
] }) : workflows.length > 0 ? workflows.map((workflow) => /* @__PURE__ */ jsx(
|
|
363
|
+
CardWorkflow,
|
|
364
|
+
{
|
|
365
|
+
workflow: {
|
|
366
|
+
id: workflow.id,
|
|
367
|
+
workflow_key: workflow.workflowKey,
|
|
368
|
+
version: workflow.version,
|
|
369
|
+
name: workflow.name,
|
|
370
|
+
description: workflow.description ?? void 0,
|
|
371
|
+
status: workflow.status ?? void 0,
|
|
372
|
+
alias: workflow.alias ?? void 0,
|
|
373
|
+
updated_at: workflow.updatedAt ?? void 0,
|
|
374
|
+
created_at: workflow.createdAt ?? void 0,
|
|
375
|
+
total_versions: workflow.totalVersions ?? void 0
|
|
376
|
+
},
|
|
377
|
+
onUpdateSuccess: () => handleWorkflowUpdateSuccess()
|
|
378
|
+
},
|
|
379
|
+
workflow.id
|
|
380
|
+
)) : /* @__PURE__ */ jsx("div", { className: "text-muted-foreground p-4", children: "No workflows found. Create your first workflow!" }) })
|
|
381
|
+
] }) });
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
export { WorkflowsList };
|
|
385
|
+
//# sourceMappingURL=chunk-GSS5PHRL.js.map
|
|
386
|
+
//# sourceMappingURL=chunk-GSS5PHRL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/SharePopup.tsx","../src/builder/components/ui/card-workflow.tsx","../src/pages/WorkflowsList.tsx"],"names":["useState","toast","jsxs","jsx","Button","useNavigate","uuidv4","Icon"],"mappings":"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","file":"chunk-GSS5PHRL.js","sourcesContent":["import { useState } from \"react\";\nimport { Copy, Share2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/ui\";\nimport { config } from \"../config\";\n\ninterface SharePopupProps {\n url: string;\n embedSrc: string;\n}\n\nexport default function SharePopup({\n url = window.location.href,\n embedSrc = `${config.fluidgridFrontendUrl}/workflow-view/565201ec-e803-4281-ad39-a135c46daa89/1.0`,\n}: SharePopupProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [width, setWidth] = useState(600);\n const [height, setHeight] = useState(400);\n const [activeTab, setActiveTab] = useState<\"link\" | \"embed\">(\"link\");\n\n const embedCode = `<iframe src=\"${embedSrc}\" width=\"${width}\" height=\"${height}\"></iframe>`;\n\n const copyToClipboard = (text: string, message: string) => {\n navigator.clipboard.writeText(text);\n toast.success(message);\n };\n\n if (!isOpen) {\n return (\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setIsOpen(true)}>\n <Share2 className=\"h-4 w-4\" />\n <span className=\"sr-only\">Share</span>\n </Button>\n );\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n onClick={() => setIsOpen(false)}\n >\n <div\n className=\"bg-card rounded-lg p-6 max-w-md w-full mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex justify-between items-center mb-4\">\n <h2 className=\"text-lg font-semibold\">Share</h2>\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setIsOpen(false)}>\n ×\n </Button>\n </div>\n\n <div className=\"flex gap-2 mb-4\">\n <Button\n variant={activeTab === \"link\" ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setActiveTab(\"link\")}\n >\n Share Link\n </Button>\n <Button\n variant={activeTab === \"embed\" ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setActiveTab(\"embed\")}\n >\n Embed\n </Button>\n </div>\n\n {activeTab === \"link\" && (\n <div className=\"flex items-center space-x-2\">\n <input\n readOnly\n value={url}\n className=\"flex-1 h-9 px-3 rounded-md border bg-background text-sm\"\n />\n <Button\n size=\"sm\"\n onClick={() => copyToClipboard(url, \"Link copied to clipboard\")}\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n )}\n\n {activeTab === \"embed\" && (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Width</label>\n <input\n type=\"number\"\n value={width}\n onChange={(e) => setWidth(Number(e.target.value))}\n className=\"w-full h-9 px-3 rounded-md border bg-background text-sm mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Height</label>\n <input\n type=\"number\"\n value={height}\n onChange={(e) => setHeight(Number(e.target.value))}\n className=\"w-full h-9 px-3 rounded-md border bg-background text-sm mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Embed Code</label>\n <div className=\"relative mt-1\">\n <input\n readOnly\n value={embedCode}\n className=\"w-full h-9 px-3 pr-12 rounded-md border bg-background text-sm font-mono\"\n />\n <Button\n size=\"sm\"\n className=\"absolute right-1 top-1/2 -translate-y-1/2 h-7\"\n onClick={() =>\n copyToClipboard(embedCode, \"Embed code copied to clipboard\")\n }\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n Badge,\n} from \"@burdenoff/fe-libs/ui\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { useFlowStore } from \"../../stores/flow-store\";\nimport { useNavigate } from \"react-router-dom\";\nimport { config } from \"../../../config\";\nimport SharePopup from \"../../../components/SharePopup\";\nimport {\n useDuplicateWorkflow,\n useDeleteWorkflow,\n} from \"../../../hooks/useWorkflows\";\n\ninterface WorkflowData {\n id?: string;\n workflow_key: string;\n version: string;\n name: string;\n description?: string;\n status?: string;\n alias?: string;\n updated_at?: string;\n created_at?: string;\n total_versions?: number;\n}\n\nconst STATUS_STYLES: Record<\n string,\n {\n label: string;\n variant: \"default\" | \"secondary\" | \"outline\" | \"destructive\";\n }\n> = {\n DRAFT: { label: \"Draft\", variant: \"secondary\" },\n ACTIVE: { label: \"Active\", variant: \"default\" },\n ARCHIVED: { label: \"Archived\", variant: \"outline\" },\n DEPRECATED: { label: \"Deprecated\", variant: \"destructive\" },\n};\n\nexport const CardWorkflow = ({\n workflow,\n onUpdateSuccess,\n}: {\n workflow: WorkflowData;\n onUpdateSuccess: () => void;\n}) => {\n const navigate = useNavigate();\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const { duplicateWorkflow: duplicateWorkflowMutation } =\n useDuplicateWorkflow();\n const { deleteWorkflow: deleteWorkflowMutation } = useDeleteWorkflow();\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n async function handleDuplicateWorkflow() {\n try {\n // Reset the store first to clear any existing state\n resetWorkflow();\n\n const result = await duplicateWorkflowMutation(\n workflow.workflow_key,\n workflow.version,\n {\n newWorkflowKey: `${workflow.workflow_key}_copy_${Date.now()}`,\n },\n );\n\n if (result?.success && result.workflow) {\n navigate(\n `../workflow/${result.workflow.workflowKey}/${result.workflow.version}`,\n );\n } else {\n throw new Error(result?.message || \"Failed to duplicate workflow\");\n }\n } catch (error) {\n console.error(\"Error duplicating workflow:\", error);\n toast.error(\n `Error duplicating workflow: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n const handleDeleteWorkflow = async (): Promise<void> => {\n if (!workflow.workflow_key) {\n console.error(\"Workflow ID is required to delete.\");\n return;\n }\n setIsDeleting(true);\n try {\n // Omit version to delete ALL versions of this workflow\n const success = await deleteWorkflowMutation(workflow.workflow_key);\n if (success) {\n setShowDeleteDialog(false);\n }\n } catch (error) {\n console.error(\"Error deleting workflow:\", error);\n toast.error(\n `Error deleting workflow: ${error instanceof Error ? error.message : String(error)}`,\n );\n } finally {\n setIsDeleting(false);\n setShowDeleteDialog(false);\n onUpdateSuccess();\n }\n };\n\n const handleOnEdit = () => {\n navigate(\"../workflow/\" + workflow.workflow_key + \"/\" + workflow.version);\n };\n\n const statusInfo =\n STATUS_STYLES[workflow.status ?? \"DRAFT\"] ?? STATUS_STYLES.DRAFT;\n\n return (\n <TooltipProvider>\n <Card className=\"bg-card-foreground/10 min-h-40 p-0 flex flex-col justify-between\">\n <CardHeader className=\"relative\">\n <div className=\"flex items-center gap-2 pr-8\">\n <h1 className=\"text-card-foreground font-bold truncate\">\n {workflow?.name}\n </h1>\n <Badge\n variant={statusInfo.variant}\n className=\"text-[10px] px-1.5 py-0 h-5 shrink-0\"\n >\n {statusInfo.label}\n </Badge>\n </div>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"text-primary absolute right-2 top-0\"\n onClick={handleOnEdit}\n >\n <Icon icon=\"mynaui:edit\" className=\"size-6 text-primary\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p>Edit Workflow</p>\n </TooltipContent>\n </Tooltip>\n </CardHeader>\n\n <div className=\"inline-flex justify-between items-center gap-2 border-t border-card-foreground/10 w-full\">\n <div className=\"flex flex-col gap-1 p-2\">\n <p className=\"text-card-foreground/60 text-xs\">\n Updated:{\" \"}\n {workflow.updated_at\n ? new Intl.DateTimeFormat(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n }).format(new Date(workflow.updated_at))\n : \"N/A\"}\n </p>\n <p className=\"text-card-foreground/60 text-xs\">\n Version: {workflow.version}\n {workflow.alias ? ` (${workflow.alias})` : \"\"}\n {workflow.total_versions && workflow.total_versions > 1\n ? ` \\u00B7 ${workflow.total_versions} versions`\n : \"\"}\n </p>\n </div>\n <div className=\"flex items-center p-1\">\n <Tooltip>\n <TooltipTrigger asChild>\n <SharePopup\n url={`${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`}\n embedSrc={`${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`}\n />\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p>Share Workflow</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\">\n <Icon\n icon=\"mynaui:copy\"\n className=\"size-6 text-card-foreground/70\"\n onClick={() => handleDuplicateWorkflow()}\n />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p>Duplicate Workflow</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowDeleteDialog(true)}\n >\n <Icon\n icon=\"mynaui:trash\"\n className=\"size-6 text-[var(--color-status-error-text)]\"\n />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p>Remove Workflow</p>\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n </Card>\n\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete Workflow</AlertDialogTitle>\n <AlertDialogDescription>\n Are you sure you want to delete workflow "{workflow.name}\n " and all its versions? This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isDeleting}>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={handleDeleteWorkflow}\n disabled={isDeleting}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {isDeleting ? \"Deleting...\" : \"Delete\"}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </TooltipProvider>\n );\n};\n","import { useNavigate } from \"react-router-dom\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Icon } from \"@iconify/react\";\n\nimport { Skeleton, Button } from \"@burdenoff/fe-libs/ui\";\nimport { CardWorkflow } from \"../builder/components/ui/card-workflow\";\nimport { useWorkflowDefinitions } from \"../hooks/useWorkflows\";\n\nexport function WorkflowsList() {\n const navigate = useNavigate();\n const { workflows, loading, error, refetch } = useWorkflowDefinitions({\n limit: 100,\n latestOnly: true,\n });\n\n const handleWorkflowUpdateSuccess = () => {\n refetch();\n };\n\n return (\n <main className=\"h-full w-full\">\n <div className=\"p-4\">\n <div className=\"inline-flex w-full justify-between items-center gap-2\">\n <h1 className=\"text-xl font-bold\">Workflows</h1>\n <Button\n variant=\"default\"\n size=\"default\"\n className=\"text-primary-foreground font-bold\"\n onClick={() => navigate(`../workflow/${uuidv4()}/v1`)}\n >\n <Icon\n icon=\"mynaui:plus\"\n className=\"size-6 text-primary-foreground\"\n />\n Create Workflow\n </Button>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-3 2xl:grid-cols-4 gap-4 mt-4\">\n {loading ? (\n <Skeleton className=\"bg-card-foreground/10 min-h-40 p-6 flex flex-col justify-between\">\n <Skeleton className=\"bg-card-foreground/20 w-full h-8\" />\n <div className=\"flex gap-2\">\n <Skeleton className=\"bg-card-foreground/15 w-full h-6 mr-4\" />\n <Skeleton className=\"bg-card-foreground/15 w-8 h-6\" />\n <Skeleton className=\"bg-card-foreground/15 w-8 h-6\" />\n </div>\n </Skeleton>\n ) : error ? (\n <div className=\"text-destructive p-4\">\n Error loading workflows: {error.message}\n </div>\n ) : workflows.length > 0 ? (\n workflows.map((workflow) => (\n <CardWorkflow\n key={workflow.id}\n workflow={{\n id: workflow.id,\n workflow_key: workflow.workflowKey,\n version: workflow.version,\n name: workflow.name,\n description: workflow.description ?? undefined,\n status: workflow.status ?? undefined,\n alias: workflow.alias ?? undefined,\n updated_at: workflow.updatedAt ?? undefined,\n created_at: workflow.createdAt ?? undefined,\n total_versions: workflow.totalVersions ?? undefined,\n }}\n onUpdateSuccess={() => handleWorkflowUpdateSuccess()}\n />\n ))\n ) : (\n <div className=\"text-muted-foreground p-4\">\n No workflows found. Create your first workflow!\n </div>\n )}\n </div>\n </div>\n </main>\n );\n}\n"]}
|