@strapi/content-releases 0.0.0-experimental.d5b46d578a5c055b8dcc66939e1b5d540976fafb → 0.0.0-experimental.defd8568ae03ef8d52f86e1f3541979f953c3941
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-OP70yd5M.js → App-C0DlH0im.js} +245 -217
- package/dist/_chunks/App-C0DlH0im.js.map +1 -0
- package/dist/_chunks/{App-x6Tjj3HN.mjs → App-O0ZO-S35.mjs} +228 -200
- package/dist/_chunks/App-O0ZO-S35.mjs.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-bpIYXOfu.js → PurchaseContentReleases-DAHdUpAA.js} +4 -4
- package/dist/_chunks/PurchaseContentReleases-DAHdUpAA.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-3tRbmbY3.mjs → PurchaseContentReleases-Ex09YpKR.mjs} +5 -5
- package/dist/_chunks/PurchaseContentReleases-Ex09YpKR.mjs.map +1 -0
- package/dist/_chunks/{en-bpHsnU0n.mjs → en-B9Ur3VsE.mjs} +2 -1
- package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
- package/dist/_chunks/{en-3SGjiVyR.js → en-DtFJ5ViE.js} +2 -1
- package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
- package/dist/_chunks/{index-1ejXLtzt.mjs → index-DjDPK8kb.mjs} +155 -117
- package/dist/_chunks/index-DjDPK8kb.mjs.map +1 -0
- package/dist/_chunks/{index-ydocdaZ0.js → index-DoZNNtsb.js} +161 -123
- package/dist/_chunks/index-DoZNNtsb.js.map +1 -0
- package/dist/admin/index.js +1 -15
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -16
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/CMReleasesContainer.d.ts +22 -0
- package/dist/admin/src/components/RelativeTime.d.ts +28 -0
- package/dist/admin/src/components/ReleaseAction.d.ts +3 -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/ReleaseListCell.d.ts +0 -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 +429 -0
- package/dist/admin/src/store/hooks.d.ts +7 -0
- package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
- package/dist/admin/src/utils/time.d.ts +1 -0
- package/dist/server/index.js +152 -93
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +153 -93
- 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 +20 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -0
- package/dist/server/src/controllers/release-action.d.ts +10 -0
- package/dist/server/src/controllers/release-action.d.ts.map +1 -0
- package/dist/server/src/controllers/release.d.ts +12 -0
- package/dist/server/src/controllers/release.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/release-action.d.ts +8 -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 +2096 -0
- package/dist/server/src/index.d.ts.map +1 -0
- package/dist/server/src/migrations/index.d.ts +13 -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 +18 -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 +131 -0
- package/dist/shared/contracts/release-actions.d.ts.map +1 -0
- package/dist/shared/contracts/releases.d.ts +182 -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 +26 -31
- package/dist/_chunks/App-OP70yd5M.js.map +0 -1
- package/dist/_chunks/App-x6Tjj3HN.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js.map +0 -1
- package/dist/_chunks/en-3SGjiVyR.js.map +0 -1
- package/dist/_chunks/en-bpHsnU0n.mjs.map +0 -1
- package/dist/_chunks/index-1ejXLtzt.mjs.map +0 -1
- package/dist/_chunks/index-ydocdaZ0.js.map +0 -1
|
@@ -1,23 +1,51 @@
|
|
|
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
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useNotification, useAPIErrorHandler, useQueryParams, useTracking, useRBAC, Page, Pagination, ConfirmDialog, BackButton, useStrapiApp, Table } 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 useGetReleaseActionsQuery, h as useUpdateReleaseActionMutation, R as ReleaseActionOptions, j as ReleaseActionMenu, r as releaseApi } from "./index-DjDPK8kb.mjs";
|
|
5
5
|
import * as React from "react";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { ModalLayout, ModalHeader, Typography, ModalBody, Flex, TextInput, Box, Checkbox, DatePicker, TimePicker, ModalFooter, Button, Combobox, ComboboxOption, Link, Alert, Main, HeaderLayout, ContentLayout, TabGroup, Tabs, Tab, Divider, TabPanels, TabPanel, EmptyStateLayout, Grid, GridItem, Badge, Menu, IconButton, LinkButton, SingleSelect, SingleSelectOption, Tr, Td, Tooltip } from "@strapi/design-system";
|
|
7
|
+
import { Plus, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
|
|
8
|
+
import { EmptyDocuments } from "@strapi/icons/symbols";
|
|
9
|
+
import { unstable_useDocument } from "@strapi/plugin-content-manager/strapi-admin";
|
|
10
10
|
import format from "date-fns/format";
|
|
11
11
|
import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
|
|
12
12
|
import { useIntl } from "react-intl";
|
|
13
13
|
import styled from "styled-components";
|
|
14
|
-
import { formatISO } from "date-fns";
|
|
14
|
+
import { intervalToDuration, isPast, formatISO } from "date-fns";
|
|
15
15
|
import { Formik, Form, useFormikContext } from "formik";
|
|
16
16
|
import * as yup from "yup";
|
|
17
|
-
import "
|
|
18
|
-
import "
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
import { useDispatch } from "react-redux";
|
|
18
|
+
import { useLicenseLimits } from "@strapi/admin/strapi-admin/ee";
|
|
19
|
+
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
|
20
|
+
const RelativeTime$1 = React.forwardRef(
|
|
21
|
+
({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
|
|
22
|
+
const { formatRelativeTime, formatDate, formatTime } = useIntl();
|
|
23
|
+
const interval = intervalToDuration({
|
|
24
|
+
start: timestamp,
|
|
25
|
+
end: Date.now()
|
|
26
|
+
// see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
|
|
27
|
+
});
|
|
28
|
+
const unit = intervals.find((intervalUnit) => {
|
|
29
|
+
return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
|
|
30
|
+
});
|
|
31
|
+
const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];
|
|
32
|
+
const customInterval = customIntervals.find(
|
|
33
|
+
(custom) => interval[custom.unit] < custom.threshold
|
|
34
|
+
);
|
|
35
|
+
const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
|
|
36
|
+
return /* @__PURE__ */ jsx(
|
|
37
|
+
"time",
|
|
38
|
+
{
|
|
39
|
+
ref: forwardedRef,
|
|
40
|
+
dateTime: timestamp.toISOString(),
|
|
41
|
+
role: "time",
|
|
42
|
+
title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
|
|
43
|
+
...restProps,
|
|
44
|
+
children: displayText
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
);
|
|
21
49
|
const RELEASE_SCHEMA = yup.object().shape({
|
|
22
50
|
name: yup.string().trim().required(),
|
|
23
51
|
scheduledAt: yup.string().nullable(),
|
|
@@ -255,6 +283,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
255
283
|
}
|
|
256
284
|
);
|
|
257
285
|
};
|
|
286
|
+
const useTypedDispatch = useDispatch;
|
|
258
287
|
const LinkCard = styled(Link)`
|
|
259
288
|
display: block;
|
|
260
289
|
`;
|
|
@@ -292,7 +321,7 @@ const getBadgeProps = (status) => {
|
|
|
292
321
|
const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
293
322
|
const { formatMessage } = useIntl();
|
|
294
323
|
if (isError) {
|
|
295
|
-
return /* @__PURE__ */ jsx(
|
|
324
|
+
return /* @__PURE__ */ jsx(Page.Error, {});
|
|
296
325
|
}
|
|
297
326
|
if (releases?.length === 0) {
|
|
298
327
|
return /* @__PURE__ */ jsx(
|
|
@@ -307,7 +336,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
307
336
|
target: sectionTitle
|
|
308
337
|
}
|
|
309
338
|
),
|
|
310
|
-
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "
|
|
339
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" })
|
|
311
340
|
}
|
|
312
341
|
);
|
|
313
342
|
}
|
|
@@ -357,9 +386,9 @@ const ReleasesPage = () => {
|
|
|
357
386
|
const tabRef = React.useRef(null);
|
|
358
387
|
const location = useLocation();
|
|
359
388
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
360
|
-
const toggleNotification = useNotification();
|
|
389
|
+
const { toggleNotification } = useNotification();
|
|
361
390
|
const { formatMessage } = useIntl();
|
|
362
|
-
const
|
|
391
|
+
const navigate = useNavigate();
|
|
363
392
|
const { formatAPIError } = useAPIErrorHandler();
|
|
364
393
|
const [{ query }, setQuery] = useQueryParams();
|
|
365
394
|
const response = useGetReleasesQuery(query);
|
|
@@ -367,13 +396,16 @@ const ReleasesPage = () => {
|
|
|
367
396
|
const { getFeature } = useLicenseLimits();
|
|
368
397
|
const { maximumReleases = 3 } = getFeature("cms-content-releases");
|
|
369
398
|
const { trackUsage } = useTracking();
|
|
399
|
+
const {
|
|
400
|
+
allowedActions: { canCreate }
|
|
401
|
+
} = useRBAC(PERMISSIONS);
|
|
370
402
|
const { isLoading, isSuccess, isError } = response;
|
|
371
403
|
const activeTab = response?.currentData?.meta?.activeTab || "pending";
|
|
372
404
|
const activeTabIndex = ["pending", "done"].indexOf(activeTab);
|
|
373
405
|
React.useEffect(() => {
|
|
374
406
|
if (location?.state?.errors) {
|
|
375
407
|
toggleNotification({
|
|
376
|
-
type: "
|
|
408
|
+
type: "danger",
|
|
377
409
|
title: formatMessage({
|
|
378
410
|
id: "content-releases.pages.Releases.notification.error.title",
|
|
379
411
|
defaultMessage: "Your request could not be processed."
|
|
@@ -383,9 +415,9 @@ const ReleasesPage = () => {
|
|
|
383
415
|
defaultMessage: "Please try again or open another release."
|
|
384
416
|
})
|
|
385
417
|
});
|
|
386
|
-
|
|
418
|
+
navigate("", { replace: true, state: null });
|
|
387
419
|
}
|
|
388
|
-
}, [formatMessage, location?.state?.errors,
|
|
420
|
+
}, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
|
|
389
421
|
React.useEffect(() => {
|
|
390
422
|
if (tabRef.current) {
|
|
391
423
|
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
@@ -395,7 +427,7 @@ const ReleasesPage = () => {
|
|
|
395
427
|
setReleaseModalShown((prev) => !prev);
|
|
396
428
|
};
|
|
397
429
|
if (isLoading) {
|
|
398
|
-
return /* @__PURE__ */ jsx(
|
|
430
|
+
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
399
431
|
}
|
|
400
432
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
401
433
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
@@ -426,15 +458,15 @@ const ReleasesPage = () => {
|
|
|
426
458
|
})
|
|
427
459
|
});
|
|
428
460
|
trackUsage("didCreateRelease");
|
|
429
|
-
|
|
461
|
+
navigate(response2.data.data.id.toString());
|
|
430
462
|
} else if (isAxiosError(response2.error)) {
|
|
431
463
|
toggleNotification({
|
|
432
|
-
type: "
|
|
464
|
+
type: "danger",
|
|
433
465
|
message: formatAPIError(response2.error)
|
|
434
466
|
});
|
|
435
467
|
} else {
|
|
436
468
|
toggleNotification({
|
|
437
|
-
type: "
|
|
469
|
+
type: "danger",
|
|
438
470
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
439
471
|
});
|
|
440
472
|
}
|
|
@@ -451,7 +483,7 @@ const ReleasesPage = () => {
|
|
|
451
483
|
id: "content-releases.pages.Releases.header-subtitle",
|
|
452
484
|
defaultMessage: "Create and manage content updates"
|
|
453
485
|
}),
|
|
454
|
-
primaryAction:
|
|
486
|
+
primaryAction: canCreate ? /* @__PURE__ */ jsx(
|
|
455
487
|
Button,
|
|
456
488
|
{
|
|
457
489
|
startIcon: /* @__PURE__ */ jsx(Plus, {}),
|
|
@@ -462,7 +494,7 @@ const ReleasesPage = () => {
|
|
|
462
494
|
defaultMessage: "New release"
|
|
463
495
|
})
|
|
464
496
|
}
|
|
465
|
-
)
|
|
497
|
+
) : null
|
|
466
498
|
}
|
|
467
499
|
),
|
|
468
500
|
/* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -541,23 +573,17 @@ const ReleasesPage = () => {
|
|
|
541
573
|
]
|
|
542
574
|
}
|
|
543
575
|
),
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
pagination: {
|
|
556
|
-
pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
)
|
|
560
|
-
] }) : null
|
|
576
|
+
/* @__PURE__ */ jsxs(
|
|
577
|
+
Pagination.Root,
|
|
578
|
+
{
|
|
579
|
+
...response?.currentData?.meta?.pagination,
|
|
580
|
+
defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
|
|
581
|
+
children: [
|
|
582
|
+
/* @__PURE__ */ jsx(Pagination.PageSize, { options: ["8", "16", "32", "64"] }),
|
|
583
|
+
/* @__PURE__ */ jsx(Pagination.Links, {})
|
|
584
|
+
]
|
|
585
|
+
}
|
|
586
|
+
)
|
|
561
587
|
] }) }),
|
|
562
588
|
releaseModalShown && /* @__PURE__ */ jsx(
|
|
563
589
|
ReleaseModal,
|
|
@@ -605,14 +631,18 @@ const TrashIcon = styled(Trash)`
|
|
|
605
631
|
const TypographyMaxWidth = styled(Typography)`
|
|
606
632
|
max-width: 300px;
|
|
607
633
|
`;
|
|
608
|
-
const EntryValidationText = ({ action, schema,
|
|
634
|
+
const EntryValidationText = ({ action, schema, entry }) => {
|
|
609
635
|
const { formatMessage } = useIntl();
|
|
610
|
-
const { validate } = unstable_useDocument(
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
636
|
+
const { validate } = unstable_useDocument(
|
|
637
|
+
{
|
|
638
|
+
collectionType: schema?.kind ?? "",
|
|
639
|
+
model: schema?.uid ?? ""
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
skip: !schema
|
|
643
|
+
}
|
|
644
|
+
);
|
|
645
|
+
const errors = validate(entry) ?? {};
|
|
616
646
|
if (Object.keys(errors).length > 0) {
|
|
617
647
|
const validationErrorsMessages = Object.entries(errors).map(
|
|
618
648
|
([key, value]) => formatMessage(
|
|
@@ -621,13 +651,13 @@ const EntryValidationText = ({ action, schema, components, entry }) => {
|
|
|
621
651
|
)
|
|
622
652
|
).join(" ");
|
|
623
653
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
624
|
-
/* @__PURE__ */ jsx(
|
|
654
|
+
/* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
|
|
625
655
|
/* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
|
|
626
656
|
] });
|
|
627
657
|
}
|
|
628
658
|
if (action == "publish") {
|
|
629
659
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
630
|
-
/* @__PURE__ */ jsx(
|
|
660
|
+
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
631
661
|
entry.publishedAt ? /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
632
662
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
|
|
633
663
|
defaultMessage: "Already published"
|
|
@@ -638,7 +668,7 @@ const EntryValidationText = ({ action, schema, components, entry }) => {
|
|
|
638
668
|
] });
|
|
639
669
|
}
|
|
640
670
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
641
|
-
/* @__PURE__ */ jsx(
|
|
671
|
+
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
642
672
|
!entry.publishedAt ? /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
643
673
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-unpublished",
|
|
644
674
|
defaultMessage: "Already unpublished"
|
|
@@ -660,18 +690,22 @@ const ReleaseDetailsLayout = ({
|
|
|
660
690
|
isLoading: isLoadingDetails,
|
|
661
691
|
isError,
|
|
662
692
|
error
|
|
663
|
-
} = useGetReleaseQuery(
|
|
693
|
+
} = useGetReleaseQuery(
|
|
694
|
+
{ id: releaseId },
|
|
695
|
+
{
|
|
696
|
+
skip: !releaseId
|
|
697
|
+
}
|
|
698
|
+
);
|
|
664
699
|
const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();
|
|
665
|
-
const toggleNotification = useNotification();
|
|
700
|
+
const { toggleNotification } = useNotification();
|
|
666
701
|
const { formatAPIError } = useAPIErrorHandler();
|
|
667
|
-
const {
|
|
668
|
-
|
|
669
|
-
} = useRBAC(PERMISSIONS);
|
|
702
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
703
|
+
const { canUpdate, canDelete, canPublish } = allowedActions;
|
|
670
704
|
const dispatch = useTypedDispatch();
|
|
671
705
|
const { trackUsage } = useTracking();
|
|
672
706
|
const release = data?.data;
|
|
673
|
-
const handlePublishRelease = async () => {
|
|
674
|
-
const response = await publishRelease({ id
|
|
707
|
+
const handlePublishRelease = (id) => async () => {
|
|
708
|
+
const response = await publishRelease({ id });
|
|
675
709
|
if ("data" in response) {
|
|
676
710
|
toggleNotification({
|
|
677
711
|
type: "success",
|
|
@@ -688,12 +722,12 @@ const ReleaseDetailsLayout = ({
|
|
|
688
722
|
});
|
|
689
723
|
} else if (isAxiosError(response.error)) {
|
|
690
724
|
toggleNotification({
|
|
691
|
-
type: "
|
|
725
|
+
type: "danger",
|
|
692
726
|
message: formatAPIError(response.error)
|
|
693
727
|
});
|
|
694
728
|
} else {
|
|
695
729
|
toggleNotification({
|
|
696
|
-
type: "
|
|
730
|
+
type: "danger",
|
|
697
731
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
698
732
|
});
|
|
699
733
|
}
|
|
@@ -719,21 +753,19 @@ const ReleaseDetailsLayout = ({
|
|
|
719
753
|
return release.createdBy.email;
|
|
720
754
|
};
|
|
721
755
|
if (isLoadingDetails) {
|
|
722
|
-
return /* @__PURE__ */ jsx(
|
|
756
|
+
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
723
757
|
}
|
|
724
758
|
if (isError || !release) {
|
|
725
759
|
return /* @__PURE__ */ jsx(
|
|
726
|
-
|
|
760
|
+
Navigate,
|
|
727
761
|
{
|
|
728
|
-
to:
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
]
|
|
736
|
-
}
|
|
762
|
+
to: "..",
|
|
763
|
+
state: {
|
|
764
|
+
errors: [
|
|
765
|
+
{
|
|
766
|
+
code: error?.code
|
|
767
|
+
}
|
|
768
|
+
]
|
|
737
769
|
}
|
|
738
770
|
}
|
|
739
771
|
);
|
|
@@ -777,10 +809,7 @@ const ReleaseDetailsLayout = ({
|
|
|
777
809
|
/* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
|
|
778
810
|
/* @__PURE__ */ jsx(Badge, { ...getBadgeProps(release.status), children: release.status })
|
|
779
811
|
] }),
|
|
780
|
-
navigationAction: /* @__PURE__ */ jsx(
|
|
781
|
-
id: "global.back",
|
|
782
|
-
defaultMessage: "Back"
|
|
783
|
-
}) }),
|
|
812
|
+
navigationAction: /* @__PURE__ */ jsx(BackButton, {}),
|
|
784
813
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
785
814
|
/* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
786
815
|
/* @__PURE__ */ jsx(
|
|
@@ -797,7 +826,7 @@ const ReleaseDetailsLayout = ({
|
|
|
797
826
|
variant: "tertiary"
|
|
798
827
|
}
|
|
799
828
|
),
|
|
800
|
-
/* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children: [
|
|
829
|
+
/* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", maxHeight: void 0, children: [
|
|
801
830
|
/* @__PURE__ */ jsxs(
|
|
802
831
|
Flex,
|
|
803
832
|
{
|
|
@@ -864,12 +893,12 @@ const ReleaseDetailsLayout = ({
|
|
|
864
893
|
id: "content-releases.header.actions.refresh",
|
|
865
894
|
defaultMessage: "Refresh"
|
|
866
895
|
}) }),
|
|
867
|
-
|
|
896
|
+
canPublish ? /* @__PURE__ */ jsx(
|
|
868
897
|
Button,
|
|
869
898
|
{
|
|
870
899
|
size: "S",
|
|
871
900
|
variant: "default",
|
|
872
|
-
onClick: handlePublishRelease,
|
|
901
|
+
onClick: handlePublishRelease(release.id.toString()),
|
|
873
902
|
loading: isPublishing,
|
|
874
903
|
disabled: release.actions.meta.count === 0,
|
|
875
904
|
children: formatMessage({
|
|
@@ -877,7 +906,7 @@ const ReleaseDetailsLayout = ({
|
|
|
877
906
|
defaultMessage: "Publish"
|
|
878
907
|
})
|
|
879
908
|
}
|
|
880
|
-
)
|
|
909
|
+
) : null
|
|
881
910
|
] })
|
|
882
911
|
}
|
|
883
912
|
),
|
|
@@ -885,6 +914,7 @@ const ReleaseDetailsLayout = ({
|
|
|
885
914
|
] });
|
|
886
915
|
};
|
|
887
916
|
const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
|
|
917
|
+
const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
|
|
888
918
|
const getGroupByOptionLabel = (value) => {
|
|
889
919
|
if (value === "locale") {
|
|
890
920
|
return {
|
|
@@ -903,11 +933,10 @@ const getGroupByOptionLabel = (value) => {
|
|
|
903
933
|
defaultMessage: "Content-Types"
|
|
904
934
|
};
|
|
905
935
|
};
|
|
906
|
-
const ReleaseDetailsBody = () => {
|
|
936
|
+
const ReleaseDetailsBody = ({ releaseId }) => {
|
|
907
937
|
const { formatMessage } = useIntl();
|
|
908
|
-
const { releaseId } = useParams();
|
|
909
938
|
const [{ query }, setQuery] = useQueryParams();
|
|
910
|
-
const toggleNotification = useNotification();
|
|
939
|
+
const { toggleNotification } = useNotification();
|
|
911
940
|
const { formatAPIError } = useAPIErrorHandler();
|
|
912
941
|
const {
|
|
913
942
|
data: releaseData,
|
|
@@ -918,6 +947,20 @@ const ReleaseDetailsBody = () => {
|
|
|
918
947
|
const {
|
|
919
948
|
allowedActions: { canUpdate }
|
|
920
949
|
} = useRBAC(PERMISSIONS);
|
|
950
|
+
const runHookWaterfall = useStrapiApp("ReleaseDetailsPage", (state) => state.runHookWaterfall);
|
|
951
|
+
const { hasI18nEnabled } = runHookWaterfall(
|
|
952
|
+
"ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
|
|
953
|
+
{
|
|
954
|
+
displayedHeaders: {
|
|
955
|
+
label: formatMessage({
|
|
956
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
957
|
+
defaultMessage: "locale"
|
|
958
|
+
}),
|
|
959
|
+
name: "locale"
|
|
960
|
+
},
|
|
961
|
+
hasI18nEnabled: false
|
|
962
|
+
}
|
|
963
|
+
);
|
|
921
964
|
const release = releaseData?.data;
|
|
922
965
|
const selectedGroupBy = query?.groupBy || "contentType";
|
|
923
966
|
const {
|
|
@@ -948,19 +991,19 @@ const ReleaseDetailsBody = () => {
|
|
|
948
991
|
if ("error" in response) {
|
|
949
992
|
if (isAxiosError(response.error)) {
|
|
950
993
|
toggleNotification({
|
|
951
|
-
type: "
|
|
994
|
+
type: "danger",
|
|
952
995
|
message: formatAPIError(response.error)
|
|
953
996
|
});
|
|
954
997
|
} else {
|
|
955
998
|
toggleNotification({
|
|
956
|
-
type: "
|
|
999
|
+
type: "danger",
|
|
957
1000
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
958
1001
|
});
|
|
959
1002
|
}
|
|
960
1003
|
}
|
|
961
1004
|
};
|
|
962
1005
|
if (isLoading || isReleaseLoading) {
|
|
963
|
-
return /* @__PURE__ */ jsx(
|
|
1006
|
+
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
964
1007
|
}
|
|
965
1008
|
const releaseActions = data?.data;
|
|
966
1009
|
const releaseMeta = data?.meta;
|
|
@@ -979,32 +1022,26 @@ const ReleaseDetailsBody = () => {
|
|
|
979
1022
|
});
|
|
980
1023
|
}
|
|
981
1024
|
return /* @__PURE__ */ jsx(
|
|
982
|
-
|
|
1025
|
+
Navigate,
|
|
983
1026
|
{
|
|
984
|
-
to:
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
errors: errorsArray
|
|
988
|
-
}
|
|
1027
|
+
to: "..",
|
|
1028
|
+
state: {
|
|
1029
|
+
errors: errorsArray
|
|
989
1030
|
}
|
|
990
1031
|
}
|
|
991
1032
|
);
|
|
992
1033
|
}
|
|
993
1034
|
if (isError || !releaseActions) {
|
|
994
|
-
return /* @__PURE__ */ jsx(
|
|
1035
|
+
return /* @__PURE__ */ jsx(Page.Error, {});
|
|
995
1036
|
}
|
|
996
1037
|
if (Object.keys(releaseActions).length === 0) {
|
|
997
1038
|
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(
|
|
998
|
-
|
|
1039
|
+
EmptyStateLayout,
|
|
999
1040
|
{
|
|
1000
|
-
content: {
|
|
1001
|
-
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1002
|
-
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1003
|
-
},
|
|
1004
1041
|
action: /* @__PURE__ */ jsx(
|
|
1005
1042
|
LinkButton,
|
|
1006
1043
|
{
|
|
1007
|
-
as: Link$
|
|
1044
|
+
as: Link$1,
|
|
1008
1045
|
to: {
|
|
1009
1046
|
pathname: "/content-manager"
|
|
1010
1047
|
},
|
|
@@ -1015,18 +1052,59 @@ const ReleaseDetailsBody = () => {
|
|
|
1015
1052
|
defaultMessage: "Open the Content Manager"
|
|
1016
1053
|
})
|
|
1017
1054
|
}
|
|
1018
|
-
)
|
|
1055
|
+
),
|
|
1056
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
|
|
1057
|
+
content: formatMessage({
|
|
1058
|
+
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1059
|
+
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1060
|
+
})
|
|
1019
1061
|
}
|
|
1020
1062
|
) });
|
|
1021
1063
|
}
|
|
1064
|
+
const groupByLabel = formatMessage({
|
|
1065
|
+
id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
|
|
1066
|
+
defaultMessage: "Group by"
|
|
1067
|
+
});
|
|
1068
|
+
const headers = [
|
|
1069
|
+
// ...displayedHeaders,
|
|
1070
|
+
{
|
|
1071
|
+
label: formatMessage({
|
|
1072
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1073
|
+
defaultMessage: "name"
|
|
1074
|
+
}),
|
|
1075
|
+
name: "name"
|
|
1076
|
+
},
|
|
1077
|
+
{
|
|
1078
|
+
label: formatMessage({
|
|
1079
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1080
|
+
defaultMessage: "content-type"
|
|
1081
|
+
}),
|
|
1082
|
+
name: "content-type"
|
|
1083
|
+
},
|
|
1084
|
+
{
|
|
1085
|
+
label: formatMessage({
|
|
1086
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1087
|
+
defaultMessage: "action"
|
|
1088
|
+
}),
|
|
1089
|
+
name: "action"
|
|
1090
|
+
},
|
|
1091
|
+
...!release.releasedAt ? [
|
|
1092
|
+
{
|
|
1093
|
+
label: formatMessage({
|
|
1094
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1095
|
+
defaultMessage: "status"
|
|
1096
|
+
}),
|
|
1097
|
+
name: "status"
|
|
1098
|
+
}
|
|
1099
|
+
] : []
|
|
1100
|
+
];
|
|
1101
|
+
const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
|
|
1022
1102
|
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1023
1103
|
/* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
|
|
1024
1104
|
SingleSelect,
|
|
1025
1105
|
{
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
defaultMessage: "Group by"
|
|
1029
|
-
}),
|
|
1106
|
+
placeholder: groupByLabel,
|
|
1107
|
+
"aria-label": groupByLabel,
|
|
1030
1108
|
customizeContent: (value) => formatMessage(
|
|
1031
1109
|
{
|
|
1032
1110
|
id: `content-releases.pages.ReleaseDetails.groupBy.label`,
|
|
@@ -1038,7 +1116,7 @@ const ReleaseDetailsBody = () => {
|
|
|
1038
1116
|
),
|
|
1039
1117
|
value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
|
|
1040
1118
|
onChange: (value) => setQuery({ groupBy: value }),
|
|
1041
|
-
children:
|
|
1119
|
+
children: options.map((option) => /* @__PURE__ */ jsx(SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
|
|
1042
1120
|
}
|
|
1043
1121
|
) }),
|
|
1044
1122
|
Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxs(Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
|
|
@@ -1050,72 +1128,15 @@ const ReleaseDetailsBody = () => {
|
|
|
1050
1128
|
...item,
|
|
1051
1129
|
id: Number(item.entry.id)
|
|
1052
1130
|
})),
|
|
1053
|
-
|
|
1054
|
-
isLoading,
|
|
1055
|
-
isFetching,
|
|
1131
|
+
headers,
|
|
1132
|
+
isLoading: isLoading || isFetching,
|
|
1056
1133
|
children: /* @__PURE__ */ jsxs(Table.Content, { children: [
|
|
1057
|
-
/* @__PURE__ */
|
|
1058
|
-
|
|
1059
|
-
Table.HeaderCell,
|
|
1060
|
-
{
|
|
1061
|
-
fieldSchemaType: "string",
|
|
1062
|
-
label: formatMessage({
|
|
1063
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1064
|
-
defaultMessage: "name"
|
|
1065
|
-
}),
|
|
1066
|
-
name: "name"
|
|
1067
|
-
}
|
|
1068
|
-
),
|
|
1069
|
-
/* @__PURE__ */ jsx(
|
|
1070
|
-
Table.HeaderCell,
|
|
1071
|
-
{
|
|
1072
|
-
fieldSchemaType: "string",
|
|
1073
|
-
label: formatMessage({
|
|
1074
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1075
|
-
defaultMessage: "locale"
|
|
1076
|
-
}),
|
|
1077
|
-
name: "locale"
|
|
1078
|
-
}
|
|
1079
|
-
),
|
|
1080
|
-
/* @__PURE__ */ jsx(
|
|
1081
|
-
Table.HeaderCell,
|
|
1082
|
-
{
|
|
1083
|
-
fieldSchemaType: "string",
|
|
1084
|
-
label: formatMessage({
|
|
1085
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1086
|
-
defaultMessage: "content-type"
|
|
1087
|
-
}),
|
|
1088
|
-
name: "content-type"
|
|
1089
|
-
}
|
|
1090
|
-
),
|
|
1091
|
-
/* @__PURE__ */ jsx(
|
|
1092
|
-
Table.HeaderCell,
|
|
1093
|
-
{
|
|
1094
|
-
fieldSchemaType: "string",
|
|
1095
|
-
label: formatMessage({
|
|
1096
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1097
|
-
defaultMessage: "action"
|
|
1098
|
-
}),
|
|
1099
|
-
name: "action"
|
|
1100
|
-
}
|
|
1101
|
-
),
|
|
1102
|
-
!release.releasedAt && /* @__PURE__ */ jsx(
|
|
1103
|
-
Table.HeaderCell,
|
|
1104
|
-
{
|
|
1105
|
-
fieldSchemaType: "string",
|
|
1106
|
-
label: formatMessage({
|
|
1107
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1108
|
-
defaultMessage: "status"
|
|
1109
|
-
}),
|
|
1110
|
-
name: "status"
|
|
1111
|
-
}
|
|
1112
|
-
)
|
|
1113
|
-
] }),
|
|
1114
|
-
/* @__PURE__ */ jsx(Table.LoadingBody, {}),
|
|
1134
|
+
/* @__PURE__ */ jsx(Table.Head, { children: headers.map((header) => /* @__PURE__ */ jsx(Table.HeaderCell, { ...header }, header.name)) }),
|
|
1135
|
+
/* @__PURE__ */ jsx(Table.Loading, {}),
|
|
1115
1136
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1116
1137
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1117
1138
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1118
|
-
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1139
|
+
hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1119
1140
|
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
|
|
1120
1141
|
/* @__PURE__ */ jsx(Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsx(Typography, { children: formatMessage(
|
|
1121
1142
|
{
|
|
@@ -1169,34 +1190,39 @@ const ReleaseDetailsBody = () => {
|
|
|
1169
1190
|
}
|
|
1170
1191
|
)
|
|
1171
1192
|
] }, `releases-group-${key}`)),
|
|
1172
|
-
/* @__PURE__ */ jsxs(
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1193
|
+
/* @__PURE__ */ jsxs(
|
|
1194
|
+
Pagination.Root,
|
|
1195
|
+
{
|
|
1196
|
+
...releaseMeta?.pagination,
|
|
1197
|
+
defaultPageSize: releaseMeta?.pagination?.pageSize,
|
|
1198
|
+
children: [
|
|
1199
|
+
/* @__PURE__ */ jsx(Pagination.PageSize, {}),
|
|
1200
|
+
/* @__PURE__ */ jsx(Pagination.Links, {})
|
|
1201
|
+
]
|
|
1202
|
+
}
|
|
1203
|
+
)
|
|
1183
1204
|
] }) });
|
|
1184
1205
|
};
|
|
1185
1206
|
const ReleaseDetailsPage = () => {
|
|
1186
1207
|
const { formatMessage } = useIntl();
|
|
1187
1208
|
const { releaseId } = useParams();
|
|
1188
|
-
const toggleNotification = useNotification();
|
|
1209
|
+
const { toggleNotification } = useNotification();
|
|
1189
1210
|
const { formatAPIError } = useAPIErrorHandler();
|
|
1190
|
-
const
|
|
1211
|
+
const navigate = useNavigate();
|
|
1191
1212
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
1192
1213
|
const [showWarningSubmit, setWarningSubmit] = React.useState(false);
|
|
1193
1214
|
const {
|
|
1194
1215
|
isLoading: isLoadingDetails,
|
|
1195
1216
|
data,
|
|
1196
1217
|
isSuccess: isSuccessDetails
|
|
1197
|
-
} = useGetReleaseQuery(
|
|
1218
|
+
} = useGetReleaseQuery(
|
|
1219
|
+
{ id: releaseId },
|
|
1220
|
+
{
|
|
1221
|
+
skip: !releaseId
|
|
1222
|
+
}
|
|
1223
|
+
);
|
|
1198
1224
|
const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();
|
|
1199
|
-
const [deleteRelease
|
|
1225
|
+
const [deleteRelease] = useDeleteReleaseMutation();
|
|
1200
1226
|
const toggleEditReleaseModal = () => {
|
|
1201
1227
|
setReleaseModalShown((prev) => !prev);
|
|
1202
1228
|
};
|
|
@@ -1207,10 +1233,13 @@ const ReleaseDetailsPage = () => {
|
|
|
1207
1233
|
{
|
|
1208
1234
|
toggleEditReleaseModal,
|
|
1209
1235
|
toggleWarningSubmit,
|
|
1210
|
-
children: /* @__PURE__ */ jsx(
|
|
1236
|
+
children: /* @__PURE__ */ jsx(Page.Loading, {})
|
|
1211
1237
|
}
|
|
1212
1238
|
);
|
|
1213
1239
|
}
|
|
1240
|
+
if (!releaseId) {
|
|
1241
|
+
return /* @__PURE__ */ jsx(Navigate, { to: ".." });
|
|
1242
|
+
}
|
|
1214
1243
|
const releaseData = isSuccessDetails && data?.data || null;
|
|
1215
1244
|
const title = releaseData?.name || "";
|
|
1216
1245
|
const timezone = releaseData?.timezone ?? null;
|
|
@@ -1235,12 +1264,12 @@ const ReleaseDetailsPage = () => {
|
|
|
1235
1264
|
toggleEditReleaseModal();
|
|
1236
1265
|
} else if (isAxiosError(response.error)) {
|
|
1237
1266
|
toggleNotification({
|
|
1238
|
-
type: "
|
|
1267
|
+
type: "danger",
|
|
1239
1268
|
message: formatAPIError(response.error)
|
|
1240
1269
|
});
|
|
1241
1270
|
} else {
|
|
1242
1271
|
toggleNotification({
|
|
1243
|
-
type: "
|
|
1272
|
+
type: "danger",
|
|
1244
1273
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1245
1274
|
});
|
|
1246
1275
|
}
|
|
@@ -1250,15 +1279,15 @@ const ReleaseDetailsPage = () => {
|
|
|
1250
1279
|
id: releaseId
|
|
1251
1280
|
});
|
|
1252
1281
|
if ("data" in response) {
|
|
1253
|
-
|
|
1282
|
+
navigate("..");
|
|
1254
1283
|
} else if (isAxiosError(response.error)) {
|
|
1255
1284
|
toggleNotification({
|
|
1256
|
-
type: "
|
|
1285
|
+
type: "danger",
|
|
1257
1286
|
message: formatAPIError(response.error)
|
|
1258
1287
|
});
|
|
1259
1288
|
} else {
|
|
1260
1289
|
toggleNotification({
|
|
1261
|
-
type: "
|
|
1290
|
+
type: "danger",
|
|
1262
1291
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1263
1292
|
});
|
|
1264
1293
|
}
|
|
@@ -1269,7 +1298,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1269
1298
|
toggleEditReleaseModal,
|
|
1270
1299
|
toggleWarningSubmit,
|
|
1271
1300
|
children: [
|
|
1272
|
-
/* @__PURE__ */ jsx(ReleaseDetailsBody, {}),
|
|
1301
|
+
/* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
|
|
1273
1302
|
releaseModalShown && /* @__PURE__ */ jsx(
|
|
1274
1303
|
ReleaseModal,
|
|
1275
1304
|
{
|
|
@@ -1289,14 +1318,13 @@ const ReleaseDetailsPage = () => {
|
|
|
1289
1318
|
/* @__PURE__ */ jsx(
|
|
1290
1319
|
ConfirmDialog,
|
|
1291
1320
|
{
|
|
1292
|
-
|
|
1321
|
+
isOpen: showWarningSubmit,
|
|
1322
|
+
onClose: toggleWarningSubmit,
|
|
1323
|
+
onConfirm: handleDeleteRelease,
|
|
1324
|
+
children: formatMessage({
|
|
1293
1325
|
id: "content-releases.dialog.confirmation-message",
|
|
1294
1326
|
defaultMessage: "Are you sure you want to delete this release?"
|
|
1295
|
-
}
|
|
1296
|
-
isOpen: showWarningSubmit,
|
|
1297
|
-
isConfirmButtonLoading: isDeletingRelease,
|
|
1298
|
-
onToggleDialog: toggleWarningSubmit,
|
|
1299
|
-
onConfirm: handleDeleteRelease
|
|
1327
|
+
})
|
|
1300
1328
|
}
|
|
1301
1329
|
)
|
|
1302
1330
|
]
|
|
@@ -1304,12 +1332,12 @@ const ReleaseDetailsPage = () => {
|
|
|
1304
1332
|
);
|
|
1305
1333
|
};
|
|
1306
1334
|
const App = () => {
|
|
1307
|
-
return /* @__PURE__ */ jsx(
|
|
1308
|
-
/* @__PURE__ */ jsx(Route, {
|
|
1309
|
-
/* @__PURE__ */ jsx(Route, {
|
|
1335
|
+
return /* @__PURE__ */ jsx(Page.Protect, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxs(Routes, { children: [
|
|
1336
|
+
/* @__PURE__ */ jsx(Route, { index: true, element: /* @__PURE__ */ jsx(ReleasesPage, {}) }),
|
|
1337
|
+
/* @__PURE__ */ jsx(Route, { path: ":releaseId", element: /* @__PURE__ */ jsx(ReleaseDetailsPage, {}) })
|
|
1310
1338
|
] }) });
|
|
1311
1339
|
};
|
|
1312
1340
|
export {
|
|
1313
1341
|
App
|
|
1314
1342
|
};
|
|
1315
|
-
//# sourceMappingURL=App-
|
|
1343
|
+
//# sourceMappingURL=App-O0ZO-S35.mjs.map
|