@strapi/content-releases 0.0.0-experimental.d8a676a242377cee820b59b21a05d47290d9ac73 → 0.0.0-experimental.e3e48deb89bd0a1b6cc69b698696566fa7854a95
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/_chunks/{App-bpzO2Ljh.mjs → App-PQlYzNfb.mjs} +181 -167
- package/dist/_chunks/App-PQlYzNfb.mjs.map +1 -0
- package/dist/_chunks/{App-p8aKBitd.js → App-lzeJz92X.js} +179 -165
- package/dist/_chunks/App-lzeJz92X.js.map +1 -0
- package/dist/_chunks/{index-AECgcaDa.mjs → index--4AgLDzb.mjs} +20 -26
- package/dist/_chunks/index--4AgLDzb.mjs.map +1 -0
- package/dist/_chunks/{index-fP3qoWZ4.js → index-Nf1JfI-m.js} +16 -22
- package/dist/_chunks/index-Nf1JfI-m.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/CMReleasesContainer.d.ts +1 -0
- package/dist/admin/src/components/RelativeTime.d.ts +28 -0
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
- package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
- package/dist/admin/src/components/ReleaseModal.d.ts +16 -0
- package/dist/admin/src/constants.d.ts +58 -0
- package/dist/admin/src/index.d.ts +3 -0
- package/dist/admin/src/pages/App.d.ts +1 -0
- package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
- package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
- package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
- package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
- package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
- package/dist/admin/src/pluginId.d.ts +1 -0
- package/dist/admin/src/services/axios.d.ts +29 -0
- package/dist/admin/src/services/release.d.ts +369 -0
- package/dist/admin/src/store/hooks.d.ts +7 -0
- package/dist/admin/src/utils/time.d.ts +1 -0
- package/dist/server/index.js +92 -171
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +93 -171
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts +5 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -0
- package/dist/server/src/constants.d.ts +12 -0
- package/dist/server/src/constants.d.ts.map +1 -0
- package/dist/server/src/content-types/index.d.ts +99 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -0
- package/dist/server/src/content-types/release/index.d.ts +48 -0
- package/dist/server/src/content-types/release/index.d.ts.map +1 -0
- package/dist/server/src/content-types/release/schema.d.ts +47 -0
- package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
- package/dist/server/src/content-types/release-action/index.d.ts +50 -0
- package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
- package/dist/server/src/content-types/release-action/schema.d.ts +49 -0
- package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
- package/dist/server/src/controllers/index.d.ts +18 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -0
- package/dist/server/src/controllers/release-action.d.ts +9 -0
- package/dist/server/src/controllers/release-action.d.ts.map +1 -0
- package/dist/server/src/controllers/release.d.ts +11 -0
- package/dist/server/src/controllers/release.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/release-action.d.ts +3 -0
- package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/release.d.ts +2 -0
- package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
- package/dist/server/src/destroy.d.ts +5 -0
- package/dist/server/src/destroy.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +2092 -0
- package/dist/server/src/index.d.ts.map +1 -0
- package/dist/server/src/migrations/index.d.ts +10 -0
- package/dist/server/src/migrations/index.d.ts.map +1 -0
- package/dist/server/src/register.d.ts +5 -0
- package/dist/server/src/register.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts +35 -0
- package/dist/server/src/routes/index.d.ts.map +1 -0
- package/dist/server/src/routes/release-action.d.ts +18 -0
- package/dist/server/src/routes/release-action.d.ts.map +1 -0
- package/dist/server/src/routes/release.d.ts +18 -0
- package/dist/server/src/routes/release.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +1826 -0
- package/dist/server/src/services/index.d.ts.map +1 -0
- package/dist/server/src/services/release.d.ts +66 -0
- package/dist/server/src/services/release.d.ts.map +1 -0
- package/dist/server/src/services/scheduling.d.ts +18 -0
- package/dist/server/src/services/scheduling.d.ts.map +1 -0
- package/dist/server/src/services/validation.d.ts +14 -0
- package/dist/server/src/services/validation.d.ts.map +1 -0
- package/dist/server/src/utils/index.d.ts +14 -0
- package/dist/server/src/utils/index.d.ts.map +1 -0
- package/dist/shared/contracts/release-actions.d.ts +105 -0
- package/dist/shared/contracts/release-actions.d.ts.map +1 -0
- package/dist/shared/contracts/releases.d.ts +166 -0
- package/dist/shared/contracts/releases.d.ts.map +1 -0
- package/dist/shared/types.d.ts +24 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/validation-schemas.d.ts +2 -0
- package/dist/shared/validation-schemas.d.ts.map +1 -0
- package/package.json +14 -21
- package/dist/_chunks/App-bpzO2Ljh.mjs.map +0 -1
- package/dist/_chunks/App-p8aKBitd.js.map +0 -1
- package/dist/_chunks/index-AECgcaDa.mjs.map +0 -1
- package/dist/_chunks/index-fP3qoWZ4.js.map +0 -1
|
@@ -1,23 +1,53 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { useLocation,
|
|
4
|
-
import { g as getTimezoneOffset, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS, i as isAxiosError, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as useTypedDispatch, h as useGetReleaseActionsQuery, j as useUpdateReleaseActionMutation, R as ReleaseActionOptions, k as ReleaseActionMenu, r as releaseApi } from "./index
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useLicenseLimits, Page, Pagination, BackButton, Table, unstable_useDocument } from "@strapi/admin/strapi-admin";
|
|
3
|
+
import { useLocation, useNavigate, useParams, Navigate, Link as Link$1, Routes, Route } from "react-router-dom";
|
|
4
|
+
import { g as getTimezoneOffset, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS, i as isAxiosError, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as useTypedDispatch, h as useGetReleaseActionsQuery, j as useUpdateReleaseActionMutation, R as ReleaseActionOptions, k as ReleaseActionMenu, r as releaseApi } from "./index--4AgLDzb.mjs";
|
|
5
5
|
import * as React from "react";
|
|
6
|
-
import {
|
|
7
|
-
import { ModalLayout, ModalHeader, Typography, ModalBody, Flex, TextInput, Box, Checkbox, DatePicker, TimePicker, ModalFooter, Button, Combobox, ComboboxOption, Alert, Main, HeaderLayout, ContentLayout, TabGroup, Tabs, Tab, Divider, TabPanels, TabPanel, EmptyStateLayout, Grid, GridItem, Badge, Link as Link$1, IconButton, SingleSelect, SingleSelectOption, Tr, Td, Icon, Tooltip } from "@strapi/design-system";
|
|
6
|
+
import { ModalLayout, ModalHeader, Typography, ModalBody, Flex, TextInput, Box, Checkbox, DatePicker, TimePicker, ModalFooter, Button, Combobox, ComboboxOption, Alert, Main, HeaderLayout, ContentLayout, TabGroup, Tabs, Tab, Divider, TabPanels, TabPanel, EmptyStateLayout, Grid, GridItem, Badge, IconButton, SingleSelect, SingleSelectOption, Tr, Td, Icon, Tooltip } from "@strapi/design-system";
|
|
8
7
|
import { Link, Menu, LinkButton } from "@strapi/design-system/v2";
|
|
9
|
-
import {
|
|
8
|
+
import { useNotification, useAPIErrorHandler, useQueryParams, useTracking, CheckPermissions, ConfirmDialog, useRBAC } from "@strapi/helper-plugin";
|
|
9
|
+
import { Plus, EmptyDocuments, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
|
|
10
10
|
import format from "date-fns/format";
|
|
11
|
-
import {
|
|
11
|
+
import { zonedTimeToUtc, utcToZonedTime } from "date-fns-tz";
|
|
12
12
|
import { useIntl } from "react-intl";
|
|
13
13
|
import styled from "styled-components";
|
|
14
|
-
import { formatISO, parse } from "date-fns";
|
|
14
|
+
import { intervalToDuration, isPast, formatISO, parse } from "date-fns";
|
|
15
15
|
import { Formik, Form, useFormikContext } from "formik";
|
|
16
16
|
import * as yup from "yup";
|
|
17
17
|
import "@reduxjs/toolkit/query";
|
|
18
18
|
import "axios";
|
|
19
19
|
import "@reduxjs/toolkit/query/react";
|
|
20
20
|
import "react-redux";
|
|
21
|
+
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
|
22
|
+
const RelativeTime = React.forwardRef(
|
|
23
|
+
({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
|
|
24
|
+
const { formatRelativeTime, formatDate, formatTime } = useIntl();
|
|
25
|
+
const interval = intervalToDuration({
|
|
26
|
+
start: timestamp,
|
|
27
|
+
end: Date.now()
|
|
28
|
+
// see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
|
|
29
|
+
});
|
|
30
|
+
const unit = intervals.find((intervalUnit) => {
|
|
31
|
+
return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
|
|
32
|
+
});
|
|
33
|
+
const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];
|
|
34
|
+
const customInterval = customIntervals.find(
|
|
35
|
+
(custom) => interval[custom.unit] < custom.threshold
|
|
36
|
+
);
|
|
37
|
+
const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
|
|
38
|
+
return /* @__PURE__ */ jsx(
|
|
39
|
+
"time",
|
|
40
|
+
{
|
|
41
|
+
ref: forwardedRef,
|
|
42
|
+
dateTime: timestamp.toISOString(),
|
|
43
|
+
role: "time",
|
|
44
|
+
title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
|
|
45
|
+
...restProps,
|
|
46
|
+
children: displayText
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
);
|
|
21
51
|
const RELEASE_SCHEMA = yup.object().shape({
|
|
22
52
|
name: yup.string().trim().required(),
|
|
23
53
|
scheduledAt: yup.string().nullable(),
|
|
@@ -56,12 +86,12 @@ const ReleaseModal = ({
|
|
|
56
86
|
if (!date || !time || !timezone)
|
|
57
87
|
return null;
|
|
58
88
|
const formattedDate = parse(time, "HH:mm", new Date(date));
|
|
59
|
-
const timezoneWithoutOffset = timezone.split("
|
|
89
|
+
const timezoneWithoutOffset = timezone.split("_")[1];
|
|
60
90
|
return zonedTimeToUtc(formattedDate, timezoneWithoutOffset);
|
|
61
91
|
};
|
|
62
92
|
const getTimezoneWithOffset = () => {
|
|
63
93
|
const currentTimezone = timezoneList.find(
|
|
64
|
-
(timezone) => timezone.value.split("
|
|
94
|
+
(timezone) => timezone.value.split("_")[1] === initialValues.timezone
|
|
65
95
|
);
|
|
66
96
|
return currentTimezone?.value || systemTimezone.value;
|
|
67
97
|
};
|
|
@@ -79,7 +109,7 @@ const ReleaseModal = ({
|
|
|
79
109
|
onSubmit: (values) => {
|
|
80
110
|
handleSubmit({
|
|
81
111
|
...values,
|
|
82
|
-
timezone: values.timezone ? values.timezone.split("
|
|
112
|
+
timezone: values.timezone ? values.timezone.split("_")[1] : null,
|
|
83
113
|
scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null
|
|
84
114
|
});
|
|
85
115
|
},
|
|
@@ -162,8 +192,7 @@ const ReleaseModal = ({
|
|
|
162
192
|
setFieldValue("date", null);
|
|
163
193
|
},
|
|
164
194
|
selectedDate: values.date || void 0,
|
|
165
|
-
required: true
|
|
166
|
-
minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
|
|
195
|
+
required: true
|
|
167
196
|
}
|
|
168
197
|
) }),
|
|
169
198
|
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
@@ -215,10 +244,10 @@ const ReleaseModal = ({
|
|
|
215
244
|
const getTimezones = (selectedDate) => {
|
|
216
245
|
const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
|
|
217
246
|
const utcOffset = getTimezoneOffset(timezone, selectedDate);
|
|
218
|
-
return { offset: utcOffset, value: `${utcOffset}
|
|
247
|
+
return { offset: utcOffset, value: `${utcOffset}_${timezone}` };
|
|
219
248
|
});
|
|
220
249
|
const systemTimezone = timezoneList.find(
|
|
221
|
-
(timezone) => timezone.value.split("
|
|
250
|
+
(timezone) => timezone.value.split("_")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
222
251
|
);
|
|
223
252
|
return { timezoneList, systemTimezone };
|
|
224
253
|
};
|
|
@@ -230,7 +259,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
230
259
|
if (values.date) {
|
|
231
260
|
const { timezoneList: timezoneList2 } = getTimezones(new Date(values.date));
|
|
232
261
|
setTimezoneList(timezoneList2);
|
|
233
|
-
const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("
|
|
262
|
+
const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("_")[1] === values.timezone.split("_")[1]);
|
|
234
263
|
if (updatedTimezone) {
|
|
235
264
|
setFieldValue("timezone", updatedTimezone.value);
|
|
236
265
|
}
|
|
@@ -243,10 +272,9 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
243
272
|
id: "content-releases.modal.form.input.label.timezone",
|
|
244
273
|
defaultMessage: "Timezone"
|
|
245
274
|
}),
|
|
246
|
-
autocomplete: { type: "list", filter: "contains" },
|
|
247
275
|
name: "timezone",
|
|
248
276
|
value: values.timezone || void 0,
|
|
249
|
-
textValue: values.timezone ? values.timezone.replace(
|
|
277
|
+
textValue: values.timezone ? values.timezone.replace("_", " ") : void 0,
|
|
250
278
|
onChange: (timezone) => {
|
|
251
279
|
setFieldValue("timezone", timezone);
|
|
252
280
|
},
|
|
@@ -258,7 +286,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
258
286
|
},
|
|
259
287
|
error: errors.timezone,
|
|
260
288
|
required: true,
|
|
261
|
-
children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace(
|
|
289
|
+
children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace("_", " ") }, timezone.value))
|
|
262
290
|
}
|
|
263
291
|
);
|
|
264
292
|
};
|
|
@@ -297,7 +325,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
297
325
|
const { formatMessage } = useIntl();
|
|
298
326
|
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
299
327
|
if (isError) {
|
|
300
|
-
return /* @__PURE__ */ jsx(
|
|
328
|
+
return /* @__PURE__ */ jsx(Page.Error, {});
|
|
301
329
|
}
|
|
302
330
|
if (releases?.length === 0) {
|
|
303
331
|
return /* @__PURE__ */ jsx(
|
|
@@ -371,7 +399,7 @@ const ReleasesPage = () => {
|
|
|
371
399
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
372
400
|
const toggleNotification = useNotification();
|
|
373
401
|
const { formatMessage } = useIntl();
|
|
374
|
-
const
|
|
402
|
+
const navigate = useNavigate();
|
|
375
403
|
const { formatAPIError } = useAPIErrorHandler();
|
|
376
404
|
const [{ query }, setQuery] = useQueryParams();
|
|
377
405
|
const response = useGetReleasesQuery(query);
|
|
@@ -395,9 +423,9 @@ const ReleasesPage = () => {
|
|
|
395
423
|
defaultMessage: "Please try again or open another release."
|
|
396
424
|
})
|
|
397
425
|
});
|
|
398
|
-
|
|
426
|
+
navigate("", { replace: true, state: null });
|
|
399
427
|
}
|
|
400
|
-
}, [formatMessage, location?.state?.errors,
|
|
428
|
+
}, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
|
|
401
429
|
React.useEffect(() => {
|
|
402
430
|
if (tabRef.current) {
|
|
403
431
|
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
@@ -407,7 +435,7 @@ const ReleasesPage = () => {
|
|
|
407
435
|
setReleaseModalShown((prev) => !prev);
|
|
408
436
|
};
|
|
409
437
|
if (isLoading) {
|
|
410
|
-
return /* @__PURE__ */ jsx(
|
|
438
|
+
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
411
439
|
}
|
|
412
440
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
413
441
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
@@ -438,7 +466,7 @@ const ReleasesPage = () => {
|
|
|
438
466
|
})
|
|
439
467
|
});
|
|
440
468
|
trackUsage("didCreateRelease");
|
|
441
|
-
|
|
469
|
+
navigate(response2.data.data.id.toString());
|
|
442
470
|
} else if (isAxiosError(response2.error)) {
|
|
443
471
|
toggleNotification({
|
|
444
472
|
type: "warning",
|
|
@@ -553,23 +581,17 @@ const ReleasesPage = () => {
|
|
|
553
581
|
]
|
|
554
582
|
}
|
|
555
583
|
),
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
pagination: {
|
|
568
|
-
pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
)
|
|
572
|
-
] }) : null
|
|
584
|
+
/* @__PURE__ */ jsxs(
|
|
585
|
+
Pagination.Root,
|
|
586
|
+
{
|
|
587
|
+
...response?.currentData?.meta?.pagination,
|
|
588
|
+
defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
|
|
589
|
+
children: [
|
|
590
|
+
/* @__PURE__ */ jsx(Pagination.PageSize, { options: ["8", "16", "32", "64"] }),
|
|
591
|
+
/* @__PURE__ */ jsx(Pagination.Links, {})
|
|
592
|
+
]
|
|
593
|
+
}
|
|
594
|
+
)
|
|
573
595
|
] }) }),
|
|
574
596
|
releaseModalShown && /* @__PURE__ */ jsx(
|
|
575
597
|
ReleaseModal,
|
|
@@ -617,14 +639,18 @@ const TrashIcon = styled(Trash)`
|
|
|
617
639
|
const TypographyMaxWidth = styled(Typography)`
|
|
618
640
|
max-width: 300px;
|
|
619
641
|
`;
|
|
620
|
-
const EntryValidationText = ({ action, schema,
|
|
642
|
+
const EntryValidationText = ({ action, schema, entry }) => {
|
|
621
643
|
const { formatMessage } = useIntl();
|
|
622
|
-
const { validate } = unstable_useDocument(
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
644
|
+
const { validate } = unstable_useDocument(
|
|
645
|
+
{
|
|
646
|
+
collectionType: schema?.kind ?? "",
|
|
647
|
+
model: schema?.uid ?? ""
|
|
648
|
+
},
|
|
649
|
+
{
|
|
650
|
+
skip: !schema
|
|
651
|
+
}
|
|
652
|
+
);
|
|
653
|
+
const errors = validate(entry) ?? {};
|
|
628
654
|
if (Object.keys(errors).length > 0) {
|
|
629
655
|
const validationErrorsMessages = Object.entries(errors).map(
|
|
630
656
|
([key, value]) => formatMessage(
|
|
@@ -672,7 +698,12 @@ const ReleaseDetailsLayout = ({
|
|
|
672
698
|
isLoading: isLoadingDetails,
|
|
673
699
|
isError,
|
|
674
700
|
error
|
|
675
|
-
} = useGetReleaseQuery(
|
|
701
|
+
} = useGetReleaseQuery(
|
|
702
|
+
{ id: releaseId },
|
|
703
|
+
{
|
|
704
|
+
skip: !releaseId
|
|
705
|
+
}
|
|
706
|
+
);
|
|
676
707
|
const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();
|
|
677
708
|
const toggleNotification = useNotification();
|
|
678
709
|
const { formatAPIError } = useAPIErrorHandler();
|
|
@@ -682,8 +713,8 @@ const ReleaseDetailsLayout = ({
|
|
|
682
713
|
const dispatch = useTypedDispatch();
|
|
683
714
|
const { trackUsage } = useTracking();
|
|
684
715
|
const release = data?.data;
|
|
685
|
-
const handlePublishRelease = async () => {
|
|
686
|
-
const response = await publishRelease({ id
|
|
716
|
+
const handlePublishRelease = (id) => async () => {
|
|
717
|
+
const response = await publishRelease({ id });
|
|
687
718
|
if ("data" in response) {
|
|
688
719
|
toggleNotification({
|
|
689
720
|
type: "success",
|
|
@@ -726,21 +757,19 @@ const ReleaseDetailsLayout = ({
|
|
|
726
757
|
return release.createdBy.email;
|
|
727
758
|
};
|
|
728
759
|
if (isLoadingDetails) {
|
|
729
|
-
return /* @__PURE__ */ jsx(
|
|
760
|
+
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
730
761
|
}
|
|
731
762
|
if (isError || !release) {
|
|
732
763
|
return /* @__PURE__ */ jsx(
|
|
733
|
-
|
|
764
|
+
Navigate,
|
|
734
765
|
{
|
|
735
|
-
to:
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
]
|
|
743
|
-
}
|
|
766
|
+
to: "..",
|
|
767
|
+
state: {
|
|
768
|
+
errors: [
|
|
769
|
+
{
|
|
770
|
+
code: error?.code
|
|
771
|
+
}
|
|
772
|
+
]
|
|
744
773
|
}
|
|
745
774
|
}
|
|
746
775
|
);
|
|
@@ -785,10 +814,7 @@ const ReleaseDetailsLayout = ({
|
|
|
785
814
|
/* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (IsSchedulingEnabled && isScheduled ? ` - ${scheduledText}` : "") }),
|
|
786
815
|
/* @__PURE__ */ jsx(Badge, { ...getBadgeProps(release.status), children: release.status })
|
|
787
816
|
] }),
|
|
788
|
-
navigationAction: /* @__PURE__ */ jsx(
|
|
789
|
-
id: "global.back",
|
|
790
|
-
defaultMessage: "Back"
|
|
791
|
-
}) }),
|
|
817
|
+
navigationAction: /* @__PURE__ */ jsx(BackButton, {}),
|
|
792
818
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
793
819
|
/* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
794
820
|
/* @__PURE__ */ jsx(
|
|
@@ -877,7 +903,7 @@ const ReleaseDetailsLayout = ({
|
|
|
877
903
|
{
|
|
878
904
|
size: "S",
|
|
879
905
|
variant: "default",
|
|
880
|
-
onClick: handlePublishRelease,
|
|
906
|
+
onClick: handlePublishRelease(release.id.toString()),
|
|
881
907
|
loading: isPublishing,
|
|
882
908
|
disabled: release.actions.meta.count === 0,
|
|
883
909
|
children: formatMessage({
|
|
@@ -911,9 +937,8 @@ const getGroupByOptionLabel = (value) => {
|
|
|
911
937
|
defaultMessage: "Content-Types"
|
|
912
938
|
};
|
|
913
939
|
};
|
|
914
|
-
const ReleaseDetailsBody = () => {
|
|
940
|
+
const ReleaseDetailsBody = ({ releaseId }) => {
|
|
915
941
|
const { formatMessage } = useIntl();
|
|
916
|
-
const { releaseId } = useParams();
|
|
917
942
|
const [{ query }, setQuery] = useQueryParams();
|
|
918
943
|
const toggleNotification = useNotification();
|
|
919
944
|
const { formatAPIError } = useAPIErrorHandler();
|
|
@@ -968,7 +993,7 @@ const ReleaseDetailsBody = () => {
|
|
|
968
993
|
}
|
|
969
994
|
};
|
|
970
995
|
if (isLoading || isReleaseLoading) {
|
|
971
|
-
return /* @__PURE__ */ jsx(
|
|
996
|
+
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
972
997
|
}
|
|
973
998
|
const releaseActions = data?.data;
|
|
974
999
|
const releaseMeta = data?.meta;
|
|
@@ -987,32 +1012,26 @@ const ReleaseDetailsBody = () => {
|
|
|
987
1012
|
});
|
|
988
1013
|
}
|
|
989
1014
|
return /* @__PURE__ */ jsx(
|
|
990
|
-
|
|
1015
|
+
Navigate,
|
|
991
1016
|
{
|
|
992
|
-
to:
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
errors: errorsArray
|
|
996
|
-
}
|
|
1017
|
+
to: "..",
|
|
1018
|
+
state: {
|
|
1019
|
+
errors: errorsArray
|
|
997
1020
|
}
|
|
998
1021
|
}
|
|
999
1022
|
);
|
|
1000
1023
|
}
|
|
1001
1024
|
if (isError || !releaseActions) {
|
|
1002
|
-
return /* @__PURE__ */ jsx(
|
|
1025
|
+
return /* @__PURE__ */ jsx(Page.Error, {});
|
|
1003
1026
|
}
|
|
1004
1027
|
if (Object.keys(releaseActions).length === 0) {
|
|
1005
1028
|
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(
|
|
1006
|
-
|
|
1029
|
+
EmptyStateLayout,
|
|
1007
1030
|
{
|
|
1008
|
-
content: {
|
|
1009
|
-
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1010
|
-
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1011
|
-
},
|
|
1012
1031
|
action: /* @__PURE__ */ jsx(
|
|
1013
1032
|
LinkButton,
|
|
1014
1033
|
{
|
|
1015
|
-
as: Link$
|
|
1034
|
+
as: Link$1,
|
|
1016
1035
|
to: {
|
|
1017
1036
|
pathname: "/content-manager"
|
|
1018
1037
|
},
|
|
@@ -1023,10 +1042,54 @@ const ReleaseDetailsBody = () => {
|
|
|
1023
1042
|
defaultMessage: "Open the Content Manager"
|
|
1024
1043
|
})
|
|
1025
1044
|
}
|
|
1026
|
-
)
|
|
1045
|
+
),
|
|
1046
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" }),
|
|
1047
|
+
content: formatMessage({
|
|
1048
|
+
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1049
|
+
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1050
|
+
})
|
|
1027
1051
|
}
|
|
1028
1052
|
) });
|
|
1029
1053
|
}
|
|
1054
|
+
const headers = [
|
|
1055
|
+
{
|
|
1056
|
+
label: formatMessage({
|
|
1057
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1058
|
+
defaultMessage: "name"
|
|
1059
|
+
}),
|
|
1060
|
+
name: "name"
|
|
1061
|
+
},
|
|
1062
|
+
{
|
|
1063
|
+
label: formatMessage({
|
|
1064
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1065
|
+
defaultMessage: "locale"
|
|
1066
|
+
}),
|
|
1067
|
+
name: "locale"
|
|
1068
|
+
},
|
|
1069
|
+
{
|
|
1070
|
+
label: formatMessage({
|
|
1071
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1072
|
+
defaultMessage: "content-type"
|
|
1073
|
+
}),
|
|
1074
|
+
name: "content-type"
|
|
1075
|
+
},
|
|
1076
|
+
{
|
|
1077
|
+
label: formatMessage({
|
|
1078
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1079
|
+
defaultMessage: "action"
|
|
1080
|
+
}),
|
|
1081
|
+
name: "action"
|
|
1082
|
+
},
|
|
1083
|
+
...!release.releasedAt ? [
|
|
1084
|
+
{
|
|
1085
|
+
label: formatMessage({
|
|
1086
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1087
|
+
defaultMessage: "status"
|
|
1088
|
+
}),
|
|
1089
|
+
name: "status"
|
|
1090
|
+
}
|
|
1091
|
+
] : []
|
|
1092
|
+
];
|
|
1030
1093
|
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1031
1094
|
/* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
|
|
1032
1095
|
SingleSelect,
|
|
@@ -1058,68 +1121,11 @@ const ReleaseDetailsBody = () => {
|
|
|
1058
1121
|
...item,
|
|
1059
1122
|
id: Number(item.entry.id)
|
|
1060
1123
|
})),
|
|
1061
|
-
|
|
1062
|
-
isLoading,
|
|
1063
|
-
isFetching,
|
|
1124
|
+
headers,
|
|
1125
|
+
isLoading: isLoading || isFetching,
|
|
1064
1126
|
children: /* @__PURE__ */ jsxs(Table.Content, { children: [
|
|
1065
|
-
/* @__PURE__ */
|
|
1066
|
-
|
|
1067
|
-
Table.HeaderCell,
|
|
1068
|
-
{
|
|
1069
|
-
fieldSchemaType: "string",
|
|
1070
|
-
label: formatMessage({
|
|
1071
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1072
|
-
defaultMessage: "name"
|
|
1073
|
-
}),
|
|
1074
|
-
name: "name"
|
|
1075
|
-
}
|
|
1076
|
-
),
|
|
1077
|
-
/* @__PURE__ */ jsx(
|
|
1078
|
-
Table.HeaderCell,
|
|
1079
|
-
{
|
|
1080
|
-
fieldSchemaType: "string",
|
|
1081
|
-
label: formatMessage({
|
|
1082
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1083
|
-
defaultMessage: "locale"
|
|
1084
|
-
}),
|
|
1085
|
-
name: "locale"
|
|
1086
|
-
}
|
|
1087
|
-
),
|
|
1088
|
-
/* @__PURE__ */ jsx(
|
|
1089
|
-
Table.HeaderCell,
|
|
1090
|
-
{
|
|
1091
|
-
fieldSchemaType: "string",
|
|
1092
|
-
label: formatMessage({
|
|
1093
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1094
|
-
defaultMessage: "content-type"
|
|
1095
|
-
}),
|
|
1096
|
-
name: "content-type"
|
|
1097
|
-
}
|
|
1098
|
-
),
|
|
1099
|
-
/* @__PURE__ */ jsx(
|
|
1100
|
-
Table.HeaderCell,
|
|
1101
|
-
{
|
|
1102
|
-
fieldSchemaType: "string",
|
|
1103
|
-
label: formatMessage({
|
|
1104
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1105
|
-
defaultMessage: "action"
|
|
1106
|
-
}),
|
|
1107
|
-
name: "action"
|
|
1108
|
-
}
|
|
1109
|
-
),
|
|
1110
|
-
!release.releasedAt && /* @__PURE__ */ jsx(
|
|
1111
|
-
Table.HeaderCell,
|
|
1112
|
-
{
|
|
1113
|
-
fieldSchemaType: "string",
|
|
1114
|
-
label: formatMessage({
|
|
1115
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1116
|
-
defaultMessage: "status"
|
|
1117
|
-
}),
|
|
1118
|
-
name: "status"
|
|
1119
|
-
}
|
|
1120
|
-
)
|
|
1121
|
-
] }),
|
|
1122
|
-
/* @__PURE__ */ jsx(Table.LoadingBody, {}),
|
|
1127
|
+
/* @__PURE__ */ jsx(Table.Head, { children: headers.map((header) => /* @__PURE__ */ jsx(Table.HeaderCell, { ...header }, header.name)) }),
|
|
1128
|
+
/* @__PURE__ */ jsx(Table.Loading, {}),
|
|
1123
1129
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1124
1130
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1125
1131
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
@@ -1177,17 +1183,17 @@ const ReleaseDetailsBody = () => {
|
|
|
1177
1183
|
}
|
|
1178
1184
|
)
|
|
1179
1185
|
] }, `releases-group-${key}`)),
|
|
1180
|
-
/* @__PURE__ */ jsxs(
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
}
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1186
|
+
/* @__PURE__ */ jsxs(
|
|
1187
|
+
Pagination.Root,
|
|
1188
|
+
{
|
|
1189
|
+
...releaseMeta?.pagination,
|
|
1190
|
+
defaultPageSize: releaseMeta?.pagination?.pageSize,
|
|
1191
|
+
children: [
|
|
1192
|
+
/* @__PURE__ */ jsx(Pagination.PageSize, {}),
|
|
1193
|
+
/* @__PURE__ */ jsx(Pagination.Links, {})
|
|
1194
|
+
]
|
|
1195
|
+
}
|
|
1196
|
+
)
|
|
1191
1197
|
] }) });
|
|
1192
1198
|
};
|
|
1193
1199
|
const ReleaseDetailsPage = () => {
|
|
@@ -1195,14 +1201,19 @@ const ReleaseDetailsPage = () => {
|
|
|
1195
1201
|
const { releaseId } = useParams();
|
|
1196
1202
|
const toggleNotification = useNotification();
|
|
1197
1203
|
const { formatAPIError } = useAPIErrorHandler();
|
|
1198
|
-
const
|
|
1204
|
+
const navigate = useNavigate();
|
|
1199
1205
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
1200
1206
|
const [showWarningSubmit, setWarningSubmit] = React.useState(false);
|
|
1201
1207
|
const {
|
|
1202
1208
|
isLoading: isLoadingDetails,
|
|
1203
1209
|
data,
|
|
1204
1210
|
isSuccess: isSuccessDetails
|
|
1205
|
-
} = useGetReleaseQuery(
|
|
1211
|
+
} = useGetReleaseQuery(
|
|
1212
|
+
{ id: releaseId },
|
|
1213
|
+
{
|
|
1214
|
+
skip: !releaseId
|
|
1215
|
+
}
|
|
1216
|
+
);
|
|
1206
1217
|
const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();
|
|
1207
1218
|
const [deleteRelease, { isLoading: isDeletingRelease }] = useDeleteReleaseMutation();
|
|
1208
1219
|
const toggleEditReleaseModal = () => {
|
|
@@ -1215,10 +1226,13 @@ const ReleaseDetailsPage = () => {
|
|
|
1215
1226
|
{
|
|
1216
1227
|
toggleEditReleaseModal,
|
|
1217
1228
|
toggleWarningSubmit,
|
|
1218
|
-
children: /* @__PURE__ */ jsx(
|
|
1229
|
+
children: /* @__PURE__ */ jsx(Page.Loading, {})
|
|
1219
1230
|
}
|
|
1220
1231
|
);
|
|
1221
1232
|
}
|
|
1233
|
+
if (!releaseId) {
|
|
1234
|
+
return /* @__PURE__ */ jsx(Navigate, { to: ".." });
|
|
1235
|
+
}
|
|
1222
1236
|
const releaseData = isSuccessDetails && data?.data || null;
|
|
1223
1237
|
const title = releaseData?.name || "";
|
|
1224
1238
|
const timezone = releaseData?.timezone ?? null;
|
|
@@ -1258,7 +1272,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1258
1272
|
id: releaseId
|
|
1259
1273
|
});
|
|
1260
1274
|
if ("data" in response) {
|
|
1261
|
-
|
|
1275
|
+
navigate("..");
|
|
1262
1276
|
} else if (isAxiosError(response.error)) {
|
|
1263
1277
|
toggleNotification({
|
|
1264
1278
|
type: "warning",
|
|
@@ -1277,7 +1291,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1277
1291
|
toggleEditReleaseModal,
|
|
1278
1292
|
toggleWarningSubmit,
|
|
1279
1293
|
children: [
|
|
1280
|
-
/* @__PURE__ */ jsx(ReleaseDetailsBody, {}),
|
|
1294
|
+
/* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
|
|
1281
1295
|
releaseModalShown && /* @__PURE__ */ jsx(
|
|
1282
1296
|
ReleaseModal,
|
|
1283
1297
|
{
|
|
@@ -1312,12 +1326,12 @@ const ReleaseDetailsPage = () => {
|
|
|
1312
1326
|
);
|
|
1313
1327
|
};
|
|
1314
1328
|
const App = () => {
|
|
1315
|
-
return /* @__PURE__ */ jsx(
|
|
1316
|
-
/* @__PURE__ */ jsx(Route, {
|
|
1317
|
-
/* @__PURE__ */ jsx(Route, {
|
|
1329
|
+
return /* @__PURE__ */ jsx(Page.Protect, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxs(Routes, { children: [
|
|
1330
|
+
/* @__PURE__ */ jsx(Route, { index: true, element: /* @__PURE__ */ jsx(ReleasesPage, {}) }),
|
|
1331
|
+
/* @__PURE__ */ jsx(Route, { path: ":releaseId", element: /* @__PURE__ */ jsx(ReleaseDetailsPage, {}) })
|
|
1318
1332
|
] }) });
|
|
1319
1333
|
};
|
|
1320
1334
|
export {
|
|
1321
1335
|
App
|
|
1322
1336
|
};
|
|
1323
|
-
//# sourceMappingURL=App-
|
|
1337
|
+
//# sourceMappingURL=App-PQlYzNfb.mjs.map
|