@burdenoff/microfe-cosmicintersection 2026.827.1 → 2026.830.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cosmicintersection/components/ActionMenu.d.ts +1 -1
- package/dist/cosmicintersection/components/ActionMenu.d.ts.map +1 -1
- package/dist/cosmicintersection/components/ActionMenu.js +51 -54
- package/dist/cosmicintersection/components/ActionMenu.js.map +1 -1
- package/dist/cosmicintersection/components/EntityFormShell.d.ts +1 -1
- package/dist/cosmicintersection/components/EntityFormShell.d.ts.map +1 -1
- package/dist/cosmicintersection/components/EntityFormShell.js +29 -27
- package/dist/cosmicintersection/components/EntityFormShell.js.map +1 -1
- package/dist/cosmicintersection/components/ErrorState.d.ts +1 -1
- package/dist/cosmicintersection/components/ErrorState.d.ts.map +1 -1
- package/dist/cosmicintersection/components/ErrorState.js +19 -17
- package/dist/cosmicintersection/components/ErrorState.js.map +1 -1
- package/dist/cosmicintersection/components/FileUploadField.d.ts.map +1 -1
- package/dist/cosmicintersection/components/FileUploadField.js +61 -60
- package/dist/cosmicintersection/components/FileUploadField.js.map +1 -1
- package/dist/cosmicintersection/components/LoadingState.d.ts +1 -1
- package/dist/cosmicintersection/components/LoadingState.d.ts.map +1 -1
- package/dist/cosmicintersection/components/LoadingState.js +15 -13
- package/dist/cosmicintersection/components/LoadingState.js.map +1 -1
- package/dist/cosmicintersection/components/PageLayout.d.ts.map +1 -1
- package/dist/cosmicintersection/components/PageLayout.js +28 -27
- package/dist/cosmicintersection/components/PageLayout.js.map +1 -1
- package/dist/cosmicintersection/components/Pagination.d.ts.map +1 -1
- package/dist/cosmicintersection/components/Pagination.js +38 -35
- package/dist/cosmicintersection/components/Pagination.js.map +1 -1
- package/dist/cosmicintersection/components/StatusBadge.d.ts.map +1 -1
- package/dist/cosmicintersection/components/StatusBadge.js +30 -9
- package/dist/cosmicintersection/components/StatusBadge.js.map +1 -1
- package/dist/cosmicintersection/pages/access/AccessPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/access/AccessPage.js +147 -146
- package/dist/cosmicintersection/pages/access/AccessPage.js.map +1 -1
- package/dist/cosmicintersection/pages/analyses/AnalysesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/analyses/AnalysesPage.js +260 -259
- package/dist/cosmicintersection/pages/analyses/AnalysesPage.js.map +1 -1
- package/dist/cosmicintersection/pages/collections/CollectionsPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/collections/CollectionsPage.js +63 -62
- package/dist/cosmicintersection/pages/collections/CollectionsPage.js.map +1 -1
- package/dist/cosmicintersection/pages/dashboard/DashboardPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/dashboard/DashboardPage.js +132 -131
- package/dist/cosmicintersection/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/cosmicintersection/pages/datasets/DatasetsPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/datasets/DatasetsPage.js +178 -177
- package/dist/cosmicintersection/pages/datasets/DatasetsPage.js.map +1 -1
- package/dist/cosmicintersection/pages/discovery/DiscoveryPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js +138 -145
- package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js.map +1 -1
- package/dist/cosmicintersection/pages/lineage/LineagePage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/lineage/LineagePage.js +78 -88
- package/dist/cosmicintersection/pages/lineage/LineagePage.js.map +1 -1
- package/dist/cosmicintersection/pages/notebooks/NotebooksPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js +125 -124
- package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js.map +1 -1
- package/dist/cosmicintersection/pages/pipelines/PipelinesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js +152 -151
- package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js.map +1 -1
- package/dist/cosmicintersection/pages/releases/ReleasesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/releases/ReleasesPage.js +175 -174
- package/dist/cosmicintersection/pages/releases/ReleasesPage.js.map +1 -1
- package/dist/cosmicintersection/pages/runs/RunsPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/runs/RunsPage.js +197 -188
- package/dist/cosmicintersection/pages/runs/RunsPage.js.map +1 -1
- package/dist/cosmicintersection/pages/sources/SourcesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/sources/SourcesPage.js +65 -64
- package/dist/cosmicintersection/pages/sources/SourcesPage.js.map +1 -1
- package/dist/dev/main.d.ts.map +1 -1
- package/dist/shared/hooks/useTr.d.ts +12 -0
- package/dist/shared/hooks/useTr.d.ts.map +1 -0
- package/dist/shared/hooks/useTr.js +16 -0
- package/dist/shared/hooks/useTr.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,174 +1,175 @@
|
|
|
1
1
|
import { useCosmicIntersection as e } from "../../context/CosmicIntersectionContext.js";
|
|
2
2
|
import { notify as t } from "../../lib/toast.js";
|
|
3
3
|
import { useCosArchivePipelineMutation as n, useCosPipelinesQuery as r, useCosStartRunMutation as i } from "../../api/cosmicApi.js";
|
|
4
|
-
import a from "
|
|
5
|
-
import o from "../../components/
|
|
6
|
-
import s from "../../components/
|
|
7
|
-
import c from "../../components/
|
|
8
|
-
import l from "../../components/
|
|
9
|
-
import u
|
|
10
|
-
import
|
|
4
|
+
import { useTr as a } from "../../../shared/hooks/useTr.js";
|
|
5
|
+
import o from "../../components/ActionMenu.js";
|
|
6
|
+
import s from "../../components/EmptyState.js";
|
|
7
|
+
import c from "../../components/ErrorState.js";
|
|
8
|
+
import l from "../../components/LoadingState.js";
|
|
9
|
+
import u from "../../components/PageLayout.js";
|
|
10
|
+
import d, { usePagination as f } from "../../components/Pagination.js";
|
|
11
|
+
import p, { formatEnumLabel as m } from "../../components/StatusBadge.js";
|
|
11
12
|
import "../../components/index.js";
|
|
12
|
-
import { mutationSucceeded as
|
|
13
|
-
import { useMemo as
|
|
14
|
-
import { Fragment as
|
|
15
|
-
import { GitBranch as
|
|
16
|
-
import { Button as
|
|
13
|
+
import { mutationSucceeded as h } from "../../lib/mutationResult.js";
|
|
14
|
+
import { useMemo as g, useState as _ } from "react";
|
|
15
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
16
|
+
import { GitBranch as x, Play as S, Plus as C } from "lucide-react";
|
|
17
|
+
import { Button as w, Select as T, SelectContent as E, SelectItem as D, SelectTrigger as O, SelectValue as k, Table as A, TableBody as j, TableCell as M, TableHead as N, TableHeader as P, TableRow as F } from "@burdenoff/fe-libs/ui";
|
|
17
18
|
//#region src/cosmicintersection/pages/pipelines/PipelinesPage.tsx
|
|
18
|
-
var
|
|
19
|
+
var I = [
|
|
19
20
|
"DRAFT",
|
|
20
21
|
"ACTIVE",
|
|
21
22
|
"PAUSED",
|
|
22
23
|
"ARCHIVED"
|
|
23
|
-
],
|
|
24
|
-
function
|
|
24
|
+
], L = "ALL";
|
|
25
|
+
function R(e) {
|
|
25
26
|
if (!e) return "—";
|
|
26
27
|
let t = new Date(e);
|
|
27
28
|
return Number.isNaN(t.getTime()) ? "—" : t.toLocaleString();
|
|
28
29
|
}
|
|
29
|
-
function
|
|
30
|
-
let { navigate:
|
|
31
|
-
status:
|
|
30
|
+
function z() {
|
|
31
|
+
let { navigate: z } = e(), B = a(), [V, H] = _(L), U = f({ resetKey: V }), { data: W, loading: G, error: K, refetch: q } = r({
|
|
32
|
+
status: V === L ? void 0 : V,
|
|
32
33
|
pagination: {
|
|
33
|
-
limit:
|
|
34
|
-
offset:
|
|
34
|
+
limit: U.limit,
|
|
35
|
+
offset: U.offset
|
|
35
36
|
}
|
|
36
|
-
}), [
|
|
37
|
-
let n = await
|
|
38
|
-
|
|
39
|
-
},
|
|
40
|
-
let n = await
|
|
41
|
-
if (!
|
|
42
|
-
await
|
|
37
|
+
}), [J] = i(), [Y] = n(), X = g(() => W?.cosListPipelines.items ?? [], [W]), Z = W?.cosListPipelines.pageInfo, Q = async (e) => {
|
|
38
|
+
let n = await J({ variables: { input: { pipelineId: e.id } } }), r = n.data?.cosStartRun?.id;
|
|
39
|
+
h(n, r, B("cosmicintersection.pages.pipelines.startRunError", "Could not start a run")) && (t.success(B("cosmicintersection.pages.pipelines.startRunSuccess", "Run started"), B("cosmicintersection.pages.pipelines.startRunSuccessDescription", "A new run for “{{name}}” is queued.", { name: e.name })), await q(), r && z(`runs/${r}`));
|
|
40
|
+
}, $ = async (e) => {
|
|
41
|
+
let n = await Y({ variables: { id: e.id } });
|
|
42
|
+
if (!h(n, n.data?.cosArchivePipeline, B("cosmicintersection.pages.pipelines.archiveError", "Could not archive pipeline"))) throw Error("Archive not confirmed");
|
|
43
|
+
await q(), t.success(B("cosmicintersection.pages.pipelines.archiveSuccess", "Pipeline archived"), B("cosmicintersection.pages.pipelines.archiveSuccessDescription", "“{{name}}” was archived.", { name: e.name }));
|
|
43
44
|
};
|
|
44
|
-
return /* @__PURE__ */
|
|
45
|
-
title: "Pipelines",
|
|
46
|
-
description: "Orchestrate ingest, calibration, transform and export steps across your data.",
|
|
47
|
-
actions: /* @__PURE__ */
|
|
45
|
+
return /* @__PURE__ */ y(u, {
|
|
46
|
+
title: B("cosmicintersection.pages.pipelines.title", "Pipelines"),
|
|
47
|
+
description: B("cosmicintersection.pages.pipelines.description", "Orchestrate ingest, calibration, transform and export steps across your data."),
|
|
48
|
+
actions: /* @__PURE__ */ b(w, {
|
|
48
49
|
type: "button",
|
|
49
|
-
onClick: () =>
|
|
50
|
-
children: [/* @__PURE__ */
|
|
50
|
+
onClick: () => z("pipelines/create"),
|
|
51
|
+
children: [/* @__PURE__ */ y(C, { className: "size-4" }), B("cosmicintersection.pages.pipelines.create", "New pipeline")]
|
|
51
52
|
}),
|
|
52
|
-
children: /* @__PURE__ */
|
|
53
|
+
children: /* @__PURE__ */ b("div", {
|
|
53
54
|
className: "space-y-4",
|
|
54
|
-
children: [/* @__PURE__ */
|
|
55
|
+
children: [/* @__PURE__ */ y("div", {
|
|
55
56
|
className: "flex flex-wrap items-center gap-3",
|
|
56
|
-
children: /* @__PURE__ */
|
|
57
|
+
children: /* @__PURE__ */ b("label", {
|
|
57
58
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
58
|
-
children: [/* @__PURE__ */
|
|
59
|
-
value:
|
|
60
|
-
onValueChange: (e) =>
|
|
61
|
-
children: [/* @__PURE__ */
|
|
62
|
-
"aria-label": "Filter by status",
|
|
59
|
+
children: [/* @__PURE__ */ y("span", { children: B("cosmicintersection.common.status", "Status") }), /* @__PURE__ */ b(T, {
|
|
60
|
+
value: V,
|
|
61
|
+
onValueChange: (e) => H(e),
|
|
62
|
+
children: [/* @__PURE__ */ y(O, {
|
|
63
|
+
"aria-label": B("cosmicintersection.common.filterByStatus", "Filter by status"),
|
|
63
64
|
className: "w-44",
|
|
64
|
-
children: /* @__PURE__ */
|
|
65
|
-
}), /* @__PURE__ */
|
|
66
|
-
value:
|
|
67
|
-
children: "All statuses"
|
|
68
|
-
}),
|
|
65
|
+
children: /* @__PURE__ */ y(k, {})
|
|
66
|
+
}), /* @__PURE__ */ b(E, { children: [/* @__PURE__ */ y(D, {
|
|
67
|
+
value: L,
|
|
68
|
+
children: B("cosmicintersection.common.allStatuses", "All statuses")
|
|
69
|
+
}), I.map((e) => /* @__PURE__ */ y(D, {
|
|
69
70
|
value: e,
|
|
70
|
-
children:
|
|
71
|
+
children: m(e)
|
|
71
72
|
}, e))] })]
|
|
72
73
|
})]
|
|
73
74
|
})
|
|
74
|
-
}),
|
|
75
|
+
}), G ? /* @__PURE__ */ y(l, {
|
|
75
76
|
variant: "rows",
|
|
76
77
|
rows: 6,
|
|
77
|
-
label: "Loading pipelines…"
|
|
78
|
-
}) :
|
|
79
|
-
message: "We could not load your pipelines. Please try again.",
|
|
80
|
-
onRetry: () => void
|
|
81
|
-
}) :
|
|
82
|
-
icon:
|
|
83
|
-
title:
|
|
84
|
-
description:
|
|
85
|
-
action:
|
|
78
|
+
label: B("cosmicintersection.pages.pipelines.loading", "Loading pipelines…")
|
|
79
|
+
}) : K ? /* @__PURE__ */ y(c, {
|
|
80
|
+
message: B("cosmicintersection.pages.pipelines.error", "We could not load your pipelines. Please try again."),
|
|
81
|
+
onRetry: () => void q()
|
|
82
|
+
}) : X.length === 0 ? /* @__PURE__ */ y(s, {
|
|
83
|
+
icon: x,
|
|
84
|
+
title: V === L ? B("cosmicintersection.pages.pipelines.emptyTitle", "No pipelines yet") : B("cosmicintersection.pages.pipelines.emptyFilterTitle", "No pipelines match this filter"),
|
|
85
|
+
description: V === L ? B("cosmicintersection.pages.pipelines.emptyDescription", "Pipelines orchestrate ingest, calibration, transform and export steps over your datasets.") : B("cosmicintersection.pages.pipelines.emptyFilterDescription", "Try a different status filter to see more pipelines."),
|
|
86
|
+
action: V === L ? /* @__PURE__ */ b(w, {
|
|
86
87
|
type: "button",
|
|
87
|
-
onClick: () =>
|
|
88
|
-
children: [/* @__PURE__ */
|
|
88
|
+
onClick: () => z("pipelines/create"),
|
|
89
|
+
children: [/* @__PURE__ */ y(C, { className: "size-4" }), B("cosmicintersection.pages.pipelines.create", "New pipeline")]
|
|
89
90
|
}) : void 0
|
|
90
|
-
}) : /* @__PURE__ */
|
|
91
|
-
/* @__PURE__ */
|
|
91
|
+
}) : /* @__PURE__ */ b(v, { children: [
|
|
92
|
+
/* @__PURE__ */ y("div", {
|
|
92
93
|
className: "hidden rounded-card border border-border-default bg-bg-elevated md:block",
|
|
93
|
-
children: /* @__PURE__ */
|
|
94
|
-
/* @__PURE__ */
|
|
95
|
-
/* @__PURE__ */
|
|
96
|
-
/* @__PURE__ */
|
|
97
|
-
/* @__PURE__ */
|
|
98
|
-
/* @__PURE__ */
|
|
99
|
-
/* @__PURE__ */
|
|
94
|
+
children: /* @__PURE__ */ b(A, { children: [/* @__PURE__ */ y(P, { children: /* @__PURE__ */ b(F, { children: [
|
|
95
|
+
/* @__PURE__ */ y(N, { children: B("cosmicintersection.common.name", "Name") }),
|
|
96
|
+
/* @__PURE__ */ y(N, { children: B("cosmicintersection.common.status", "Status") }),
|
|
97
|
+
/* @__PURE__ */ y(N, { children: B("cosmicintersection.common.trigger", "Trigger") }),
|
|
98
|
+
/* @__PURE__ */ y(N, { children: B("cosmicintersection.common.schedule", "Schedule") }),
|
|
99
|
+
/* @__PURE__ */ y(N, { children: B("cosmicintersection.common.lastRun", "Last run") }),
|
|
100
|
+
/* @__PURE__ */ y(N, {
|
|
100
101
|
className: "text-right",
|
|
101
|
-
children: "Version"
|
|
102
|
+
children: B("cosmicintersection.common.version", "Version")
|
|
102
103
|
}),
|
|
103
|
-
/* @__PURE__ */
|
|
104
|
-
/* @__PURE__ */
|
|
104
|
+
/* @__PURE__ */ y(N, { children: B("cosmicintersection.common.tags", "Tags") }),
|
|
105
|
+
/* @__PURE__ */ y(N, {
|
|
105
106
|
className: "w-12 text-right",
|
|
106
|
-
children: /* @__PURE__ */
|
|
107
|
+
children: /* @__PURE__ */ y("span", {
|
|
107
108
|
className: "sr-only",
|
|
108
|
-
children: "Actions"
|
|
109
|
+
children: B("cosmicintersection.common.actions", "Actions")
|
|
109
110
|
})
|
|
110
111
|
})
|
|
111
|
-
] }) }), /* @__PURE__ */
|
|
112
|
+
] }) }), /* @__PURE__ */ y(j, { children: X.map((e) => /* @__PURE__ */ b(F, {
|
|
112
113
|
className: "cursor-pointer",
|
|
113
|
-
onClick: () =>
|
|
114
|
+
onClick: () => z(`pipelines/${e.id}`),
|
|
114
115
|
children: [
|
|
115
|
-
/* @__PURE__ */
|
|
116
|
+
/* @__PURE__ */ y(M, {
|
|
116
117
|
className: "font-medium text-text-primary",
|
|
117
|
-
children: /* @__PURE__ */
|
|
118
|
+
children: /* @__PURE__ */ b("div", {
|
|
118
119
|
className: "flex flex-col",
|
|
119
|
-
children: [/* @__PURE__ */
|
|
120
|
+
children: [/* @__PURE__ */ y("span", {
|
|
120
121
|
className: "truncate",
|
|
121
122
|
children: e.name
|
|
122
|
-
}), e.description ? /* @__PURE__ */
|
|
123
|
+
}), e.description ? /* @__PURE__ */ y("span", {
|
|
123
124
|
className: "mt-0.5 line-clamp-1 text-xs text-text-secondary",
|
|
124
125
|
children: e.description
|
|
125
126
|
}) : null]
|
|
126
127
|
})
|
|
127
128
|
}),
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
-
/* @__PURE__ */
|
|
129
|
+
/* @__PURE__ */ y(M, { children: /* @__PURE__ */ y(p, { status: e.status }) }),
|
|
130
|
+
/* @__PURE__ */ y(M, {
|
|
130
131
|
className: "text-text-secondary",
|
|
131
|
-
children:
|
|
132
|
+
children: m(e.trigger)
|
|
132
133
|
}),
|
|
133
|
-
/* @__PURE__ */
|
|
134
|
+
/* @__PURE__ */ y(M, {
|
|
134
135
|
className: "font-mono text-xs text-text-secondary",
|
|
135
136
|
children: e.schedule || "—"
|
|
136
137
|
}),
|
|
137
|
-
/* @__PURE__ */
|
|
138
|
+
/* @__PURE__ */ y(M, {
|
|
138
139
|
className: "whitespace-nowrap text-text-secondary",
|
|
139
|
-
children:
|
|
140
|
+
children: R(e.lastRunAt)
|
|
140
141
|
}),
|
|
141
|
-
/* @__PURE__ */
|
|
142
|
+
/* @__PURE__ */ b(M, {
|
|
142
143
|
className: "text-right tabular-nums text-text-secondary",
|
|
143
144
|
children: ["v", e.version]
|
|
144
145
|
}),
|
|
145
|
-
/* @__PURE__ */
|
|
146
|
+
/* @__PURE__ */ y(M, { children: /* @__PURE__ */ b("div", {
|
|
146
147
|
className: "flex max-w-[12rem] flex-wrap gap-1",
|
|
147
|
-
children: [e.tags.length === 0 ? /* @__PURE__ */
|
|
148
|
+
children: [e.tags.length === 0 ? /* @__PURE__ */ y("span", {
|
|
148
149
|
className: "text-xs text-text-secondary",
|
|
149
150
|
children: "—"
|
|
150
|
-
}) : e.tags.slice(0, 3).map((e) => /* @__PURE__ */
|
|
151
|
+
}) : e.tags.slice(0, 3).map((e) => /* @__PURE__ */ y("span", {
|
|
151
152
|
className: "rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary",
|
|
152
153
|
children: e
|
|
153
|
-
}, e)), e.tags.length > 3 ? /* @__PURE__ */
|
|
154
|
+
}, e)), e.tags.length > 3 ? /* @__PURE__ */ b("span", {
|
|
154
155
|
className: "text-xs text-text-secondary",
|
|
155
156
|
children: ["+", e.tags.length - 3]
|
|
156
157
|
}) : null]
|
|
157
158
|
}) }),
|
|
158
|
-
/* @__PURE__ */
|
|
159
|
+
/* @__PURE__ */ y(M, {
|
|
159
160
|
className: "text-right",
|
|
160
|
-
children: /* @__PURE__ */
|
|
161
|
-
ariaLabel:
|
|
161
|
+
children: /* @__PURE__ */ y(o, {
|
|
162
|
+
ariaLabel: B("cosmicintersection.common.actionsFor", "Actions for {{name}}", { name: e.name }),
|
|
162
163
|
entityName: e.name,
|
|
163
|
-
onView: () =>
|
|
164
|
-
onEdit: () =>
|
|
165
|
-
onDelete: () =>
|
|
166
|
-
deleteLabel: "Archive pipeline",
|
|
164
|
+
onView: () => z(`pipelines/${e.id}`),
|
|
165
|
+
onEdit: () => z(`pipelines/${e.id}/edit`),
|
|
166
|
+
onDelete: () => $(e),
|
|
167
|
+
deleteLabel: B("cosmicintersection.pages.pipelines.archive", "Archive pipeline"),
|
|
167
168
|
extraItems: [{
|
|
168
169
|
key: "start",
|
|
169
|
-
label: "Start run",
|
|
170
|
-
icon:
|
|
171
|
-
onSelect: () => void
|
|
170
|
+
label: B("cosmicintersection.pages.pipelines.startRun", "Start run"),
|
|
171
|
+
icon: S,
|
|
172
|
+
onSelect: () => void Q(e),
|
|
172
173
|
disabled: e.status === "ARCHIVED"
|
|
173
174
|
}]
|
|
174
175
|
})
|
|
@@ -176,122 +177,122 @@ function R() {
|
|
|
176
177
|
]
|
|
177
178
|
}, e.id)) })] })
|
|
178
179
|
}),
|
|
179
|
-
/* @__PURE__ */
|
|
180
|
+
/* @__PURE__ */ y("ul", {
|
|
180
181
|
className: "space-y-3 md:hidden",
|
|
181
|
-
children:
|
|
182
|
+
children: X.map((e) => /* @__PURE__ */ b("li", {
|
|
182
183
|
className: "relative",
|
|
183
|
-
children: [/* @__PURE__ */
|
|
184
|
+
children: [/* @__PURE__ */ b("button", {
|
|
184
185
|
type: "button",
|
|
185
|
-
onClick: () =>
|
|
186
|
+
onClick: () => z(`pipelines/${e.id}`),
|
|
186
187
|
className: "flex w-full flex-col gap-2 rounded-card border border-border-default bg-bg-elevated p-4 pr-12 text-left transition-colors hover:border-border-strong",
|
|
187
188
|
children: [
|
|
188
|
-
/* @__PURE__ */
|
|
189
|
+
/* @__PURE__ */ b("div", {
|
|
189
190
|
className: "flex items-start justify-between gap-2",
|
|
190
|
-
children: [/* @__PURE__ */
|
|
191
|
+
children: [/* @__PURE__ */ b("span", {
|
|
191
192
|
className: "min-w-0 font-medium text-text-primary",
|
|
192
|
-
children: [/* @__PURE__ */
|
|
193
|
+
children: [/* @__PURE__ */ y("span", {
|
|
193
194
|
className: "block truncate",
|
|
194
195
|
children: e.name
|
|
195
|
-
}), e.description ? /* @__PURE__ */
|
|
196
|
+
}), e.description ? /* @__PURE__ */ y("span", {
|
|
196
197
|
className: "mt-0.5 line-clamp-1 text-xs font-normal text-text-secondary",
|
|
197
198
|
children: e.description
|
|
198
199
|
}) : null]
|
|
199
|
-
}), /* @__PURE__ */
|
|
200
|
+
}), /* @__PURE__ */ y(p, {
|
|
200
201
|
status: e.status,
|
|
201
202
|
className: "shrink-0"
|
|
202
203
|
})]
|
|
203
204
|
}),
|
|
204
|
-
/* @__PURE__ */
|
|
205
|
+
/* @__PURE__ */ b("dl", {
|
|
205
206
|
className: "grid grid-cols-2 gap-x-3 gap-y-1 text-xs",
|
|
206
207
|
children: [
|
|
207
|
-
/* @__PURE__ */
|
|
208
|
+
/* @__PURE__ */ b("div", {
|
|
208
209
|
className: "flex flex-col",
|
|
209
|
-
children: [/* @__PURE__ */
|
|
210
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
210
211
|
className: "text-text-secondary",
|
|
211
|
-
children: "Trigger"
|
|
212
|
-
}), /* @__PURE__ */
|
|
212
|
+
children: B("cosmicintersection.common.trigger", "Trigger")
|
|
213
|
+
}), /* @__PURE__ */ y("dd", {
|
|
213
214
|
className: "text-text-primary",
|
|
214
|
-
children:
|
|
215
|
+
children: m(e.trigger)
|
|
215
216
|
})]
|
|
216
217
|
}),
|
|
217
|
-
/* @__PURE__ */
|
|
218
|
+
/* @__PURE__ */ b("div", {
|
|
218
219
|
className: "flex flex-col",
|
|
219
|
-
children: [/* @__PURE__ */
|
|
220
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
220
221
|
className: "text-text-secondary",
|
|
221
|
-
children: "Version"
|
|
222
|
-
}), /* @__PURE__ */
|
|
222
|
+
children: B("cosmicintersection.common.version", "Version")
|
|
223
|
+
}), /* @__PURE__ */ b("dd", {
|
|
223
224
|
className: "tabular-nums text-text-primary",
|
|
224
225
|
children: ["v", e.version]
|
|
225
226
|
})]
|
|
226
227
|
}),
|
|
227
|
-
/* @__PURE__ */
|
|
228
|
+
/* @__PURE__ */ b("div", {
|
|
228
229
|
className: "flex flex-col",
|
|
229
|
-
children: [/* @__PURE__ */
|
|
230
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
230
231
|
className: "text-text-secondary",
|
|
231
|
-
children: "Schedule"
|
|
232
|
-
}), /* @__PURE__ */
|
|
232
|
+
children: B("cosmicintersection.common.schedule", "Schedule")
|
|
233
|
+
}), /* @__PURE__ */ y("dd", {
|
|
233
234
|
className: "font-mono text-text-primary",
|
|
234
235
|
children: e.schedule || "—"
|
|
235
236
|
})]
|
|
236
237
|
}),
|
|
237
|
-
/* @__PURE__ */
|
|
238
|
+
/* @__PURE__ */ b("div", {
|
|
238
239
|
className: "flex flex-col",
|
|
239
|
-
children: [/* @__PURE__ */
|
|
240
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
240
241
|
className: "text-text-secondary",
|
|
241
|
-
children: "Last run"
|
|
242
|
-
}), /* @__PURE__ */
|
|
242
|
+
children: B("cosmicintersection.common.lastRun", "Last run")
|
|
243
|
+
}), /* @__PURE__ */ y("dd", {
|
|
243
244
|
className: "text-text-primary",
|
|
244
|
-
children:
|
|
245
|
+
children: R(e.lastRunAt)
|
|
245
246
|
})]
|
|
246
247
|
})
|
|
247
248
|
]
|
|
248
249
|
}),
|
|
249
|
-
e.tags.length > 0 ? /* @__PURE__ */
|
|
250
|
+
e.tags.length > 0 ? /* @__PURE__ */ b("div", {
|
|
250
251
|
className: "flex flex-wrap gap-1",
|
|
251
|
-
children: [e.tags.slice(0, 4).map((e) => /* @__PURE__ */
|
|
252
|
+
children: [e.tags.slice(0, 4).map((e) => /* @__PURE__ */ y("span", {
|
|
252
253
|
className: "rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary",
|
|
253
254
|
children: e
|
|
254
|
-
}, e)), e.tags.length > 4 ? /* @__PURE__ */
|
|
255
|
+
}, e)), e.tags.length > 4 ? /* @__PURE__ */ b("span", {
|
|
255
256
|
className: "text-xs text-text-secondary",
|
|
256
257
|
children: ["+", e.tags.length - 4]
|
|
257
258
|
}) : null]
|
|
258
259
|
}) : null
|
|
259
260
|
]
|
|
260
|
-
}), /* @__PURE__ */
|
|
261
|
+
}), /* @__PURE__ */ y("div", {
|
|
261
262
|
className: "absolute right-2 top-2",
|
|
262
|
-
children: /* @__PURE__ */
|
|
263
|
-
ariaLabel:
|
|
263
|
+
children: /* @__PURE__ */ y(o, {
|
|
264
|
+
ariaLabel: B("cosmicintersection.common.actionsFor", "Actions for {{name}}", { name: e.name }),
|
|
264
265
|
entityName: e.name,
|
|
265
|
-
onView: () =>
|
|
266
|
-
onEdit: () =>
|
|
267
|
-
onDelete: () =>
|
|
268
|
-
deleteLabel: "Archive pipeline",
|
|
266
|
+
onView: () => z(`pipelines/${e.id}`),
|
|
267
|
+
onEdit: () => z(`pipelines/${e.id}/edit`),
|
|
268
|
+
onDelete: () => $(e),
|
|
269
|
+
deleteLabel: B("cosmicintersection.pages.pipelines.archive", "Archive pipeline"),
|
|
269
270
|
extraItems: [{
|
|
270
271
|
key: "start",
|
|
271
|
-
label: "Start run",
|
|
272
|
-
icon:
|
|
273
|
-
onSelect: () => void
|
|
272
|
+
label: B("cosmicintersection.pages.pipelines.startRun", "Start run"),
|
|
273
|
+
icon: S,
|
|
274
|
+
onSelect: () => void Q(e),
|
|
274
275
|
disabled: e.status === "ARCHIVED"
|
|
275
276
|
}]
|
|
276
277
|
})
|
|
277
278
|
})]
|
|
278
279
|
}, e.id))
|
|
279
280
|
}),
|
|
280
|
-
/* @__PURE__ */
|
|
281
|
-
offset:
|
|
282
|
-
limit:
|
|
283
|
-
loadedCount:
|
|
284
|
-
hasMore:
|
|
285
|
-
onPrev:
|
|
286
|
-
onNext:
|
|
287
|
-
itemLabel: "pipelines",
|
|
288
|
-
loading:
|
|
281
|
+
/* @__PURE__ */ y(d, {
|
|
282
|
+
offset: U.offset,
|
|
283
|
+
limit: U.limit,
|
|
284
|
+
loadedCount: X.length,
|
|
285
|
+
hasMore: Z?.hasMore ?? !1,
|
|
286
|
+
onPrev: U.prevPage,
|
|
287
|
+
onNext: U.nextPage,
|
|
288
|
+
itemLabel: B("cosmicintersection.pages.pipelines.itemLabel", "pipelines"),
|
|
289
|
+
loading: G
|
|
289
290
|
})
|
|
290
291
|
] })]
|
|
291
292
|
})
|
|
292
293
|
});
|
|
293
294
|
}
|
|
294
295
|
//#endregion
|
|
295
|
-
export {
|
|
296
|
+
export { z as default };
|
|
296
297
|
|
|
297
298
|
//# sourceMappingURL=PipelinesPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelinesPage.js","names":[],"sources":["../../../../src/cosmicintersection/pages/pipelines/PipelinesPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { GitBranch, Play, Plus } from 'lucide-react';\nimport {\n Button,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@burdenoff/fe-libs/ui';\n\nimport {\n useCosArchivePipelineMutation,\n useCosPipelinesQuery,\n useCosStartRunMutation,\n type CosPipeline,\n type CosPipelineStatus,\n} from '../../api/cosmicApi';\nimport {\n ActionMenu,\n EmptyState,\n ErrorState,\n LoadingState,\n PageLayout,\n Pagination,\n StatusBadge,\n formatEnumLabel,\n usePagination,\n} from '../../components';\nimport { useCosmicIntersection } from '../../context/CosmicIntersectionContext';\nimport { mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\nconst STATUS_OPTIONS: CosPipelineStatus[] = ['DRAFT', 'ACTIVE', 'PAUSED', 'ARCHIVED'];\nconst ALL = 'ALL';\n\nfunction formatDate(value?: string | null): string {\n if (!value) {\n return '—';\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? '—' : date.toLocaleString();\n}\n\nexport default function PipelinesPage() {\n const { navigate } = useCosmicIntersection();\n const [status, setStatus] = useState<CosPipelineStatus | typeof ALL>(ALL);\n const pagination = usePagination({ resetKey: status });\n\n const { data, loading, error, refetch } = useCosPipelinesQuery({\n status: status === ALL ? undefined : status,\n pagination: { limit: pagination.limit, offset: pagination.offset },\n });\n\n const [startRun] = useCosStartRunMutation();\n const [archivePipeline] = useCosArchivePipelineMutation();\n\n const pipelines = useMemo(() => data?.cosListPipelines.items ?? [], [data]);\n const pageInfo = data?.cosListPipelines.pageInfo;\n\n const handleStartRun = async (pipeline: CosPipeline) => {\n const response = await startRun({ variables: { input: { pipelineId: pipeline.id } } });\n const runId = response.data?.cosStartRun?.id;\n if (!mutationSucceeded(response, runId, 'Could not start a run')) {\n return;\n }\n notify.success('Run started', `A new run for “${pipeline.name}” is queued.`);\n await refetch();\n if (runId) {\n navigate(`runs/${runId}`);\n }\n };\n\n const handleArchive = async (pipeline: CosPipeline) => {\n const response = await archivePipeline({ variables: { id: pipeline.id } });\n if (\n !mutationSucceeded(response, response.data?.cosArchivePipeline, 'Could not archive pipeline')\n ) {\n throw new Error('Archive not confirmed');\n }\n await refetch();\n notify.success('Pipeline archived', `“${pipeline.name}” was archived.`);\n };\n\n const renderBody = () => {\n if (loading) {\n return <LoadingState variant=\"rows\" rows={6} label=\"Loading pipelines…\" />;\n }\n if (error) {\n return (\n <ErrorState\n message=\"We could not load your pipelines. Please try again.\"\n onRetry={() => void refetch()}\n />\n );\n }\n if (pipelines.length === 0) {\n return (\n <EmptyState\n icon={GitBranch}\n title={status === ALL ? 'No pipelines yet' : 'No pipelines match this filter'}\n description={\n status === ALL\n ? 'Pipelines orchestrate ingest, calibration, transform and export steps over your datasets.'\n : 'Try a different status filter to see more pipelines.'\n }\n action={\n status === ALL ? (\n <Button type=\"button\" onClick={() => navigate('pipelines/create')}>\n <Plus className=\"size-4\" />\n New pipeline\n </Button>\n ) : undefined\n }\n />\n );\n }\n\n return (\n <>\n {/* Desktop: table. */}\n <div className=\"hidden rounded-card border border-border-default bg-bg-elevated md:block\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Trigger</TableHead>\n <TableHead>Schedule</TableHead>\n <TableHead>Last run</TableHead>\n <TableHead className=\"text-right\">Version</TableHead>\n <TableHead>Tags</TableHead>\n <TableHead className=\"w-12 text-right\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {pipelines.map((pipeline) => (\n <TableRow\n key={pipeline.id}\n className=\"cursor-pointer\"\n onClick={() => navigate(`pipelines/${pipeline.id}`)}\n >\n <TableCell className=\"font-medium text-text-primary\">\n <div className=\"flex flex-col\">\n <span className=\"truncate\">{pipeline.name}</span>\n {pipeline.description ? (\n <span className=\"mt-0.5 line-clamp-1 text-xs text-text-secondary\">\n {pipeline.description}\n </span>\n ) : null}\n </div>\n </TableCell>\n <TableCell>\n <StatusBadge status={pipeline.status} />\n </TableCell>\n <TableCell className=\"text-text-secondary\">\n {formatEnumLabel(pipeline.trigger)}\n </TableCell>\n <TableCell className=\"font-mono text-xs text-text-secondary\">\n {pipeline.schedule || '—'}\n </TableCell>\n <TableCell className=\"whitespace-nowrap text-text-secondary\">\n {formatDate(pipeline.lastRunAt)}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-secondary\">\n v{pipeline.version}\n </TableCell>\n <TableCell>\n <div className=\"flex max-w-[12rem] flex-wrap gap-1\">\n {pipeline.tags.length === 0 ? (\n <span className=\"text-xs text-text-secondary\">—</span>\n ) : (\n pipeline.tags.slice(0, 3).map((tag) => (\n <span\n key={tag}\n className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n {tag}\n </span>\n ))\n )}\n {pipeline.tags.length > 3 ? (\n <span className=\"text-xs text-text-secondary\">\n +{pipeline.tags.length - 3}\n </span>\n ) : null}\n </div>\n </TableCell>\n <TableCell className=\"text-right\">\n <ActionMenu\n ariaLabel={`Actions for ${pipeline.name}`}\n entityName={pipeline.name}\n onView={() => navigate(`pipelines/${pipeline.id}`)}\n onEdit={() => navigate(`pipelines/${pipeline.id}/edit`)}\n onDelete={() => handleArchive(pipeline)}\n deleteLabel=\"Archive pipeline\"\n extraItems={[\n {\n key: 'start',\n label: 'Start run',\n icon: Play,\n onSelect: () => void handleStartRun(pipeline),\n disabled: pipeline.status === 'ARCHIVED',\n },\n ]}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n\n {/* Mobile: stacked cards. */}\n <ul className=\"space-y-3 md:hidden\">\n {pipelines.map((pipeline) => (\n <li key={pipeline.id} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => navigate(`pipelines/${pipeline.id}`)}\n className=\"flex w-full flex-col gap-2 rounded-card border border-border-default bg-bg-elevated p-4 pr-12 text-left transition-colors hover:border-border-strong\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <span className=\"min-w-0 font-medium text-text-primary\">\n <span className=\"block truncate\">{pipeline.name}</span>\n {pipeline.description ? (\n <span className=\"mt-0.5 line-clamp-1 text-xs font-normal text-text-secondary\">\n {pipeline.description}\n </span>\n ) : null}\n </span>\n <StatusBadge status={pipeline.status} className=\"shrink-0\" />\n </div>\n <dl className=\"grid grid-cols-2 gap-x-3 gap-y-1 text-xs\">\n <div className=\"flex flex-col\">\n <dt className=\"text-text-secondary\">Trigger</dt>\n <dd className=\"text-text-primary\">{formatEnumLabel(pipeline.trigger)}</dd>\n </div>\n <div className=\"flex flex-col\">\n <dt className=\"text-text-secondary\">Version</dt>\n <dd className=\"tabular-nums text-text-primary\">v{pipeline.version}</dd>\n </div>\n <div className=\"flex flex-col\">\n <dt className=\"text-text-secondary\">Schedule</dt>\n <dd className=\"font-mono text-text-primary\">{pipeline.schedule || '—'}</dd>\n </div>\n <div className=\"flex flex-col\">\n <dt className=\"text-text-secondary\">Last run</dt>\n <dd className=\"text-text-primary\">{formatDate(pipeline.lastRunAt)}</dd>\n </div>\n </dl>\n {pipeline.tags.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">\n {pipeline.tags.slice(0, 4).map((tag) => (\n <span\n key={tag}\n className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n {tag}\n </span>\n ))}\n {pipeline.tags.length > 4 ? (\n <span className=\"text-xs text-text-secondary\">\n +{pipeline.tags.length - 4}\n </span>\n ) : null}\n </div>\n ) : null}\n </button>\n <div className=\"absolute right-2 top-2\">\n <ActionMenu\n ariaLabel={`Actions for ${pipeline.name}`}\n entityName={pipeline.name}\n onView={() => navigate(`pipelines/${pipeline.id}`)}\n onEdit={() => navigate(`pipelines/${pipeline.id}/edit`)}\n onDelete={() => handleArchive(pipeline)}\n deleteLabel=\"Archive pipeline\"\n extraItems={[\n {\n key: 'start',\n label: 'Start run',\n icon: Play,\n onSelect: () => void handleStartRun(pipeline),\n disabled: pipeline.status === 'ARCHIVED',\n },\n ]}\n />\n </div>\n </li>\n ))}\n </ul>\n\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={pipelines.length}\n hasMore={pageInfo?.hasMore ?? false}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel=\"pipelines\"\n loading={loading}\n />\n </>\n );\n };\n\n return (\n <PageLayout\n title=\"Pipelines\"\n description=\"Orchestrate ingest, calibration, transform and export steps across your data.\"\n actions={\n <Button type=\"button\" onClick={() => navigate('pipelines/create')}>\n <Plus className=\"size-4\" />\n New pipeline\n </Button>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <label className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <span>Status</span>\n <Select\n value={status}\n onValueChange={(value) => setStatus(value as CosPipelineStatus | typeof ALL)}\n >\n <SelectTrigger aria-label=\"Filter by status\" className=\"w-44\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>All statuses</SelectItem>\n {STATUS_OPTIONS.map((option) => (\n <SelectItem key={option} value={option}>\n {formatEnumLabel(option)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {renderBody()}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PipelinesPage.js","names":[],"sources":["../../../../src/cosmicintersection/pages/pipelines/PipelinesPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { GitBranch, Play, Plus } from 'lucide-react';\nimport {\n Button,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@burdenoff/fe-libs/ui';\n\nimport {\n useCosArchivePipelineMutation,\n useCosPipelinesQuery,\n useCosStartRunMutation,\n type CosPipeline,\n type CosPipelineStatus,\n} from '../../api/cosmicApi';\nimport {\n ActionMenu,\n EmptyState,\n ErrorState,\n LoadingState,\n PageLayout,\n Pagination,\n StatusBadge,\n formatEnumLabel,\n usePagination,\n} from '../../components';\nimport { useCosmicIntersection } from '../../context/CosmicIntersectionContext';\nimport { mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\nimport { useTr } from '../../../shared/hooks/useTr';\n\nconst STATUS_OPTIONS: CosPipelineStatus[] = ['DRAFT', 'ACTIVE', 'PAUSED', 'ARCHIVED'];\nconst ALL = 'ALL';\n\nfunction formatDate(value?: string | null): string {\n if (!value) {\n return '—';\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? '—' : date.toLocaleString();\n}\n\nexport default function PipelinesPage() {\n const { navigate } = useCosmicIntersection();\n const tr = useTr();\n const [status, setStatus] = useState<CosPipelineStatus | typeof ALL>(ALL);\n const pagination = usePagination({ resetKey: status });\n\n const { data, loading, error, refetch } = useCosPipelinesQuery({\n status: status === ALL ? undefined : status,\n pagination: { limit: pagination.limit, offset: pagination.offset },\n });\n\n const [startRun] = useCosStartRunMutation();\n const [archivePipeline] = useCosArchivePipelineMutation();\n\n const pipelines = useMemo(() => data?.cosListPipelines.items ?? [], [data]);\n const pageInfo = data?.cosListPipelines.pageInfo;\n\n const handleStartRun = async (pipeline: CosPipeline) => {\n const response = await startRun({ variables: { input: { pipelineId: pipeline.id } } });\n const runId = response.data?.cosStartRun?.id;\n if (\n !mutationSucceeded(\n response,\n runId,\n tr('cosmicintersection.pages.pipelines.startRunError', 'Could not start a run')\n )\n ) {\n return;\n }\n notify.success(\n tr('cosmicintersection.pages.pipelines.startRunSuccess', 'Run started'),\n tr(\n 'cosmicintersection.pages.pipelines.startRunSuccessDescription',\n 'A new run for “{{name}}” is queued.',\n { name: pipeline.name }\n )\n );\n await refetch();\n if (runId) {\n navigate(`runs/${runId}`);\n }\n };\n\n const handleArchive = async (pipeline: CosPipeline) => {\n const response = await archivePipeline({ variables: { id: pipeline.id } });\n if (\n !mutationSucceeded(\n response,\n response.data?.cosArchivePipeline,\n tr('cosmicintersection.pages.pipelines.archiveError', 'Could not archive pipeline')\n )\n ) {\n throw new Error('Archive not confirmed');\n }\n await refetch();\n notify.success(\n tr('cosmicintersection.pages.pipelines.archiveSuccess', 'Pipeline archived'),\n tr(\n 'cosmicintersection.pages.pipelines.archiveSuccessDescription',\n '“{{name}}” was archived.',\n { name: pipeline.name }\n )\n );\n };\n\n const renderBody = () => {\n if (loading) {\n return (\n <LoadingState\n variant=\"rows\"\n rows={6}\n label={tr('cosmicintersection.pages.pipelines.loading', 'Loading pipelines…')}\n />\n );\n }\n if (error) {\n return (\n <ErrorState\n message={tr(\n 'cosmicintersection.pages.pipelines.error',\n 'We could not load your pipelines. Please try again.'\n )}\n onRetry={() => void refetch()}\n />\n );\n }\n if (pipelines.length === 0) {\n return (\n <EmptyState\n icon={GitBranch}\n title={\n status === ALL\n ? tr('cosmicintersection.pages.pipelines.emptyTitle', 'No pipelines yet')\n : tr(\n 'cosmicintersection.pages.pipelines.emptyFilterTitle',\n 'No pipelines match this filter'\n )\n }\n description={\n status === ALL\n ? tr(\n 'cosmicintersection.pages.pipelines.emptyDescription',\n 'Pipelines orchestrate ingest, calibration, transform and export steps over your datasets.'\n )\n : tr(\n 'cosmicintersection.pages.pipelines.emptyFilterDescription',\n 'Try a different status filter to see more pipelines.'\n )\n }\n action={\n status === ALL ? (\n <Button type=\"button\" onClick={() => navigate('pipelines/create')}>\n <Plus className=\"size-4\" />\n {tr('cosmicintersection.pages.pipelines.create', 'New pipeline')}\n </Button>\n ) : undefined\n }\n />\n );\n }\n\n return (\n <>\n {/* Desktop: table. */}\n <div className=\"hidden rounded-card border border-border-default bg-bg-elevated md:block\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{tr('cosmicintersection.common.name', 'Name')}</TableHead>\n <TableHead>{tr('cosmicintersection.common.status', 'Status')}</TableHead>\n <TableHead>{tr('cosmicintersection.common.trigger', 'Trigger')}</TableHead>\n <TableHead>{tr('cosmicintersection.common.schedule', 'Schedule')}</TableHead>\n <TableHead>{tr('cosmicintersection.common.lastRun', 'Last run')}</TableHead>\n <TableHead className=\"text-right\">\n {tr('cosmicintersection.common.version', 'Version')}\n </TableHead>\n <TableHead>{tr('cosmicintersection.common.tags', 'Tags')}</TableHead>\n <TableHead className=\"w-12 text-right\">\n <span className=\"sr-only\">\n {tr('cosmicintersection.common.actions', 'Actions')}\n </span>\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {pipelines.map((pipeline) => (\n <TableRow\n key={pipeline.id}\n className=\"cursor-pointer\"\n onClick={() => navigate(`pipelines/${pipeline.id}`)}\n >\n <TableCell className=\"font-medium text-text-primary\">\n <div className=\"flex flex-col\">\n <span className=\"truncate\">{pipeline.name}</span>\n {pipeline.description ? (\n <span className=\"mt-0.5 line-clamp-1 text-xs text-text-secondary\">\n {pipeline.description}\n </span>\n ) : null}\n </div>\n </TableCell>\n <TableCell>\n <StatusBadge status={pipeline.status} />\n </TableCell>\n <TableCell className=\"text-text-secondary\">\n {formatEnumLabel(pipeline.trigger)}\n </TableCell>\n <TableCell className=\"font-mono text-xs text-text-secondary\">\n {pipeline.schedule || '—'}\n </TableCell>\n <TableCell className=\"whitespace-nowrap text-text-secondary\">\n {formatDate(pipeline.lastRunAt)}\n </TableCell>\n <TableCell className=\"text-right tabular-nums text-text-secondary\">\n v{pipeline.version}\n </TableCell>\n <TableCell>\n <div className=\"flex max-w-[12rem] flex-wrap gap-1\">\n {pipeline.tags.length === 0 ? (\n <span className=\"text-xs text-text-secondary\">—</span>\n ) : (\n pipeline.tags.slice(0, 3).map((tag) => (\n <span\n key={tag}\n className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n {tag}\n </span>\n ))\n )}\n {pipeline.tags.length > 3 ? (\n <span className=\"text-xs text-text-secondary\">\n +{pipeline.tags.length - 3}\n </span>\n ) : null}\n </div>\n </TableCell>\n <TableCell className=\"text-right\">\n <ActionMenu\n ariaLabel={tr(\n 'cosmicintersection.common.actionsFor',\n 'Actions for {{name}}',\n { name: pipeline.name }\n )}\n entityName={pipeline.name}\n onView={() => navigate(`pipelines/${pipeline.id}`)}\n onEdit={() => navigate(`pipelines/${pipeline.id}/edit`)}\n onDelete={() => handleArchive(pipeline)}\n deleteLabel={tr(\n 'cosmicintersection.pages.pipelines.archive',\n 'Archive pipeline'\n )}\n extraItems={[\n {\n key: 'start',\n label: tr('cosmicintersection.pages.pipelines.startRun', 'Start run'),\n icon: Play,\n onSelect: () => void handleStartRun(pipeline),\n disabled: pipeline.status === 'ARCHIVED',\n },\n ]}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n\n {/* Mobile: stacked cards. */}\n <ul className=\"space-y-3 md:hidden\">\n {pipelines.map((pipeline) => (\n <li key={pipeline.id} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => navigate(`pipelines/${pipeline.id}`)}\n className=\"flex w-full flex-col gap-2 rounded-card border border-border-default bg-bg-elevated p-4 pr-12 text-left transition-colors hover:border-border-strong\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <span className=\"min-w-0 font-medium text-text-primary\">\n <span className=\"block truncate\">{pipeline.name}</span>\n {pipeline.description ? (\n <span className=\"mt-0.5 line-clamp-1 text-xs font-normal text-text-secondary\">\n {pipeline.description}\n </span>\n ) : null}\n </span>\n <StatusBadge status={pipeline.status} className=\"shrink-0\" />\n </div>\n <dl className=\"grid grid-cols-2 gap-x-3 gap-y-1 text-xs\">\n <div className=\"flex flex-col\">\n <dt className=\"text-text-secondary\">\n {tr('cosmicintersection.common.trigger', 'Trigger')}\n </dt>\n <dd className=\"text-text-primary\">{formatEnumLabel(pipeline.trigger)}</dd>\n </div>\n <div className=\"flex flex-col\">\n <dt className=\"text-text-secondary\">\n {tr('cosmicintersection.common.version', 'Version')}\n </dt>\n <dd className=\"tabular-nums text-text-primary\">v{pipeline.version}</dd>\n </div>\n <div className=\"flex flex-col\">\n <dt className=\"text-text-secondary\">\n {tr('cosmicintersection.common.schedule', 'Schedule')}\n </dt>\n <dd className=\"font-mono text-text-primary\">{pipeline.schedule || '—'}</dd>\n </div>\n <div className=\"flex flex-col\">\n <dt className=\"text-text-secondary\">\n {tr('cosmicintersection.common.lastRun', 'Last run')}\n </dt>\n <dd className=\"text-text-primary\">{formatDate(pipeline.lastRunAt)}</dd>\n </div>\n </dl>\n {pipeline.tags.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">\n {pipeline.tags.slice(0, 4).map((tag) => (\n <span\n key={tag}\n className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n {tag}\n </span>\n ))}\n {pipeline.tags.length > 4 ? (\n <span className=\"text-xs text-text-secondary\">\n +{pipeline.tags.length - 4}\n </span>\n ) : null}\n </div>\n ) : null}\n </button>\n <div className=\"absolute right-2 top-2\">\n <ActionMenu\n ariaLabel={tr('cosmicintersection.common.actionsFor', 'Actions for {{name}}', {\n name: pipeline.name,\n })}\n entityName={pipeline.name}\n onView={() => navigate(`pipelines/${pipeline.id}`)}\n onEdit={() => navigate(`pipelines/${pipeline.id}/edit`)}\n onDelete={() => handleArchive(pipeline)}\n deleteLabel={tr('cosmicintersection.pages.pipelines.archive', 'Archive pipeline')}\n extraItems={[\n {\n key: 'start',\n label: tr('cosmicintersection.pages.pipelines.startRun', 'Start run'),\n icon: Play,\n onSelect: () => void handleStartRun(pipeline),\n disabled: pipeline.status === 'ARCHIVED',\n },\n ]}\n />\n </div>\n </li>\n ))}\n </ul>\n\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={pipelines.length}\n hasMore={pageInfo?.hasMore ?? false}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel={tr('cosmicintersection.pages.pipelines.itemLabel', 'pipelines')}\n loading={loading}\n />\n </>\n );\n };\n\n return (\n <PageLayout\n title={tr('cosmicintersection.pages.pipelines.title', 'Pipelines')}\n description={tr(\n 'cosmicintersection.pages.pipelines.description',\n 'Orchestrate ingest, calibration, transform and export steps across your data.'\n )}\n actions={\n <Button type=\"button\" onClick={() => navigate('pipelines/create')}>\n <Plus className=\"size-4\" />\n {tr('cosmicintersection.pages.pipelines.create', 'New pipeline')}\n </Button>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <label className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <span>{tr('cosmicintersection.common.status', 'Status')}</span>\n <Select\n value={status}\n onValueChange={(value) => setStatus(value as CosPipelineStatus | typeof ALL)}\n >\n <SelectTrigger\n aria-label={tr('cosmicintersection.common.filterByStatus', 'Filter by status')}\n className=\"w-44\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>\n {tr('cosmicintersection.common.allStatuses', 'All statuses')}\n </SelectItem>\n {STATUS_OPTIONS.map((option) => (\n <SelectItem key={option} value={option}>\n {formatEnumLabel(option)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {renderBody()}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleasesPage.d.ts","sourceRoot":"","sources":["../../../../src/cosmicintersection/pages/releases/ReleasesPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReleasesPage.d.ts","sourceRoot":"","sources":["../../../../src/cosmicintersection/pages/releases/ReleasesPage.tsx"],"names":[],"mappings":"AA8EA,MAAM,CAAC,OAAO,UAAU,YAAY,4CA+jBnC"}
|