@burdenoff/fluidgrids-fe-sdk 2026.716.12 → 2026.720.1
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-6ASC7CJW.js +8 -0
- package/dist/{ExecutionDetailPage-4RT4QFRT.js.map → ExecutionDetailPage-6ASC7CJW.js.map} +1 -1
- package/dist/ExecutionsListPage-OWOKDVXQ.js +8 -0
- package/dist/{ExecutionsListPage-I63SHREF.js.map → ExecutionsListPage-OWOKDVXQ.js.map} +1 -1
- package/dist/{TemplateConfigurationModal-ZMCT3ZCH.js → TemplateConfigurationModal-MTR7VP6G.js} +6 -5
- package/dist/TemplateConfigurationModal-MTR7VP6G.js.map +1 -0
- package/dist/{TemplateDetailPanel-UXH6KPCH.js → TemplateDetailPanel-T3ZHXOHX.js} +4 -3
- package/dist/TemplateDetailPanel-T3ZHXOHX.js.map +1 -0
- package/dist/WorkflowBuilder-COJQ2YBJ.js +16 -0
- package/dist/{WorkflowBuilder-2VTEBTJ6.js.map → WorkflowBuilder-COJQ2YBJ.js.map} +1 -1
- package/dist/WorkflowsList-AY6ZANWN.js +10 -0
- package/dist/{WorkflowsList-4RBTKPUJ.js.map → WorkflowsList-AY6ZANWN.js.map} +1 -1
- package/dist/{blocks-XUSH3L5M.js → blocks-J3YIE73T.js} +6 -4
- package/dist/{blocks-XUSH3L5M.js.map → blocks-J3YIE73T.js.map} +1 -1
- package/dist/chunk-3ZYUGTIT.js +10 -0
- package/dist/chunk-3ZYUGTIT.js.map +1 -0
- package/dist/{chunk-WTKD76BY.js → chunk-52EJMXGS.js} +12 -8
- package/dist/chunk-52EJMXGS.js.map +1 -0
- package/dist/{chunk-G7B4SYFM.js → chunk-6QCBKN3P.js} +3 -3
- package/dist/{chunk-G7B4SYFM.js.map → chunk-6QCBKN3P.js.map} +1 -1
- package/dist/{chunk-Z54K22LP.js → chunk-DBOMRIP5.js} +4 -8
- package/dist/chunk-DBOMRIP5.js.map +1 -0
- package/dist/{chunk-JXH7PRTS.js → chunk-DVSO5MTE.js} +3 -3
- package/dist/{chunk-JXH7PRTS.js.map → chunk-DVSO5MTE.js.map} +1 -1
- package/dist/{chunk-6MZFOWEO.js → chunk-EQVBECAC.js} +2 -2
- package/dist/chunk-EQVBECAC.js.map +1 -0
- package/dist/{chunk-5SENVZ7D.js → chunk-JVARXRIW.js} +296 -108
- package/dist/chunk-JVARXRIW.js.map +1 -0
- package/dist/{chunk-7VEOUEIN.js → chunk-MRVS73S2.js} +3 -3
- package/dist/{chunk-7VEOUEIN.js.map → chunk-MRVS73S2.js.map} +1 -1
- package/dist/{chunk-UYPB5TWQ.js → chunk-PNOA7CQV.js} +5 -2
- package/dist/chunk-PNOA7CQV.js.map +1 -0
- package/dist/{chunk-DKEETQVV.js → chunk-S2Z7ZTGV.js} +41 -30
- package/dist/chunk-S2Z7ZTGV.js.map +1 -0
- package/dist/chunk-UIY2HBWA.js +156 -0
- package/dist/chunk-UIY2HBWA.js.map +1 -0
- package/dist/{chunk-5W4EAURJ.js → chunk-ZPBFAT6K.js} +64 -44
- package/dist/chunk-ZPBFAT6K.js.map +1 -0
- package/dist/{global-operations-5FLHXHG3.js → global-operations-KVVOANLT.js} +3 -3
- package/dist/{global-operations-5FLHXHG3.js.map → global-operations-KVVOANLT.js.map} +1 -1
- package/dist/index.d.ts +139 -2
- package/dist/index.js +22 -36
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/ExecutionDetailPage-4RT4QFRT.js +0 -6
- package/dist/ExecutionsListPage-I63SHREF.js +0 -8
- package/dist/TemplateConfigurationModal-ZMCT3ZCH.js.map +0 -1
- package/dist/TemplateDetailPanel-UXH6KPCH.js.map +0 -1
- package/dist/WorkflowBuilder-2VTEBTJ6.js +0 -14
- package/dist/WorkflowsList-4RBTKPUJ.js +0 -8
- package/dist/chunk-5SENVZ7D.js.map +0 -1
- package/dist/chunk-5W4EAURJ.js.map +0 -1
- package/dist/chunk-6MZFOWEO.js.map +0 -1
- package/dist/chunk-DKEETQVV.js.map +0 -1
- package/dist/chunk-UYPB5TWQ.js.map +0 -1
- package/dist/chunk-WTKD76BY.js.map +0 -1
- package/dist/chunk-Z54K22LP.js.map +0 -1
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { cn } from './chunk-3ZYUGTIT.js';
|
|
2
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
3
|
+
import { forwardRef, createContext, useMemo, useContext, cloneElement } from 'react';
|
|
4
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var TooltipProvider = TooltipPrimitive.Provider;
|
|
7
|
+
var Tooltip = TooltipPrimitive.Root;
|
|
8
|
+
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
9
|
+
var TooltipContent = forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
10
|
+
TooltipPrimitive.Content,
|
|
11
|
+
{
|
|
12
|
+
ref,
|
|
13
|
+
sideOffset,
|
|
14
|
+
className: cn(
|
|
15
|
+
"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
16
|
+
className
|
|
17
|
+
),
|
|
18
|
+
...props
|
|
19
|
+
}
|
|
20
|
+
));
|
|
21
|
+
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
22
|
+
var ALLOW_ALL_PERMISSIONS = {
|
|
23
|
+
hasPermission: () => true,
|
|
24
|
+
isLoading: false,
|
|
25
|
+
enforced: false
|
|
26
|
+
};
|
|
27
|
+
var FluidGridsPermissionsContext = createContext(
|
|
28
|
+
ALLOW_ALL_PERMISSIONS
|
|
29
|
+
);
|
|
30
|
+
function FluidGridsPermissionsProvider({
|
|
31
|
+
hasPermission,
|
|
32
|
+
isLoading = false,
|
|
33
|
+
children
|
|
34
|
+
}) {
|
|
35
|
+
const value = useMemo(
|
|
36
|
+
() => ({ hasPermission, isLoading, enforced: true }),
|
|
37
|
+
[hasPermission, isLoading]
|
|
38
|
+
);
|
|
39
|
+
return /* @__PURE__ */ jsx(FluidGridsPermissionsContext.Provider, { value, children });
|
|
40
|
+
}
|
|
41
|
+
function evaluatePermissionCheck(ctx, permission) {
|
|
42
|
+
const permissions = typeof permission === "string" ? [permission] : permission;
|
|
43
|
+
return {
|
|
44
|
+
allowed: ctx.isLoading ? false : permissions.some((p) => ctx.hasPermission(p)),
|
|
45
|
+
isLoading: ctx.isLoading,
|
|
46
|
+
enforced: ctx.enforced
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function useFluidGridsPermission(permission) {
|
|
50
|
+
return evaluatePermissionCheck(
|
|
51
|
+
useContext(FluidGridsPermissionsContext),
|
|
52
|
+
permission
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
var DEFAULT_DENIED_TOOLTIP = "You don't have permission to perform this action";
|
|
56
|
+
function SdkPermissionButton({
|
|
57
|
+
permission,
|
|
58
|
+
deniedBehavior = "disable",
|
|
59
|
+
deniedTooltip = DEFAULT_DENIED_TOOLTIP,
|
|
60
|
+
children
|
|
61
|
+
}) {
|
|
62
|
+
const { allowed, isLoading } = useFluidGridsPermission(permission);
|
|
63
|
+
if (allowed) return children;
|
|
64
|
+
if (deniedBehavior === "hide") return null;
|
|
65
|
+
const disabledChild = cloneElement(children, {
|
|
66
|
+
disabled: true,
|
|
67
|
+
onClick: void 0
|
|
68
|
+
});
|
|
69
|
+
if (isLoading) return disabledChild;
|
|
70
|
+
return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
71
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "inline-flex cursor-not-allowed", children: disabledChild }) }),
|
|
72
|
+
/* @__PURE__ */ jsx(TooltipContent, { children: deniedTooltip })
|
|
73
|
+
] }) });
|
|
74
|
+
}
|
|
75
|
+
function SdkPermissionGate({
|
|
76
|
+
permission,
|
|
77
|
+
fallback = null,
|
|
78
|
+
children
|
|
79
|
+
}) {
|
|
80
|
+
const { allowed } = useFluidGridsPermission(permission);
|
|
81
|
+
return /* @__PURE__ */ jsx(Fragment, { children: allowed ? children : fallback });
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// src/permissions/constants.ts
|
|
85
|
+
var FLUIDGRIDS_PERMISSIONS = {
|
|
86
|
+
// Workflow resources
|
|
87
|
+
WORKFLOW_LIST: "workflow:list",
|
|
88
|
+
WORKFLOW_READ: "workflow:read",
|
|
89
|
+
WORKFLOW_CREATE: "workflow:create",
|
|
90
|
+
WORKFLOW_UPDATE: "workflow:update",
|
|
91
|
+
WORKFLOW_DELETE: "workflow:delete",
|
|
92
|
+
WORKFLOW_EXECUTE: "workflow:execute",
|
|
93
|
+
// Workflow run resources
|
|
94
|
+
WORKFLOW_RUN_LIST: "workflow-run:list",
|
|
95
|
+
WORKFLOW_RUN_READ: "workflow-run:read",
|
|
96
|
+
WORKFLOW_RUN_EXECUTE: "workflow-run:execute",
|
|
97
|
+
// Node resources
|
|
98
|
+
NODE_LIST: "node:list",
|
|
99
|
+
NODE_READ: "node:read",
|
|
100
|
+
NODE_CREATE: "node:create",
|
|
101
|
+
NODE_DELETE: "node:delete",
|
|
102
|
+
// Node installation resources
|
|
103
|
+
NODE_INSTALLATION_LIST: "node-installation:list",
|
|
104
|
+
NODE_INSTALLATION_READ: "node-installation:read",
|
|
105
|
+
NODE_INSTALLATION_CREATE: "node-installation:create",
|
|
106
|
+
NODE_INSTALLATION_UPDATE: "node-installation:update",
|
|
107
|
+
NODE_INSTALLATION_DELETE: "node-installation:delete",
|
|
108
|
+
// Node endpoint config resources
|
|
109
|
+
NODE_ENDPOINT_CONFIG_LIST: "node-endpoint-config:list",
|
|
110
|
+
NODE_ENDPOINT_CONFIG_READ: "node-endpoint-config:read",
|
|
111
|
+
NODE_ENDPOINT_CONFIG_UPDATE: "node-endpoint-config:update",
|
|
112
|
+
NODE_ENDPOINT_CONFIG_DELETE: "node-endpoint-config:delete",
|
|
113
|
+
// Scheduled job resources
|
|
114
|
+
SCHEDULED_JOB_LIST: "scheduled-job:list",
|
|
115
|
+
SCHEDULED_JOB_READ: "scheduled-job:read",
|
|
116
|
+
SCHEDULED_JOB_CREATE: "scheduled-job:create",
|
|
117
|
+
SCHEDULED_JOB_UPDATE: "scheduled-job:update",
|
|
118
|
+
SCHEDULED_JOB_DELETE: "scheduled-job:delete",
|
|
119
|
+
// AI workflow resources
|
|
120
|
+
AI_WORKFLOW_EXECUTE: "ai-workflow:execute",
|
|
121
|
+
AI_WORKFLOW_CREATE: "ai-workflow:create",
|
|
122
|
+
// Artifact resources
|
|
123
|
+
ARTIFACT_LIST: "artifact:list",
|
|
124
|
+
ARTIFACT_READ: "artifact:read",
|
|
125
|
+
ARTIFACT_DELETE: "artifact:delete",
|
|
126
|
+
// Chat resources
|
|
127
|
+
CHAT_SESSION_LIST: "chat-session:list",
|
|
128
|
+
CHAT_SESSION_READ: "chat-session:read",
|
|
129
|
+
CHAT_SESSION_CREATE: "chat-session:create",
|
|
130
|
+
CHAT_SESSION_DELETE: "chat-session:delete",
|
|
131
|
+
// Submission resources
|
|
132
|
+
SUBMISSION_LIST: "submission:list",
|
|
133
|
+
SUBMISSION_READ: "submission:read",
|
|
134
|
+
SUBMISSION_DELETE: "submission:delete",
|
|
135
|
+
SUBMISSION_EXECUTE: "submission:execute",
|
|
136
|
+
// Event registration resources
|
|
137
|
+
EVENT_REGISTRATION_LIST: "event-registration:list",
|
|
138
|
+
EVENT_REGISTRATION_READ: "event-registration:read",
|
|
139
|
+
EVENT_REGISTRATION_CREATE: "event-registration:create",
|
|
140
|
+
EVENT_REGISTRATION_UPDATE: "event-registration:update",
|
|
141
|
+
EVENT_REGISTRATION_DELETE: "event-registration:delete",
|
|
142
|
+
// Usage resources
|
|
143
|
+
USAGE_LIST: "usage:list",
|
|
144
|
+
USAGE_READ: "usage:read",
|
|
145
|
+
// Dashboard resources
|
|
146
|
+
DASHBOARD_READ: "dashboard:read",
|
|
147
|
+
// System config resources
|
|
148
|
+
SYSTEM_CONFIG_READ: "system-config:read",
|
|
149
|
+
SYSTEM_CONFIG_UPDATE: "system-config:update",
|
|
150
|
+
// Integrations (wspace-integrations-svc)
|
|
151
|
+
INTEGRATION_CONNECTION_CREATE: "integration-connection:create"
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
export { ALLOW_ALL_PERMISSIONS, FLUIDGRIDS_PERMISSIONS, FluidGridsPermissionsProvider, SdkPermissionButton, SdkPermissionGate, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, evaluatePermissionCheck, useFluidGridsPermission };
|
|
155
|
+
//# sourceMappingURL=chunk-UIY2HBWA.js.map
|
|
156
|
+
//# sourceMappingURL=chunk-UIY2HBWA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/tooltip.tsx","../src/permissions/PermissionsBridge.tsx","../src/permissions/constants.ts"],"names":["jsx"],"mappings":"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","file":"chunk-UIY2HBWA.js","sourcesContent":["import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","/**\n * FluidGrids Permissions Bridge\n *\n * The SDK never talks to the RBAC service itself and never imports\n * @burdenoff/fe-libs (embed/standalone consumers have no shell providers).\n * Instead, hosts that DO have real permission data (e.g. microfe-workflows,\n * which wraps the SDK in the fe-libs PermissionProvider) bridge it in via\n * FluidGridsPermissionsProvider.\n *\n * Without a provider the context defaults to allow-all (enforced: false):\n * every surface renders enabled and the API gateway remains the enforcement\n * point. This keeps /embed/workflow, /shared/:id and standalone embedders\n * working unchanged.\n */\nimport {\n cloneElement,\n createContext,\n useContext,\n useMemo,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../ui/tooltip\";\n\nexport interface FluidGridsPermissionsValue {\n /** Returns true when the actor holds the '{resource}:{action}' permission. */\n hasPermission: (permission: string) => boolean;\n /** True while the host is still loading permission data. */\n isLoading: boolean;\n /** True when a host bridged real data; false = allow-all default. */\n enforced: boolean;\n}\n\n/** No-provider default: allow-all, unenforced (gateway remains the gate). */\nexport const ALLOW_ALL_PERMISSIONS: FluidGridsPermissionsValue = {\n hasPermission: () => true,\n isLoading: false,\n enforced: false,\n};\n\nconst FluidGridsPermissionsContext = createContext<FluidGridsPermissionsValue>(\n ALLOW_ALL_PERMISSIONS,\n);\n\nexport interface FluidGridsPermissionsProviderProps {\n hasPermission: (permission: string) => boolean;\n isLoading?: boolean;\n children: ReactNode;\n}\n\nexport function FluidGridsPermissionsProvider({\n hasPermission,\n isLoading = false,\n children,\n}: FluidGridsPermissionsProviderProps): ReactElement {\n const value = useMemo<FluidGridsPermissionsValue>(\n () => ({ hasPermission, isLoading, enforced: true }),\n [hasPermission, isLoading],\n );\n return (\n <FluidGridsPermissionsContext.Provider value={value}>\n {children}\n </FluidGridsPermissionsContext.Provider>\n );\n}\n\nexport interface PermissionCheck {\n /** False while loading (no flash of allowed UI) or when denied. */\n allowed: boolean;\n isLoading: boolean;\n enforced: boolean;\n}\n\n/**\n * Pure gating semantics, extracted for unit testing: denied while loading\n * (no flash of allowed UI), any-of across a permission list, allow-all when\n * the context is the unenforced default.\n */\nexport function evaluatePermissionCheck(\n ctx: FluidGridsPermissionsValue,\n permission: string | readonly string[],\n): PermissionCheck {\n const permissions =\n typeof permission === \"string\" ? [permission] : permission;\n return {\n allowed: ctx.isLoading\n ? false\n : permissions.some((p) => ctx.hasPermission(p)),\n isLoading: ctx.isLoading,\n enforced: ctx.enforced,\n };\n}\n\n/** Accepts a single permission or an any-of list. */\nexport function useFluidGridsPermission(\n permission: string | readonly string[],\n): PermissionCheck {\n return evaluatePermissionCheck(\n useContext(FluidGridsPermissionsContext),\n permission,\n );\n}\n\nconst DEFAULT_DENIED_TOOLTIP =\n \"You don't have permission to perform this action\";\n\ninterface DisableableProps {\n disabled?: boolean;\n onClick?: (...args: never[]) => unknown;\n}\n\nexport interface SdkPermissionButtonProps {\n /** Single permission or an any-of list. */\n permission: string | readonly string[];\n /** \"disable\" renders the child disabled with a tooltip; \"hide\" removes it. */\n deniedBehavior?: \"disable\" | \"hide\";\n deniedTooltip?: string;\n children: ReactElement<DisableableProps>;\n}\n\n/**\n * Wraps a single button-like element. When the permission is denied the\n * child is disabled (with an explanatory tooltip) or hidden; while\n * permissions load it renders disabled without the tooltip.\n */\nexport function SdkPermissionButton({\n permission,\n deniedBehavior = \"disable\",\n deniedTooltip = DEFAULT_DENIED_TOOLTIP,\n children,\n}: SdkPermissionButtonProps): ReactElement | null {\n const { allowed, isLoading } = useFluidGridsPermission(permission);\n if (allowed) return children;\n if (deniedBehavior === \"hide\") return null;\n\n const disabledChild = cloneElement(children, {\n disabled: true,\n onClick: undefined,\n });\n if (isLoading) return disabledChild;\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex cursor-not-allowed\">\n {disabledChild}\n </span>\n </TooltipTrigger>\n <TooltipContent>{deniedTooltip}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nexport interface SdkPermissionGateProps {\n /** Single permission or an any-of list. */\n permission: string | readonly string[];\n fallback?: ReactNode;\n children: ReactNode;\n}\n\n/** Renders children only when the permission is granted (and loaded). */\nexport function SdkPermissionGate({\n permission,\n fallback = null,\n children,\n}: SdkPermissionGateProps): ReactElement | null {\n const { allowed } = useFluidGridsPermission(permission);\n return <>{allowed ? children : fallback}</>;\n}\n","/**\n * FluidGrids Permission Constants\n *\n * Canonical permission strings for FluidGrids UI surfaces, matching the\n * backend @rbac (resource, action) pairs. Format: '{resourceType}:{action}'.\n *\n * Hosts (e.g. microfe-workflows) bridge real permission data via\n * FluidGridsPermissionsProvider; without a provider the SDK defaults to\n * allow-all and the gateway remains the enforcement point.\n */\n\nexport const FLUIDGRIDS_PERMISSIONS = {\n // Workflow resources\n WORKFLOW_LIST: \"workflow:list\",\n WORKFLOW_READ: \"workflow:read\",\n WORKFLOW_CREATE: \"workflow:create\",\n WORKFLOW_UPDATE: \"workflow:update\",\n WORKFLOW_DELETE: \"workflow:delete\",\n WORKFLOW_EXECUTE: \"workflow:execute\",\n\n // Workflow run resources\n WORKFLOW_RUN_LIST: \"workflow-run:list\",\n WORKFLOW_RUN_READ: \"workflow-run:read\",\n WORKFLOW_RUN_EXECUTE: \"workflow-run:execute\",\n\n // Node resources\n NODE_LIST: \"node:list\",\n NODE_READ: \"node:read\",\n NODE_CREATE: \"node:create\",\n NODE_DELETE: \"node:delete\",\n\n // Node installation resources\n NODE_INSTALLATION_LIST: \"node-installation:list\",\n NODE_INSTALLATION_READ: \"node-installation:read\",\n NODE_INSTALLATION_CREATE: \"node-installation:create\",\n NODE_INSTALLATION_UPDATE: \"node-installation:update\",\n NODE_INSTALLATION_DELETE: \"node-installation:delete\",\n\n // Node endpoint config resources\n NODE_ENDPOINT_CONFIG_LIST: \"node-endpoint-config:list\",\n NODE_ENDPOINT_CONFIG_READ: \"node-endpoint-config:read\",\n NODE_ENDPOINT_CONFIG_UPDATE: \"node-endpoint-config:update\",\n NODE_ENDPOINT_CONFIG_DELETE: \"node-endpoint-config:delete\",\n\n // Scheduled job resources\n SCHEDULED_JOB_LIST: \"scheduled-job:list\",\n SCHEDULED_JOB_READ: \"scheduled-job:read\",\n SCHEDULED_JOB_CREATE: \"scheduled-job:create\",\n SCHEDULED_JOB_UPDATE: \"scheduled-job:update\",\n SCHEDULED_JOB_DELETE: \"scheduled-job:delete\",\n\n // AI workflow resources\n AI_WORKFLOW_EXECUTE: \"ai-workflow:execute\",\n AI_WORKFLOW_CREATE: \"ai-workflow:create\",\n\n // Artifact resources\n ARTIFACT_LIST: \"artifact:list\",\n ARTIFACT_READ: \"artifact:read\",\n ARTIFACT_DELETE: \"artifact:delete\",\n\n // Chat resources\n CHAT_SESSION_LIST: \"chat-session:list\",\n CHAT_SESSION_READ: \"chat-session:read\",\n CHAT_SESSION_CREATE: \"chat-session:create\",\n CHAT_SESSION_DELETE: \"chat-session:delete\",\n\n // Submission resources\n SUBMISSION_LIST: \"submission:list\",\n SUBMISSION_READ: \"submission:read\",\n SUBMISSION_DELETE: \"submission:delete\",\n SUBMISSION_EXECUTE: \"submission:execute\",\n\n // Event registration resources\n EVENT_REGISTRATION_LIST: \"event-registration:list\",\n EVENT_REGISTRATION_READ: \"event-registration:read\",\n EVENT_REGISTRATION_CREATE: \"event-registration:create\",\n EVENT_REGISTRATION_UPDATE: \"event-registration:update\",\n EVENT_REGISTRATION_DELETE: \"event-registration:delete\",\n\n // Usage resources\n USAGE_LIST: \"usage:list\",\n USAGE_READ: \"usage:read\",\n\n // Dashboard resources\n DASHBOARD_READ: \"dashboard:read\",\n\n // System config resources\n SYSTEM_CONFIG_READ: \"system-config:read\",\n SYSTEM_CONFIG_UPDATE: \"system-config:update\",\n\n // Integrations (wspace-integrations-svc)\n INTEGRATION_CONNECTION_CREATE: \"integration-connection:create\",\n} as const;\n\nexport type FluidGridsPermission =\n (typeof FLUIDGRIDS_PERMISSIONS)[keyof typeof FLUIDGRIDS_PERMISSIONS];\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useWorkflowDefinitions, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-OHIRHNRJ.js';
|
|
2
2
|
import { useFlowStore } from './chunk-KU64CCSV.js';
|
|
3
|
+
import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS, SdkPermissionGate } from './chunk-UIY2HBWA.js';
|
|
3
4
|
import { config } from './chunk-WWU2O2SR.js';
|
|
4
5
|
import { useNavigate } from 'react-router-dom';
|
|
5
6
|
import { v4 } from 'uuid';
|
|
@@ -261,35 +262,47 @@ var CardWorkflow = ({
|
|
|
261
262
|
) }),
|
|
262
263
|
/* @__PURE__ */ jsx(TooltipContent, { side: "right", children: /* @__PURE__ */ jsx("p", { children: "Share Workflow" }) })
|
|
263
264
|
] }),
|
|
264
|
-
/* @__PURE__ */
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
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(
|
|
265
|
+
/* @__PURE__ */ jsx(
|
|
266
|
+
SdkPermissionGate,
|
|
267
|
+
{
|
|
268
|
+
permission: FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE,
|
|
269
|
+
children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
270
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", children: /* @__PURE__ */ jsx(
|
|
283
271
|
Icon,
|
|
284
272
|
{
|
|
285
|
-
icon: "mynaui:
|
|
286
|
-
className: "size-6 text-
|
|
273
|
+
icon: "mynaui:copy",
|
|
274
|
+
className: "size-6 text-card-foreground/70",
|
|
275
|
+
onClick: () => handleDuplicateWorkflow()
|
|
287
276
|
}
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
277
|
+
) }) }),
|
|
278
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", children: /* @__PURE__ */ jsx("p", { children: "Duplicate Workflow" }) })
|
|
279
|
+
] })
|
|
280
|
+
}
|
|
281
|
+
),
|
|
282
|
+
/* @__PURE__ */ jsx(
|
|
283
|
+
SdkPermissionGate,
|
|
284
|
+
{
|
|
285
|
+
permission: FLUIDGRIDS_PERMISSIONS.WORKFLOW_DELETE,
|
|
286
|
+
children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
287
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
288
|
+
Button,
|
|
289
|
+
{
|
|
290
|
+
variant: "ghost",
|
|
291
|
+
size: "sm",
|
|
292
|
+
onClick: () => setShowDeleteDialog(true),
|
|
293
|
+
children: /* @__PURE__ */ jsx(
|
|
294
|
+
Icon,
|
|
295
|
+
{
|
|
296
|
+
icon: "mynaui:trash",
|
|
297
|
+
className: "size-6 text-[var(--color-status-error-text)]"
|
|
298
|
+
}
|
|
299
|
+
)
|
|
300
|
+
}
|
|
301
|
+
) }),
|
|
302
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", children: /* @__PURE__ */ jsx("p", { children: "Remove Workflow" }) })
|
|
303
|
+
] })
|
|
304
|
+
}
|
|
305
|
+
)
|
|
293
306
|
] })
|
|
294
307
|
] })
|
|
295
308
|
] }),
|
|
@@ -329,23 +342,30 @@ function WorkflowsList() {
|
|
|
329
342
|
return /* @__PURE__ */ jsx("main", { className: "h-full w-full", children: /* @__PURE__ */ jsxs("div", { className: "p-4", children: [
|
|
330
343
|
/* @__PURE__ */ jsxs("div", { className: "inline-flex w-full justify-between items-center gap-2", children: [
|
|
331
344
|
/* @__PURE__ */ jsx("h1", { className: "text-xl font-bold", children: "Workflows" }),
|
|
332
|
-
/* @__PURE__ */
|
|
333
|
-
|
|
345
|
+
/* @__PURE__ */ jsx(
|
|
346
|
+
SdkPermissionButton,
|
|
334
347
|
{
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
348
|
+
permission: FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE,
|
|
349
|
+
deniedTooltip: "You don't have permission to create workflows",
|
|
350
|
+
children: /* @__PURE__ */ jsxs(
|
|
351
|
+
Button,
|
|
352
|
+
{
|
|
353
|
+
variant: "default",
|
|
354
|
+
size: "default",
|
|
355
|
+
className: "text-primary-foreground font-bold",
|
|
356
|
+
onClick: () => navigate(`../workflow/${v4()}/v1`),
|
|
357
|
+
children: [
|
|
358
|
+
/* @__PURE__ */ jsx(
|
|
359
|
+
Icon,
|
|
360
|
+
{
|
|
361
|
+
icon: "mynaui:plus",
|
|
362
|
+
className: "size-6 text-primary-foreground"
|
|
363
|
+
}
|
|
364
|
+
),
|
|
365
|
+
"Create Workflow"
|
|
366
|
+
]
|
|
367
|
+
}
|
|
368
|
+
)
|
|
349
369
|
}
|
|
350
370
|
)
|
|
351
371
|
] }),
|
|
@@ -382,5 +402,5 @@ function WorkflowsList() {
|
|
|
382
402
|
}
|
|
383
403
|
|
|
384
404
|
export { WorkflowsList };
|
|
385
|
-
//# sourceMappingURL=chunk-
|
|
386
|
-
//# sourceMappingURL=chunk-
|
|
405
|
+
//# sourceMappingURL=chunk-ZPBFAT6K.js.map
|
|
406
|
+
//# sourceMappingURL=chunk-ZPBFAT6K.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-ZPBFAT6K.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\";\nimport { SdkPermissionGate } from \"../../../permissions/PermissionsBridge\";\nimport { FLUIDGRIDS_PERMISSIONS } from \"../../../permissions/constants\";\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 <SdkPermissionGate\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE}\n >\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 </SdkPermissionGate>\n <SdkPermissionGate\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_DELETE}\n >\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 </SdkPermissionGate>\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\";\nimport { SdkPermissionButton } from \"../permissions/PermissionsBridge\";\nimport { FLUIDGRIDS_PERMISSIONS } from \"../permissions/constants\";\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 <SdkPermissionButton\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE}\n deniedTooltip=\"You don't have permission to create workflows\"\n >\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 </SdkPermissionButton>\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"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { BrowseWorkflowNodesDocument, BrowseWorkflowTemplatesDocument, CreateStoreOrderDocument, GetMyNodeInstallationsDocument, GetWorkflowTemplateDetailDocument, InstallPurchasedNodeDocument, InstallWorkflowNodeDocument, RecordDownloadDocument, UninstallWorkflowNodeDocument, useBrowseWorkflowNodesLazyQuery, useBrowseWorkflowNodesQuery, useBrowseWorkflowNodesSuspenseQuery, useBrowseWorkflowTemplatesLazyQuery, useBrowseWorkflowTemplatesQuery, useBrowseWorkflowTemplatesSuspenseQuery, useCreateStoreOrderMutation, useGetMyNodeInstallationsLazyQuery, useGetMyNodeInstallationsQuery, useGetMyNodeInstallationsSuspenseQuery, useGetWorkflowTemplateDetailLazyQuery, useGetWorkflowTemplateDetailQuery, useGetWorkflowTemplateDetailSuspenseQuery, useInstallPurchasedNodeMutation, useInstallWorkflowNodeMutation, useRecordDownloadMutation, useUninstallWorkflowNodeMutation } from './chunk-
|
|
2
|
-
//# sourceMappingURL=global-operations-
|
|
3
|
-
//# sourceMappingURL=global-operations-
|
|
1
|
+
export { BrowseWorkflowNodesDocument, BrowseWorkflowTemplatesDocument, CreateStoreOrderDocument, GetMyNodeInstallationsDocument, GetWorkflowTemplateDetailDocument, InstallPurchasedNodeDocument, InstallWorkflowNodeDocument, RecordDownloadDocument, UninstallWorkflowNodeDocument, useBrowseWorkflowNodesLazyQuery, useBrowseWorkflowNodesQuery, useBrowseWorkflowNodesSuspenseQuery, useBrowseWorkflowTemplatesLazyQuery, useBrowseWorkflowTemplatesQuery, useBrowseWorkflowTemplatesSuspenseQuery, useCreateStoreOrderMutation, useGetMyNodeInstallationsLazyQuery, useGetMyNodeInstallationsQuery, useGetMyNodeInstallationsSuspenseQuery, useGetWorkflowTemplateDetailLazyQuery, useGetWorkflowTemplateDetailQuery, useGetWorkflowTemplateDetailSuspenseQuery, useInstallPurchasedNodeMutation, useInstallWorkflowNodeMutation, useRecordDownloadMutation, useUninstallWorkflowNodeMutation } from './chunk-PNOA7CQV.js';
|
|
2
|
+
//# sourceMappingURL=global-operations-KVVOANLT.js.map
|
|
3
|
+
//# sourceMappingURL=global-operations-KVVOANLT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"global-operations-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"global-operations-KVVOANLT.js"}
|