@strapi/content-releases 5.0.0-beta.9 → 5.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +17 -1
- package/dist/_chunks/{App-DUmziQ17.js → App-CatMj4_9.js} +216 -257
- package/dist/_chunks/App-CatMj4_9.js.map +1 -0
- package/dist/_chunks/{App-D_6Y9N2F.mjs → App-CdTs45Xr.mjs} +215 -255
- package/dist/_chunks/App-CdTs45Xr.mjs.map +1 -0
- package/dist/_chunks/ReleasesSettingsPage-C2L6_E3J.mjs +178 -0
- package/dist/_chunks/ReleasesSettingsPage-C2L6_E3J.mjs.map +1 -0
- package/dist/_chunks/ReleasesSettingsPage-hHmY2fiE.js +178 -0
- package/dist/_chunks/ReleasesSettingsPage-hHmY2fiE.js.map +1 -0
- package/dist/_chunks/{en-DtFJ5ViE.js → en-1_1re1mc.js} +7 -2
- package/dist/_chunks/en-1_1re1mc.js.map +1 -0
- package/dist/_chunks/{en-B9Ur3VsE.mjs → en-C3sq5KNP.mjs} +7 -2
- package/dist/_chunks/en-C3sq5KNP.mjs.map +1 -0
- package/dist/_chunks/{index-BomF0-yY.mjs → index-CJpYVXMt.mjs} +525 -444
- package/dist/_chunks/index-CJpYVXMt.mjs.map +1 -0
- package/dist/_chunks/{index-C5Hc767q.js → index-DYXEZrUA.js} +518 -437
- package/dist/_chunks/index-DYXEZrUA.js.map +1 -0
- package/dist/_chunks/validation-schemas-C7P2rhPu.mjs +29 -0
- package/dist/_chunks/validation-schemas-C7P2rhPu.mjs.map +1 -0
- package/dist/_chunks/validation-schemas-bib1fBc7.js +47 -0
- package/dist/_chunks/validation-schemas-bib1fBc7.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +2 -2
- package/dist/admin/src/components/{CMReleasesContainer.d.ts → ReleaseActionModal.d.ts} +3 -1
- package/dist/admin/src/components/ReleaseModal.d.ts +2 -1
- package/dist/admin/src/components/ReleasesPanel.d.ts +3 -0
- package/dist/admin/src/constants.d.ts +18 -0
- package/dist/admin/src/modules/hooks.d.ts +7 -0
- package/dist/admin/src/pages/ReleasesSettingsPage.d.ts +1 -0
- package/dist/admin/src/services/release.d.ts +37 -32
- package/dist/admin/src/utils/time.d.ts +9 -0
- package/dist/server/index.js +784 -600
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +785 -601
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/constants.d.ts +11 -2
- package/dist/server/src/constants.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +3 -5
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/content-types/release-action/index.d.ts +3 -5
- package/dist/server/src/content-types/release-action/index.d.ts.map +1 -1
- package/dist/server/src/content-types/release-action/schema.d.ts +3 -5
- package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +6 -3
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/release-action.d.ts +0 -1
- package/dist/server/src/controllers/release-action.d.ts.map +1 -1
- package/dist/server/src/controllers/release.d.ts +7 -2
- package/dist/server/src/controllers/release.d.ts.map +1 -1
- package/dist/server/src/controllers/settings.d.ts +11 -0
- package/dist/server/src/controllers/settings.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/release-action.d.ts +7 -1
- package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/release.d.ts +1 -0
- package/dist/server/src/controllers/validation/release.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/settings.d.ts +2 -0
- package/dist/server/src/controllers/validation/settings.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +66 -51
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/documents.d.ts +6 -0
- package/dist/server/src/middlewares/documents.d.ts.map +1 -0
- package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts +9 -0
- package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -0
- package/dist/server/src/migrations/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts +16 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/routes/release-action.d.ts.map +1 -1
- package/dist/server/src/routes/release.d.ts.map +1 -1
- package/dist/server/src/routes/settings.d.ts +18 -0
- package/dist/server/src/routes/settings.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +38 -38
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/release-action.d.ts +36 -0
- package/dist/server/src/services/release-action.d.ts.map +1 -0
- package/dist/server/src/services/release.d.ts +6 -41
- package/dist/server/src/services/release.d.ts.map +1 -1
- package/dist/server/src/services/settings.d.ts +13 -0
- package/dist/server/src/services/settings.d.ts.map +1 -0
- package/dist/server/src/services/validation.d.ts +1 -1
- package/dist/server/src/services/validation.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +29 -8
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/release-actions.d.ts +6 -5
- package/dist/shared/contracts/release-actions.d.ts.map +1 -1
- package/dist/shared/contracts/releases.d.ts +6 -5
- package/dist/shared/contracts/releases.d.ts.map +1 -1
- package/dist/shared/contracts/settings.d.ts +39 -0
- package/dist/shared/contracts/settings.d.ts.map +1 -0
- package/dist/shared/validation-schemas.d.ts +1 -0
- package/dist/shared/validation-schemas.d.ts.map +1 -1
- package/package.json +10 -9
- package/dist/_chunks/App-DUmziQ17.js.map +0 -1
- package/dist/_chunks/App-D_6Y9N2F.mjs.map +0 -1
- package/dist/_chunks/en-B9Ur3VsE.mjs.map +0 -1
- package/dist/_chunks/en-DtFJ5ViE.js.map +0 -1
- package/dist/_chunks/index-BomF0-yY.mjs.map +0 -1
- package/dist/_chunks/index-C5Hc767q.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useNotification, useAPIErrorHandler, useQueryParams, useTracking, useRBAC, Page, Layouts, Pagination, isFetchError, ConfirmDialog, BackButton, useStrapiApp, Table } from "@strapi/admin/strapi-admin";
|
|
3
3
|
import { useLocation, useNavigate, NavLink, useParams, Navigate, Link as Link$1, Routes, Route } from "react-router-dom";
|
|
4
|
-
import { g as
|
|
4
|
+
import { g as getTimezones, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as getTimezoneOffset, h as useGetReleaseActionsQuery, i as useUpdateReleaseActionMutation, R as ReleaseActionOptions, j as ReleaseActionMenu, r as releaseApi } from "./index-CJpYVXMt.mjs";
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
import { unstable_useDocument } from "@strapi/content-manager/strapi-admin";
|
|
7
|
-
import {
|
|
8
|
-
import { Plus, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
|
|
7
|
+
import { Modal, Flex, Field, TextInput, Box, Checkbox, Typography, DatePicker, TimePicker, Button, Combobox, ComboboxOption, Link, Alert, Main, Tabs, Divider, EmptyStateLayout, Grid, Badge, MenuItem, Dialog, SimpleMenu, LinkButton, SingleSelect, SingleSelectOption, Tr, Td, Tooltip } from "@strapi/design-system";
|
|
8
|
+
import { Plus, Pencil, Trash, More, CrossCircle, CheckCircle, ArrowsCounterClockwise } from "@strapi/icons";
|
|
9
9
|
import { EmptyDocuments } from "@strapi/icons/symbols";
|
|
10
10
|
import format from "date-fns/format";
|
|
11
11
|
import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
|
|
@@ -13,7 +13,7 @@ import { useIntl } from "react-intl";
|
|
|
13
13
|
import { styled } from "styled-components";
|
|
14
14
|
import { intervalToDuration, isPast, formatISO } from "date-fns";
|
|
15
15
|
import { Formik, Form, useFormikContext } from "formik";
|
|
16
|
-
import
|
|
16
|
+
import { R as RELEASE_SCHEMA } from "./validation-schemas-C7P2rhPu.mjs";
|
|
17
17
|
import { useDispatch } from "react-redux";
|
|
18
18
|
import { useLicenseLimits } from "@strapi/admin/strapi-admin/ee";
|
|
19
19
|
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
|
@@ -46,28 +46,9 @@ const RelativeTime$1 = React.forwardRef(
|
|
|
46
46
|
);
|
|
47
47
|
}
|
|
48
48
|
);
|
|
49
|
-
const RELEASE_SCHEMA = yup.object().shape({
|
|
50
|
-
name: yup.string().trim().required(),
|
|
51
|
-
scheduledAt: yup.string().nullable(),
|
|
52
|
-
isScheduled: yup.boolean().optional(),
|
|
53
|
-
time: yup.string().when("isScheduled", {
|
|
54
|
-
is: true,
|
|
55
|
-
then: yup.string().trim().required(),
|
|
56
|
-
otherwise: yup.string().nullable()
|
|
57
|
-
}),
|
|
58
|
-
timezone: yup.string().when("isScheduled", {
|
|
59
|
-
is: true,
|
|
60
|
-
then: yup.string().required().nullable(),
|
|
61
|
-
otherwise: yup.string().nullable()
|
|
62
|
-
}),
|
|
63
|
-
date: yup.string().when("isScheduled", {
|
|
64
|
-
is: true,
|
|
65
|
-
then: yup.string().required().nullable(),
|
|
66
|
-
otherwise: yup.string().nullable()
|
|
67
|
-
})
|
|
68
|
-
}).required().noUnknown();
|
|
69
49
|
const ReleaseModal = ({
|
|
70
50
|
handleClose,
|
|
51
|
+
open,
|
|
71
52
|
handleSubmit,
|
|
72
53
|
initialValues,
|
|
73
54
|
isLoading = false
|
|
@@ -91,8 +72,8 @@ const ReleaseModal = ({
|
|
|
91
72
|
);
|
|
92
73
|
return currentTimezone?.value || systemTimezone.value;
|
|
93
74
|
};
|
|
94
|
-
return /* @__PURE__ */
|
|
95
|
-
/* @__PURE__ */ jsx(
|
|
75
|
+
return /* @__PURE__ */ jsx(Modal.Root, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxs(Modal.Content, { children: [
|
|
76
|
+
/* @__PURE__ */ jsx(Modal.Header, { children: /* @__PURE__ */ jsx(Modal.Title, { children: formatMessage(
|
|
96
77
|
{
|
|
97
78
|
id: "content-releases.modal.title",
|
|
98
79
|
defaultMessage: "{isCreatingRelease, select, true {New release} other {Edit release}}"
|
|
@@ -117,7 +98,7 @@ const ReleaseModal = ({
|
|
|
117
98
|
validateOnChange: false,
|
|
118
99
|
children: ({ values, errors, handleChange, setFieldValue }) => {
|
|
119
100
|
return /* @__PURE__ */ jsxs(Form, { children: [
|
|
120
|
-
/* @__PURE__ */ jsx(
|
|
101
|
+
/* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
|
121
102
|
/* @__PURE__ */ jsxs(Field.Root, { name: "name", error: errors.name, required: true, children: [
|
|
122
103
|
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
123
104
|
id: "content-releases.modal.form.input.label.release-name",
|
|
@@ -130,10 +111,10 @@ const ReleaseModal = ({
|
|
|
130
111
|
Checkbox,
|
|
131
112
|
{
|
|
132
113
|
name: "isScheduled",
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
setFieldValue("isScheduled",
|
|
136
|
-
if (!
|
|
114
|
+
checked: values.isScheduled,
|
|
115
|
+
onCheckedChange: (checked) => {
|
|
116
|
+
setFieldValue("isScheduled", checked);
|
|
117
|
+
if (!checked) {
|
|
137
118
|
setFieldValue("date", null);
|
|
138
119
|
setFieldValue("time", "");
|
|
139
120
|
setFieldValue("timezone", null);
|
|
@@ -213,34 +194,21 @@ const ReleaseModal = ({
|
|
|
213
194
|
/* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
214
195
|
] })
|
|
215
196
|
] }) }),
|
|
216
|
-
/* @__PURE__ */
|
|
217
|
-
|
|
218
|
-
{
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
{
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
) })
|
|
227
|
-
}
|
|
228
|
-
)
|
|
197
|
+
/* @__PURE__ */ jsxs(Modal.Footer, { children: [
|
|
198
|
+
/* @__PURE__ */ jsx(Modal.Close, { children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }) }),
|
|
199
|
+
/* @__PURE__ */ jsx(Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
|
|
200
|
+
{
|
|
201
|
+
id: "content-releases.modal.form.button.submit",
|
|
202
|
+
defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
|
|
203
|
+
},
|
|
204
|
+
{ isCreatingRelease }
|
|
205
|
+
) })
|
|
206
|
+
] })
|
|
229
207
|
] });
|
|
230
208
|
}
|
|
231
209
|
}
|
|
232
210
|
)
|
|
233
|
-
] });
|
|
234
|
-
};
|
|
235
|
-
const getTimezones = (selectedDate) => {
|
|
236
|
-
const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
|
|
237
|
-
const utcOffset = getTimezoneOffset(timezone, selectedDate);
|
|
238
|
-
return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
|
|
239
|
-
});
|
|
240
|
-
const systemTimezone = timezoneList.find(
|
|
241
|
-
(timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
242
|
-
);
|
|
243
|
-
return { timezoneList, systemTimezone };
|
|
211
|
+
] }) });
|
|
244
212
|
};
|
|
245
213
|
const TimezoneComponent = ({ timezoneOptions }) => {
|
|
246
214
|
const { values, errors, setFieldValue } = useFormikContext();
|
|
@@ -342,7 +310,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
342
310
|
}
|
|
343
311
|
);
|
|
344
312
|
}
|
|
345
|
-
return /* @__PURE__ */ jsx(Grid, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(
|
|
313
|
+
return /* @__PURE__ */ jsx(Grid.Root, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(Grid.Item, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsx(LinkCard, { tag: NavLink, to: `${id}`, isExternal: false, children: /* @__PURE__ */ jsxs(
|
|
346
314
|
Flex,
|
|
347
315
|
{
|
|
348
316
|
direction: "column",
|
|
@@ -357,7 +325,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
357
325
|
gap: 4,
|
|
358
326
|
children: [
|
|
359
327
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
|
|
360
|
-
/* @__PURE__ */ jsx(Typography, { tag: "h3", variant: "delta", fontWeight: "bold", children: name }),
|
|
328
|
+
/* @__PURE__ */ jsx(Typography, { textColor: "neutral800", tag: "h3", variant: "delta", fontWeight: "bold", children: name }),
|
|
361
329
|
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
|
|
362
330
|
id: "content-releases.pages.Releases.not-scheduled",
|
|
363
331
|
defaultMessage: "Not scheduled"
|
|
@@ -385,7 +353,6 @@ const INITIAL_FORM_VALUES = {
|
|
|
385
353
|
timezone: null
|
|
386
354
|
};
|
|
387
355
|
const ReleasesPage = () => {
|
|
388
|
-
const tabRef = React.useRef(null);
|
|
389
356
|
const location = useLocation();
|
|
390
357
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
391
358
|
const { toggleNotification } = useNotification();
|
|
@@ -403,7 +370,6 @@ const ReleasesPage = () => {
|
|
|
403
370
|
} = useRBAC(PERMISSIONS);
|
|
404
371
|
const { isLoading, isSuccess, isError } = response;
|
|
405
372
|
const activeTab = response?.currentData?.meta?.activeTab || "pending";
|
|
406
|
-
const activeTabIndex = ["pending", "done"].indexOf(activeTab);
|
|
407
373
|
React.useEffect(() => {
|
|
408
374
|
if (location?.state?.errors) {
|
|
409
375
|
toggleNotification({
|
|
@@ -420,11 +386,6 @@ const ReleasesPage = () => {
|
|
|
420
386
|
navigate("", { replace: true, state: null });
|
|
421
387
|
}
|
|
422
388
|
}, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
|
|
423
|
-
React.useEffect(() => {
|
|
424
|
-
if (tabRef.current) {
|
|
425
|
-
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
426
|
-
}
|
|
427
|
-
}, [activeTabIndex]);
|
|
428
389
|
const toggleAddReleaseModal = () => {
|
|
429
390
|
setReleaseModalShown((prev) => !prev);
|
|
430
391
|
};
|
|
@@ -433,14 +394,14 @@ const ReleasesPage = () => {
|
|
|
433
394
|
}
|
|
434
395
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
435
396
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
436
|
-
const handleTabChange = (
|
|
397
|
+
const handleTabChange = (tabValue) => {
|
|
437
398
|
setQuery({
|
|
438
399
|
...query,
|
|
439
400
|
page: 1,
|
|
440
401
|
pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,
|
|
441
402
|
filters: {
|
|
442
403
|
releasedAt: {
|
|
443
|
-
$notNull:
|
|
404
|
+
$notNull: tabValue !== "pending"
|
|
444
405
|
}
|
|
445
406
|
}
|
|
446
407
|
});
|
|
@@ -524,21 +485,17 @@ const ReleasesPage = () => {
|
|
|
524
485
|
})
|
|
525
486
|
}
|
|
526
487
|
),
|
|
527
|
-
/* @__PURE__ */ jsxs(
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
children: [
|
|
539
|
-
/* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
|
|
540
|
-
/* @__PURE__ */ jsxs(Tabs, { children: [
|
|
541
|
-
/* @__PURE__ */ jsx(Tab, { children: formatMessage(
|
|
488
|
+
/* @__PURE__ */ jsxs(Tabs.Root, { variant: "simple", onValueChange: handleTabChange, value: activeTab, children: [
|
|
489
|
+
/* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
|
|
490
|
+
/* @__PURE__ */ jsxs(
|
|
491
|
+
Tabs.List,
|
|
492
|
+
{
|
|
493
|
+
"aria-label": formatMessage({
|
|
494
|
+
id: "content-releases.pages.Releases.tab-group.label",
|
|
495
|
+
defaultMessage: "Releases list"
|
|
496
|
+
}),
|
|
497
|
+
children: [
|
|
498
|
+
/* @__PURE__ */ jsx(Tabs.Trigger, { value: "pending", children: formatMessage(
|
|
542
499
|
{
|
|
543
500
|
id: "content-releases.pages.Releases.tab.pending",
|
|
544
501
|
defaultMessage: "Pending ({count})"
|
|
@@ -547,34 +504,32 @@ const ReleasesPage = () => {
|
|
|
547
504
|
count: totalPendingReleases
|
|
548
505
|
}
|
|
549
506
|
) }),
|
|
550
|
-
/* @__PURE__ */ jsx(
|
|
507
|
+
/* @__PURE__ */ jsx(Tabs.Trigger, { value: "done", children: formatMessage({
|
|
551
508
|
id: "content-releases.pages.Releases.tab.done",
|
|
552
509
|
defaultMessage: "Done"
|
|
553
510
|
}) })
|
|
554
|
-
]
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
}
|
|
577
|
-
),
|
|
511
|
+
]
|
|
512
|
+
}
|
|
513
|
+
),
|
|
514
|
+
/* @__PURE__ */ jsx(Divider, {})
|
|
515
|
+
] }),
|
|
516
|
+
/* @__PURE__ */ jsx(Tabs.Content, { value: "pending", children: /* @__PURE__ */ jsx(
|
|
517
|
+
ReleasesGrid,
|
|
518
|
+
{
|
|
519
|
+
sectionTitle: "pending",
|
|
520
|
+
releases: response?.currentData?.data,
|
|
521
|
+
isError
|
|
522
|
+
}
|
|
523
|
+
) }),
|
|
524
|
+
/* @__PURE__ */ jsx(Tabs.Content, { value: "done", children: /* @__PURE__ */ jsx(
|
|
525
|
+
ReleasesGrid,
|
|
526
|
+
{
|
|
527
|
+
sectionTitle: "done",
|
|
528
|
+
releases: response?.currentData?.data,
|
|
529
|
+
isError
|
|
530
|
+
}
|
|
531
|
+
) })
|
|
532
|
+
] }),
|
|
578
533
|
/* @__PURE__ */ jsxs(
|
|
579
534
|
Pagination.Root,
|
|
580
535
|
{
|
|
@@ -587,9 +542,10 @@ const ReleasesPage = () => {
|
|
|
587
542
|
}
|
|
588
543
|
)
|
|
589
544
|
] }) }),
|
|
590
|
-
|
|
545
|
+
/* @__PURE__ */ jsx(
|
|
591
546
|
ReleaseModal,
|
|
592
547
|
{
|
|
548
|
+
open: releaseModalShown,
|
|
593
549
|
handleClose: toggleAddReleaseModal,
|
|
594
550
|
handleSubmit: handleAddRelease,
|
|
595
551
|
isLoading: isSubmittingForm,
|
|
@@ -604,7 +560,7 @@ const ReleaseInfoWrapper = styled(Flex)`
|
|
|
604
560
|
border-bottom-left-radius: ${({ theme }) => theme.borderRadius};
|
|
605
561
|
border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
|
|
606
562
|
`;
|
|
607
|
-
const StyledMenuItem = styled(
|
|
563
|
+
const StyledMenuItem = styled(MenuItem)`
|
|
608
564
|
svg path {
|
|
609
565
|
fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
|
|
610
566
|
}
|
|
@@ -633,42 +589,72 @@ const TrashIcon = styled(Trash)`
|
|
|
633
589
|
const TypographyMaxWidth = styled(Typography)`
|
|
634
590
|
max-width: 300px;
|
|
635
591
|
`;
|
|
636
|
-
const EntryValidationText = ({ action, schema, entry }) => {
|
|
592
|
+
const EntryValidationText = ({ action, schema, entry, status }) => {
|
|
637
593
|
const { formatMessage } = useIntl();
|
|
638
|
-
const { validate } = unstable_useDocument(
|
|
594
|
+
const { validate, isLoading } = unstable_useDocument(
|
|
639
595
|
{
|
|
640
596
|
collectionType: schema?.kind ?? "",
|
|
641
597
|
model: schema?.uid ?? ""
|
|
642
598
|
},
|
|
643
599
|
{
|
|
644
|
-
skip
|
|
600
|
+
// useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request
|
|
601
|
+
skip: true
|
|
645
602
|
}
|
|
646
603
|
);
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
const validationErrorsMessages = Object.entries(errors).map(
|
|
650
|
-
([key, value]) => formatMessage(
|
|
651
|
-
// @ts-expect-error – TODO: fix this will better checks
|
|
652
|
-
{ id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
|
|
653
|
-
{ field: key }
|
|
654
|
-
)
|
|
655
|
-
).join(" ");
|
|
656
|
-
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
657
|
-
/* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
|
|
658
|
-
/* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
|
|
659
|
-
] });
|
|
604
|
+
if (isLoading) {
|
|
605
|
+
return null;
|
|
660
606
|
}
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
607
|
+
const errors = validate(entry) ?? {};
|
|
608
|
+
if (action === "publish") {
|
|
609
|
+
if (Object.keys(errors).length > 0) {
|
|
610
|
+
const validationErrorsMessages = Object.entries(errors).map(
|
|
611
|
+
([key, value]) => formatMessage(
|
|
612
|
+
// @ts-expect-error – TODO: fix this will better checks
|
|
613
|
+
{ id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
|
|
614
|
+
{ field: key }
|
|
615
|
+
)
|
|
616
|
+
).join(" ");
|
|
617
|
+
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
618
|
+
/* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
|
|
619
|
+
/* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(
|
|
620
|
+
TypographyMaxWidth,
|
|
621
|
+
{
|
|
622
|
+
textColor: "danger600",
|
|
623
|
+
variant: "omega",
|
|
624
|
+
fontWeight: "semiBold",
|
|
625
|
+
ellipsis: true,
|
|
626
|
+
children: validationErrorsMessages
|
|
627
|
+
}
|
|
628
|
+
) })
|
|
629
|
+
] });
|
|
630
|
+
}
|
|
631
|
+
if (status === "draft") {
|
|
632
|
+
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
633
|
+
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
634
|
+
/* @__PURE__ */ jsx(Typography, { children: formatMessage({
|
|
635
|
+
id: "content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish",
|
|
636
|
+
defaultMessage: "Ready to publish"
|
|
637
|
+
}) })
|
|
638
|
+
] });
|
|
639
|
+
}
|
|
640
|
+
if (status === "modified") {
|
|
641
|
+
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
642
|
+
/* @__PURE__ */ jsx(ArrowsCounterClockwise, { fill: "alternative600" }),
|
|
643
|
+
/* @__PURE__ */ jsx(Typography, { children: formatMessage({
|
|
644
|
+
id: "content-releases.pages.ReleaseDetails.entry-validation.modified",
|
|
645
|
+
defaultMessage: "Ready to publish changes"
|
|
646
|
+
}) })
|
|
647
|
+
] });
|
|
648
|
+
}
|
|
649
|
+
if (status === "published") {
|
|
650
|
+
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
651
|
+
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
652
|
+
/* @__PURE__ */ jsx(Typography, { children: formatMessage({
|
|
653
|
+
id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
|
|
654
|
+
defaultMessage: "Already published"
|
|
655
|
+
}) })
|
|
656
|
+
] });
|
|
657
|
+
}
|
|
672
658
|
}
|
|
673
659
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
674
660
|
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
@@ -814,83 +800,71 @@ const ReleaseDetailsLayout = ({
|
|
|
814
800
|
] }),
|
|
815
801
|
navigationAction: /* @__PURE__ */ jsx(BackButton, {}),
|
|
816
802
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
817
|
-
/* @__PURE__ */ jsxs(
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
{
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
803
|
+
/* @__PURE__ */ jsxs(
|
|
804
|
+
SimpleMenu,
|
|
805
|
+
{
|
|
806
|
+
label: /* @__PURE__ */ jsx(More, {}),
|
|
807
|
+
variant: "tertiary",
|
|
808
|
+
endIcon: null,
|
|
809
|
+
paddingLeft: 2,
|
|
810
|
+
paddingRight: 2,
|
|
811
|
+
"aria-label": formatMessage({
|
|
812
|
+
id: "content-releases.header.actions.open-release-actions",
|
|
813
|
+
defaultMessage: "Release edit and delete menu"
|
|
814
|
+
}),
|
|
815
|
+
popoverPlacement: "bottom-end",
|
|
816
|
+
children: [
|
|
817
|
+
/* @__PURE__ */ jsx(StyledMenuItem, { disabled: !canUpdate, onSelect: toggleEditReleaseModal, children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
818
|
+
/* @__PURE__ */ jsx(PencilIcon, {}),
|
|
819
|
+
/* @__PURE__ */ jsx(Typography, { ellipsis: true, children: formatMessage({
|
|
820
|
+
id: "content-releases.header.actions.edit",
|
|
821
|
+
defaultMessage: "Edit"
|
|
822
|
+
}) })
|
|
823
|
+
] }) }),
|
|
824
|
+
/* @__PURE__ */ jsx(
|
|
825
|
+
StyledMenuItem,
|
|
826
|
+
{
|
|
827
|
+
disabled: !canDelete,
|
|
828
|
+
onSelect: toggleWarningSubmit,
|
|
829
|
+
$variant: "danger",
|
|
830
|
+
children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
831
|
+
/* @__PURE__ */ jsx(TrashIcon, {}),
|
|
832
|
+
/* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
|
|
833
|
+
id: "content-releases.header.actions.delete",
|
|
834
|
+
defaultMessage: "Delete"
|
|
846
835
|
}) })
|
|
847
|
-
] }) }),
|
|
848
|
-
/* @__PURE__ */ jsx(
|
|
849
|
-
StyledMenuItem,
|
|
850
|
-
{
|
|
851
|
-
disabled: !canDelete,
|
|
852
|
-
onSelect: toggleWarningSubmit,
|
|
853
|
-
$variant: "danger",
|
|
854
|
-
children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
855
|
-
/* @__PURE__ */ jsx(TrashIcon, {}),
|
|
856
|
-
/* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
|
|
857
|
-
id: "content-releases.header.actions.delete",
|
|
858
|
-
defaultMessage: "Delete"
|
|
859
|
-
}) })
|
|
860
|
-
] })
|
|
861
|
-
}
|
|
862
|
-
)
|
|
863
|
-
]
|
|
864
|
-
}
|
|
865
|
-
),
|
|
866
|
-
/* @__PURE__ */ jsxs(
|
|
867
|
-
ReleaseInfoWrapper,
|
|
868
|
-
{
|
|
869
|
-
direction: "column",
|
|
870
|
-
justifyContent: "center",
|
|
871
|
-
alignItems: "flex-start",
|
|
872
|
-
gap: 1,
|
|
873
|
-
padding: 5,
|
|
874
|
-
children: [
|
|
875
|
-
/* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
|
|
876
|
-
id: "content-releases.header.actions.created",
|
|
877
|
-
defaultMessage: "Created"
|
|
878
|
-
}) }),
|
|
879
|
-
/* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
|
|
880
|
-
/* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
881
|
-
formatMessage(
|
|
882
|
-
{
|
|
883
|
-
id: "content-releases.header.actions.created.description",
|
|
884
|
-
defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
|
|
885
|
-
},
|
|
886
|
-
{ createdBy: getCreatedByUser(), hasCreatedByUser }
|
|
887
|
-
)
|
|
888
836
|
] })
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
837
|
+
}
|
|
838
|
+
),
|
|
839
|
+
/* @__PURE__ */ jsxs(
|
|
840
|
+
ReleaseInfoWrapper,
|
|
841
|
+
{
|
|
842
|
+
direction: "column",
|
|
843
|
+
justifyContent: "center",
|
|
844
|
+
alignItems: "flex-start",
|
|
845
|
+
gap: 1,
|
|
846
|
+
padding: 5,
|
|
847
|
+
children: [
|
|
848
|
+
/* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
|
|
849
|
+
id: "content-releases.header.actions.created",
|
|
850
|
+
defaultMessage: "Created"
|
|
851
|
+
}) }),
|
|
852
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
|
|
853
|
+
/* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
854
|
+
formatMessage(
|
|
855
|
+
{
|
|
856
|
+
id: "content-releases.header.actions.created.description",
|
|
857
|
+
defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
|
|
858
|
+
},
|
|
859
|
+
{ createdBy: getCreatedByUser(), hasCreatedByUser }
|
|
860
|
+
)
|
|
861
|
+
] })
|
|
862
|
+
]
|
|
863
|
+
}
|
|
864
|
+
)
|
|
865
|
+
]
|
|
866
|
+
}
|
|
867
|
+
),
|
|
894
868
|
/* @__PURE__ */ jsx(Button, { size: "S", variant: "tertiary", onClick: handleRefresh, children: formatMessage({
|
|
895
869
|
id: "content-releases.header.actions.refresh",
|
|
896
870
|
defaultMessage: "Refresh"
|
|
@@ -949,19 +923,18 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
949
923
|
allowedActions: { canUpdate }
|
|
950
924
|
} = useRBAC(PERMISSIONS);
|
|
951
925
|
const runHookWaterfall = useStrapiApp("ReleaseDetailsPage", (state) => state.runHookWaterfall);
|
|
952
|
-
const { hasI18nEnabled } = runHookWaterfall(
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
);
|
|
926
|
+
const { displayedHeaders, hasI18nEnabled } = runHookWaterfall("ContentReleases/pages/ReleaseDetails/add-locale-in-releases", {
|
|
927
|
+
displayedHeaders: [
|
|
928
|
+
{
|
|
929
|
+
label: {
|
|
930
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
931
|
+
defaultMessage: "name"
|
|
932
|
+
},
|
|
933
|
+
name: "name"
|
|
934
|
+
}
|
|
935
|
+
],
|
|
936
|
+
hasI18nEnabled: false
|
|
937
|
+
});
|
|
965
938
|
const release = releaseData?.data;
|
|
966
939
|
const selectedGroupBy = query?.groupBy || "contentType";
|
|
967
940
|
const {
|
|
@@ -1067,34 +1040,27 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1067
1040
|
defaultMessage: "Group by"
|
|
1068
1041
|
});
|
|
1069
1042
|
const headers = [
|
|
1070
|
-
|
|
1043
|
+
...displayedHeaders,
|
|
1071
1044
|
{
|
|
1072
|
-
label:
|
|
1073
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1074
|
-
defaultMessage: "name"
|
|
1075
|
-
}),
|
|
1076
|
-
name: "name"
|
|
1077
|
-
},
|
|
1078
|
-
{
|
|
1079
|
-
label: formatMessage({
|
|
1045
|
+
label: {
|
|
1080
1046
|
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1081
1047
|
defaultMessage: "content-type"
|
|
1082
|
-
}
|
|
1048
|
+
},
|
|
1083
1049
|
name: "content-type"
|
|
1084
1050
|
},
|
|
1085
1051
|
{
|
|
1086
|
-
label:
|
|
1052
|
+
label: {
|
|
1087
1053
|
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1088
1054
|
defaultMessage: "action"
|
|
1089
|
-
}
|
|
1055
|
+
},
|
|
1090
1056
|
name: "action"
|
|
1091
1057
|
},
|
|
1092
1058
|
...!release.releasedAt ? [
|
|
1093
1059
|
{
|
|
1094
|
-
label:
|
|
1060
|
+
label: {
|
|
1095
1061
|
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1096
1062
|
defaultMessage: "status"
|
|
1097
|
-
}
|
|
1063
|
+
},
|
|
1098
1064
|
name: "status"
|
|
1099
1065
|
}
|
|
1100
1066
|
] : []
|
|
@@ -1132,10 +1098,10 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1132
1098
|
headers,
|
|
1133
1099
|
isLoading: isLoading || isFetching,
|
|
1134
1100
|
children: /* @__PURE__ */ jsxs(Table.Content, { children: [
|
|
1135
|
-
/* @__PURE__ */ jsx(Table.Head, { children: headers.map((
|
|
1101
|
+
/* @__PURE__ */ jsx(Table.Head, { children: headers.map(({ label, name }) => /* @__PURE__ */ jsx(Table.HeaderCell, { label: formatMessage(label), name }, name)) }),
|
|
1136
1102
|
/* @__PURE__ */ jsx(Table.Loading, {}),
|
|
1137
1103
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1138
|
-
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1104
|
+
({ id, contentType, locale, type, entry, status }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1139
1105
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1140
1106
|
hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1141
1107
|
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
|
|
@@ -1164,7 +1130,8 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1164
1130
|
action: type,
|
|
1165
1131
|
schema: contentTypes?.[contentType.uid],
|
|
1166
1132
|
components,
|
|
1167
|
-
entry
|
|
1133
|
+
entry,
|
|
1134
|
+
status
|
|
1168
1135
|
}
|
|
1169
1136
|
) }),
|
|
1170
1137
|
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { children: [
|
|
@@ -1172,7 +1139,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1172
1139
|
ReleaseActionMenu.ReleaseActionEntryLinkItem,
|
|
1173
1140
|
{
|
|
1174
1141
|
contentTypeUid: contentType.uid,
|
|
1175
|
-
|
|
1142
|
+
documentId: entry.documentId,
|
|
1176
1143
|
locale: locale?.code
|
|
1177
1144
|
}
|
|
1178
1145
|
),
|
|
@@ -1300,9 +1267,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1300
1267
|
toggleWarningSubmit,
|
|
1301
1268
|
children: [
|
|
1302
1269
|
/* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
|
|
1303
|
-
|
|
1270
|
+
/* @__PURE__ */ jsx(
|
|
1304
1271
|
ReleaseModal,
|
|
1305
1272
|
{
|
|
1273
|
+
open: releaseModalShown,
|
|
1306
1274
|
handleClose: toggleEditReleaseModal,
|
|
1307
1275
|
handleSubmit: handleEditRelease,
|
|
1308
1276
|
isLoading: isLoadingDetails || isSubmittingForm,
|
|
@@ -1316,18 +1284,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1316
1284
|
}
|
|
1317
1285
|
}
|
|
1318
1286
|
),
|
|
1319
|
-
/* @__PURE__ */ jsx(
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
onClose: toggleWarningSubmit,
|
|
1324
|
-
onConfirm: handleDeleteRelease,
|
|
1325
|
-
children: formatMessage({
|
|
1326
|
-
id: "content-releases.dialog.confirmation-message",
|
|
1327
|
-
defaultMessage: "Are you sure you want to delete this release?"
|
|
1328
|
-
})
|
|
1329
|
-
}
|
|
1330
|
-
)
|
|
1287
|
+
/* @__PURE__ */ jsx(Dialog.Root, { open: showWarningSubmit, onOpenChange: toggleWarningSubmit, children: /* @__PURE__ */ jsx(ConfirmDialog, { onConfirm: handleDeleteRelease, children: formatMessage({
|
|
1288
|
+
id: "content-releases.dialog.confirmation-message",
|
|
1289
|
+
defaultMessage: "Are you sure you want to delete this release?"
|
|
1290
|
+
}) }) })
|
|
1331
1291
|
]
|
|
1332
1292
|
}
|
|
1333
1293
|
);
|
|
@@ -1341,4 +1301,4 @@ const App = () => {
|
|
|
1341
1301
|
export {
|
|
1342
1302
|
App
|
|
1343
1303
|
};
|
|
1344
|
-
//# sourceMappingURL=App-
|
|
1304
|
+
//# sourceMappingURL=App-CdTs45Xr.mjs.map
|