@burdenoff/fluidgrids-fe-sdk 2026.1022.4 → 2026.1022.6
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-GXP7V43B.js → ExecutionDetailPage-JQHHPJZI.js} +3 -2
- package/dist/{ExecutionsListPage-7AZRFJJT.js → ExecutionsListPage-3NC3WARO.js} +3 -2
- package/dist/{WorkflowBuilder-36X3QZTC.js → WorkflowBuilder-HEKTGFM7.js} +3 -3
- package/dist/{WorkflowsList-O3DFQM6S.js → WorkflowsList-RWJKR5QF.js} +4 -2
- package/dist/{chunk-XQVQKEZK.js → chunk-2M43OY55.js} +162 -133
- package/dist/{chunk-T3UCFY7J.js → chunk-36RTRUCM.js} +2 -0
- package/dist/{chunk-PVDKSM6Q.js → chunk-BQAD4IRV.js} +1 -1
- package/dist/{chunk-HIXQIM22.js → chunk-CV56O5R4.js} +2 -471
- package/dist/{chunk-LHOW7QKK.js → chunk-IYWT6OV3.js} +1 -1
- package/dist/{chunk-TVTOVRGV.js → chunk-K6LSRFMX.js} +65 -35
- package/dist/{chunk-3FI4DCIY.js → chunk-MANNJ7P3.js} +1 -1
- package/dist/{chunk-6CVZQJKW.js → chunk-OHUNYBJ6.js} +133 -105
- package/dist/{chunk-5QUAOGY7.js → chunk-QMZGUJI3.js} +3 -2
- package/dist/{chunk-QP62LB3V.js → chunk-QN4HHTQP.js} +181 -8
- package/dist/{chunk-M7FOQBCR.js → chunk-RQ6TDVVL.js} +48 -5
- package/dist/chunk-VGIH3SOT.js +476 -0
- package/dist/{chunk-P3R3RFAC.js → chunk-WFZD44CK.js} +2 -1
- package/dist/chunk-YGBDZ424.js +64 -0
- package/dist/executions.js +4 -3
- package/dist/history.js +1 -1
- package/dist/index.d.ts +99 -1
- package/dist/index.js +430 -341
- package/dist/nodes.js +1 -1
- package/dist/observability.js +1 -1
- package/dist/settings.js +1 -1
- package/dist/templates.js +2 -2
- package/dist/workflow-builder.js +4 -4
- package/dist/workflows-list.js +4 -2
- package/package.json +1 -1
- package/dist/chunk-6N27YGMB.js +0 -12
|
@@ -388,121 +388,149 @@ function NodesPage() {
|
|
|
388
388
|
return counts;
|
|
389
389
|
}, [categorizedNodes]);
|
|
390
390
|
return /* @__PURE__ */ jsxs("div", { className: "p-4 sm:p-6 bg-background-primary min-h-screen", children: [
|
|
391
|
-
/* @__PURE__ */ jsxs(
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
391
|
+
/* @__PURE__ */ jsxs(
|
|
392
|
+
"div",
|
|
393
|
+
{
|
|
394
|
+
className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6",
|
|
395
|
+
"data-tour": "fluidgrids-nodes-header",
|
|
396
|
+
children: [
|
|
397
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
398
|
+
/* @__PURE__ */ jsx("h1", { className: "text-2xl sm:text-3xl font-bold text-text-primary", children: tr("fluidgrids.nodes.nodesPage.title", "Node Catalog") }),
|
|
399
|
+
/* @__PURE__ */ jsx("p", { className: "text-text-secondary mt-1", children: tr(
|
|
400
|
+
"fluidgrids.nodes.nodesPage.subtitle",
|
|
401
|
+
"Browse and manage available workflow nodes"
|
|
402
|
+
) })
|
|
403
|
+
] }),
|
|
404
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
|
|
405
|
+
/* @__PURE__ */ jsxs(Button, { variant: "outline", onClick: () => refetch(), children: [
|
|
406
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:refresh", className: "mr-2", width: 16 }),
|
|
407
|
+
tr("fluidgrids.nodes.nodesPage.refreshButton", "Refresh")
|
|
408
|
+
] }),
|
|
409
|
+
/* @__PURE__ */ jsxs(Button, { variant: "outline", onClick: () => navigate("../list"), children: [
|
|
410
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:arrow-left", className: "mr-2", width: 16 }),
|
|
411
|
+
tr(
|
|
412
|
+
"fluidgrids.nodes.nodesPage.backToWorkflowsButton",
|
|
413
|
+
"Back to Workflows"
|
|
414
|
+
)
|
|
415
|
+
] })
|
|
416
|
+
] })
|
|
417
|
+
]
|
|
418
|
+
}
|
|
419
|
+
),
|
|
420
|
+
/* @__PURE__ */ jsxs(
|
|
421
|
+
"div",
|
|
422
|
+
{
|
|
423
|
+
className: "grid grid-cols-3 gap-3 mb-6",
|
|
424
|
+
"data-tour": "fluidgrids-nodes-stats",
|
|
425
|
+
children: [
|
|
426
|
+
/* @__PURE__ */ jsxs("div", { className: "p-3 rounded-lg bg-background-secondary border border-border-secondary", children: [
|
|
427
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
428
|
+
/* @__PURE__ */ jsx(
|
|
429
|
+
Icon,
|
|
430
|
+
{
|
|
431
|
+
icon: "mdi:puzzle",
|
|
432
|
+
width: 18,
|
|
433
|
+
className: "text-text-secondary"
|
|
434
|
+
}
|
|
435
|
+
),
|
|
436
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: tr("fluidgrids.nodes.nodesPage.statTotal", "Total Nodes") })
|
|
437
|
+
] }),
|
|
438
|
+
/* @__PURE__ */ jsx("p", { className: "text-xl font-bold text-text-primary mt-1", children: loading ? "\u2014" : stats.total })
|
|
439
|
+
] }),
|
|
440
|
+
/* @__PURE__ */ jsxs("div", { className: "p-3 rounded-lg bg-background-secondary border border-border-secondary", children: [
|
|
441
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
442
|
+
/* @__PURE__ */ jsx(
|
|
443
|
+
Icon,
|
|
444
|
+
{
|
|
445
|
+
icon: "mdi:check-circle",
|
|
446
|
+
width: 18,
|
|
447
|
+
className: "text-status-success-text"
|
|
448
|
+
}
|
|
449
|
+
),
|
|
450
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: tr("fluidgrids.nodes.nodesPage.statActive", "Active") })
|
|
451
|
+
] }),
|
|
452
|
+
/* @__PURE__ */ jsx("p", { className: "text-xl font-bold text-status-success-text mt-1", children: loading ? "\u2014" : stats.active })
|
|
453
|
+
] }),
|
|
454
|
+
/* @__PURE__ */ jsxs("div", { className: "p-3 rounded-lg bg-background-secondary border border-border-secondary", children: [
|
|
455
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
456
|
+
/* @__PURE__ */ jsx(
|
|
457
|
+
Icon,
|
|
458
|
+
{
|
|
459
|
+
icon: "mdi:alert",
|
|
460
|
+
width: 18,
|
|
461
|
+
className: "text-status-warning-text"
|
|
462
|
+
}
|
|
463
|
+
),
|
|
464
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: tr("fluidgrids.nodes.nodesPage.statDeprecated", "Deprecated") })
|
|
465
|
+
] }),
|
|
466
|
+
/* @__PURE__ */ jsx("p", { className: "text-xl font-bold text-status-warning-text mt-1", children: loading ? "\u2014" : stats.deprecated })
|
|
467
|
+
] })
|
|
468
|
+
]
|
|
469
|
+
}
|
|
470
|
+
),
|
|
471
|
+
/* @__PURE__ */ jsxs(
|
|
472
|
+
"div",
|
|
473
|
+
{
|
|
474
|
+
className: "relative max-w-md mb-6",
|
|
475
|
+
"data-tour": "fluidgrids-nodes-search",
|
|
476
|
+
children: [
|
|
416
477
|
/* @__PURE__ */ jsx(
|
|
417
478
|
Icon,
|
|
418
479
|
{
|
|
419
|
-
icon: "mdi:
|
|
480
|
+
icon: "mdi:magnify",
|
|
420
481
|
width: 18,
|
|
421
|
-
className: "text-text-secondary"
|
|
482
|
+
className: "absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary"
|
|
422
483
|
}
|
|
423
484
|
),
|
|
424
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: tr("fluidgrids.nodes.nodesPage.statTotal", "Total Nodes") })
|
|
425
|
-
] }),
|
|
426
|
-
/* @__PURE__ */ jsx("p", { className: "text-xl font-bold text-text-primary mt-1", children: loading ? "\u2014" : stats.total })
|
|
427
|
-
] }),
|
|
428
|
-
/* @__PURE__ */ jsxs("div", { className: "p-3 rounded-lg bg-background-secondary border border-border-secondary", children: [
|
|
429
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
430
485
|
/* @__PURE__ */ jsx(
|
|
431
|
-
|
|
486
|
+
Input,
|
|
432
487
|
{
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
488
|
+
placeholder: tr(
|
|
489
|
+
"fluidgrids.nodes.nodesPage.searchPlaceholder",
|
|
490
|
+
"Search nodes by name, type, or keyword..."
|
|
491
|
+
),
|
|
492
|
+
value: search,
|
|
493
|
+
onChange: (e) => setSearch(e.target.value),
|
|
494
|
+
className: "pl-10 bg-background-secondary border-border-secondary"
|
|
436
495
|
}
|
|
437
|
-
)
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
496
|
+
)
|
|
497
|
+
]
|
|
498
|
+
}
|
|
499
|
+
),
|
|
500
|
+
/* @__PURE__ */ jsx(
|
|
501
|
+
"div",
|
|
502
|
+
{
|
|
503
|
+
className: "flex flex-wrap gap-2 mb-6",
|
|
504
|
+
"data-tour": "fluidgrids-nodes-categories",
|
|
505
|
+
children: NODE_CATEGORIES.map((cat) => {
|
|
506
|
+
const count = categoryCounts[cat.value] ?? 0;
|
|
507
|
+
const isActive = activeCategory === cat.value;
|
|
508
|
+
return /* @__PURE__ */ jsxs(
|
|
509
|
+
"button",
|
|
446
510
|
{
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
"fluidgrids.nodes.nodesPage.searchPlaceholder",
|
|
471
|
-
"Search nodes by name, type, or keyword..."
|
|
472
|
-
),
|
|
473
|
-
value: search,
|
|
474
|
-
onChange: (e) => setSearch(e.target.value),
|
|
475
|
-
className: "pl-10 bg-background-secondary border-border-secondary"
|
|
476
|
-
}
|
|
477
|
-
)
|
|
478
|
-
] }),
|
|
479
|
-
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2 mb-6", children: NODE_CATEGORIES.map((cat) => {
|
|
480
|
-
const count = categoryCounts[cat.value] ?? 0;
|
|
481
|
-
const isActive = activeCategory === cat.value;
|
|
482
|
-
return /* @__PURE__ */ jsxs(
|
|
483
|
-
"button",
|
|
484
|
-
{
|
|
485
|
-
onClick: () => setActiveCategory(cat.value),
|
|
486
|
-
className: `inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${isActive ? "bg-background-tertiary text-text-primary border border-border-primary" : "bg-background-secondary text-text-secondary border border-border-secondary hover:text-text-primary hover:border-border-primary"}`,
|
|
487
|
-
children: [
|
|
488
|
-
/* @__PURE__ */ jsx(Icon, { icon: cat.icon, width: 16 }),
|
|
489
|
-
cat.label,
|
|
490
|
-
/* @__PURE__ */ jsxs(
|
|
491
|
-
"span",
|
|
492
|
-
{
|
|
493
|
-
className: `ml-0.5 text-xs ${isActive ? "text-text-primary" : "text-text-secondary"}`,
|
|
494
|
-
children: [
|
|
495
|
-
"(",
|
|
496
|
-
count,
|
|
497
|
-
")"
|
|
498
|
-
]
|
|
499
|
-
}
|
|
500
|
-
)
|
|
501
|
-
]
|
|
502
|
-
},
|
|
503
|
-
cat.value
|
|
504
|
-
);
|
|
505
|
-
}) }),
|
|
511
|
+
onClick: () => setActiveCategory(cat.value),
|
|
512
|
+
className: `inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${isActive ? "bg-background-tertiary text-text-primary border border-border-primary" : "bg-background-secondary text-text-secondary border border-border-secondary hover:text-text-primary hover:border-border-primary"}`,
|
|
513
|
+
children: [
|
|
514
|
+
/* @__PURE__ */ jsx(Icon, { icon: cat.icon, width: 16 }),
|
|
515
|
+
cat.label,
|
|
516
|
+
/* @__PURE__ */ jsxs(
|
|
517
|
+
"span",
|
|
518
|
+
{
|
|
519
|
+
className: `ml-0.5 text-xs ${isActive ? "text-text-primary" : "text-text-secondary"}`,
|
|
520
|
+
children: [
|
|
521
|
+
"(",
|
|
522
|
+
count,
|
|
523
|
+
")"
|
|
524
|
+
]
|
|
525
|
+
}
|
|
526
|
+
)
|
|
527
|
+
]
|
|
528
|
+
},
|
|
529
|
+
cat.value
|
|
530
|
+
);
|
|
531
|
+
})
|
|
532
|
+
}
|
|
533
|
+
),
|
|
506
534
|
error && /* @__PURE__ */ jsx("div", { className: "mb-6", children: /* @__PURE__ */ jsx(ErrorState, { message: error.message, onRetry: refetch }) }),
|
|
507
535
|
loading ? /* @__PURE__ */ jsx(NodesSkeleton, {}) : filtered.length === 0 ? /* @__PURE__ */ jsx(
|
|
508
536
|
EmptyState,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ExecutionStats, ExecutionFilters, ExecutionTable, ExecutionCards, ExecutionTimeline, Pagination } from './chunk-CV56O5R4.js';
|
|
2
|
+
import { useExecutionsWithStore, useExecutionStats, useExecutionActions, useAutoRefresh } from './chunk-VGIH3SOT.js';
|
|
2
3
|
import { useWorkflowDefinitions } from './chunk-HP3A6BPK.js';
|
|
3
4
|
import { useExecutionsStore } from './chunk-UZG3ZIQM.js';
|
|
4
5
|
import { useTr } from './chunk-UULVIT25.js';
|
|
@@ -184,7 +185,7 @@ function ExecutionsListPage() {
|
|
|
184
185
|
"Monitor and manage your workflow runs"
|
|
185
186
|
) })
|
|
186
187
|
] }),
|
|
187
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
188
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
|
|
188
189
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center bg-background-secondary rounded-lg border border-border-secondary p-1", children: [
|
|
189
190
|
/* @__PURE__ */ jsx(
|
|
190
191
|
"button",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { NEW_WORKFLOW_NAV } from './chunk-
|
|
1
|
+
import { NEW_WORKFLOW_NAV, firstWorkflowProgress, builderPathFor, GUIDED_FIRST_WORKFLOW_NAV } from './chunk-YGBDZ424.js';
|
|
2
|
+
import { useExecutions } from './chunk-VGIH3SOT.js';
|
|
2
3
|
import { QuotaExhaustedDialog } from './chunk-SYVLFHWV.js';
|
|
3
|
-
import {
|
|
4
|
+
import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton, SdkPermissionGate } from './chunk-ONVGFVNH.js';
|
|
4
5
|
import { useWorkflowDefinitions, useLazyWorkflowDefinition, useImportWorkflow, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-HP3A6BPK.js';
|
|
5
6
|
import { workflowsListControls } from './chunk-D3UWK7GY.js';
|
|
6
7
|
import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
|
|
@@ -11,7 +12,7 @@ import { useState, useMemo } from 'react';
|
|
|
11
12
|
import { useNavigate } from 'react-router';
|
|
12
13
|
import { v4 } from 'uuid';
|
|
13
14
|
import { Icon } from '@iconify/react';
|
|
14
|
-
import { Button, Badge, Input, IllustratedEmptyState, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Label, Textarea, DialogFooter, Skeleton, TooltipProvider, Card, Tooltip, TooltipTrigger, TooltipContent, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction } from '@burdenoff/fe-libs/ui';
|
|
15
|
+
import { NextSteps, Button, Badge, Input, IllustratedEmptyState, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Label, Textarea, DialogFooter, Skeleton, TooltipProvider, Card, Tooltip, TooltipTrigger, TooltipContent, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction } from '@burdenoff/fe-libs/ui';
|
|
15
16
|
import { cn } from '@burdenoff/fe-libs/utils';
|
|
16
17
|
import { TagBadge } from '@burdenoff/fe-libs/tag';
|
|
17
18
|
import { toast } from 'sonner';
|
|
@@ -788,10 +789,19 @@ function WorkflowImportDialog({
|
|
|
788
789
|
if (!nextOpen) reset();
|
|
789
790
|
},
|
|
790
791
|
children: [
|
|
791
|
-
/* @__PURE__ */ jsxs(
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
792
|
+
/* @__PURE__ */ jsxs(
|
|
793
|
+
Button,
|
|
794
|
+
{
|
|
795
|
+
variant: "outline",
|
|
796
|
+
size: "default",
|
|
797
|
+
onClick: () => setOpen(true),
|
|
798
|
+
"data-tour": "fluidgrids-list-import",
|
|
799
|
+
children: [
|
|
800
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mynaui:download", className: "size-4" }),
|
|
801
|
+
tr("fluidgrids.workflowsList.importButton", "Import")
|
|
802
|
+
]
|
|
803
|
+
}
|
|
804
|
+
),
|
|
795
805
|
/* @__PURE__ */ jsxs(DialogContent, { className: "max-h-[90vh] overflow-y-auto sm:max-w-2xl", children: [
|
|
796
806
|
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
797
807
|
/* @__PURE__ */ jsx(DialogTitle, { children: tr("fluidgrids.workflowsList.importTitle", "Import workflow JSON") }),
|
|
@@ -936,6 +946,165 @@ function WorkflowImportDialog({
|
|
|
936
946
|
}
|
|
937
947
|
);
|
|
938
948
|
}
|
|
949
|
+
function firstWorkflowSteps({
|
|
950
|
+
progress,
|
|
951
|
+
canCreate,
|
|
952
|
+
onCreate,
|
|
953
|
+
onOpen,
|
|
954
|
+
onTemplates,
|
|
955
|
+
tr
|
|
956
|
+
}) {
|
|
957
|
+
const { runTarget, activateTarget } = progress;
|
|
958
|
+
return [
|
|
959
|
+
{
|
|
960
|
+
id: "create",
|
|
961
|
+
label: tr(
|
|
962
|
+
"fluidgrids.onboarding.createLabel",
|
|
963
|
+
"Build your first workflow, with a guided tour"
|
|
964
|
+
),
|
|
965
|
+
description: tr(
|
|
966
|
+
"fluidgrids.onboarding.createDescription",
|
|
967
|
+
"Opens a new draft in the builder and walks you through adding a trigger, connecting nodes and saving."
|
|
968
|
+
),
|
|
969
|
+
icon: /* @__PURE__ */ jsx(Icon, { icon: "mynaui:plus", className: "size-4", "aria-hidden": "true" }),
|
|
970
|
+
done: progress.created,
|
|
971
|
+
onClick: !progress.created && canCreate ? onCreate : void 0
|
|
972
|
+
},
|
|
973
|
+
{
|
|
974
|
+
id: "run",
|
|
975
|
+
label: tr("fluidgrids.onboarding.runLabel", "Run it once to test"),
|
|
976
|
+
description: tr(
|
|
977
|
+
"fluidgrids.onboarding.runDescription",
|
|
978
|
+
"Press Run in the builder. Every execution shows up in Runs with a step-by-step timeline and logs."
|
|
979
|
+
),
|
|
980
|
+
icon: /* @__PURE__ */ jsx(
|
|
981
|
+
Icon,
|
|
982
|
+
{
|
|
983
|
+
icon: "mdi:play-circle-outline",
|
|
984
|
+
className: "size-4",
|
|
985
|
+
"aria-hidden": "true"
|
|
986
|
+
}
|
|
987
|
+
),
|
|
988
|
+
done: progress.ran,
|
|
989
|
+
onClick: !progress.ran && runTarget ? () => onOpen(runTarget) : void 0
|
|
990
|
+
},
|
|
991
|
+
{
|
|
992
|
+
id: "activate",
|
|
993
|
+
label: tr(
|
|
994
|
+
"fluidgrids.onboarding.activateLabel",
|
|
995
|
+
"Activate it to go live"
|
|
996
|
+
),
|
|
997
|
+
description: tr(
|
|
998
|
+
"fluidgrids.onboarding.activateDescription",
|
|
999
|
+
"An active workflow answers its webhooks, schedules and other automatic triggers."
|
|
1000
|
+
),
|
|
1001
|
+
icon: /* @__PURE__ */ jsx(
|
|
1002
|
+
Icon,
|
|
1003
|
+
{
|
|
1004
|
+
icon: "mdi:lightning-bolt-outline",
|
|
1005
|
+
className: "size-4",
|
|
1006
|
+
"aria-hidden": "true"
|
|
1007
|
+
}
|
|
1008
|
+
),
|
|
1009
|
+
done: progress.activated,
|
|
1010
|
+
onClick: !progress.activated && activateTarget ? () => onOpen(activateTarget) : void 0
|
|
1011
|
+
},
|
|
1012
|
+
{
|
|
1013
|
+
id: "templates",
|
|
1014
|
+
label: tr(
|
|
1015
|
+
"fluidgrids.onboarding.templatesLabel",
|
|
1016
|
+
"Or start from a template"
|
|
1017
|
+
),
|
|
1018
|
+
description: tr(
|
|
1019
|
+
"fluidgrids.onboarding.templatesDescription",
|
|
1020
|
+
"Pick a pre-built workflow and adapt it instead of starting from a blank canvas."
|
|
1021
|
+
),
|
|
1022
|
+
icon: /* @__PURE__ */ jsx(
|
|
1023
|
+
Icon,
|
|
1024
|
+
{
|
|
1025
|
+
icon: "mynaui:layers-three",
|
|
1026
|
+
className: "size-4",
|
|
1027
|
+
"aria-hidden": "true"
|
|
1028
|
+
}
|
|
1029
|
+
),
|
|
1030
|
+
// Optional, so it never holds the checklist open: it counts as done once
|
|
1031
|
+
// the person has a workflow, however they made it.
|
|
1032
|
+
done: progress.created,
|
|
1033
|
+
onClick: progress.created ? void 0 : onTemplates
|
|
1034
|
+
}
|
|
1035
|
+
];
|
|
1036
|
+
}
|
|
1037
|
+
function FirstWorkflowChecklistView(props) {
|
|
1038
|
+
const { progress, tr } = props;
|
|
1039
|
+
if (progress.complete) return null;
|
|
1040
|
+
return /* @__PURE__ */ jsx("div", { "data-tour": "fluidgrids-list-onboarding", children: /* @__PURE__ */ jsx(
|
|
1041
|
+
NextSteps,
|
|
1042
|
+
{
|
|
1043
|
+
storageKey: "fluidgrids-first-workflow",
|
|
1044
|
+
title: tr(
|
|
1045
|
+
"fluidgrids.onboarding.title",
|
|
1046
|
+
"Get started with your first workflow"
|
|
1047
|
+
),
|
|
1048
|
+
steps: firstWorkflowSteps(props)
|
|
1049
|
+
}
|
|
1050
|
+
) });
|
|
1051
|
+
}
|
|
1052
|
+
function useChecklistHandlers() {
|
|
1053
|
+
const navigate = useNavigate();
|
|
1054
|
+
return useMemo(
|
|
1055
|
+
() => ({
|
|
1056
|
+
onCreate: () => navigate(`../workflow/${v4()}/v1`, GUIDED_FIRST_WORKFLOW_NAV),
|
|
1057
|
+
onOpen: (workflow) => navigate(builderPathFor(workflow)),
|
|
1058
|
+
onTemplates: () => navigate("../templates")
|
|
1059
|
+
}),
|
|
1060
|
+
[navigate]
|
|
1061
|
+
);
|
|
1062
|
+
}
|
|
1063
|
+
function ChecklistWithRuns({
|
|
1064
|
+
workflows,
|
|
1065
|
+
canCreate
|
|
1066
|
+
}) {
|
|
1067
|
+
const tr = useTr();
|
|
1068
|
+
const handlers = useChecklistHandlers();
|
|
1069
|
+
const { total, loading, error } = useExecutions({ limit: 1 });
|
|
1070
|
+
const runsTotal = loading || error ? null : total;
|
|
1071
|
+
const progress = useMemo(
|
|
1072
|
+
() => firstWorkflowProgress(workflows, runsTotal),
|
|
1073
|
+
[workflows, runsTotal]
|
|
1074
|
+
);
|
|
1075
|
+
return /* @__PURE__ */ jsx(
|
|
1076
|
+
FirstWorkflowChecklistView,
|
|
1077
|
+
{
|
|
1078
|
+
progress,
|
|
1079
|
+
canCreate,
|
|
1080
|
+
tr,
|
|
1081
|
+
...handlers
|
|
1082
|
+
}
|
|
1083
|
+
);
|
|
1084
|
+
}
|
|
1085
|
+
function ChecklistWithoutWorkflows({ canCreate }) {
|
|
1086
|
+
const tr = useTr();
|
|
1087
|
+
const handlers = useChecklistHandlers();
|
|
1088
|
+
const progress = useMemo(() => firstWorkflowProgress([], 0), []);
|
|
1089
|
+
return /* @__PURE__ */ jsx(
|
|
1090
|
+
FirstWorkflowChecklistView,
|
|
1091
|
+
{
|
|
1092
|
+
progress,
|
|
1093
|
+
canCreate,
|
|
1094
|
+
tr,
|
|
1095
|
+
...handlers
|
|
1096
|
+
}
|
|
1097
|
+
);
|
|
1098
|
+
}
|
|
1099
|
+
function FirstWorkflowChecklist({
|
|
1100
|
+
workflows,
|
|
1101
|
+
canCreate
|
|
1102
|
+
}) {
|
|
1103
|
+
if (workflows.length === 0) {
|
|
1104
|
+
return /* @__PURE__ */ jsx(ChecklistWithoutWorkflows, { canCreate });
|
|
1105
|
+
}
|
|
1106
|
+
return /* @__PURE__ */ jsx(ChecklistWithRuns, { workflows, canCreate });
|
|
1107
|
+
}
|
|
939
1108
|
function useStatusFilters() {
|
|
940
1109
|
const tr = useTr();
|
|
941
1110
|
return useMemo(
|
|
@@ -982,6 +1151,9 @@ function WorkflowsList() {
|
|
|
982
1151
|
latestOnly: true
|
|
983
1152
|
});
|
|
984
1153
|
const { getWorkflow } = useLazyWorkflowDefinition();
|
|
1154
|
+
const { allowed: canCreate } = useFluidGridsPermission(
|
|
1155
|
+
FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE
|
|
1156
|
+
);
|
|
985
1157
|
const [search, setSearch] = useState("");
|
|
986
1158
|
const [statusFilter, setStatusFilter] = useState(null);
|
|
987
1159
|
const [tagFilter, setTagFilter] = useState(null);
|
|
@@ -1108,6 +1280,7 @@ function WorkflowsList() {
|
|
|
1108
1280
|
]
|
|
1109
1281
|
}
|
|
1110
1282
|
),
|
|
1283
|
+
!loading && !error && /* @__PURE__ */ jsx(FirstWorkflowChecklist, { workflows, canCreate }),
|
|
1111
1284
|
!loading && !error && workflows.length > 0 && /* @__PURE__ */ jsxs(
|
|
1112
1285
|
"div",
|
|
1113
1286
|
{
|
|
@@ -1289,4 +1462,4 @@ function WorkflowsList() {
|
|
|
1289
1462
|
);
|
|
1290
1463
|
}
|
|
1291
1464
|
|
|
1292
|
-
export { WorkflowsList };
|
|
1465
|
+
export { FirstWorkflowChecklist, FirstWorkflowChecklistView, WorkflowsList };
|
|
@@ -1,16 +1,58 @@
|
|
|
1
|
-
import { isCreateIntent, decideMissingWorkflow } from './chunk-
|
|
2
|
-
import { useInstalledNodes, buildNodeCheck, refetchStoreNodes, FlowBuilderPage, buildRequiredNodeTypes, mergeStickyNotes } from './chunk-
|
|
1
|
+
import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, decideMissingWorkflow } from './chunk-YGBDZ424.js';
|
|
2
|
+
import { useInstalledNodes, buildNodeCheck, refetchStoreNodes, FlowBuilderPage, buildRequiredNodeTypes, mergeStickyNotes } from './chunk-36RTRUCM.js';
|
|
3
3
|
import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-HP3A6BPK.js';
|
|
4
4
|
import { useFlowStore } from './chunk-VI2RFS65.js';
|
|
5
5
|
import { useTr } from './chunk-UULVIT25.js';
|
|
6
|
-
import { useNavigate, useParams
|
|
6
|
+
import { useLocation, useNavigate, useParams } from 'react-router';
|
|
7
7
|
import { toast } from 'sonner';
|
|
8
8
|
import { Icon } from '@iconify/react';
|
|
9
9
|
import { lazy, useRef, useEffect, useState, useCallback, useMemo, Suspense } from 'react';
|
|
10
|
+
import { useSafeToursContext, usePlayTour } from '@burdenoff/fe-libs/shared/tours';
|
|
10
11
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
11
12
|
import { ErrorBoundary } from '@burdenoff/fe-libs/shared/components';
|
|
12
13
|
import '@xyflow/react/dist/style.css';
|
|
13
14
|
|
|
15
|
+
var START_DELAY_MS = 800;
|
|
16
|
+
function StartGuidedTour() {
|
|
17
|
+
const location = useLocation();
|
|
18
|
+
const navigate = useNavigate();
|
|
19
|
+
const { pageTours, pageId, loading } = useSafeToursContext();
|
|
20
|
+
const playTour = usePlayTour();
|
|
21
|
+
const startedForKey = useRef(null);
|
|
22
|
+
const tour = loading ? null : pickGuidedTour(pageTours, pageId);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (!tour || startedForKey.current === location.key) return void 0;
|
|
25
|
+
const timer = setTimeout(() => {
|
|
26
|
+
startedForKey.current = location.key;
|
|
27
|
+
playTour(tour);
|
|
28
|
+
void navigate(
|
|
29
|
+
{
|
|
30
|
+
pathname: location.pathname,
|
|
31
|
+
search: location.search,
|
|
32
|
+
hash: location.hash
|
|
33
|
+
},
|
|
34
|
+
{ replace: true, state: withoutGuidedTourIntent(location.state) }
|
|
35
|
+
);
|
|
36
|
+
}, START_DELAY_MS);
|
|
37
|
+
return () => clearTimeout(timer);
|
|
38
|
+
}, [
|
|
39
|
+
tour,
|
|
40
|
+
playTour,
|
|
41
|
+
navigate,
|
|
42
|
+
location.key,
|
|
43
|
+
location.pathname,
|
|
44
|
+
location.search,
|
|
45
|
+
location.hash,
|
|
46
|
+
location.state
|
|
47
|
+
]);
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
function GuidedTourStarter({ ready }) {
|
|
51
|
+
const location = useLocation();
|
|
52
|
+
const { productId } = useSafeToursContext();
|
|
53
|
+
if (!ready || !productId || !isGuidedTourIntent(location.state)) return null;
|
|
54
|
+
return /* @__PURE__ */ jsx(StartGuidedTour, {});
|
|
55
|
+
}
|
|
14
56
|
var LazyMissingNodesInstallModal = lazy(
|
|
15
57
|
() => import('./MissingNodesInstallModal-OSAJLIBE.js').then(
|
|
16
58
|
(m) => ({ default: m.MissingNodesInstallModal })
|
|
@@ -457,7 +499,8 @@ function WorkflowItem({
|
|
|
457
499
|
installErrors
|
|
458
500
|
}
|
|
459
501
|
) }),
|
|
460
|
-
workflow && !isLoading && /* @__PURE__ */ jsx(FlowBuilderPage, { workflow })
|
|
502
|
+
workflow && !isLoading && /* @__PURE__ */ jsx(FlowBuilderPage, { workflow }),
|
|
503
|
+
/* @__PURE__ */ jsx(GuidedTourStarter, { ready: Boolean(workflow && !isLoading) })
|
|
461
504
|
] });
|
|
462
505
|
}
|
|
463
506
|
function WorkflowBuilder() {
|
|
@@ -498,4 +541,4 @@ function WorkflowBuilder() {
|
|
|
498
541
|
);
|
|
499
542
|
}
|
|
500
543
|
|
|
501
|
-
export { WorkflowBuilder };
|
|
544
|
+
export { GuidedTourStarter, WorkflowBuilder };
|