@burdenoff/microfe-devportal 2026.624.18 → 2026.624.21
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/devportal/pages/ApplicationDetailPage.js +360 -294
- package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +189 -191
- package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
- package/dist/devportal/pages/PublishPage.js +306 -196
- package/dist/devportal/pages/PublishPage.js.map +1 -1
- package/dist/generated/global-operations.js +181 -167
- package/dist/generated/global-operations.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,69 +14,67 @@ import { useDevportalPermission as c } from "../hooks/usePermission.js";
|
|
|
14
14
|
import "../hooks/index.js";
|
|
15
15
|
import ce from "../../node_modules/.bun/date-fns@3.6.0/node_modules/date-fns/format.js";
|
|
16
16
|
import { usePackageUpload as le } from "../hooks/usePackageUpload.js";
|
|
17
|
-
import { useCallback as
|
|
18
|
-
import { useI18n as
|
|
19
|
-
import { AlertCircle as
|
|
20
|
-
import { useParams as
|
|
21
|
-
import { Fragment as
|
|
22
|
-
import { gql as
|
|
23
|
-
import { useMutation as
|
|
17
|
+
import { useCallback as ue, useEffect as de, useMemo as l, useRef as u, useState as d } from "react";
|
|
18
|
+
import { useI18n as fe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
19
|
+
import { AlertCircle as f, Archive as pe, CheckCircle as p, Clock as me, FileJson as he, Loader2 as m, Package as ge, Plus as _e, Upload as h } from "lucide-react";
|
|
20
|
+
import { useParams as ve } from "react-router-dom";
|
|
21
|
+
import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
22
|
+
import { gql as y } from "@apollo/client";
|
|
23
|
+
import { useMutation as ye, useQuery as be } from "@apollo/client/react";
|
|
24
24
|
//#region src/devportal/pages/ApplicationVersionsPage.tsx
|
|
25
25
|
var xe = () => {
|
|
26
|
-
let { t: xe } =
|
|
26
|
+
let { t: xe } = fe(), b = (e, t) => {
|
|
27
27
|
let n = xe(e);
|
|
28
28
|
return n === e ? t : n;
|
|
29
|
-
}, { allowed: Se } = c(s.APP_VERSION_CREATE), { allowed: x } = c(s.APP_VERSION_PUBLISH), { allowed: S } = c(s.APP_VERSION_DEPRECATE), { appId: C } =
|
|
29
|
+
}, { allowed: Se } = c(s.APP_VERSION_CREATE), { allowed: x } = c(s.APP_VERSION_PUBLISH), { allowed: S } = c(s.APP_VERSION_DEPRECATE), { appId: C } = ve(), { workspacesGatewayUrl: Ce, authToken: we, workspaceId: Te, getWorkspaceToken: Ee } = e(), { data: De } = be(y`query MyPublisherVersions { myPublisher { id } }`, { fetchPolicy: "cache-first" }), w = De?.myPublisher?.id ?? null, { data: Oe } = be(y`query PublisherProductsVersions($publisherId: String!) { products(filter: { publisherId: $publisherId }) { id productId } }`, {
|
|
30
30
|
variables: { publisherId: w ?? "" },
|
|
31
31
|
fetchPolicy: "cache-first",
|
|
32
32
|
skip: !w
|
|
33
|
-
}), T = Oe?.products?.find((e) => e.productId === C)?.id ?? null, [ke] =
|
|
33
|
+
}), T = Oe?.products?.find((e) => e.productId === C)?.id ?? null, [ke] = ye(y`
|
|
34
34
|
mutation UpdateStoreProductVersion($input: UpdateProductInput!) {
|
|
35
35
|
updateProduct(input: $input) { id manifestVersion }
|
|
36
36
|
}
|
|
37
|
-
`), { upload: E, uploading: D, progress: O, error: k } = le(Ce, we, Te, Ee), A =
|
|
37
|
+
`), { upload: E, uploading: D, progress: O, error: k } = le(Ce, we, Te, Ee), A = u(null), j = u(null), [M, N] = d(!1), [P, F] = d({
|
|
38
38
|
version: "",
|
|
39
39
|
releaseNotes: "",
|
|
40
40
|
changelog: "",
|
|
41
41
|
packageUrl: "",
|
|
42
42
|
packageSize: "",
|
|
43
43
|
manifestJson: ""
|
|
44
|
-
}), [I,
|
|
44
|
+
}), [I, Ae] = d(null), [L, R] = d("file"), [je, z] = d(null), [Me, B] = d(null), [V, H] = d(/* @__PURE__ */ new Set()), [Ne, U] = d(null), { data: W } = ee({
|
|
45
45
|
variables: { id: C ?? "" },
|
|
46
46
|
skip: !C,
|
|
47
47
|
fetchPolicy: "cache-first"
|
|
48
|
-
}),
|
|
49
|
-
|
|
50
|
-
let e =
|
|
48
|
+
}), Pe = W?.application?.appType === "NODE" || W?.application?.appType === "WORKFLOW", G = W?.application?.appType === "NODE", Fe = W?.application?.appType === "WORKFLOW";
|
|
49
|
+
de(() => {
|
|
50
|
+
let e = W?.application?.name;
|
|
51
51
|
if (!C || !e) return;
|
|
52
52
|
let t = window.__breadcrumbRegistry;
|
|
53
53
|
return t?.register(C, e), () => t?.unregister(C);
|
|
54
|
-
}, [C,
|
|
55
|
-
let { data: K, loading:
|
|
54
|
+
}, [C, W?.application?.name]);
|
|
55
|
+
let { data: K, loading: Ie, error: Le } = te({
|
|
56
56
|
variables: { applicationId: C },
|
|
57
57
|
skip: !C,
|
|
58
58
|
fetchPolicy: "cache-and-network"
|
|
59
|
-
}), [
|
|
59
|
+
}), [Re, { loading: ze }] = n({ refetchQueries: ["GetApplicationVersions"] }), [Be] = ne({ refetchQueries: ["GetApplicationVersions"] }), [Ve] = r({ refetchQueries: ["GetApplicationVersions"] }), q = l(() => K?.application?.versions?.edges?.map((e) => e.node) ?? [], [K?.application?.versions]), J = l(() => q.filter((e) => V.has(e.id)), [q, V]), Y = l(() => J.filter((e) => e.status?.toUpperCase() === "DRAFT"), [J]), X = l(() => J.filter((e) => e.status?.toUpperCase() === "PUBLISHED" && !e.isLatest), [J]), Z = q.length > 0 && q.every((e) => V.has(e.id)), He = q.some((e) => V.has(e.id)) && !Z, Ue = async () => {
|
|
60
60
|
if (!C || !P.version.trim()) return;
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
61
|
+
if (z(null), G && !P.packageUrl) {
|
|
62
|
+
z("A ZIP package is required for NODE type.");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (Pe && !P.manifestJson.trim()) {
|
|
66
|
+
z("A manifest JSON is required.");
|
|
67
|
+
return;
|
|
70
68
|
}
|
|
71
69
|
let e;
|
|
72
70
|
if (P.manifestJson.trim()) try {
|
|
73
71
|
e = JSON.parse(P.manifestJson);
|
|
74
72
|
} catch {
|
|
75
|
-
|
|
73
|
+
z("Invalid JSON in manifest — please check your input.");
|
|
76
74
|
return;
|
|
77
75
|
}
|
|
78
76
|
try {
|
|
79
|
-
await
|
|
77
|
+
await Re({ variables: {
|
|
80
78
|
applicationId: C,
|
|
81
79
|
input: {
|
|
82
80
|
version: P.version,
|
|
@@ -93,11 +91,11 @@ var xe = () => {
|
|
|
93
91
|
packageUrl: "",
|
|
94
92
|
packageSize: "",
|
|
95
93
|
manifestJson: ""
|
|
96
|
-
}),
|
|
94
|
+
}), Ae(null), R("file"), B(b("devportal.versionCreatedSuccess", "Version created successfully"));
|
|
97
95
|
} catch (e) {
|
|
98
|
-
|
|
96
|
+
z(e instanceof Error ? e.message : b("devportal.versionCreateFailed", "Failed to create version"));
|
|
99
97
|
}
|
|
100
|
-
},
|
|
98
|
+
}, We = ue(async (e) => {
|
|
101
99
|
let t = e.target.files?.[0];
|
|
102
100
|
if (t) {
|
|
103
101
|
e.target.value = "";
|
|
@@ -110,39 +108,39 @@ var xe = () => {
|
|
|
110
108
|
}));
|
|
111
109
|
} catch {}
|
|
112
110
|
}
|
|
113
|
-
}, [E]),
|
|
111
|
+
}, [E]), Ge = ue((e) => {
|
|
114
112
|
let t = e.target.files?.[0];
|
|
115
113
|
if (!t) return;
|
|
116
114
|
e.target.value = "";
|
|
117
115
|
let n = new FileReader();
|
|
118
116
|
n.onload = (e) => {
|
|
119
117
|
let n = e.target?.result;
|
|
120
|
-
typeof n == "string" && (
|
|
118
|
+
typeof n == "string" && (Ae(t.name), F((e) => ({
|
|
121
119
|
...e,
|
|
122
120
|
manifestJson: n
|
|
123
121
|
})));
|
|
124
122
|
}, n.readAsText(t);
|
|
125
|
-
}, []),
|
|
126
|
-
|
|
123
|
+
}, []), Ke = async (e) => {
|
|
124
|
+
z(null), B(null);
|
|
127
125
|
try {
|
|
128
|
-
if (await
|
|
126
|
+
if (await Be({ variables: { id: e } }), T) {
|
|
129
127
|
let t = q.find((t) => t.id === e);
|
|
130
128
|
t && await ke({ variables: { input: {
|
|
131
129
|
id: T,
|
|
132
130
|
manifestVersion: t.version,
|
|
133
131
|
manifest: {
|
|
134
132
|
manifestVersion: "1.0",
|
|
135
|
-
name:
|
|
133
|
+
name: W?.application?.slug ?? "",
|
|
136
134
|
version: t.version,
|
|
137
|
-
itemType:
|
|
135
|
+
itemType: W?.application?.appType?.toLowerCase() ?? "node",
|
|
138
136
|
identity: {
|
|
139
|
-
name:
|
|
137
|
+
name: W?.application?.slug ?? "",
|
|
140
138
|
version: t.version,
|
|
141
|
-
displayName:
|
|
142
|
-
description:
|
|
139
|
+
displayName: W?.application?.name ?? "",
|
|
140
|
+
description: W?.application?.shortDescription ?? W?.application?.description ?? ""
|
|
143
141
|
},
|
|
144
142
|
publisher: {
|
|
145
|
-
id:
|
|
143
|
+
id: W?.application?.developerId ?? "",
|
|
146
144
|
name: "Burdenoff"
|
|
147
145
|
},
|
|
148
146
|
pricing: {
|
|
@@ -153,150 +151,150 @@ var xe = () => {
|
|
|
153
151
|
}
|
|
154
152
|
} } }).catch(() => {});
|
|
155
153
|
}
|
|
156
|
-
|
|
154
|
+
B(b("devportal.versionPublishedSuccess", "Version published successfully"));
|
|
157
155
|
} catch (e) {
|
|
158
|
-
|
|
156
|
+
z(e instanceof Error ? e.message : b("devportal.versionPublishFailed", "Failed to publish version"));
|
|
159
157
|
}
|
|
160
|
-
},
|
|
161
|
-
|
|
158
|
+
}, qe = async (e) => {
|
|
159
|
+
z(null), B(null);
|
|
162
160
|
try {
|
|
163
|
-
await
|
|
161
|
+
await Ve({ variables: { id: e } }), B(b("devportal.versionDeprecatedSuccess", "Version deprecated successfully"));
|
|
164
162
|
} catch (e) {
|
|
165
|
-
|
|
163
|
+
z(e instanceof Error ? e.message : b("devportal.versionDeprecateFailed", "Failed to deprecate version"));
|
|
166
164
|
}
|
|
167
|
-
},
|
|
165
|
+
}, Je = (e) => {
|
|
168
166
|
let t = e.status?.toUpperCase();
|
|
169
|
-
return t === "PUBLISHED" && e.isLatest ? /* @__PURE__ */
|
|
167
|
+
return t === "PUBLISHED" && e.isLatest ? /* @__PURE__ */ _(p, {
|
|
170
168
|
size: 16,
|
|
171
169
|
className: "text-status-success-text"
|
|
172
|
-
}) : t === "DRAFT" ? /* @__PURE__ */
|
|
170
|
+
}) : t === "DRAFT" ? /* @__PURE__ */ _(me, {
|
|
173
171
|
size: 16,
|
|
174
172
|
className: "text-status-warning-text"
|
|
175
|
-
}) : t === "DEPRECATED" ? /* @__PURE__ */
|
|
173
|
+
}) : t === "DEPRECATED" ? /* @__PURE__ */ _(pe, {
|
|
176
174
|
size: 16,
|
|
177
175
|
className: "text-text-secondary"
|
|
178
|
-
}) : /* @__PURE__ */
|
|
176
|
+
}) : /* @__PURE__ */ _(ge, {
|
|
179
177
|
size: 16,
|
|
180
178
|
className: "text-accent-blue"
|
|
181
179
|
});
|
|
182
|
-
},
|
|
183
|
-
|
|
180
|
+
}, Ye = (e, t) => {
|
|
181
|
+
H((n) => {
|
|
184
182
|
let r = new Set(n);
|
|
185
183
|
return t ? r.add(e) : r.delete(e), r;
|
|
186
184
|
});
|
|
187
185
|
}, Q = (e) => {
|
|
188
|
-
|
|
186
|
+
H((t) => {
|
|
189
187
|
let n = new Set(t);
|
|
190
188
|
return q.forEach((t) => {
|
|
191
189
|
e ? n.add(t.id) : n.delete(t.id);
|
|
192
190
|
}), n;
|
|
193
191
|
});
|
|
194
|
-
}, $ = () =>
|
|
195
|
-
return
|
|
192
|
+
}, $ = () => H(/* @__PURE__ */ new Set());
|
|
193
|
+
return Ie && !K ? /* @__PURE__ */ _(i, {
|
|
196
194
|
title: b("devportal.versionManagement", "Version Management"),
|
|
197
195
|
description: b("devportal.versionManagementDescription", "Manage your application versions"),
|
|
198
196
|
backLink: `/apps/${C}`,
|
|
199
197
|
backLabel: b("devportal.backToApplication", "Back to Application"),
|
|
200
|
-
children: /* @__PURE__ */
|
|
198
|
+
children: /* @__PURE__ */ _("div", {
|
|
201
199
|
className: "flex items-center justify-center py-16",
|
|
202
|
-
children: /* @__PURE__ */
|
|
200
|
+
children: /* @__PURE__ */ _(m, { className: "h-8 w-8 animate-spin text-muted-foreground" })
|
|
203
201
|
})
|
|
204
|
-
}) :
|
|
202
|
+
}) : Le && !K ? /* @__PURE__ */ _(i, {
|
|
205
203
|
title: b("devportal.versionManagement", "Version Management"),
|
|
206
204
|
description: b("devportal.versionManagementDescription", "Manage your application versions"),
|
|
207
205
|
backLink: `/apps/${C}`,
|
|
208
206
|
backLabel: b("devportal.backToApplication", "Back to Application"),
|
|
209
|
-
children: /* @__PURE__ */
|
|
210
|
-
icon: /* @__PURE__ */
|
|
207
|
+
children: /* @__PURE__ */ _(t, {
|
|
208
|
+
icon: /* @__PURE__ */ _(f, {
|
|
211
209
|
size: 32,
|
|
212
210
|
className: "text-status-error-text"
|
|
213
211
|
}),
|
|
214
212
|
title: b("devportal.failedToLoadVersions", "Failed to load versions"),
|
|
215
|
-
description:
|
|
213
|
+
description: Le.message || b("devportal.versionsLoadError", "An error occurred while loading versions")
|
|
216
214
|
})
|
|
217
|
-
}) : /* @__PURE__ */
|
|
215
|
+
}) : /* @__PURE__ */ _(se, {
|
|
218
216
|
permission: s.APP_READ,
|
|
219
|
-
children: /* @__PURE__ */
|
|
217
|
+
children: /* @__PURE__ */ v(i, {
|
|
220
218
|
title: b("devportal.versionManagement", "Version Management"),
|
|
221
219
|
description: b("devportal.versionManagementDescription", "Manage your application versions"),
|
|
222
220
|
backLink: `/apps/${C}`,
|
|
223
221
|
backLabel: b("devportal.backToApplication", "Back to Application"),
|
|
224
|
-
actions: /* @__PURE__ */
|
|
222
|
+
actions: /* @__PURE__ */ v("button", {
|
|
225
223
|
onClick: () => N(!0),
|
|
226
224
|
disabled: !Se,
|
|
227
225
|
"aria-disabled": !Se,
|
|
228
226
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50",
|
|
229
|
-
children: [/* @__PURE__ */
|
|
227
|
+
children: [/* @__PURE__ */ _(_e, { size: 16 }), b("devportal.newVersion", "New Version")]
|
|
230
228
|
}),
|
|
231
229
|
children: [
|
|
232
|
-
|
|
230
|
+
je && /* @__PURE__ */ v("div", {
|
|
233
231
|
className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-3 flex items-center gap-2 text-sm text-status-error-text",
|
|
234
232
|
children: [
|
|
235
|
-
/* @__PURE__ */
|
|
233
|
+
/* @__PURE__ */ _(f, {
|
|
236
234
|
size: 16,
|
|
237
235
|
className: "flex-shrink-0"
|
|
238
236
|
}),
|
|
239
|
-
|
|
240
|
-
/* @__PURE__ */
|
|
241
|
-
onClick: () =>
|
|
237
|
+
je,
|
|
238
|
+
/* @__PURE__ */ _("button", {
|
|
239
|
+
onClick: () => z(null),
|
|
242
240
|
className: "ml-auto text-status-error-text hover:text-status-error-text",
|
|
243
241
|
children: b("devportal.dismiss", "Dismiss")
|
|
244
242
|
})
|
|
245
243
|
]
|
|
246
244
|
}),
|
|
247
|
-
|
|
245
|
+
Me && /* @__PURE__ */ v("div", {
|
|
248
246
|
className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 flex items-center gap-2 text-sm text-status-success-text",
|
|
249
247
|
children: [
|
|
250
|
-
/* @__PURE__ */
|
|
248
|
+
/* @__PURE__ */ _(p, {
|
|
251
249
|
size: 16,
|
|
252
250
|
className: "flex-shrink-0"
|
|
253
251
|
}),
|
|
254
|
-
|
|
255
|
-
/* @__PURE__ */
|
|
256
|
-
onClick: () =>
|
|
252
|
+
Me,
|
|
253
|
+
/* @__PURE__ */ _("button", {
|
|
254
|
+
onClick: () => B(null),
|
|
257
255
|
className: "ml-auto text-status-success-text hover:text-status-success-text",
|
|
258
256
|
children: b("devportal.dismiss", "Dismiss")
|
|
259
257
|
})
|
|
260
258
|
]
|
|
261
259
|
}),
|
|
262
|
-
q.length > 0 && /* @__PURE__ */
|
|
260
|
+
q.length > 0 && /* @__PURE__ */ _("div", {
|
|
263
261
|
className: "rounded-lg border bg-card p-4",
|
|
264
|
-
children: /* @__PURE__ */
|
|
262
|
+
children: /* @__PURE__ */ v("div", {
|
|
265
263
|
className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
|
|
266
|
-
children: [/* @__PURE__ */
|
|
264
|
+
children: [/* @__PURE__ */ v("div", {
|
|
267
265
|
className: "flex flex-wrap items-center gap-3",
|
|
268
|
-
children: [/* @__PURE__ */
|
|
266
|
+
children: [/* @__PURE__ */ v("div", {
|
|
269
267
|
className: "flex items-center gap-2",
|
|
270
|
-
children: [/* @__PURE__ */
|
|
268
|
+
children: [/* @__PURE__ */ _(a, {
|
|
271
269
|
checked: Z,
|
|
272
|
-
indeterminate:
|
|
270
|
+
indeterminate: He,
|
|
273
271
|
onChange: Q,
|
|
274
272
|
ariaLabel: "Select all visible versions"
|
|
275
|
-
}), /* @__PURE__ */
|
|
273
|
+
}), /* @__PURE__ */ _("span", {
|
|
276
274
|
className: "text-sm font-medium",
|
|
277
275
|
children: b("devportal.selectAllVisible", "Select all visible")
|
|
278
276
|
})]
|
|
279
|
-
}),
|
|
277
|
+
}), V.size > 0 && /* @__PURE__ */ _("button", {
|
|
280
278
|
onClick: $,
|
|
281
279
|
className: "text-sm text-muted-foreground hover:text-foreground",
|
|
282
280
|
children: b("devportal.clearSelection", "Clear selection")
|
|
283
281
|
})]
|
|
284
|
-
}), /* @__PURE__ */
|
|
282
|
+
}), /* @__PURE__ */ v("div", {
|
|
285
283
|
className: "flex flex-wrap items-center gap-2",
|
|
286
284
|
children: [
|
|
287
|
-
/* @__PURE__ */
|
|
285
|
+
/* @__PURE__ */ v("span", {
|
|
288
286
|
className: "rounded-full bg-muted px-3 py-1 text-sm font-medium text-muted-foreground",
|
|
289
|
-
children: [
|
|
287
|
+
children: [V.size, " selected"]
|
|
290
288
|
}),
|
|
291
|
-
/* @__PURE__ */
|
|
292
|
-
onClick: () =>
|
|
289
|
+
/* @__PURE__ */ v("button", {
|
|
290
|
+
onClick: () => U("publish"),
|
|
293
291
|
disabled: Y.length === 0 || !x,
|
|
294
292
|
"aria-disabled": !x,
|
|
295
293
|
className: "rounded-md border border-status-success-bg px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
|
|
296
294
|
children: [b("devportal.publishSelected", "Publish Selected"), Y.length > 0 ? ` (${Y.length})` : ""]
|
|
297
295
|
}),
|
|
298
|
-
/* @__PURE__ */
|
|
299
|
-
onClick: () =>
|
|
296
|
+
/* @__PURE__ */ v("button", {
|
|
297
|
+
onClick: () => U("deprecate"),
|
|
300
298
|
disabled: X.length === 0 || !S,
|
|
301
299
|
"aria-disabled": !S,
|
|
302
300
|
className: "rounded-md border border-status-warning-bg px-3 py-2 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
|
|
@@ -306,24 +304,24 @@ var xe = () => {
|
|
|
306
304
|
})]
|
|
307
305
|
})
|
|
308
306
|
}),
|
|
309
|
-
q.length > 0 ? /* @__PURE__ */
|
|
307
|
+
q.length > 0 ? /* @__PURE__ */ _(ie, {
|
|
310
308
|
data: q,
|
|
311
309
|
keyField: "id",
|
|
312
310
|
columns: [
|
|
313
311
|
{
|
|
314
312
|
key: "select",
|
|
315
|
-
header: /* @__PURE__ */
|
|
313
|
+
header: /* @__PURE__ */ _(a, {
|
|
316
314
|
checked: Z,
|
|
317
|
-
indeterminate:
|
|
315
|
+
indeterminate: He,
|
|
318
316
|
onChange: Q,
|
|
319
317
|
ariaLabel: "Select all visible versions"
|
|
320
318
|
}),
|
|
321
319
|
className: "w-12",
|
|
322
|
-
render: (e) => /* @__PURE__ */
|
|
320
|
+
render: (e) => /* @__PURE__ */ _("div", {
|
|
323
321
|
onClick: (e) => e.stopPropagation(),
|
|
324
|
-
children: /* @__PURE__ */
|
|
325
|
-
checked:
|
|
326
|
-
onChange: (t) =>
|
|
322
|
+
children: /* @__PURE__ */ _(a, {
|
|
323
|
+
checked: V.has(e.id),
|
|
324
|
+
onChange: (t) => Ye(e.id, t),
|
|
327
325
|
ariaLabel: `Select version ${e.version}`
|
|
328
326
|
})
|
|
329
327
|
})
|
|
@@ -331,19 +329,19 @@ var xe = () => {
|
|
|
331
329
|
{
|
|
332
330
|
key: "version",
|
|
333
331
|
header: b("devportal.version", "Version"),
|
|
334
|
-
render: (e) => /* @__PURE__ */
|
|
332
|
+
render: (e) => /* @__PURE__ */ v("div", {
|
|
335
333
|
className: "flex items-center gap-2",
|
|
336
334
|
children: [
|
|
337
|
-
|
|
338
|
-
/* @__PURE__ */
|
|
335
|
+
Je(e),
|
|
336
|
+
/* @__PURE__ */ _("span", {
|
|
339
337
|
className: "font-mono font-medium",
|
|
340
338
|
children: e.version
|
|
341
339
|
}),
|
|
342
|
-
e.isLatest && /* @__PURE__ */
|
|
340
|
+
e.isLatest && /* @__PURE__ */ _("span", {
|
|
343
341
|
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
|
|
344
342
|
children: b("devportal.latest", "Latest")
|
|
345
343
|
}),
|
|
346
|
-
!e.isStable && /* @__PURE__ */
|
|
344
|
+
!e.isStable && /* @__PURE__ */ _("span", {
|
|
347
345
|
className: "rounded-full bg-status-warning-bg-subtle px-2 py-0.5 text-xs text-status-warning-text",
|
|
348
346
|
children: b("devportal.beta", "Beta")
|
|
349
347
|
})
|
|
@@ -353,7 +351,7 @@ var xe = () => {
|
|
|
353
351
|
{
|
|
354
352
|
key: "releaseNotes",
|
|
355
353
|
header: b("devportal.releaseNotes", "Release Notes"),
|
|
356
|
-
render: (e) => /* @__PURE__ */
|
|
354
|
+
render: (e) => /* @__PURE__ */ _("p", {
|
|
357
355
|
className: "max-w-md truncate text-sm text-muted-foreground",
|
|
358
356
|
children: e.releaseNotes || b("devportal.noReleaseNotes", "No release notes")
|
|
359
357
|
})
|
|
@@ -361,7 +359,7 @@ var xe = () => {
|
|
|
361
359
|
{
|
|
362
360
|
key: "status",
|
|
363
361
|
header: b("devportal.status", "Status"),
|
|
364
|
-
render: (e) => /* @__PURE__ */
|
|
362
|
+
render: (e) => /* @__PURE__ */ _(re, { status: e.status })
|
|
365
363
|
},
|
|
366
364
|
{
|
|
367
365
|
key: "publishedAt",
|
|
@@ -372,45 +370,45 @@ var xe = () => {
|
|
|
372
370
|
key: "actions",
|
|
373
371
|
header: "",
|
|
374
372
|
className: "w-32",
|
|
375
|
-
render: (e) => /* @__PURE__ */
|
|
373
|
+
render: (e) => /* @__PURE__ */ v("div", {
|
|
376
374
|
className: "flex gap-2",
|
|
377
|
-
children: [e.status?.toUpperCase() === "DRAFT" && /* @__PURE__ */
|
|
375
|
+
children: [e.status?.toUpperCase() === "DRAFT" && /* @__PURE__ */ _("button", {
|
|
378
376
|
className: "text-xs text-primary hover:underline disabled:opacity-50",
|
|
379
377
|
disabled: !x,
|
|
380
378
|
"aria-disabled": !x,
|
|
381
|
-
onClick: () =>
|
|
379
|
+
onClick: () => Ke(e.id),
|
|
382
380
|
children: b("devportal.publish", "Publish")
|
|
383
|
-
}), e.status?.toUpperCase() === "PUBLISHED" && !e.isLatest && /* @__PURE__ */
|
|
381
|
+
}), e.status?.toUpperCase() === "PUBLISHED" && !e.isLatest && /* @__PURE__ */ _("button", {
|
|
384
382
|
className: "text-xs text-status-warning-text hover:underline disabled:opacity-50",
|
|
385
383
|
disabled: !S,
|
|
386
384
|
"aria-disabled": !S,
|
|
387
|
-
onClick: () =>
|
|
385
|
+
onClick: () => qe(e.id),
|
|
388
386
|
children: b("devportal.deprecate", "Deprecate")
|
|
389
387
|
})]
|
|
390
388
|
})
|
|
391
389
|
}
|
|
392
390
|
]
|
|
393
|
-
}) : /* @__PURE__ */
|
|
394
|
-
icon: /* @__PURE__ */
|
|
391
|
+
}) : /* @__PURE__ */ _(t, {
|
|
392
|
+
icon: /* @__PURE__ */ _(ge, { size: 32 }),
|
|
395
393
|
title: b("devportal.noVersionsYet", "No versions yet"),
|
|
396
394
|
description: b("devportal.noVersionsYetDescription", "Create your first version to start distributing your app"),
|
|
397
|
-
action: /* @__PURE__ */
|
|
395
|
+
action: /* @__PURE__ */ v("button", {
|
|
398
396
|
onClick: () => N(!0),
|
|
399
397
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",
|
|
400
|
-
children: [/* @__PURE__ */
|
|
398
|
+
children: [/* @__PURE__ */ _(_e, { size: 16 }), b("devportal.createVersion", "Create Version")]
|
|
401
399
|
})
|
|
402
400
|
}),
|
|
403
|
-
M && /* @__PURE__ */
|
|
401
|
+
M && /* @__PURE__ */ _(o, {
|
|
404
402
|
open: M,
|
|
405
403
|
onOpenChange: N,
|
|
406
|
-
onConfirm:
|
|
404
|
+
onConfirm: Ue,
|
|
407
405
|
title: b("devportal.createNewVersion", "Create New Version"),
|
|
408
406
|
size: "lg",
|
|
409
|
-
confirmLabel:
|
|
410
|
-
children: /* @__PURE__ */
|
|
407
|
+
confirmLabel: ze ? b("devportal.creating", "Creating...") : b("devportal.createVersion", "Create Version"),
|
|
408
|
+
children: /* @__PURE__ */ v("div", {
|
|
411
409
|
className: "space-y-4",
|
|
412
410
|
children: [
|
|
413
|
-
/* @__PURE__ */
|
|
411
|
+
/* @__PURE__ */ _(ae, {
|
|
414
412
|
label: b("devportal.versionNumber", "Version Number"),
|
|
415
413
|
value: P.version,
|
|
416
414
|
onChange: (e) => F({
|
|
@@ -421,40 +419,40 @@ var xe = () => {
|
|
|
421
419
|
hint: b("devportal.versionHint", "Use semantic versioning (major.minor.patch)"),
|
|
422
420
|
required: !0
|
|
423
421
|
}),
|
|
424
|
-
|
|
422
|
+
Pe ? /* @__PURE__ */ v("div", {
|
|
425
423
|
className: "space-y-3",
|
|
426
424
|
children: [
|
|
427
|
-
/* @__PURE__ */
|
|
425
|
+
/* @__PURE__ */ _("div", {
|
|
428
426
|
className: "rounded-md border border-status-warning-bg bg-status-warning-bg-subtle px-3 py-2 text-xs text-status-warning-text",
|
|
429
|
-
children: "
|
|
427
|
+
children: G ? "A ZIP package and manifest JSON are required for NODE type." : "A manifest JSON is required for WORKFLOW type. No ZIP needed — the manifest defines the workflow."
|
|
430
428
|
}),
|
|
431
|
-
/* @__PURE__ */
|
|
429
|
+
G && /* @__PURE__ */ v("div", {
|
|
432
430
|
className: "space-y-1",
|
|
433
431
|
children: [
|
|
434
|
-
/* @__PURE__ */
|
|
432
|
+
/* @__PURE__ */ v("label", {
|
|
435
433
|
className: "text-sm font-medium",
|
|
436
|
-
children: ["ZIP Package ", /* @__PURE__ */
|
|
434
|
+
children: ["ZIP Package ", /* @__PURE__ */ _("span", {
|
|
437
435
|
className: "text-destructive",
|
|
438
436
|
children: "*"
|
|
439
437
|
})]
|
|
440
438
|
}),
|
|
441
|
-
/* @__PURE__ */
|
|
439
|
+
/* @__PURE__ */ v("div", {
|
|
442
440
|
className: "flex gap-2 items-center",
|
|
443
441
|
children: [
|
|
444
|
-
/* @__PURE__ */
|
|
442
|
+
/* @__PURE__ */ _("input", {
|
|
445
443
|
ref: A,
|
|
446
444
|
type: "file",
|
|
447
445
|
accept: ".zip",
|
|
448
446
|
className: "hidden",
|
|
449
|
-
onChange:
|
|
447
|
+
onChange: We
|
|
450
448
|
}),
|
|
451
|
-
/* @__PURE__ */
|
|
449
|
+
/* @__PURE__ */ _("button", {
|
|
452
450
|
type: "button",
|
|
453
451
|
disabled: D,
|
|
454
452
|
onClick: () => A.current?.click(),
|
|
455
453
|
className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50",
|
|
456
|
-
children: D ? /* @__PURE__ */
|
|
457
|
-
/* @__PURE__ */
|
|
454
|
+
children: D ? /* @__PURE__ */ v(g, { children: [
|
|
455
|
+
/* @__PURE__ */ _(m, {
|
|
458
456
|
size: 14,
|
|
459
457
|
className: "animate-spin"
|
|
460
458
|
}),
|
|
@@ -462,49 +460,49 @@ var xe = () => {
|
|
|
462
460
|
"Uploading… ",
|
|
463
461
|
O,
|
|
464
462
|
"%"
|
|
465
|
-
] }) : /* @__PURE__ */
|
|
466
|
-
/* @__PURE__ */
|
|
463
|
+
] }) : /* @__PURE__ */ v(g, { children: [
|
|
464
|
+
/* @__PURE__ */ _(h, { size: 14 }),
|
|
467
465
|
" ",
|
|
468
466
|
P.packageUrl ? "Replace zip" : "Upload zip"
|
|
469
467
|
] })
|
|
470
468
|
}),
|
|
471
|
-
P.packageUrl && !D && /* @__PURE__ */
|
|
469
|
+
P.packageUrl && !D && /* @__PURE__ */ _("span", {
|
|
472
470
|
className: "text-xs text-status-success-text",
|
|
473
471
|
children: "✓ Uploaded"
|
|
474
472
|
})
|
|
475
473
|
]
|
|
476
474
|
}),
|
|
477
|
-
k && /* @__PURE__ */
|
|
475
|
+
k && /* @__PURE__ */ _("p", {
|
|
478
476
|
className: "text-xs text-destructive",
|
|
479
477
|
children: k
|
|
480
478
|
})
|
|
481
479
|
]
|
|
482
480
|
}),
|
|
483
|
-
/* @__PURE__ */
|
|
481
|
+
/* @__PURE__ */ v("div", {
|
|
484
482
|
className: "space-y-1",
|
|
485
483
|
children: [
|
|
486
|
-
/* @__PURE__ */
|
|
484
|
+
/* @__PURE__ */ v("label", {
|
|
487
485
|
className: "text-sm font-medium",
|
|
488
|
-
children: ["Manifest JSON ", /* @__PURE__ */
|
|
486
|
+
children: ["Manifest JSON ", /* @__PURE__ */ _("span", {
|
|
489
487
|
className: "text-destructive",
|
|
490
488
|
children: "*"
|
|
491
489
|
})]
|
|
492
490
|
}),
|
|
493
|
-
/* @__PURE__ */
|
|
491
|
+
/* @__PURE__ */ _("input", {
|
|
494
492
|
ref: j,
|
|
495
493
|
type: "file",
|
|
496
494
|
accept: ".json,application/json",
|
|
497
495
|
className: "hidden",
|
|
498
|
-
onChange:
|
|
496
|
+
onChange: Ge
|
|
499
497
|
}),
|
|
500
|
-
/* @__PURE__ */
|
|
498
|
+
/* @__PURE__ */ v("div", {
|
|
501
499
|
className: "flex gap-2 items-center",
|
|
502
|
-
children: [/* @__PURE__ */
|
|
500
|
+
children: [/* @__PURE__ */ v("button", {
|
|
503
501
|
type: "button",
|
|
504
502
|
onClick: () => j.current?.click(),
|
|
505
503
|
className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-muted transition-colors",
|
|
506
|
-
children: [/* @__PURE__ */
|
|
507
|
-
}), I && /* @__PURE__ */
|
|
504
|
+
children: [/* @__PURE__ */ _(he, { size: 14 }), I ? "Replace manifest.json" : "Upload manifest.json"]
|
|
505
|
+
}), I && /* @__PURE__ */ v("span", {
|
|
508
506
|
className: "text-xs text-status-success-text",
|
|
509
507
|
children: ["✓ ", I]
|
|
510
508
|
})]
|
|
@@ -512,18 +510,18 @@ var xe = () => {
|
|
|
512
510
|
I && P.manifestJson && (() => {
|
|
513
511
|
try {
|
|
514
512
|
let e = JSON.parse(P.manifestJson), t = typeof e.name == "string" ? e.name : null, n = typeof e.version == "string" ? e.version : null, r = typeof e.itemType == "string" ? e.itemType : null;
|
|
515
|
-
return /* @__PURE__ */
|
|
513
|
+
return /* @__PURE__ */ v("div", {
|
|
516
514
|
className: "rounded-md border bg-muted/40 px-3 py-2 text-xs font-mono space-y-0.5",
|
|
517
515
|
children: [
|
|
518
|
-
t && /* @__PURE__ */
|
|
516
|
+
t && /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("span", {
|
|
519
517
|
className: "text-muted-foreground",
|
|
520
518
|
children: "name: "
|
|
521
519
|
}), t] }),
|
|
522
|
-
n && /* @__PURE__ */
|
|
520
|
+
n && /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("span", {
|
|
523
521
|
className: "text-muted-foreground",
|
|
524
522
|
children: "version: "
|
|
525
523
|
}), n] }),
|
|
526
|
-
r && /* @__PURE__ */
|
|
524
|
+
r && /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("span", {
|
|
527
525
|
className: "text-muted-foreground",
|
|
528
526
|
children: "itemType: "
|
|
529
527
|
}), r] })
|
|
@@ -533,53 +531,53 @@ var xe = () => {
|
|
|
533
531
|
return null;
|
|
534
532
|
}
|
|
535
533
|
})(),
|
|
536
|
-
/* @__PURE__ */
|
|
534
|
+
/* @__PURE__ */ _("p", {
|
|
537
535
|
className: "text-xs text-muted-foreground",
|
|
538
|
-
children: "Upload your manifest.json — defines the node's inputs, outputs, and configuration schema."
|
|
536
|
+
children: Fe ? "Upload your manifest.json — defines the workflow steps, triggers, and configuration." : "Upload your manifest.json — defines the node's inputs, outputs, and configuration schema."
|
|
539
537
|
})
|
|
540
538
|
]
|
|
541
539
|
})
|
|
542
540
|
]
|
|
543
|
-
}) : /* @__PURE__ */
|
|
541
|
+
}) : /* @__PURE__ */ v("div", {
|
|
544
542
|
className: "space-y-2",
|
|
545
543
|
children: [
|
|
546
|
-
/* @__PURE__ */
|
|
544
|
+
/* @__PURE__ */ _("label", {
|
|
547
545
|
className: "text-sm font-medium",
|
|
548
546
|
children: "Package"
|
|
549
547
|
}),
|
|
550
|
-
/* @__PURE__ */
|
|
548
|
+
/* @__PURE__ */ v("div", {
|
|
551
549
|
className: "flex gap-1 rounded-md border p-0.5 w-fit",
|
|
552
|
-
children: [/* @__PURE__ */
|
|
550
|
+
children: [/* @__PURE__ */ v("button", {
|
|
553
551
|
type: "button",
|
|
554
|
-
onClick: () =>
|
|
555
|
-
className: `inline-flex items-center gap-1.5 rounded px-3 py-1 text-xs font-medium transition-colors ${
|
|
556
|
-
children: [/* @__PURE__ */
|
|
557
|
-
}), /* @__PURE__ */
|
|
552
|
+
onClick: () => R("file"),
|
|
553
|
+
className: `inline-flex items-center gap-1.5 rounded px-3 py-1 text-xs font-medium transition-colors ${L === "file" ? "bg-primary text-primary-foreground" : "hover:bg-muted"}`,
|
|
554
|
+
children: [/* @__PURE__ */ _(h, { size: 12 }), " Upload zip"]
|
|
555
|
+
}), /* @__PURE__ */ v("button", {
|
|
558
556
|
type: "button",
|
|
559
|
-
onClick: () =>
|
|
560
|
-
className: `inline-flex items-center gap-1.5 rounded px-3 py-1 text-xs font-medium transition-colors ${
|
|
561
|
-
children: [/* @__PURE__ */
|
|
557
|
+
onClick: () => R("manifest"),
|
|
558
|
+
className: `inline-flex items-center gap-1.5 rounded px-3 py-1 text-xs font-medium transition-colors ${L === "manifest" ? "bg-primary text-primary-foreground" : "hover:bg-muted"}`,
|
|
559
|
+
children: [/* @__PURE__ */ _(he, { size: 12 }), " Paste manifest JSON"]
|
|
562
560
|
})]
|
|
563
561
|
}),
|
|
564
|
-
|
|
562
|
+
L === "file" && /* @__PURE__ */ v("div", {
|
|
565
563
|
className: "space-y-1",
|
|
566
|
-
children: [/* @__PURE__ */
|
|
564
|
+
children: [/* @__PURE__ */ v("div", {
|
|
567
565
|
className: "flex gap-2 items-center",
|
|
568
566
|
children: [
|
|
569
|
-
/* @__PURE__ */
|
|
567
|
+
/* @__PURE__ */ _("input", {
|
|
570
568
|
ref: A,
|
|
571
569
|
type: "file",
|
|
572
570
|
accept: ".zip",
|
|
573
571
|
className: "hidden",
|
|
574
|
-
onChange:
|
|
572
|
+
onChange: We
|
|
575
573
|
}),
|
|
576
|
-
/* @__PURE__ */
|
|
574
|
+
/* @__PURE__ */ _("button", {
|
|
577
575
|
type: "button",
|
|
578
576
|
disabled: D,
|
|
579
577
|
onClick: () => A.current?.click(),
|
|
580
578
|
className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50",
|
|
581
|
-
children: D ? /* @__PURE__ */
|
|
582
|
-
/* @__PURE__ */
|
|
579
|
+
children: D ? /* @__PURE__ */ v(g, { children: [
|
|
580
|
+
/* @__PURE__ */ _(m, {
|
|
583
581
|
size: 14,
|
|
584
582
|
className: "animate-spin"
|
|
585
583
|
}),
|
|
@@ -587,25 +585,25 @@ var xe = () => {
|
|
|
587
585
|
"Uploading… ",
|
|
588
586
|
O,
|
|
589
587
|
"%"
|
|
590
|
-
] }) : /* @__PURE__ */
|
|
591
|
-
/* @__PURE__ */
|
|
588
|
+
] }) : /* @__PURE__ */ v(g, { children: [
|
|
589
|
+
/* @__PURE__ */ _(h, { size: 14 }),
|
|
592
590
|
" ",
|
|
593
591
|
P.packageUrl ? "Replace zip" : "Upload zip"
|
|
594
592
|
] })
|
|
595
593
|
}),
|
|
596
|
-
P.packageUrl && !D && /* @__PURE__ */
|
|
594
|
+
P.packageUrl && !D && /* @__PURE__ */ _("span", {
|
|
597
595
|
className: "text-xs text-status-success-text",
|
|
598
596
|
children: "✓ Uploaded"
|
|
599
597
|
})
|
|
600
598
|
]
|
|
601
|
-
}), k && /* @__PURE__ */
|
|
599
|
+
}), k && /* @__PURE__ */ _("p", {
|
|
602
600
|
className: "text-xs text-destructive",
|
|
603
601
|
children: k
|
|
604
602
|
})]
|
|
605
603
|
}),
|
|
606
|
-
|
|
604
|
+
L === "manifest" && /* @__PURE__ */ v("div", {
|
|
607
605
|
className: "space-y-1",
|
|
608
|
-
children: [/* @__PURE__ */
|
|
606
|
+
children: [/* @__PURE__ */ _("textarea", {
|
|
609
607
|
rows: 6,
|
|
610
608
|
placeholder: "{\n \"name\": \"my-workflow\",\n \"version\": \"1.0.0\",\n \"steps\": []\n}",
|
|
611
609
|
value: P.manifestJson,
|
|
@@ -614,14 +612,14 @@ var xe = () => {
|
|
|
614
612
|
manifestJson: e.target.value
|
|
615
613
|
}),
|
|
616
614
|
className: "w-full rounded-md border bg-transparent px-3 py-2 text-xs font-mono resize-y placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring"
|
|
617
|
-
}), /* @__PURE__ */
|
|
615
|
+
}), /* @__PURE__ */ _("p", {
|
|
618
616
|
className: "text-xs text-muted-foreground",
|
|
619
617
|
children: "Paste your workflow or configuration JSON here. No zip required."
|
|
620
618
|
})]
|
|
621
619
|
})
|
|
622
620
|
]
|
|
623
621
|
}),
|
|
624
|
-
/* @__PURE__ */
|
|
622
|
+
/* @__PURE__ */ _(oe, {
|
|
625
623
|
label: b("devportal.releaseNotes", "Release Notes"),
|
|
626
624
|
value: P.releaseNotes,
|
|
627
625
|
onChange: (e) => F({
|
|
@@ -634,16 +632,16 @@ var xe = () => {
|
|
|
634
632
|
]
|
|
635
633
|
})
|
|
636
634
|
}),
|
|
637
|
-
/* @__PURE__ */
|
|
638
|
-
open:
|
|
635
|
+
/* @__PURE__ */ _(o, {
|
|
636
|
+
open: Ne === "publish",
|
|
639
637
|
onOpenChange: (e) => {
|
|
640
|
-
e ||
|
|
638
|
+
e || U(null);
|
|
641
639
|
},
|
|
642
640
|
onConfirm: async () => {
|
|
643
641
|
if (Y.length === 0) return;
|
|
644
|
-
|
|
645
|
-
let e = await Promise.allSettled(Y.map((e) =>
|
|
646
|
-
|
|
642
|
+
z(null);
|
|
643
|
+
let e = await Promise.allSettled(Y.map((e) => Be({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
644
|
+
B(`Published ${t} version${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), $(), U(null);
|
|
647
645
|
},
|
|
648
646
|
title: b("devportal.publishSelectedVersions", "Publish selected versions"),
|
|
649
647
|
description: `${b("devportal.publish", "Publish")} ${Y.length} selected version${Y.length === 1 ? "" : "s"}?`,
|
|
@@ -651,16 +649,16 @@ var xe = () => {
|
|
|
651
649
|
cancelLabel: b("devportal.cancel", "Cancel"),
|
|
652
650
|
variant: "success"
|
|
653
651
|
}),
|
|
654
|
-
/* @__PURE__ */
|
|
655
|
-
open:
|
|
652
|
+
/* @__PURE__ */ _(o, {
|
|
653
|
+
open: Ne === "deprecate",
|
|
656
654
|
onOpenChange: (e) => {
|
|
657
|
-
e ||
|
|
655
|
+
e || U(null);
|
|
658
656
|
},
|
|
659
657
|
onConfirm: async () => {
|
|
660
658
|
if (X.length === 0) return;
|
|
661
|
-
|
|
662
|
-
let e = await Promise.allSettled(X.map((e) =>
|
|
663
|
-
|
|
659
|
+
z(null);
|
|
660
|
+
let e = await Promise.allSettled(X.map((e) => Ve({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
661
|
+
B(`Deprecated ${t} version${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), $(), U(null);
|
|
664
662
|
},
|
|
665
663
|
title: b("devportal.deprecateSelectedVersions", "Deprecate selected versions"),
|
|
666
664
|
description: `${b("devportal.deprecate", "Deprecate")} ${X.length} selected version${X.length === 1 ? "" : "s"}? ${b("devportal.deprecateVersionsWarning", "Deprecated versions remain visible but should no longer be promoted.")}`,
|