@burdenoff/fluidgrids-fe-sdk 2026.925.2 → 2026.930.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-RK3KJ46E.js +12 -0
- package/dist/{ExecutionDetailPage-3ZJMNWBY.js.map → ExecutionDetailPage-RK3KJ46E.js.map} +1 -1
- package/dist/ExecutionsListPage-NXINADRN.js +11 -0
- package/dist/{ExecutionsListPage-FPNETFQX.js.map → ExecutionsListPage-NXINADRN.js.map} +1 -1
- package/dist/{WorkflowBuilder-IS2ZZ6JY.js → WorkflowBuilder-MAFYHWGY.js} +7 -7
- package/dist/{WorkflowBuilder-IS2ZZ6JY.js.map → WorkflowBuilder-MAFYHWGY.js.map} +1 -1
- package/dist/WorkflowsList-AFTTUUHX.js +13 -0
- package/dist/{WorkflowsList-GEPG3OZ6.js.map → WorkflowsList-AFTTUUHX.js.map} +1 -1
- package/dist/{chunk-UBKJDGYS.js → chunk-3P4YQ7DO.js} +57 -3
- package/dist/chunk-3P4YQ7DO.js.map +1 -0
- package/dist/chunk-5OZB7AQ4.js +9878 -0
- package/dist/chunk-5OZB7AQ4.js.map +1 -0
- package/dist/{chunk-A6PDDUMN.js → chunk-7SX5OWZR.js} +4 -4
- package/dist/{chunk-A6PDDUMN.js.map → chunk-7SX5OWZR.js.map} +1 -1
- package/dist/{chunk-QV6T4R4T.js → chunk-G3RPRMP5.js} +3 -3
- package/dist/{chunk-QV6T4R4T.js.map → chunk-G3RPRMP5.js.map} +1 -1
- package/dist/{chunk-H5LGKSBM.js → chunk-GKSXZFDY.js} +3 -3
- package/dist/{chunk-H5LGKSBM.js.map → chunk-GKSXZFDY.js.map} +1 -1
- package/dist/{chunk-ZZ3SFJXV.js → chunk-IJSJOTIZ.js} +4 -4
- package/dist/{chunk-ZZ3SFJXV.js.map → chunk-IJSJOTIZ.js.map} +1 -1
- package/dist/{chunk-T7FJ2TBD.js → chunk-NHZQE7ZB.js} +4 -4
- package/dist/{chunk-T7FJ2TBD.js.map → chunk-NHZQE7ZB.js.map} +1 -1
- package/dist/{chunk-YMD3T6J2.js → chunk-NTJTPYCD.js} +37 -4
- package/dist/chunk-NTJTPYCD.js.map +1 -0
- package/dist/{chunk-6DQDX6LD.js → chunk-ODOEVG2G.js} +5 -5
- package/dist/{chunk-6DQDX6LD.js.map → chunk-ODOEVG2G.js.map} +1 -1
- package/dist/{chunk-IOP2IBDV.js → chunk-R5ZYOIZG.js} +4 -4
- package/dist/{chunk-IOP2IBDV.js.map → chunk-R5ZYOIZG.js.map} +1 -1
- package/dist/{chunk-CGQG3QUR.js → chunk-T4BFEI3I.js} +5 -5
- package/dist/{chunk-CGQG3QUR.js.map → chunk-T4BFEI3I.js.map} +1 -1
- package/dist/{chunk-O4UTOCZJ.js → chunk-USFSPC6S.js} +3 -3
- package/dist/{chunk-O4UTOCZJ.js.map → chunk-USFSPC6S.js.map} +1 -1
- package/dist/{chunk-6SXISR7B.js → chunk-VG2BTLUN.js} +600 -93
- package/dist/chunk-VG2BTLUN.js.map +1 -0
- package/dist/{chunk-YQ4GDK4I.js → chunk-ZLYJKIKG.js} +3 -3
- package/dist/{chunk-YQ4GDK4I.js.map → chunk-ZLYJKIKG.js.map} +1 -1
- package/dist/executions.js +5 -5
- package/dist/history.js +3 -3
- package/dist/index.d.ts +82113 -35336
- package/dist/index.js +20 -20
- package/dist/index.js.map +1 -1
- package/dist/nodes.js +2 -2
- package/dist/settings.js +3 -3
- package/dist/templates.js +5 -5
- package/dist/{workflow-builder-Y7PcoT2O.d.ts → workflow-builder-DqInt43T.d.ts} +31 -2
- package/dist/workflow-builder.d.ts +1 -1
- package/dist/workflow-builder.js +6 -6
- package/dist/workflows-list.js +4 -4
- package/package.json +1 -1
- package/dist/ExecutionDetailPage-3ZJMNWBY.js +0 -12
- package/dist/ExecutionsListPage-FPNETFQX.js +0 -11
- package/dist/WorkflowsList-GEPG3OZ6.js +0 -13
- package/dist/chunk-6SXISR7B.js.map +0 -1
- package/dist/chunk-HCL5CCLH.js +0 -4940
- package/dist/chunk-HCL5CCLH.js.map +0 -1
- package/dist/chunk-UBKJDGYS.js.map +0 -1
- package/dist/chunk-YMD3T6J2.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/settings/pages/SettingsPage.tsx"],"names":[],"mappings":"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","file":"chunk-IOP2IBDV.js","sourcesContent":["import { useState, useCallback, useEffect, useMemo } from \"react\";\nimport { useNavigate, useParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n Input,\n Label,\n Switch,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport { useFlowStore } from \"../../../builder/stores/flow-store\";\nimport { LogStreamingTab } from \"../../observability/components/LogStreamingTab\";\nimport {\n useWorkflowDefinitionQuery,\n useUpdateWorkflowDefinitionMutation,\n useWorkflowDefinitionsQuery,\n} from \"../../../generated/operations\";\n\n// ============================================================================\n// Per-workflow execution settings (BOFF-7512)\n// ============================================================================\n\n/**\n * Mirrors `IWorkflowConfig` on `wspace-workflow-svc`'s\n * `IWorkflowDefinitionJson.config` (a sibling of `data`, not nested inside\n * it), plus two fields the backend type doesn't have yet: `errorWorkflowKey`\n * and `dataSaving`. Per the ticket, \"if the underlying setting doesn't exist\n * yet, add just the schema field and wire the UI\" — `config` on\n * `definitionJson` is already a free-form JSON blob, so these new keys need\n * no backend schema change to round-trip; nothing downstream reads\n * `dataSaving.saveSuccessExecutions`/`saveFailedExecutions` yet (that's\n * execution-lifecycle work tracked separately), but the value now persists.\n */\ninterface WorkflowExecutionSettings {\n timeout?: number; // seconds\n maxParallelism?: number;\n onError?: \"stop\" | \"continue\" | \"retry\";\n /** Workflow key to run when this workflow's execution fails. */\n errorWorkflowKey?: string;\n dataSaving?: {\n saveSuccessExecutions?: boolean;\n saveFailedExecutions?: boolean;\n };\n}\n\nconst DEFAULT_EXECUTION_SETTINGS: Required<\n Pick<WorkflowExecutionSettings, \"timeout\" | \"maxParallelism\" | \"onError\">\n> = {\n timeout: 300,\n maxParallelism: 5,\n onError: \"stop\",\n};\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst DEFAULT_SETTINGS = {\n general: {\n workspaceName: \"Default Workspace\",\n defaultWorkflowPrefix: \"wf\",\n autoSaveDrafts: true,\n },\n execution: {\n defaultTimeoutSeconds: 300,\n maxRetries: 3,\n retryDelaySeconds: 10,\n concurrentExecutionLimit: 5,\n },\n notifications: {\n emailOnSuccess: false,\n emailOnFailure: true,\n webhookOnSuccess: false,\n webhookOnFailure: true,\n },\n api: {\n gatewayUrl: \"/api/v1/workflows\",\n webhookUrlFormat: \"/api/v1/webhooks/workflow/{workflowKey}/trigger\",\n },\n};\n\n// ============================================================================\n// Sub-Components\n// ============================================================================\n\nfunction ReadOnlyBanner() {\n const tr = useTr();\n\n return (\n <div className=\"flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6\">\n <Icon\n icon=\"mdi:information\"\n width={18}\n className=\"text-amber-400 shrink-0\"\n />\n <p className=\"text-sm text-amber-400\">\n {tr(\n \"fluidgrids.settings.readOnlyBanner.message\",\n \"Settings are managed at workspace level. Contact your workspace administrator to change these values.\",\n )}\n </p>\n </div>\n );\n}\n\nfunction CopyButton({ value, label }: { value: string; label: string }) {\n const tr = useTr();\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n toast.success(\n `${label} ${tr(\"fluidgrids.settings.copyButton.copiedToast\", \"copied to clipboard\")}`,\n );\n } catch {\n toast.error(\n tr(\n \"fluidgrids.settings.copyButton.copyFailedToast\",\n \"Failed to copy to clipboard\",\n ),\n );\n }\n }, [value, label, tr]);\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopy}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors\"\n >\n <Icon icon=\"mdi:content-copy\" width={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {tr(\"fluidgrids.settings.copyButton.copyTooltipPrefix\", \"Copy\")}{\" \"}\n {label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nfunction SettingRow({\n label,\n description,\n children,\n}: {\n label: string;\n description?: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 py-4\">\n <div className=\"flex-1 min-w-0\">\n <Label className=\"text-sm font-medium text-text-primary\">{label}</Label>\n {description && (\n <p className=\"text-xs text-text-secondary mt-0.5\">{description}</p>\n )}\n </div>\n <div className=\"shrink-0\">{children}</div>\n </div>\n );\n}\n\n// ============================================================================\n// Tab Content Components\n// ============================================================================\n\nfunction GeneralTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.general;\n\n return (\n <div>\n <ReadOnlyBanner />\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workspaceNameLabel\",\n \"Workspace Name\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workspaceNameDescription\",\n \"The name of your workspace\",\n )}\n >\n <Input\n value={settings.workspaceName}\n readOnly\n className=\"w-[250px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workflowPrefixLabel\",\n \"Default Workflow Prefix\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workflowPrefixDescription\",\n \"Prefix used when generating new workflow keys\",\n )}\n >\n <Input\n value={settings.defaultWorkflowPrefix}\n readOnly\n className=\"w-[120px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.autoSaveDraftsLabel\",\n \"Auto-save Drafts\",\n )}\n description={tr(\n \"fluidgrids.settings.general.autoSaveDraftsDescription\",\n \"Automatically save draft workflows while editing\",\n )}\n >\n <Switch checked={settings.autoSaveDrafts} disabled />\n </SettingRow>\n </div>\n </div>\n );\n}\n\n/**\n * Editable, per-WORKFLOW execution settings (BOFF-7512) — replaces the old\n * global/read-only tab. Resolves the target workflow from (in order) an\n * explicit `workflowKey` prop, the `:id` route param, or the flow store's\n * currently-loaded workflow (set when the user arrived here from the\n * builder). When none of those resolve, falls back to the previous\n * read-only static display rather than a broken/blank editor.\n */\nfunction ExecutionTab({ workflowKey }: Readonly<{ workflowKey?: string }>) {\n const tr = useTr();\n\n const { data, loading, refetch } = useWorkflowDefinitionQuery({\n variables: { workflowKey },\n skip: !workflowKey,\n fetchPolicy: \"cache-and-network\",\n });\n const [updateWorkflowDefinition, { loading: saving }] =\n useUpdateWorkflowDefinitionMutation();\n\n // \"Error workflow\" picker — reuses the same list-workflows query the\n // history/list pages already use (`workflowDefinitions`), latest version\n // per key, excluding the workflow being edited (running itself as its own\n // error handler on every failure risks an infinite loop).\n const { data: otherWorkflowsData, loading: otherWorkflowsLoading } =\n useWorkflowDefinitionsQuery({\n variables: { input: { latestOnly: true, limit: 100 } },\n });\n const errorWorkflowOptions = (\n otherWorkflowsData?.workflowDefinitions?.items ?? []\n ).filter((w) => w.workflowKey !== workflowKey);\n\n const workflow = data?.workflowDefinition;\n const persistedConfig = useMemo(() => {\n const definitionJson = workflow?.definitionJson as\n Record<string, unknown> | undefined;\n const config = definitionJson?.config as\n WorkflowExecutionSettings | undefined;\n return config ?? {};\n }, [workflow?.definitionJson]);\n\n const [form, setForm] = useState<WorkflowExecutionSettings>(persistedConfig);\n // Re-seed the form whenever the fetched workflow (or its persisted config)\n // changes — e.g. on first load, or after switching workflows.\n useEffect(() => setForm(persistedConfig), [persistedConfig]);\n\n const handleSave = useCallback(async () => {\n if (!workflow?.id) return;\n try {\n const definitionJson = {\n ...(workflow.definitionJson as Record<string, unknown>),\n config: form,\n };\n await updateWorkflowDefinition({\n variables: { id: workflow.id, input: { definitionJson } },\n });\n toast.success(\n tr(\n \"fluidgrids.settings.execution.savedToast\",\n \"Execution settings saved\",\n ),\n );\n void refetch();\n } catch (err) {\n toast.error(\n tr(\n \"fluidgrids.settings.execution.saveFailedToast\",\n \"Failed to save settings\",\n ),\n { description: err instanceof Error ? err.message : undefined },\n );\n }\n }, [workflow, form, updateWorkflowDefinition, refetch, tr]);\n\n if (!workflowKey) {\n // No workflow context resolvable — keep the previous static display so\n // the page still renders something useful rather than an empty form.\n // NOT the workspace-level `ReadOnlyBanner` copy: this isn't a policy\n // restriction, just a missing route/store context, so it gets its own\n // message rather than implying \"contact your admin\".\n const settings = DEFAULT_SETTINGS.execution;\n return (\n <div>\n <div className=\"flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6\">\n <Icon\n icon=\"mdi:information\"\n width={18}\n className=\"text-amber-400 shrink-0\"\n />\n <p className=\"text-sm text-amber-400\">\n {tr(\n \"fluidgrids.settings.execution.noWorkflowContextBanner\",\n \"No workflow selected — open Settings from a specific workflow to edit its execution settings.\",\n )}\n </p>\n </div>\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.defaultTimeoutLabel\",\n \"Default Timeout\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.noWorkflowContextDescription\",\n \"Open this page from a specific workflow to edit its execution settings.\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n value={settings.defaultTimeoutSeconds}\n readOnly\n className=\"w-[100px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.settings.execution.defaultTimeoutUnit\",\n \"seconds\",\n )}\n </span>\n </div>\n </SettingRow>\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.defaultTimeoutLabel\",\n \"Timeout\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.defaultTimeoutDescription\",\n \"Maximum time this workflow's execution can run (in seconds)\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"number\"\n min={1}\n value={form.timeout ?? DEFAULT_EXECUTION_SETTINGS.timeout}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n timeout: Math.max(1, parseInt(e.target.value, 10) || 1),\n }))\n }\n disabled={loading}\n className=\"w-[100px] text-right\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.settings.execution.defaultTimeoutUnit\",\n \"seconds\",\n )}\n </span>\n </div>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.concurrencyLimitLabel\",\n \"Concurrency Limit\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.concurrencyLimitDescription\",\n \"Maximum number of this workflow's executions running simultaneously\",\n )}\n >\n <Input\n type=\"number\"\n min={1}\n value={\n form.maxParallelism ?? DEFAULT_EXECUTION_SETTINGS.maxParallelism\n }\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n maxParallelism: Math.max(1, parseInt(e.target.value, 10) || 1),\n }))\n }\n disabled={loading}\n className=\"w-[80px] text-right\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.onErrorLabel\",\n \"On workflow error\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.onErrorDescription\",\n \"What to do when this workflow's execution fails\",\n )}\n >\n <select\n value={form.onError ?? DEFAULT_EXECUTION_SETTINGS.onError}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n onError: e.target.value as WorkflowExecutionSettings[\"onError\"],\n }))\n }\n disabled={loading}\n className=\"w-[160px] rounded-md border border-border-secondary bg-background-secondary px-2 py-1.5 text-sm text-text-primary\"\n >\n <option value=\"stop\">\n {tr(\"fluidgrids.settings.execution.onErrorStop\", \"Stop\")}\n </option>\n <option value=\"continue\">\n {tr(\"fluidgrids.settings.execution.onErrorContinue\", \"Continue\")}\n </option>\n <option value=\"retry\">\n {tr(\"fluidgrids.settings.execution.onErrorRetry\", \"Retry\")}\n </option>\n </select>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.errorWorkflowLabel\",\n \"Error workflow\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.errorWorkflowDescription\",\n \"Workflow key to run when this workflow's execution fails (optional)\",\n )}\n >\n <Select\n value={form.errorWorkflowKey ?? \"__none__\"}\n onValueChange={(val) =>\n setForm((f) => ({\n ...f,\n errorWorkflowKey: val === \"__none__\" ? undefined : val,\n }))\n }\n disabled={loading || otherWorkflowsLoading}\n >\n <SelectTrigger className=\"w-[220px] bg-background-secondary border-border-secondary\">\n <SelectValue\n placeholder={tr(\n \"fluidgrids.settings.execution.errorWorkflowPlaceholder\",\n \"None\",\n )}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none__\">\n {tr(\"fluidgrids.settings.execution.errorWorkflowNone\", \"None\")}\n </SelectItem>\n {errorWorkflowOptions.map((w) => (\n <SelectItem key={w.workflowKey} value={w.workflowKey}>\n {w.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.saveSuccessLabel\",\n \"Save successful execution data\",\n )}\n >\n <Switch\n checked={form.dataSaving?.saveSuccessExecutions ?? true}\n onCheckedChange={(checked) =>\n setForm((f) => ({\n ...f,\n dataSaving: { ...f.dataSaving, saveSuccessExecutions: checked },\n }))\n }\n disabled={loading}\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.saveFailedLabel\",\n \"Save failed execution data\",\n )}\n >\n <Switch\n checked={form.dataSaving?.saveFailedExecutions ?? true}\n onCheckedChange={(checked) =>\n setForm((f) => ({\n ...f,\n dataSaving: { ...f.dataSaving, saveFailedExecutions: checked },\n }))\n }\n disabled={loading}\n />\n </SettingRow>\n </div>\n <div className=\"mt-4 flex justify-end\">\n <Button onClick={() => void handleSave()} disabled={loading || saving}>\n {saving\n ? tr(\"fluidgrids.settings.execution.saving\", \"Saving…\")\n : tr(\"fluidgrids.settings.execution.save\", \"Save\")}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction NotificationsTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.notifications;\n\n return (\n <div>\n <ReadOnlyBanner />\n\n {/* Email Notifications */}\n <div className=\"mb-6\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:email-outline\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.emailSectionTitle\",\n \"Email Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessDescription\",\n \"Send email when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.emailOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnFailureDescription\",\n \"Send email when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.emailOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n\n {/* Webhook Notifications */}\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:webhook\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.webhookSectionTitle\",\n \"Webhook Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessDescription\",\n \"Send webhook when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.webhookOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureDescription\",\n \"Send webhook when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.webhookOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ApiTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.api;\n\n return (\n <div>\n <div className=\"space-y-4\">\n {/* API Gateway URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon icon=\"mdi:api\" width={20} className=\"text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlTitle\",\n \"API Gateway URL\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlDescription\",\n \"Base URL for workflow API operations. Use this to trigger, list, and manage workflows programmatically.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.gatewayUrl}\n </code>\n <CopyButton\n value={settings.gatewayUrl}\n label={tr(\n \"fluidgrids.settings.api.gatewayUrlCopyLabel\",\n \"API Gateway URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Webhook URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:webhook\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlTitle\",\n \"Webhook URL Format\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionPrefix\",\n \"URL format for triggering workflows via webhook. Replace\",\n )}{\" \"}\n <code className=\"text-text-primary\">{\"{workflowKey}\"}</code>{\" \"}\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionSuffix\",\n \"with the actual workflow key.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.webhookUrlFormat}\n </code>\n <CopyButton\n value={settings.webhookUrlFormat}\n label={tr(\n \"fluidgrids.settings.api.webhookUrlCopyLabel\",\n \"Webhook URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Example cURL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:console\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.curlExampleTitle\",\n \"Example: Trigger via cURL\",\n )}\n </h3>\n </div>\n <div className=\"relative rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <pre className=\"text-xs text-text-primary overflow-x-auto whitespace-pre-wrap\">\n {`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\n -H \"Content-Type: application/json\" \\\\\n -H \"Authorization: Bearer <token>\" \\\\\n -d '{\"input\": {}}'`}\n </pre>\n <div className=\"absolute top-2 right-2\">\n <CopyButton\n value={`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\\n -H \"Content-Type: application/json\" \\\\\\n -H \"Authorization: Bearer <token>\" \\\\\\n -d '{\"input\": {}}'`}\n label={tr(\n \"fluidgrids.settings.api.curlCopyLabel\",\n \"cURL command\",\n )}\n />\n </div>\n </div>\n </CardHeader>\n </Card>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport interface SettingsPageProps {\n /**\n * Explicit workflow key to scope the Execution tab to (BOFF-7512). When\n * omitted, falls back to the `:id`/`:workflowKey` route param (for hosts\n * that mount this page under a per-workflow path), then to the workflow\n * currently loaded in the builder's flow store (for hosts that navigate\n * here from the builder without a route param). If none resolve, the\n * Execution tab falls back to its previous static display.\n */\n workflowKey?: string;\n}\n\nexport function SettingsPage({\n workflowKey: workflowKeyProp,\n}: SettingsPageProps = {}) {\n const tr = useTr();\n const navigate = useNavigate();\n const routeParams = useParams<{ id?: string; workflowKey?: string }>();\n const activeWorkflowKey = useFlowStore((s) => s.workflow.workflowKey);\n const workflowKey =\n workflowKeyProp ||\n routeParams.workflowKey ||\n routeParams.id ||\n activeWorkflowKey ||\n undefined;\n const [activeTab, setActiveTab] = useState(\"general\");\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.settings.page.title\", \"Settings\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.settings.page.subtitle\",\n \"Configure workflow execution and notification preferences\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.settings.page.backToWorkflows\", \"Back to Workflows\")}\n </Button>\n </div>\n\n {/* Tabs */}\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"w-full\">\n <TabsList className=\"bg-background-secondary border border-border-secondary mb-6\">\n <TabsTrigger value=\"general\" className=\"gap-1.5\">\n <Icon icon=\"mdi:cog\" width={16} />\n {tr(\"fluidgrids.settings.page.generalTab\", \"General\")}\n </TabsTrigger>\n <TabsTrigger value=\"execution\" className=\"gap-1.5\">\n <Icon icon=\"mdi:play-circle\" width={16} />\n {tr(\"fluidgrids.settings.page.executionTab\", \"Execution\")}\n </TabsTrigger>\n <TabsTrigger value=\"notifications\" className=\"gap-1.5\">\n <Icon icon=\"mdi:bell-outline\" width={16} />\n {tr(\"fluidgrids.settings.page.notificationsTab\", \"Notifications\")}\n </TabsTrigger>\n <TabsTrigger value=\"log-streaming\" className=\"gap-1.5\">\n <Icon icon=\"mdi:transit-connection-variant\" width={16} />\n {tr(\"fluidgrids.settings.page.logStreamingTab\", \"Log streaming\")}\n </TabsTrigger>\n <TabsTrigger value=\"api\" className=\"gap-1.5\">\n <Icon icon=\"mdi:api\" width={16} />\n {tr(\"fluidgrids.settings.page.apiTab\", \"API\")}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"general\">\n <GeneralTab />\n </TabsContent>\n <TabsContent value=\"execution\">\n <ExecutionTab workflowKey={workflowKey} />\n </TabsContent>\n <TabsContent value=\"notifications\">\n <NotificationsTab />\n </TabsContent>\n <TabsContent value=\"log-streaming\">\n <LogStreamingTab />\n </TabsContent>\n <TabsContent value=\"api\">\n <ApiTab />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/modules/settings/pages/SettingsPage.tsx"],"names":[],"mappings":"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","file":"chunk-R5ZYOIZG.js","sourcesContent":["import { useState, useCallback, useEffect, useMemo } from \"react\";\nimport { useNavigate, useParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n Input,\n Label,\n Switch,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport { useFlowStore } from \"../../../builder/stores/flow-store\";\nimport { LogStreamingTab } from \"../../observability/components/LogStreamingTab\";\nimport {\n useWorkflowDefinitionQuery,\n useUpdateWorkflowDefinitionMutation,\n useWorkflowDefinitionsQuery,\n} from \"../../../generated/operations\";\n\n// ============================================================================\n// Per-workflow execution settings (BOFF-7512)\n// ============================================================================\n\n/**\n * Mirrors `IWorkflowConfig` on `wspace-workflow-svc`'s\n * `IWorkflowDefinitionJson.config` (a sibling of `data`, not nested inside\n * it), plus two fields the backend type doesn't have yet: `errorWorkflowKey`\n * and `dataSaving`. Per the ticket, \"if the underlying setting doesn't exist\n * yet, add just the schema field and wire the UI\" — `config` on\n * `definitionJson` is already a free-form JSON blob, so these new keys need\n * no backend schema change to round-trip; nothing downstream reads\n * `dataSaving.saveSuccessExecutions`/`saveFailedExecutions` yet (that's\n * execution-lifecycle work tracked separately), but the value now persists.\n */\ninterface WorkflowExecutionSettings {\n timeout?: number; // seconds\n maxParallelism?: number;\n onError?: \"stop\" | \"continue\" | \"retry\";\n /** Workflow key to run when this workflow's execution fails. */\n errorWorkflowKey?: string;\n dataSaving?: {\n saveSuccessExecutions?: boolean;\n saveFailedExecutions?: boolean;\n };\n}\n\nconst DEFAULT_EXECUTION_SETTINGS: Required<\n Pick<WorkflowExecutionSettings, \"timeout\" | \"maxParallelism\" | \"onError\">\n> = {\n timeout: 300,\n maxParallelism: 5,\n onError: \"stop\",\n};\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst DEFAULT_SETTINGS = {\n general: {\n workspaceName: \"Default Workspace\",\n defaultWorkflowPrefix: \"wf\",\n autoSaveDrafts: true,\n },\n execution: {\n defaultTimeoutSeconds: 300,\n maxRetries: 3,\n retryDelaySeconds: 10,\n concurrentExecutionLimit: 5,\n },\n notifications: {\n emailOnSuccess: false,\n emailOnFailure: true,\n webhookOnSuccess: false,\n webhookOnFailure: true,\n },\n api: {\n gatewayUrl: \"/api/v1/workflows\",\n webhookUrlFormat: \"/api/v1/webhooks/workflow/{workflowKey}/trigger\",\n },\n};\n\n// ============================================================================\n// Sub-Components\n// ============================================================================\n\nfunction ReadOnlyBanner() {\n const tr = useTr();\n\n return (\n <div className=\"flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6\">\n <Icon\n icon=\"mdi:information\"\n width={18}\n className=\"text-amber-400 shrink-0\"\n />\n <p className=\"text-sm text-amber-400\">\n {tr(\n \"fluidgrids.settings.readOnlyBanner.message\",\n \"Settings are managed at workspace level. Contact your workspace administrator to change these values.\",\n )}\n </p>\n </div>\n );\n}\n\nfunction CopyButton({ value, label }: { value: string; label: string }) {\n const tr = useTr();\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n toast.success(\n `${label} ${tr(\"fluidgrids.settings.copyButton.copiedToast\", \"copied to clipboard\")}`,\n );\n } catch {\n toast.error(\n tr(\n \"fluidgrids.settings.copyButton.copyFailedToast\",\n \"Failed to copy to clipboard\",\n ),\n );\n }\n }, [value, label, tr]);\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopy}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors\"\n >\n <Icon icon=\"mdi:content-copy\" width={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {tr(\"fluidgrids.settings.copyButton.copyTooltipPrefix\", \"Copy\")}{\" \"}\n {label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nfunction SettingRow({\n label,\n description,\n children,\n}: {\n label: string;\n description?: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 py-4\">\n <div className=\"flex-1 min-w-0\">\n <Label className=\"text-sm font-medium text-text-primary\">{label}</Label>\n {description && (\n <p className=\"text-xs text-text-secondary mt-0.5\">{description}</p>\n )}\n </div>\n <div className=\"shrink-0\">{children}</div>\n </div>\n );\n}\n\n// ============================================================================\n// Tab Content Components\n// ============================================================================\n\nfunction GeneralTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.general;\n\n return (\n <div>\n <ReadOnlyBanner />\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workspaceNameLabel\",\n \"Workspace Name\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workspaceNameDescription\",\n \"The name of your workspace\",\n )}\n >\n <Input\n value={settings.workspaceName}\n readOnly\n className=\"w-[250px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workflowPrefixLabel\",\n \"Default Workflow Prefix\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workflowPrefixDescription\",\n \"Prefix used when generating new workflow keys\",\n )}\n >\n <Input\n value={settings.defaultWorkflowPrefix}\n readOnly\n className=\"w-[120px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.autoSaveDraftsLabel\",\n \"Auto-save Drafts\",\n )}\n description={tr(\n \"fluidgrids.settings.general.autoSaveDraftsDescription\",\n \"Automatically save draft workflows while editing\",\n )}\n >\n <Switch checked={settings.autoSaveDrafts} disabled />\n </SettingRow>\n </div>\n </div>\n );\n}\n\n/**\n * Editable, per-WORKFLOW execution settings (BOFF-7512) — replaces the old\n * global/read-only tab. Resolves the target workflow from (in order) an\n * explicit `workflowKey` prop, the `:id` route param, or the flow store's\n * currently-loaded workflow (set when the user arrived here from the\n * builder). When none of those resolve, falls back to the previous\n * read-only static display rather than a broken/blank editor.\n */\nfunction ExecutionTab({ workflowKey }: Readonly<{ workflowKey?: string }>) {\n const tr = useTr();\n\n const { data, loading, refetch } = useWorkflowDefinitionQuery({\n variables: { workflowKey },\n skip: !workflowKey,\n fetchPolicy: \"cache-and-network\",\n });\n const [updateWorkflowDefinition, { loading: saving }] =\n useUpdateWorkflowDefinitionMutation();\n\n // \"Error workflow\" picker — reuses the same list-workflows query the\n // history/list pages already use (`workflowDefinitions`), latest version\n // per key, excluding the workflow being edited (running itself as its own\n // error handler on every failure risks an infinite loop).\n const { data: otherWorkflowsData, loading: otherWorkflowsLoading } =\n useWorkflowDefinitionsQuery({\n variables: { input: { latestOnly: true, limit: 100 } },\n });\n const errorWorkflowOptions = (\n otherWorkflowsData?.workflowDefinitions?.items ?? []\n ).filter((w) => w.workflowKey !== workflowKey);\n\n const workflow = data?.workflowDefinition;\n const persistedConfig = useMemo(() => {\n const definitionJson = workflow?.definitionJson as\n Record<string, unknown> | undefined;\n const config = definitionJson?.config as\n WorkflowExecutionSettings | undefined;\n return config ?? {};\n }, [workflow?.definitionJson]);\n\n const [form, setForm] = useState<WorkflowExecutionSettings>(persistedConfig);\n // Re-seed the form whenever the fetched workflow (or its persisted config)\n // changes — e.g. on first load, or after switching workflows.\n useEffect(() => setForm(persistedConfig), [persistedConfig]);\n\n const handleSave = useCallback(async () => {\n if (!workflow?.id) return;\n try {\n const definitionJson = {\n ...(workflow.definitionJson as Record<string, unknown>),\n config: form,\n };\n await updateWorkflowDefinition({\n variables: { id: workflow.id, input: { definitionJson } },\n });\n toast.success(\n tr(\n \"fluidgrids.settings.execution.savedToast\",\n \"Execution settings saved\",\n ),\n );\n void refetch();\n } catch (err) {\n toast.error(\n tr(\n \"fluidgrids.settings.execution.saveFailedToast\",\n \"Failed to save settings\",\n ),\n { description: err instanceof Error ? err.message : undefined },\n );\n }\n }, [workflow, form, updateWorkflowDefinition, refetch, tr]);\n\n if (!workflowKey) {\n // No workflow context resolvable — keep the previous static display so\n // the page still renders something useful rather than an empty form.\n // NOT the workspace-level `ReadOnlyBanner` copy: this isn't a policy\n // restriction, just a missing route/store context, so it gets its own\n // message rather than implying \"contact your admin\".\n const settings = DEFAULT_SETTINGS.execution;\n return (\n <div>\n <div className=\"flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6\">\n <Icon\n icon=\"mdi:information\"\n width={18}\n className=\"text-amber-400 shrink-0\"\n />\n <p className=\"text-sm text-amber-400\">\n {tr(\n \"fluidgrids.settings.execution.noWorkflowContextBanner\",\n \"No workflow selected — open Settings from a specific workflow to edit its execution settings.\",\n )}\n </p>\n </div>\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.defaultTimeoutLabel\",\n \"Default Timeout\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.noWorkflowContextDescription\",\n \"Open this page from a specific workflow to edit its execution settings.\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n value={settings.defaultTimeoutSeconds}\n readOnly\n className=\"w-[100px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.settings.execution.defaultTimeoutUnit\",\n \"seconds\",\n )}\n </span>\n </div>\n </SettingRow>\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.defaultTimeoutLabel\",\n \"Timeout\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.defaultTimeoutDescription\",\n \"Maximum time this workflow's execution can run (in seconds)\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"number\"\n min={1}\n value={form.timeout ?? DEFAULT_EXECUTION_SETTINGS.timeout}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n timeout: Math.max(1, parseInt(e.target.value, 10) || 1),\n }))\n }\n disabled={loading}\n className=\"w-[100px] text-right\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.settings.execution.defaultTimeoutUnit\",\n \"seconds\",\n )}\n </span>\n </div>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.concurrencyLimitLabel\",\n \"Concurrency Limit\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.concurrencyLimitDescription\",\n \"Maximum number of this workflow's executions running simultaneously\",\n )}\n >\n <Input\n type=\"number\"\n min={1}\n value={\n form.maxParallelism ?? DEFAULT_EXECUTION_SETTINGS.maxParallelism\n }\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n maxParallelism: Math.max(1, parseInt(e.target.value, 10) || 1),\n }))\n }\n disabled={loading}\n className=\"w-[80px] text-right\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.onErrorLabel\",\n \"On workflow error\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.onErrorDescription\",\n \"What to do when this workflow's execution fails\",\n )}\n >\n <select\n value={form.onError ?? DEFAULT_EXECUTION_SETTINGS.onError}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n onError: e.target.value as WorkflowExecutionSettings[\"onError\"],\n }))\n }\n disabled={loading}\n className=\"w-[160px] rounded-md border border-border-secondary bg-background-secondary px-2 py-1.5 text-sm text-text-primary\"\n >\n <option value=\"stop\">\n {tr(\"fluidgrids.settings.execution.onErrorStop\", \"Stop\")}\n </option>\n <option value=\"continue\">\n {tr(\"fluidgrids.settings.execution.onErrorContinue\", \"Continue\")}\n </option>\n <option value=\"retry\">\n {tr(\"fluidgrids.settings.execution.onErrorRetry\", \"Retry\")}\n </option>\n </select>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.errorWorkflowLabel\",\n \"Error workflow\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.errorWorkflowDescription\",\n \"Workflow key to run when this workflow's execution fails (optional)\",\n )}\n >\n <Select\n value={form.errorWorkflowKey ?? \"__none__\"}\n onValueChange={(val) =>\n setForm((f) => ({\n ...f,\n errorWorkflowKey: val === \"__none__\" ? undefined : val,\n }))\n }\n disabled={loading || otherWorkflowsLoading}\n >\n <SelectTrigger className=\"w-[220px] bg-background-secondary border-border-secondary\">\n <SelectValue\n placeholder={tr(\n \"fluidgrids.settings.execution.errorWorkflowPlaceholder\",\n \"None\",\n )}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none__\">\n {tr(\"fluidgrids.settings.execution.errorWorkflowNone\", \"None\")}\n </SelectItem>\n {errorWorkflowOptions.map((w) => (\n <SelectItem key={w.workflowKey} value={w.workflowKey}>\n {w.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.saveSuccessLabel\",\n \"Save successful execution data\",\n )}\n >\n <Switch\n checked={form.dataSaving?.saveSuccessExecutions ?? true}\n onCheckedChange={(checked) =>\n setForm((f) => ({\n ...f,\n dataSaving: { ...f.dataSaving, saveSuccessExecutions: checked },\n }))\n }\n disabled={loading}\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.saveFailedLabel\",\n \"Save failed execution data\",\n )}\n >\n <Switch\n checked={form.dataSaving?.saveFailedExecutions ?? true}\n onCheckedChange={(checked) =>\n setForm((f) => ({\n ...f,\n dataSaving: { ...f.dataSaving, saveFailedExecutions: checked },\n }))\n }\n disabled={loading}\n />\n </SettingRow>\n </div>\n <div className=\"mt-4 flex justify-end\">\n <Button onClick={() => void handleSave()} disabled={loading || saving}>\n {saving\n ? tr(\"fluidgrids.settings.execution.saving\", \"Saving…\")\n : tr(\"fluidgrids.settings.execution.save\", \"Save\")}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction NotificationsTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.notifications;\n\n return (\n <div>\n <ReadOnlyBanner />\n\n {/* Email Notifications */}\n <div className=\"mb-6\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:email-outline\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.emailSectionTitle\",\n \"Email Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessDescription\",\n \"Send email when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.emailOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnFailureDescription\",\n \"Send email when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.emailOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n\n {/* Webhook Notifications */}\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:webhook\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.webhookSectionTitle\",\n \"Webhook Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessDescription\",\n \"Send webhook when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.webhookOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureDescription\",\n \"Send webhook when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.webhookOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ApiTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.api;\n\n return (\n <div>\n <div className=\"space-y-4\">\n {/* API Gateway URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon icon=\"mdi:api\" width={20} className=\"text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlTitle\",\n \"API Gateway URL\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlDescription\",\n \"Base URL for workflow API operations. Use this to trigger, list, and manage workflows programmatically.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.gatewayUrl}\n </code>\n <CopyButton\n value={settings.gatewayUrl}\n label={tr(\n \"fluidgrids.settings.api.gatewayUrlCopyLabel\",\n \"API Gateway URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Webhook URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:webhook\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlTitle\",\n \"Webhook URL Format\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionPrefix\",\n \"URL format for triggering workflows via webhook. Replace\",\n )}{\" \"}\n <code className=\"text-text-primary\">{\"{workflowKey}\"}</code>{\" \"}\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionSuffix\",\n \"with the actual workflow key.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.webhookUrlFormat}\n </code>\n <CopyButton\n value={settings.webhookUrlFormat}\n label={tr(\n \"fluidgrids.settings.api.webhookUrlCopyLabel\",\n \"Webhook URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Example cURL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:console\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.curlExampleTitle\",\n \"Example: Trigger via cURL\",\n )}\n </h3>\n </div>\n <div className=\"relative rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <pre className=\"text-xs text-text-primary overflow-x-auto whitespace-pre-wrap\">\n {`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\n -H \"Content-Type: application/json\" \\\\\n -H \"Authorization: Bearer <token>\" \\\\\n -d '{\"input\": {}}'`}\n </pre>\n <div className=\"absolute top-2 right-2\">\n <CopyButton\n value={`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\\n -H \"Content-Type: application/json\" \\\\\\n -H \"Authorization: Bearer <token>\" \\\\\\n -d '{\"input\": {}}'`}\n label={tr(\n \"fluidgrids.settings.api.curlCopyLabel\",\n \"cURL command\",\n )}\n />\n </div>\n </div>\n </CardHeader>\n </Card>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport interface SettingsPageProps {\n /**\n * Explicit workflow key to scope the Execution tab to (BOFF-7512). When\n * omitted, falls back to the `:id`/`:workflowKey` route param (for hosts\n * that mount this page under a per-workflow path), then to the workflow\n * currently loaded in the builder's flow store (for hosts that navigate\n * here from the builder without a route param). If none resolve, the\n * Execution tab falls back to its previous static display.\n */\n workflowKey?: string;\n}\n\nexport function SettingsPage({\n workflowKey: workflowKeyProp,\n}: SettingsPageProps = {}) {\n const tr = useTr();\n const navigate = useNavigate();\n const routeParams = useParams<{ id?: string; workflowKey?: string }>();\n const activeWorkflowKey = useFlowStore((s) => s.workflow.workflowKey);\n const workflowKey =\n workflowKeyProp ||\n routeParams.workflowKey ||\n routeParams.id ||\n activeWorkflowKey ||\n undefined;\n const [activeTab, setActiveTab] = useState(\"general\");\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.settings.page.title\", \"Settings\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.settings.page.subtitle\",\n \"Configure workflow execution and notification preferences\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.settings.page.backToWorkflows\", \"Back to Workflows\")}\n </Button>\n </div>\n\n {/* Tabs */}\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"w-full\">\n <TabsList className=\"bg-background-secondary border border-border-secondary mb-6\">\n <TabsTrigger value=\"general\" className=\"gap-1.5\">\n <Icon icon=\"mdi:cog\" width={16} />\n {tr(\"fluidgrids.settings.page.generalTab\", \"General\")}\n </TabsTrigger>\n <TabsTrigger value=\"execution\" className=\"gap-1.5\">\n <Icon icon=\"mdi:play-circle\" width={16} />\n {tr(\"fluidgrids.settings.page.executionTab\", \"Execution\")}\n </TabsTrigger>\n <TabsTrigger value=\"notifications\" className=\"gap-1.5\">\n <Icon icon=\"mdi:bell-outline\" width={16} />\n {tr(\"fluidgrids.settings.page.notificationsTab\", \"Notifications\")}\n </TabsTrigger>\n <TabsTrigger value=\"log-streaming\" className=\"gap-1.5\">\n <Icon icon=\"mdi:transit-connection-variant\" width={16} />\n {tr(\"fluidgrids.settings.page.logStreamingTab\", \"Log streaming\")}\n </TabsTrigger>\n <TabsTrigger value=\"api\" className=\"gap-1.5\">\n <Icon icon=\"mdi:api\" width={16} />\n {tr(\"fluidgrids.settings.page.apiTab\", \"API\")}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"general\">\n <GeneralTab />\n </TabsContent>\n <TabsContent value=\"execution\">\n <ExecutionTab workflowKey={workflowKey} />\n </TabsContent>\n <TabsContent value=\"notifications\">\n <NotificationsTab />\n </TabsContent>\n <TabsContent value=\"log-streaming\">\n <LogStreamingTab />\n </TabsContent>\n <TabsContent value=\"api\">\n <ApiTab />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { FluidGridsProvider, Card, FluidGridsMark } from './chunk-
|
|
1
|
+
import { FluidGridsProvider, Card, FluidGridsMark } from './chunk-VG2BTLUN.js';
|
|
2
2
|
import { Input } from './chunk-P5PKRQAO.js';
|
|
3
3
|
import { Button } from './chunk-DBOMRIP5.js';
|
|
4
4
|
import { cn } from './chunk-3ZYUGTIT.js';
|
|
5
|
-
import { useWorkflowDefinition } from './chunk-
|
|
6
|
-
import { useFlowStore } from './chunk-
|
|
5
|
+
import { useWorkflowDefinition } from './chunk-GKSXZFDY.js';
|
|
6
|
+
import { useFlowStore } from './chunk-NTJTPYCD.js';
|
|
7
7
|
import { useTr } from './chunk-7YWBH2A5.js';
|
|
8
8
|
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
9
9
|
import { MarkerType, ReactFlowProvider, useReactFlow, ReactFlow, Background, Controls, MiniMap, Handle, Position } from '@xyflow/react';
|
|
@@ -540,5 +540,5 @@ function WorkflowSearchRedirect() {
|
|
|
540
540
|
}
|
|
541
541
|
|
|
542
542
|
export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect };
|
|
543
|
-
//# sourceMappingURL=chunk-
|
|
544
|
-
//# sourceMappingURL=chunk-
|
|
543
|
+
//# sourceMappingURL=chunk-T4BFEI3I.js.map
|
|
544
|
+
//# sourceMappingURL=chunk-T4BFEI3I.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/builder/components/ui/sonner.tsx","../src/components/WorkflowBuilderCore.tsx","../src/components/WorkflowBuilder.tsx","../src/pages/WorkflowSearchRedirect.tsx"],"names":["Sonner","jsx","jsxs"],"mappings":"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","file":"chunk-CGQG3QUR.js","sourcesContent":["import { useTheme } from \"@burdenoff/fe-libs/shared/hooks/shell\";\nimport { Toaster as Sonner } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { resolvedTheme = \"light\" } = useTheme();\n\n return (\n <Sonner\n theme={resolvedTheme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import { useCallback, useEffect, useState, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n MiniMap,\n Handle,\n Position,\n type NodeTypes,\n MarkerType,\n type NodeProps,\n useReactFlow,\n ReactFlowProvider,\n} from \"@xyflow/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport \"@xyflow/react/dist/style.css\";\n\nimport { useFlowStore } from \"../builder/stores/flow-store\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { Card } from \"../ui/card\";\nimport { cn } from \"../utils/cn\";\nimport type { WorkflowData, FlowNode } from \"../types\";\nimport { ArrowLeft, Play, Save, Trash2 } from \"lucide-react\";\nimport { Toaster } from \"../builder/components/ui/sonner\";\nimport { useTr } from \"../hooks/useTr\";\nimport { FluidGridsMark } from \"./shared/FluidGridsMark\";\n\nexport interface WorkflowBuilderCoreProps {\n /** Initial workflow data to render */\n workflow?: WorkflowData;\n /** Readonly mode - disables editing */\n readonly?: boolean;\n /** Hide the header toolbar */\n hideHeader?: boolean;\n /** Hide the sidebar */\n hideSidebar?: boolean;\n /** Hide the logs panel */\n hideLogsPanel?: boolean;\n /** Callback when workflow is saved */\n onSave?: (workflow: WorkflowData) => void;\n /** Callback when workflow execution starts */\n onExecute?: (runId: string) => void;\n /** Callback when a node is clicked */\n onNodeClick?: (node: FlowNode) => void;\n /** Callback when back button is clicked */\n onBack?: () => void;\n /** Custom className */\n className?: string;\n}\n\n// Default edge options\nconst defaultEdgeOptions = {\n type: \"smoothstep\",\n markerEnd: {\n type: MarkerType.ArrowClosed,\n width: 21,\n height: 21,\n },\n style: {\n stroke: \"#888\",\n },\n};\n\n// Handle styles\nconst handleStyle: React.CSSProperties = {\n width: 10,\n height: 10,\n background: \"#3b82f6\", // blue-500\n border: \"2px solid white\",\n};\n\n// Base node styles\nconst baseNodeStyle: React.CSSProperties = {\n padding: \"8px 16px\",\n borderRadius: \"8px\",\n fontWeight: 500,\n boxShadow:\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n position: \"relative\",\n color: \"white\",\n};\n\n// Node type → colour mapping\nconst NODE_COLORS: Record<string, string> = {\n \"trigger:api\": \"#22c55e\",\n end: \"#ef4444\",\n \"internal:if\": \"#8b5cf6\",\n \"internal:switch\": \"#8b5cf6\",\n \"internal:loop\": \"#f59e0b\",\n \"internal:merge\": \"#6366f1\",\n \"internal:set\": \"#3b82f6\",\n \"internal:filter\": \"#06b6d4\",\n \"internal:aggregate\": \"#0891b2\",\n \"internal:wait\": \"#64748b\",\n \"internal:noop\": \"#94a3b8\",\n \"internal:http\": \"#f97316\",\n default: \"#3b82f6\",\n};\n\nfunction getNodeColor(type: string): string {\n return NODE_COLORS[type] ?? NODE_COLORS.default;\n}\n\n// Trigger Node component - has only source handle (bottom)\nfunction TriggerNode({ data }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n return (\n <div style={{ ...baseNodeStyle, background: getNodeColor(\"trigger:api\") }}>\n {label ||\n tr(\n \"fluidgrids.components.workflowBuilderCore.triggerNodeLabel\",\n \"API Trigger\",\n )}\n <Handle type=\"source\" position={Position.Bottom} style={handleStyle} />\n </div>\n );\n}\n\n// End Node component - has only target handle (top)\nfunction EndNode({ data }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n return (\n <div style={{ ...baseNodeStyle, background: getNodeColor(\"end\") }}>\n <Handle type=\"target\" position={Position.Top} style={handleStyle} />\n {label ||\n tr(\"fluidgrids.components.workflowBuilderCore.endNodeLabel\", \"End\")}\n </div>\n );\n}\n\n// Action Node component - has both source (bottom) and target (top) handles\nfunction ActionNode({ data, type }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n const color = getNodeColor(type || \"default\");\n return (\n <div\n style={{\n ...baseNodeStyle,\n background: color,\n minWidth: 120,\n textAlign: \"center\",\n }}\n >\n <Handle type=\"target\" position={Position.Top} style={handleStyle} />\n {label ||\n tr(\n \"fluidgrids.components.workflowBuilderCore.actionNodeLabel\",\n \"Action\",\n )}\n <Handle type=\"source\" position={Position.Bottom} style={handleStyle} />\n </div>\n );\n}\n\n// Define node types\nconst NODE_TYPES: NodeTypes = {\n \"trigger:api\": TriggerNode,\n end: EndNode,\n \"internal:if\": ActionNode,\n \"internal:switch\": ActionNode,\n \"internal:loop\": ActionNode,\n \"internal:merge\": ActionNode,\n \"internal:set\": ActionNode,\n \"internal:filter\": ActionNode,\n \"internal:aggregate\": ActionNode,\n \"internal:wait\": ActionNode,\n \"internal:noop\": ActionNode,\n \"internal:http\": ActionNode,\n \"internal:subworkflow\": ActionNode,\n default: ActionNode,\n};\n\n// Counter for unique node ids\nlet nodeIdCounter = 0;\n\nfunction FlowBuilderInner({\n workflow,\n readonly = false,\n hideHeader = false,\n hideSidebar = false,\n hideLogsPanel = false,\n onSave,\n onExecute,\n onNodeClick,\n onBack,\n className,\n}: WorkflowBuilderCoreProps) {\n const reactFlowInstance = useReactFlow();\n const tr = useTr();\n\n const setWorkflow = useFlowStore((s) => s.actions.setWorkflow);\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const deleteNode = useFlowStore((s) => s.actions.nodes.deleteNode);\n const setNodes = useFlowStore((s) => s.actions.nodes.setNodes);\n\n const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(\n useShallow((s) => [\n s.workflow.nodes,\n s.workflow.edges,\n s.actions.nodes.onNodesChange,\n s.actions.edges.onEdgesChange,\n s.actions.edges.onConnect,\n ]),\n );\n\n const [workflowName, setWorkflowName] = useState(\n workflow?.name || \"Untitled Workflow\",\n );\n\n // Selected node for properties panel\n const [selectedNodeId, setSelectedNodeId] = useState<string | null>(null);\n\n // Ref for the ReactFlow wrapper (needed for drop position calculation)\n const reactFlowWrapper = useRef<HTMLDivElement>(null);\n\n // Initialize workflow on mount\n useEffect(() => {\n resetWorkflow();\n if (workflow) {\n setWorkflow(workflow);\n setWorkflowName(workflow.name || \"Untitled Workflow\");\n }\n }, [workflow, resetWorkflow, setWorkflow]);\n\n const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setWorkflowName(e.target.value);\n setWorkflow({ name: e.target.value });\n };\n\n const handleSave = () => {\n const savedWorkflow: WorkflowData = {\n id: workflow?.id || \"\",\n workflowKey: workflow?.workflowKey || \"\",\n name: workflowName,\n version: workflow?.version || \"1\",\n alias: workflow?.alias,\n nodes: nodes as FlowNode[],\n edges,\n sidebar: {\n active: \"none\",\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n };\n onSave?.(savedWorkflow);\n };\n\n const handleExecute = () => {\n // Generate a run ID and trigger execution\n const runId = `run-${Date.now()}`;\n onExecute?.(runId);\n };\n\n // ---- Node click → select in sidebar ----\n const handleNodeClick = useCallback(\n (\n _event: React.MouseEvent,\n node: { id: string; [key: string]: unknown },\n ) => {\n setSelectedNodeId(node.id);\n onNodeClick?.(node as unknown as FlowNode);\n },\n [onNodeClick],\n );\n\n // Deselect when clicking the pane\n const handlePaneClick = useCallback(() => {\n setSelectedNodeId(null);\n }, []);\n\n // ---- Drag-and-drop from external palette ----\n const handleDragOver = useCallback((event: React.DragEvent) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"copy\";\n }, []);\n\n const handleDrop = useCallback(\n (event: React.DragEvent) => {\n event.preventDefault();\n\n const raw = event.dataTransfer.getData(\"application/json\");\n if (!raw) return;\n\n let payload: { id?: string; type?: string; label?: string };\n try {\n payload = JSON.parse(raw);\n } catch {\n return;\n }\n\n const nodeType = payload.type || payload.id || \"default\";\n const label = payload.label || nodeType;\n\n // Calculate drop position in flow coordinates\n const bounds = reactFlowWrapper.current?.getBoundingClientRect();\n if (!bounds) return;\n\n const position = reactFlowInstance.screenToFlowPosition({\n x: event.clientX - bounds.left,\n y: event.clientY - bounds.top,\n });\n\n nodeIdCounter += 1;\n const newNodeId = `${nodeType}-${Date.now()}-${nodeIdCounter}`;\n const newNode: FlowNode = {\n id: newNodeId,\n type: nodeType,\n position,\n data: { label },\n };\n\n // Append to the existing nodes via the store\n const currentNodes = useFlowStore.getState().workflow.nodes;\n setNodes([...currentNodes, newNode]);\n },\n [reactFlowInstance, setNodes],\n );\n\n // ---- Selected node helpers ----\n const selectedNode = selectedNodeId\n ? (nodes.find((n) => n.id === selectedNodeId) as FlowNode | undefined)\n : null;\n\n const handleSelectedNodeLabelChange = useCallback(\n (newLabel: string) => {\n if (!selectedNodeId) return;\n const currentNodes = useFlowStore.getState().workflow.nodes;\n const updated = currentNodes.map((n) =>\n n.id === selectedNodeId\n ? { ...n, data: { ...n.data, label: newLabel } }\n : n,\n );\n setNodes(updated);\n },\n [selectedNodeId, setNodes],\n );\n\n const handleDeleteSelectedNode = useCallback(() => {\n if (!selectedNode) return;\n if (selectedNode.deletable === false) return; // can't delete trigger/end\n deleteNode(selectedNode);\n setSelectedNodeId(null);\n }, [selectedNode, deleteNode]);\n\n return (\n <div\n className={cn(\"flex flex-col flex-1 h-full w-full min-h-0\", className)}\n >\n {/* Header */}\n {!hideHeader && (\n <Card className=\"h-14 shrink-0 border-0 rounded-none bg-gradient-to-r from-primary/20 to-transparent p-2 flex items-center justify-between border-b\">\n <div className=\"flex items-center gap-2\">\n {onBack && (\n <Button variant=\"ghost\" size=\"icon\" onClick={onBack}>\n <ArrowLeft className=\"size-5\" />\n </Button>\n )}\n <Input\n className=\"font-semibold max-w-[300px]\"\n value={workflowName}\n onChange={handleNameChange}\n placeholder={tr(\n \"fluidgrids.components.workflowBuilderCore.workflowNamePlaceholder\",\n \"Workflow Name\",\n )}\n disabled={readonly}\n />\n </div>\n\n {!readonly && (\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleSave}>\n <Save className=\"size-4 mr-1\" />\n {tr(\"fluidgrids.components.workflowBuilderCore.save\", \"Save\")}\n </Button>\n <Button size=\"sm\" onClick={handleExecute}>\n <Play className=\"size-4 mr-1\" />\n {tr(\"fluidgrids.components.workflowBuilderCore.run\", \"Run\")}\n </Button>\n </div>\n )}\n </Card>\n )}\n\n {/* Main content */}\n <div className=\"flex flex-1 min-h-0 overflow-hidden\">\n {/* Canvas */}\n <div className=\"flex-1 h-full relative\" ref={reactFlowWrapper}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={readonly ? undefined : onNodesChange}\n onEdgesChange={readonly ? undefined : onEdgesChange}\n onConnect={readonly ? undefined : onConnect}\n onNodeClick={readonly ? undefined : handleNodeClick}\n onPaneClick={handlePaneClick}\n onDragOver={readonly ? undefined : handleDragOver}\n onDrop={readonly ? undefined : handleDrop}\n nodeTypes={NODE_TYPES}\n defaultEdgeOptions={defaultEdgeOptions}\n fitView\n snapToGrid\n snapGrid={[16, 16]}\n proOptions={{ hideAttribution: true }}\n deleteKeyCode={readonly ? null : \"Backspace\"}\n >\n <Background gap={24} />\n <Controls />\n <MiniMap />\n </ReactFlow>\n {/* Always shown, whatever readonly/hideHeader/hideSidebar say — no\n white-labelling. */}\n <FluidGridsMark />\n </div>\n\n {/* Sidebar — Node Properties */}\n {!hideSidebar && !readonly && (\n <div className=\"w-60 shrink-0 border-l bg-card overflow-y-auto\">\n <div className=\"p-4 border-b\">\n <div className=\"text-sm font-semibold\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodePropertiesHeading\",\n \"Node Properties\",\n )}\n </div>\n </div>\n\n {selectedNode ? (\n <div className=\"p-4 space-y-4\">\n {/* Node ID */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeIdLabel\",\n \"Node ID\",\n )}\n </label>\n <code className=\"block text-xs bg-muted px-2 py-1 rounded font-mono break-all\">\n {selectedNode.id}\n </code>\n </div>\n\n {/* Node Type */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeTypeLabel\",\n \"Type\",\n )}\n </label>\n <div className=\"flex items-center gap-2\">\n <span\n className=\"inline-block w-3 h-3 rounded-full shrink-0\"\n style={{\n background: getNodeColor(\n selectedNode.type || \"default\",\n ),\n }}\n />\n <code className=\"text-xs font-mono\">\n {selectedNode.type}\n </code>\n </div>\n </div>\n\n {/* Label */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeLabelLabel\",\n \"Label\",\n )}\n </label>\n <Input\n value={\n (selectedNode.data as { label?: string })?.label ?? \"\"\n }\n onChange={(e) =>\n handleSelectedNodeLabelChange(e.target.value)\n }\n className=\"text-sm\"\n placeholder={tr(\n \"fluidgrids.components.workflowBuilderCore.nodeLabelPlaceholder\",\n \"Node label\",\n )}\n />\n </div>\n\n {/* Position */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.positionLabel\",\n \"Position\",\n )}\n </label>\n <div className=\"grid grid-cols-2 gap-2 text-xs text-muted-foreground\">\n <div>\n X:{\" \"}\n <span className=\"font-mono\">\n {Math.round(selectedNode.position.x)}\n </span>\n </div>\n <div>\n Y:{\" \"}\n <span className=\"font-mono\">\n {Math.round(selectedNode.position.y)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Connected edges */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.connectionsLabel\",\n \"Connections\",\n )}\n </label>\n <div className=\"text-xs text-muted-foreground\">\n {(() => {\n const inbound = edges.filter(\n (e) => e.target === selectedNode.id,\n );\n const outbound = edges.filter(\n (e) => e.source === selectedNode.id,\n );\n return (\n <>\n <div>\n {inbound.length} inbound, {outbound.length} outbound\n </div>\n </>\n );\n })()}\n </div>\n </div>\n\n {/* Delete */}\n {selectedNode.deletable !== false && (\n <div className=\"pt-2 border-t\">\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"w-full\"\n onClick={handleDeleteSelectedNode}\n >\n <Trash2 className=\"size-4 mr-1\" />\n {tr(\n \"fluidgrids.components.workflowBuilderCore.deleteNode\",\n \"Delete Node\",\n )}\n </Button>\n </div>\n )}\n </div>\n ) : (\n <div className=\"p-4\">\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.noSelectionHint\",\n \"Click a node on the canvas to view and edit its properties.\",\n )}\n </p>\n <p className=\"text-xs text-muted-foreground mt-2\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.dragPaletteHint\",\n \"Drag nodes from the palette on the left to add them to the workflow.\",\n )}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Logs panel placeholder */}\n {!hideLogsPanel && (\n <div className=\"h-32 border-t bg-card p-2\">\n <div className=\"text-sm font-medium mb-2\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.executionLogsHeading\",\n \"Execution Logs\",\n )}\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.executionLogsEmpty\",\n \"Execution logs will appear here when you run the workflow\",\n )}\n </p>\n </div>\n )}\n </div>\n );\n}\n\nexport function WorkflowBuilderCore(props: WorkflowBuilderCoreProps) {\n return (\n <ReactFlowProvider>\n <FlowBuilderInner {...props} />\n <Toaster richColors position=\"bottom-center\" duration={2000} />\n </ReactFlowProvider>\n );\n}\n","import { type ApolloClient } from \"@apollo/client/core\";\nimport { FluidGridsProvider } from \"./FluidGridsProvider\";\nimport {\n WorkflowBuilderCore,\n type WorkflowBuilderCoreProps,\n} from \"./WorkflowBuilderCore\";\nimport type { WorkflowData } from \"../types\";\n\nexport interface WorkflowBuilderProps extends Omit<\n WorkflowBuilderCoreProps,\n \"workflow\"\n> {\n /** Workflow ID to load */\n workflowId?: string;\n /** Workflow version to load */\n workflowVersion?: string;\n /** Initial workflow data (bypasses API fetch) */\n initialWorkflow?: WorkflowData;\n /** Workspace API Gateway URL */\n apiGatewayUrl?: string;\n /** Global API Gateway URL (for store operations) */\n globalApiUrl?: string;\n /** Authentication token */\n authToken?: string;\n /** Current workspace ID */\n workspaceId: string;\n /** Current 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}\n\n/**\n * WorkflowBuilder - Standalone workflow builder component with Apollo client support\n *\n * Use this component when you want to embed the workflow builder in any React app.\n * You can either:\n * 1. Provide pre-configured Apollo clients (workspaceClient + globalClient) - Recommended\n * 2. Provide URLs and let the component create clients internally\n *\n * @example Dual Client Injection (Recommended)\n * ```tsx\n * import { createFluidGridsClients } from '@fluidgrids/fe-sdk';\n *\n * const { workspaceClient, globalClient } = createFluidGridsClients({\n * workspaceApiUrl: 'http://localhost:4000/workspaces/graphql',\n * globalApiUrl: 'http://localhost:4000/global/graphql',\n * authToken: token,\n * workspaceId: 'ws-123',\n * });\n *\n * <WorkflowBuilder\n * workspaceClient={workspaceClient}\n * globalClient={globalClient}\n * workspaceId=\"ws-123\"\n * onSave={(workflow) => console.log(workflow)}\n * />\n * ```\n *\n * @example URL-based (Simpler, less flexible)\n * ```tsx\n * <WorkflowBuilder\n * apiGatewayUrl=\"http://localhost:4000/workspaces/graphql\"\n * globalApiUrl=\"http://localhost:4000/global/graphql\"\n * authToken={token}\n * workspaceId=\"ws-123\"\n * onSave={(workflow) => console.log(workflow)}\n * />\n * ```\n */\nexport function WorkflowBuilder({\n workflowId,\n workflowVersion,\n initialWorkflow,\n apiGatewayUrl,\n globalApiUrl,\n authToken,\n workspaceId,\n tenantId,\n organizationId,\n workspaceClient,\n globalClient,\n ...coreProps\n}: WorkflowBuilderProps) {\n // If initialWorkflow is provided, use it directly\n // Otherwise, the workflow will need to be loaded from the API\n const workflow =\n initialWorkflow || createDefaultWorkflow(workflowId, workflowVersion);\n\n return (\n <FluidGridsProvider\n apiGatewayUrl={apiGatewayUrl}\n globalApiUrl={globalApiUrl}\n authToken={authToken}\n workspaceId={workspaceId}\n tenantId={tenantId}\n organizationId={organizationId}\n workspaceClient={workspaceClient}\n globalClient={globalClient}\n >\n <WorkflowBuilderCore workflow={workflow} {...coreProps} />\n </FluidGridsProvider>\n );\n}\n\nfunction createDefaultWorkflow(id?: string, version?: string): WorkflowData {\n return {\n id: id || `workflow-${Date.now()}`,\n workflowKey: id || `workflow-${Date.now()}`,\n name: \"Untitled Workflow\",\n version: version || \"1\",\n nodes: [],\n edges: [],\n sidebar: {\n active: \"store-browse\",\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n };\n}\n","import { Navigate, useParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { useWorkflowDefinition } from \"../hooks/useWorkflows\";\n\n/**\n * Global search indexes WorkflowDefinition by its database id, but the\n * builder route (`workflow/:workflowKey/:version`) is keyed by workflowKey +\n * version. This page bridges the two: it resolves the id to its current\n * workflowKey/version and redirects there.\n */\nexport function WorkflowSearchRedirect() {\n const { id } = useParams<{ id: string }>();\n const { workflow, loading, error } = useWorkflowDefinition(undefined, id);\n\n if (loading) {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center gap-2 text-sm text-muted-foreground\">\n <Icon icon=\"svg-spinners:ring-resize\" className=\"size-4\" />\n Opening workflow…\n </div>\n );\n }\n\n if (error || !workflow) {\n return <Navigate to=\"../list\" replace />;\n }\n\n return (\n <Navigate\n to={`../workflow/${workflow.workflowKey}/${workflow.version}`}\n replace\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/builder/components/ui/sonner.tsx","../src/components/WorkflowBuilderCore.tsx","../src/components/WorkflowBuilder.tsx","../src/pages/WorkflowSearchRedirect.tsx"],"names":["Sonner","jsx","jsxs"],"mappings":"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","file":"chunk-T4BFEI3I.js","sourcesContent":["import { useTheme } from \"@burdenoff/fe-libs/shared/hooks/shell\";\nimport { Toaster as Sonner } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { resolvedTheme = \"light\" } = useTheme();\n\n return (\n <Sonner\n theme={resolvedTheme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import { useCallback, useEffect, useState, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n MiniMap,\n Handle,\n Position,\n type NodeTypes,\n MarkerType,\n type NodeProps,\n useReactFlow,\n ReactFlowProvider,\n} from \"@xyflow/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport \"@xyflow/react/dist/style.css\";\n\nimport { useFlowStore } from \"../builder/stores/flow-store\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { Card } from \"../ui/card\";\nimport { cn } from \"../utils/cn\";\nimport type { WorkflowData, FlowNode } from \"../types\";\nimport { ArrowLeft, Play, Save, Trash2 } from \"lucide-react\";\nimport { Toaster } from \"../builder/components/ui/sonner\";\nimport { useTr } from \"../hooks/useTr\";\nimport { FluidGridsMark } from \"./shared/FluidGridsMark\";\n\nexport interface WorkflowBuilderCoreProps {\n /** Initial workflow data to render */\n workflow?: WorkflowData;\n /** Readonly mode - disables editing */\n readonly?: boolean;\n /** Hide the header toolbar */\n hideHeader?: boolean;\n /** Hide the sidebar */\n hideSidebar?: boolean;\n /** Hide the logs panel */\n hideLogsPanel?: boolean;\n /** Callback when workflow is saved */\n onSave?: (workflow: WorkflowData) => void;\n /** Callback when workflow execution starts */\n onExecute?: (runId: string) => void;\n /** Callback when a node is clicked */\n onNodeClick?: (node: FlowNode) => void;\n /** Callback when back button is clicked */\n onBack?: () => void;\n /** Custom className */\n className?: string;\n}\n\n// Default edge options\nconst defaultEdgeOptions = {\n type: \"smoothstep\",\n markerEnd: {\n type: MarkerType.ArrowClosed,\n width: 21,\n height: 21,\n },\n style: {\n stroke: \"#888\",\n },\n};\n\n// Handle styles\nconst handleStyle: React.CSSProperties = {\n width: 10,\n height: 10,\n background: \"#3b82f6\", // blue-500\n border: \"2px solid white\",\n};\n\n// Base node styles\nconst baseNodeStyle: React.CSSProperties = {\n padding: \"8px 16px\",\n borderRadius: \"8px\",\n fontWeight: 500,\n boxShadow:\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n position: \"relative\",\n color: \"white\",\n};\n\n// Node type → colour mapping\nconst NODE_COLORS: Record<string, string> = {\n \"trigger:api\": \"#22c55e\",\n end: \"#ef4444\",\n \"internal:if\": \"#8b5cf6\",\n \"internal:switch\": \"#8b5cf6\",\n \"internal:loop\": \"#f59e0b\",\n \"internal:merge\": \"#6366f1\",\n \"internal:set\": \"#3b82f6\",\n \"internal:filter\": \"#06b6d4\",\n \"internal:aggregate\": \"#0891b2\",\n \"internal:wait\": \"#64748b\",\n \"internal:noop\": \"#94a3b8\",\n \"internal:http\": \"#f97316\",\n default: \"#3b82f6\",\n};\n\nfunction getNodeColor(type: string): string {\n return NODE_COLORS[type] ?? NODE_COLORS.default;\n}\n\n// Trigger Node component - has only source handle (bottom)\nfunction TriggerNode({ data }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n return (\n <div style={{ ...baseNodeStyle, background: getNodeColor(\"trigger:api\") }}>\n {label ||\n tr(\n \"fluidgrids.components.workflowBuilderCore.triggerNodeLabel\",\n \"API Trigger\",\n )}\n <Handle type=\"source\" position={Position.Bottom} style={handleStyle} />\n </div>\n );\n}\n\n// End Node component - has only target handle (top)\nfunction EndNode({ data }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n return (\n <div style={{ ...baseNodeStyle, background: getNodeColor(\"end\") }}>\n <Handle type=\"target\" position={Position.Top} style={handleStyle} />\n {label ||\n tr(\"fluidgrids.components.workflowBuilderCore.endNodeLabel\", \"End\")}\n </div>\n );\n}\n\n// Action Node component - has both source (bottom) and target (top) handles\nfunction ActionNode({ data, type }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n const color = getNodeColor(type || \"default\");\n return (\n <div\n style={{\n ...baseNodeStyle,\n background: color,\n minWidth: 120,\n textAlign: \"center\",\n }}\n >\n <Handle type=\"target\" position={Position.Top} style={handleStyle} />\n {label ||\n tr(\n \"fluidgrids.components.workflowBuilderCore.actionNodeLabel\",\n \"Action\",\n )}\n <Handle type=\"source\" position={Position.Bottom} style={handleStyle} />\n </div>\n );\n}\n\n// Define node types\nconst NODE_TYPES: NodeTypes = {\n \"trigger:api\": TriggerNode,\n end: EndNode,\n \"internal:if\": ActionNode,\n \"internal:switch\": ActionNode,\n \"internal:loop\": ActionNode,\n \"internal:merge\": ActionNode,\n \"internal:set\": ActionNode,\n \"internal:filter\": ActionNode,\n \"internal:aggregate\": ActionNode,\n \"internal:wait\": ActionNode,\n \"internal:noop\": ActionNode,\n \"internal:http\": ActionNode,\n \"internal:subworkflow\": ActionNode,\n default: ActionNode,\n};\n\n// Counter for unique node ids\nlet nodeIdCounter = 0;\n\nfunction FlowBuilderInner({\n workflow,\n readonly = false,\n hideHeader = false,\n hideSidebar = false,\n hideLogsPanel = false,\n onSave,\n onExecute,\n onNodeClick,\n onBack,\n className,\n}: WorkflowBuilderCoreProps) {\n const reactFlowInstance = useReactFlow();\n const tr = useTr();\n\n const setWorkflow = useFlowStore((s) => s.actions.setWorkflow);\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const deleteNode = useFlowStore((s) => s.actions.nodes.deleteNode);\n const setNodes = useFlowStore((s) => s.actions.nodes.setNodes);\n\n const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(\n useShallow((s) => [\n s.workflow.nodes,\n s.workflow.edges,\n s.actions.nodes.onNodesChange,\n s.actions.edges.onEdgesChange,\n s.actions.edges.onConnect,\n ]),\n );\n\n const [workflowName, setWorkflowName] = useState(\n workflow?.name || \"Untitled Workflow\",\n );\n\n // Selected node for properties panel\n const [selectedNodeId, setSelectedNodeId] = useState<string | null>(null);\n\n // Ref for the ReactFlow wrapper (needed for drop position calculation)\n const reactFlowWrapper = useRef<HTMLDivElement>(null);\n\n // Initialize workflow on mount\n useEffect(() => {\n resetWorkflow();\n if (workflow) {\n setWorkflow(workflow);\n setWorkflowName(workflow.name || \"Untitled Workflow\");\n }\n }, [workflow, resetWorkflow, setWorkflow]);\n\n const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setWorkflowName(e.target.value);\n setWorkflow({ name: e.target.value });\n };\n\n const handleSave = () => {\n const savedWorkflow: WorkflowData = {\n id: workflow?.id || \"\",\n workflowKey: workflow?.workflowKey || \"\",\n name: workflowName,\n version: workflow?.version || \"1\",\n alias: workflow?.alias,\n nodes: nodes as FlowNode[],\n edges,\n sidebar: {\n active: \"none\",\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n };\n onSave?.(savedWorkflow);\n };\n\n const handleExecute = () => {\n // Generate a run ID and trigger execution\n const runId = `run-${Date.now()}`;\n onExecute?.(runId);\n };\n\n // ---- Node click → select in sidebar ----\n const handleNodeClick = useCallback(\n (\n _event: React.MouseEvent,\n node: { id: string; [key: string]: unknown },\n ) => {\n setSelectedNodeId(node.id);\n onNodeClick?.(node as unknown as FlowNode);\n },\n [onNodeClick],\n );\n\n // Deselect when clicking the pane\n const handlePaneClick = useCallback(() => {\n setSelectedNodeId(null);\n }, []);\n\n // ---- Drag-and-drop from external palette ----\n const handleDragOver = useCallback((event: React.DragEvent) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"copy\";\n }, []);\n\n const handleDrop = useCallback(\n (event: React.DragEvent) => {\n event.preventDefault();\n\n const raw = event.dataTransfer.getData(\"application/json\");\n if (!raw) return;\n\n let payload: { id?: string; type?: string; label?: string };\n try {\n payload = JSON.parse(raw);\n } catch {\n return;\n }\n\n const nodeType = payload.type || payload.id || \"default\";\n const label = payload.label || nodeType;\n\n // Calculate drop position in flow coordinates\n const bounds = reactFlowWrapper.current?.getBoundingClientRect();\n if (!bounds) return;\n\n const position = reactFlowInstance.screenToFlowPosition({\n x: event.clientX - bounds.left,\n y: event.clientY - bounds.top,\n });\n\n nodeIdCounter += 1;\n const newNodeId = `${nodeType}-${Date.now()}-${nodeIdCounter}`;\n const newNode: FlowNode = {\n id: newNodeId,\n type: nodeType,\n position,\n data: { label },\n };\n\n // Append to the existing nodes via the store\n const currentNodes = useFlowStore.getState().workflow.nodes;\n setNodes([...currentNodes, newNode]);\n },\n [reactFlowInstance, setNodes],\n );\n\n // ---- Selected node helpers ----\n const selectedNode = selectedNodeId\n ? (nodes.find((n) => n.id === selectedNodeId) as FlowNode | undefined)\n : null;\n\n const handleSelectedNodeLabelChange = useCallback(\n (newLabel: string) => {\n if (!selectedNodeId) return;\n const currentNodes = useFlowStore.getState().workflow.nodes;\n const updated = currentNodes.map((n) =>\n n.id === selectedNodeId\n ? { ...n, data: { ...n.data, label: newLabel } }\n : n,\n );\n setNodes(updated);\n },\n [selectedNodeId, setNodes],\n );\n\n const handleDeleteSelectedNode = useCallback(() => {\n if (!selectedNode) return;\n if (selectedNode.deletable === false) return; // can't delete trigger/end\n deleteNode(selectedNode);\n setSelectedNodeId(null);\n }, [selectedNode, deleteNode]);\n\n return (\n <div\n className={cn(\"flex flex-col flex-1 h-full w-full min-h-0\", className)}\n >\n {/* Header */}\n {!hideHeader && (\n <Card className=\"h-14 shrink-0 border-0 rounded-none bg-gradient-to-r from-primary/20 to-transparent p-2 flex items-center justify-between border-b\">\n <div className=\"flex items-center gap-2\">\n {onBack && (\n <Button variant=\"ghost\" size=\"icon\" onClick={onBack}>\n <ArrowLeft className=\"size-5\" />\n </Button>\n )}\n <Input\n className=\"font-semibold max-w-[300px]\"\n value={workflowName}\n onChange={handleNameChange}\n placeholder={tr(\n \"fluidgrids.components.workflowBuilderCore.workflowNamePlaceholder\",\n \"Workflow Name\",\n )}\n disabled={readonly}\n />\n </div>\n\n {!readonly && (\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleSave}>\n <Save className=\"size-4 mr-1\" />\n {tr(\"fluidgrids.components.workflowBuilderCore.save\", \"Save\")}\n </Button>\n <Button size=\"sm\" onClick={handleExecute}>\n <Play className=\"size-4 mr-1\" />\n {tr(\"fluidgrids.components.workflowBuilderCore.run\", \"Run\")}\n </Button>\n </div>\n )}\n </Card>\n )}\n\n {/* Main content */}\n <div className=\"flex flex-1 min-h-0 overflow-hidden\">\n {/* Canvas */}\n <div className=\"flex-1 h-full relative\" ref={reactFlowWrapper}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={readonly ? undefined : onNodesChange}\n onEdgesChange={readonly ? undefined : onEdgesChange}\n onConnect={readonly ? undefined : onConnect}\n onNodeClick={readonly ? undefined : handleNodeClick}\n onPaneClick={handlePaneClick}\n onDragOver={readonly ? undefined : handleDragOver}\n onDrop={readonly ? undefined : handleDrop}\n nodeTypes={NODE_TYPES}\n defaultEdgeOptions={defaultEdgeOptions}\n fitView\n snapToGrid\n snapGrid={[16, 16]}\n proOptions={{ hideAttribution: true }}\n deleteKeyCode={readonly ? null : \"Backspace\"}\n >\n <Background gap={24} />\n <Controls />\n <MiniMap />\n </ReactFlow>\n {/* Always shown, whatever readonly/hideHeader/hideSidebar say — no\n white-labelling. */}\n <FluidGridsMark />\n </div>\n\n {/* Sidebar — Node Properties */}\n {!hideSidebar && !readonly && (\n <div className=\"w-60 shrink-0 border-l bg-card overflow-y-auto\">\n <div className=\"p-4 border-b\">\n <div className=\"text-sm font-semibold\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodePropertiesHeading\",\n \"Node Properties\",\n )}\n </div>\n </div>\n\n {selectedNode ? (\n <div className=\"p-4 space-y-4\">\n {/* Node ID */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeIdLabel\",\n \"Node ID\",\n )}\n </label>\n <code className=\"block text-xs bg-muted px-2 py-1 rounded font-mono break-all\">\n {selectedNode.id}\n </code>\n </div>\n\n {/* Node Type */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeTypeLabel\",\n \"Type\",\n )}\n </label>\n <div className=\"flex items-center gap-2\">\n <span\n className=\"inline-block w-3 h-3 rounded-full shrink-0\"\n style={{\n background: getNodeColor(\n selectedNode.type || \"default\",\n ),\n }}\n />\n <code className=\"text-xs font-mono\">\n {selectedNode.type}\n </code>\n </div>\n </div>\n\n {/* Label */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeLabelLabel\",\n \"Label\",\n )}\n </label>\n <Input\n value={\n (selectedNode.data as { label?: string })?.label ?? \"\"\n }\n onChange={(e) =>\n handleSelectedNodeLabelChange(e.target.value)\n }\n className=\"text-sm\"\n placeholder={tr(\n \"fluidgrids.components.workflowBuilderCore.nodeLabelPlaceholder\",\n \"Node label\",\n )}\n />\n </div>\n\n {/* Position */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.positionLabel\",\n \"Position\",\n )}\n </label>\n <div className=\"grid grid-cols-2 gap-2 text-xs text-muted-foreground\">\n <div>\n X:{\" \"}\n <span className=\"font-mono\">\n {Math.round(selectedNode.position.x)}\n </span>\n </div>\n <div>\n Y:{\" \"}\n <span className=\"font-mono\">\n {Math.round(selectedNode.position.y)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Connected edges */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.connectionsLabel\",\n \"Connections\",\n )}\n </label>\n <div className=\"text-xs text-muted-foreground\">\n {(() => {\n const inbound = edges.filter(\n (e) => e.target === selectedNode.id,\n );\n const outbound = edges.filter(\n (e) => e.source === selectedNode.id,\n );\n return (\n <>\n <div>\n {inbound.length} inbound, {outbound.length} outbound\n </div>\n </>\n );\n })()}\n </div>\n </div>\n\n {/* Delete */}\n {selectedNode.deletable !== false && (\n <div className=\"pt-2 border-t\">\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"w-full\"\n onClick={handleDeleteSelectedNode}\n >\n <Trash2 className=\"size-4 mr-1\" />\n {tr(\n \"fluidgrids.components.workflowBuilderCore.deleteNode\",\n \"Delete Node\",\n )}\n </Button>\n </div>\n )}\n </div>\n ) : (\n <div className=\"p-4\">\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.noSelectionHint\",\n \"Click a node on the canvas to view and edit its properties.\",\n )}\n </p>\n <p className=\"text-xs text-muted-foreground mt-2\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.dragPaletteHint\",\n \"Drag nodes from the palette on the left to add them to the workflow.\",\n )}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Logs panel placeholder */}\n {!hideLogsPanel && (\n <div className=\"h-32 border-t bg-card p-2\">\n <div className=\"text-sm font-medium mb-2\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.executionLogsHeading\",\n \"Execution Logs\",\n )}\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.executionLogsEmpty\",\n \"Execution logs will appear here when you run the workflow\",\n )}\n </p>\n </div>\n )}\n </div>\n );\n}\n\nexport function WorkflowBuilderCore(props: WorkflowBuilderCoreProps) {\n return (\n <ReactFlowProvider>\n <FlowBuilderInner {...props} />\n <Toaster richColors position=\"bottom-center\" duration={2000} />\n </ReactFlowProvider>\n );\n}\n","import { type ApolloClient } from \"@apollo/client/core\";\nimport { FluidGridsProvider } from \"./FluidGridsProvider\";\nimport {\n WorkflowBuilderCore,\n type WorkflowBuilderCoreProps,\n} from \"./WorkflowBuilderCore\";\nimport type { WorkflowData } from \"../types\";\n\nexport interface WorkflowBuilderProps extends Omit<\n WorkflowBuilderCoreProps,\n \"workflow\"\n> {\n /** Workflow ID to load */\n workflowId?: string;\n /** Workflow version to load */\n workflowVersion?: string;\n /** Initial workflow data (bypasses API fetch) */\n initialWorkflow?: WorkflowData;\n /** Workspace API Gateway URL */\n apiGatewayUrl?: string;\n /** Global API Gateway URL (for store operations) */\n globalApiUrl?: string;\n /** Authentication token */\n authToken?: string;\n /** Current workspace ID */\n workspaceId: string;\n /** Current 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}\n\n/**\n * WorkflowBuilder - Standalone workflow builder component with Apollo client support\n *\n * Use this component when you want to embed the workflow builder in any React app.\n * You can either:\n * 1. Provide pre-configured Apollo clients (workspaceClient + globalClient) - Recommended\n * 2. Provide URLs and let the component create clients internally\n *\n * @example Dual Client Injection (Recommended)\n * ```tsx\n * import { createFluidGridsClients } from '@fluidgrids/fe-sdk';\n *\n * const { workspaceClient, globalClient } = createFluidGridsClients({\n * workspaceApiUrl: 'http://localhost:4000/workspaces/graphql',\n * globalApiUrl: 'http://localhost:4000/global/graphql',\n * authToken: token,\n * workspaceId: 'ws-123',\n * });\n *\n * <WorkflowBuilder\n * workspaceClient={workspaceClient}\n * globalClient={globalClient}\n * workspaceId=\"ws-123\"\n * onSave={(workflow) => console.log(workflow)}\n * />\n * ```\n *\n * @example URL-based (Simpler, less flexible)\n * ```tsx\n * <WorkflowBuilder\n * apiGatewayUrl=\"http://localhost:4000/workspaces/graphql\"\n * globalApiUrl=\"http://localhost:4000/global/graphql\"\n * authToken={token}\n * workspaceId=\"ws-123\"\n * onSave={(workflow) => console.log(workflow)}\n * />\n * ```\n */\nexport function WorkflowBuilder({\n workflowId,\n workflowVersion,\n initialWorkflow,\n apiGatewayUrl,\n globalApiUrl,\n authToken,\n workspaceId,\n tenantId,\n organizationId,\n workspaceClient,\n globalClient,\n ...coreProps\n}: WorkflowBuilderProps) {\n // If initialWorkflow is provided, use it directly\n // Otherwise, the workflow will need to be loaded from the API\n const workflow =\n initialWorkflow || createDefaultWorkflow(workflowId, workflowVersion);\n\n return (\n <FluidGridsProvider\n apiGatewayUrl={apiGatewayUrl}\n globalApiUrl={globalApiUrl}\n authToken={authToken}\n workspaceId={workspaceId}\n tenantId={tenantId}\n organizationId={organizationId}\n workspaceClient={workspaceClient}\n globalClient={globalClient}\n >\n <WorkflowBuilderCore workflow={workflow} {...coreProps} />\n </FluidGridsProvider>\n );\n}\n\nfunction createDefaultWorkflow(id?: string, version?: string): WorkflowData {\n return {\n id: id || `workflow-${Date.now()}`,\n workflowKey: id || `workflow-${Date.now()}`,\n name: \"Untitled Workflow\",\n version: version || \"1\",\n nodes: [],\n edges: [],\n sidebar: {\n active: \"store-browse\",\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n };\n}\n","import { Navigate, useParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { useWorkflowDefinition } from \"../hooks/useWorkflows\";\n\n/**\n * Global search indexes WorkflowDefinition by its database id, but the\n * builder route (`workflow/:workflowKey/:version`) is keyed by workflowKey +\n * version. This page bridges the two: it resolves the id to its current\n * workflowKey/version and redirects there.\n */\nexport function WorkflowSearchRedirect() {\n const { id } = useParams<{ id: string }>();\n const { workflow, loading, error } = useWorkflowDefinition(undefined, id);\n\n if (loading) {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center gap-2 text-sm text-muted-foreground\">\n <Icon icon=\"svg-spinners:ring-resize\" className=\"size-4\" />\n Opening workflow…\n </div>\n );\n }\n\n if (error || !workflow) {\n return <Navigate to=\"../list\" replace />;\n }\n\n return (\n <Navigate\n to={`../workflow/${workflow.workflowKey}/${workflow.version}`}\n replace\n />\n );\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS } from './chunk-NK32XOQN.js';
|
|
2
|
-
import { ExecutionDetailDocument, ExecutionStatsDocument, PauseExecutionDocument, ResumeExecutionDocument, CancelExecutionDocument, RetryNodeDocument, TriggerWorkflowDocument, TerminateExecutionDocument, ExecutionsListDocument } from './chunk-
|
|
2
|
+
import { ExecutionDetailDocument, ExecutionStatsDocument, PauseExecutionDocument, ResumeExecutionDocument, CancelExecutionDocument, RetryNodeDocument, TriggerWorkflowDocument, TerminateExecutionDocument, ExecutionsListDocument } from './chunk-3P4YQ7DO.js';
|
|
3
3
|
import { throwIfResultError } from './chunk-LMO5ASOE.js';
|
|
4
4
|
import { useTr } from './chunk-7YWBH2A5.js';
|
|
5
5
|
import { getFluidGridsClient } from './chunk-5BDQNSP3.js';
|
|
@@ -3118,5 +3118,5 @@ function useAutoRefresh(refetchFn, enabled = true, interval = 5e3) {
|
|
|
3118
3118
|
}
|
|
3119
3119
|
|
|
3120
3120
|
export { ExecutionCards, ExecutionFilters, ExecutionStats, ExecutionStatusBadge, ExecutionTable, ExecutionTimeline, NodeTimeline, Pagination, RunLogViewer, buildNodeDisplayMap, formatRunVersion, useAutoRefresh, useExecution, useExecutionActions, useExecutionStats, useExecutionsStore, useExecutionsWithStore };
|
|
3121
|
-
//# sourceMappingURL=chunk-
|
|
3122
|
-
//# sourceMappingURL=chunk-
|
|
3121
|
+
//# sourceMappingURL=chunk-USFSPC6S.js.map
|
|
3122
|
+
//# sourceMappingURL=chunk-USFSPC6S.js.map
|