@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,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const
|
|
4
|
+
const strapiAdmin = require("@strapi/admin/strapi-admin");
|
|
5
5
|
const reactRouterDom = require("react-router-dom");
|
|
6
|
-
const index = require("./index-
|
|
6
|
+
const index = require("./index-DoZNNtsb.js");
|
|
7
7
|
const React = require("react");
|
|
8
|
-
const strapiAdmin = require("@strapi/admin/strapi-admin");
|
|
9
8
|
const designSystem = require("@strapi/design-system");
|
|
10
|
-
const v2 = require("@strapi/design-system/v2");
|
|
11
9
|
const icons = require("@strapi/icons");
|
|
10
|
+
const symbols = require("@strapi/icons/symbols");
|
|
11
|
+
const strapiAdmin$1 = require("@strapi/plugin-content-manager/strapi-admin");
|
|
12
12
|
const format = require("date-fns/format");
|
|
13
13
|
const dateFnsTz = require("date-fns-tz");
|
|
14
14
|
const reactIntl = require("react-intl");
|
|
@@ -16,10 +16,8 @@ const styled = require("styled-components");
|
|
|
16
16
|
const dateFns = require("date-fns");
|
|
17
17
|
const formik = require("formik");
|
|
18
18
|
const yup = require("yup");
|
|
19
|
-
require("
|
|
20
|
-
require("
|
|
21
|
-
require("@reduxjs/toolkit/query/react");
|
|
22
|
-
require("react-redux");
|
|
19
|
+
const reactRedux = require("react-redux");
|
|
20
|
+
const ee = require("@strapi/admin/strapi-admin/ee");
|
|
23
21
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
24
22
|
function _interopNamespace(e) {
|
|
25
23
|
if (e && e.__esModule)
|
|
@@ -43,6 +41,36 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
|
43
41
|
const format__default = /* @__PURE__ */ _interopDefault(format);
|
|
44
42
|
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
45
43
|
const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
|
|
44
|
+
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
|
45
|
+
const RelativeTime$1 = React__namespace.forwardRef(
|
|
46
|
+
({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
|
|
47
|
+
const { formatRelativeTime, formatDate, formatTime } = reactIntl.useIntl();
|
|
48
|
+
const interval = dateFns.intervalToDuration({
|
|
49
|
+
start: timestamp,
|
|
50
|
+
end: Date.now()
|
|
51
|
+
// see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
|
|
52
|
+
});
|
|
53
|
+
const unit = intervals.find((intervalUnit) => {
|
|
54
|
+
return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
|
|
55
|
+
});
|
|
56
|
+
const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
|
|
57
|
+
const customInterval = customIntervals.find(
|
|
58
|
+
(custom) => interval[custom.unit] < custom.threshold
|
|
59
|
+
);
|
|
60
|
+
const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
|
|
61
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
62
|
+
"time",
|
|
63
|
+
{
|
|
64
|
+
ref: forwardedRef,
|
|
65
|
+
dateTime: timestamp.toISOString(),
|
|
66
|
+
role: "time",
|
|
67
|
+
title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
|
|
68
|
+
...restProps,
|
|
69
|
+
children: displayText
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
);
|
|
46
74
|
const RELEASE_SCHEMA = yup__namespace.object().shape({
|
|
47
75
|
name: yup__namespace.string().trim().required(),
|
|
48
76
|
scheduledAt: yup__namespace.string().nullable(),
|
|
@@ -280,10 +308,11 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
280
308
|
}
|
|
281
309
|
);
|
|
282
310
|
};
|
|
283
|
-
const
|
|
311
|
+
const useTypedDispatch = reactRedux.useDispatch;
|
|
312
|
+
const LinkCard = styled__default.default(designSystem.Link)`
|
|
284
313
|
display: block;
|
|
285
314
|
`;
|
|
286
|
-
const RelativeTime = styled__default.default(
|
|
315
|
+
const RelativeTime = styled__default.default(RelativeTime$1)`
|
|
287
316
|
display: inline-block;
|
|
288
317
|
&::first-letter {
|
|
289
318
|
text-transform: uppercase;
|
|
@@ -317,7 +346,7 @@ const getBadgeProps = (status) => {
|
|
|
317
346
|
const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
318
347
|
const { formatMessage } = reactIntl.useIntl();
|
|
319
348
|
if (isError) {
|
|
320
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
349
|
+
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
|
|
321
350
|
}
|
|
322
351
|
if (releases?.length === 0) {
|
|
323
352
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -332,7 +361,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
332
361
|
target: sectionTitle
|
|
333
362
|
}
|
|
334
363
|
),
|
|
335
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(
|
|
364
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(symbols.EmptyDocuments, { width: "16rem" })
|
|
336
365
|
}
|
|
337
366
|
);
|
|
338
367
|
}
|
|
@@ -382,23 +411,26 @@ const ReleasesPage = () => {
|
|
|
382
411
|
const tabRef = React__namespace.useRef(null);
|
|
383
412
|
const location = reactRouterDom.useLocation();
|
|
384
413
|
const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
|
|
385
|
-
const toggleNotification =
|
|
414
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
386
415
|
const { formatMessage } = reactIntl.useIntl();
|
|
387
|
-
const
|
|
388
|
-
const { formatAPIError } =
|
|
389
|
-
const [{ query }, setQuery] =
|
|
416
|
+
const navigate = reactRouterDom.useNavigate();
|
|
417
|
+
const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
418
|
+
const [{ query }, setQuery] = strapiAdmin.useQueryParams();
|
|
390
419
|
const response = index.useGetReleasesQuery(query);
|
|
391
420
|
const [createRelease, { isLoading: isSubmittingForm }] = index.useCreateReleaseMutation();
|
|
392
|
-
const { getFeature } =
|
|
421
|
+
const { getFeature } = ee.useLicenseLimits();
|
|
393
422
|
const { maximumReleases = 3 } = getFeature("cms-content-releases");
|
|
394
|
-
const { trackUsage } =
|
|
423
|
+
const { trackUsage } = strapiAdmin.useTracking();
|
|
424
|
+
const {
|
|
425
|
+
allowedActions: { canCreate }
|
|
426
|
+
} = strapiAdmin.useRBAC(index.PERMISSIONS);
|
|
395
427
|
const { isLoading, isSuccess, isError } = response;
|
|
396
428
|
const activeTab = response?.currentData?.meta?.activeTab || "pending";
|
|
397
429
|
const activeTabIndex = ["pending", "done"].indexOf(activeTab);
|
|
398
430
|
React__namespace.useEffect(() => {
|
|
399
431
|
if (location?.state?.errors) {
|
|
400
432
|
toggleNotification({
|
|
401
|
-
type: "
|
|
433
|
+
type: "danger",
|
|
402
434
|
title: formatMessage({
|
|
403
435
|
id: "content-releases.pages.Releases.notification.error.title",
|
|
404
436
|
defaultMessage: "Your request could not be processed."
|
|
@@ -408,9 +440,9 @@ const ReleasesPage = () => {
|
|
|
408
440
|
defaultMessage: "Please try again or open another release."
|
|
409
441
|
})
|
|
410
442
|
});
|
|
411
|
-
|
|
443
|
+
navigate("", { replace: true, state: null });
|
|
412
444
|
}
|
|
413
|
-
}, [formatMessage, location?.state?.errors,
|
|
445
|
+
}, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
|
|
414
446
|
React__namespace.useEffect(() => {
|
|
415
447
|
if (tabRef.current) {
|
|
416
448
|
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
@@ -420,7 +452,7 @@ const ReleasesPage = () => {
|
|
|
420
452
|
setReleaseModalShown((prev) => !prev);
|
|
421
453
|
};
|
|
422
454
|
if (isLoading) {
|
|
423
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
455
|
+
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
|
424
456
|
}
|
|
425
457
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
426
458
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
@@ -451,15 +483,15 @@ const ReleasesPage = () => {
|
|
|
451
483
|
})
|
|
452
484
|
});
|
|
453
485
|
trackUsage("didCreateRelease");
|
|
454
|
-
|
|
486
|
+
navigate(response2.data.data.id.toString());
|
|
455
487
|
} else if (index.isAxiosError(response2.error)) {
|
|
456
488
|
toggleNotification({
|
|
457
|
-
type: "
|
|
489
|
+
type: "danger",
|
|
458
490
|
message: formatAPIError(response2.error)
|
|
459
491
|
});
|
|
460
492
|
} else {
|
|
461
493
|
toggleNotification({
|
|
462
|
-
type: "
|
|
494
|
+
type: "danger",
|
|
463
495
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
464
496
|
});
|
|
465
497
|
}
|
|
@@ -476,7 +508,7 @@ const ReleasesPage = () => {
|
|
|
476
508
|
id: "content-releases.pages.Releases.header-subtitle",
|
|
477
509
|
defaultMessage: "Create and manage content updates"
|
|
478
510
|
}),
|
|
479
|
-
primaryAction:
|
|
511
|
+
primaryAction: canCreate ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
480
512
|
designSystem.Button,
|
|
481
513
|
{
|
|
482
514
|
startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
|
|
@@ -487,7 +519,7 @@ const ReleasesPage = () => {
|
|
|
487
519
|
defaultMessage: "New release"
|
|
488
520
|
})
|
|
489
521
|
}
|
|
490
|
-
)
|
|
522
|
+
) : null
|
|
491
523
|
}
|
|
492
524
|
),
|
|
493
525
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -495,7 +527,7 @@ const ReleasesPage = () => {
|
|
|
495
527
|
StyledAlert,
|
|
496
528
|
{
|
|
497
529
|
marginBottom: 6,
|
|
498
|
-
action: /* @__PURE__ */ jsxRuntime.jsx(
|
|
530
|
+
action: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Link, { href: "https://strapi.io/pricing-cloud", isExternal: true, children: formatMessage({
|
|
499
531
|
id: "content-releases.pages.Releases.max-limit-reached.action",
|
|
500
532
|
defaultMessage: "Explore plans"
|
|
501
533
|
}) }),
|
|
@@ -566,23 +598,17 @@ const ReleasesPage = () => {
|
|
|
566
598
|
]
|
|
567
599
|
}
|
|
568
600
|
),
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
pagination: {
|
|
581
|
-
pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
)
|
|
585
|
-
] }) : null
|
|
601
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
602
|
+
strapiAdmin.Pagination.Root,
|
|
603
|
+
{
|
|
604
|
+
...response?.currentData?.meta?.pagination,
|
|
605
|
+
defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
|
|
606
|
+
children: [
|
|
607
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, { options: ["8", "16", "32", "64"] }),
|
|
608
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
|
|
609
|
+
]
|
|
610
|
+
}
|
|
611
|
+
)
|
|
586
612
|
] }) }),
|
|
587
613
|
releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
|
|
588
614
|
ReleaseModal,
|
|
@@ -601,7 +627,7 @@ const ReleaseInfoWrapper = styled__default.default(designSystem.Flex)`
|
|
|
601
627
|
border-bottom-left-radius: ${({ theme }) => theme.borderRadius};
|
|
602
628
|
border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
|
|
603
629
|
`;
|
|
604
|
-
const StyledMenuItem = styled__default.default(
|
|
630
|
+
const StyledMenuItem = styled__default.default(designSystem.Menu.Item)`
|
|
605
631
|
svg path {
|
|
606
632
|
fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
|
|
607
633
|
}
|
|
@@ -630,14 +656,18 @@ const TrashIcon = styled__default.default(icons.Trash)`
|
|
|
630
656
|
const TypographyMaxWidth = styled__default.default(designSystem.Typography)`
|
|
631
657
|
max-width: 300px;
|
|
632
658
|
`;
|
|
633
|
-
const EntryValidationText = ({ action, schema,
|
|
659
|
+
const EntryValidationText = ({ action, schema, entry }) => {
|
|
634
660
|
const { formatMessage } = reactIntl.useIntl();
|
|
635
|
-
const { validate } = strapiAdmin.unstable_useDocument(
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
661
|
+
const { validate } = strapiAdmin$1.unstable_useDocument(
|
|
662
|
+
{
|
|
663
|
+
collectionType: schema?.kind ?? "",
|
|
664
|
+
model: schema?.uid ?? ""
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
skip: !schema
|
|
668
|
+
}
|
|
669
|
+
);
|
|
670
|
+
const errors = validate(entry) ?? {};
|
|
641
671
|
if (Object.keys(errors).length > 0) {
|
|
642
672
|
const validationErrorsMessages = Object.entries(errors).map(
|
|
643
673
|
([key, value]) => formatMessage(
|
|
@@ -646,13 +676,13 @@ const EntryValidationText = ({ action, schema, components, entry }) => {
|
|
|
646
676
|
)
|
|
647
677
|
).join(" ");
|
|
648
678
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
|
649
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
679
|
+
/* @__PURE__ */ jsxRuntime.jsx(icons.CrossCircle, { fill: "danger600" }),
|
|
650
680
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsxRuntime.jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
|
|
651
681
|
] });
|
|
652
682
|
}
|
|
653
683
|
if (action == "publish") {
|
|
654
684
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
|
655
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
685
|
+
/* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
|
656
686
|
entry.publishedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
657
687
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
|
|
658
688
|
defaultMessage: "Already published"
|
|
@@ -663,7 +693,7 @@ const EntryValidationText = ({ action, schema, components, entry }) => {
|
|
|
663
693
|
] });
|
|
664
694
|
}
|
|
665
695
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
|
666
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
696
|
+
/* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
|
667
697
|
!entry.publishedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
668
698
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-unpublished",
|
|
669
699
|
defaultMessage: "Already unpublished"
|
|
@@ -685,18 +715,22 @@ const ReleaseDetailsLayout = ({
|
|
|
685
715
|
isLoading: isLoadingDetails,
|
|
686
716
|
isError,
|
|
687
717
|
error
|
|
688
|
-
} = index.useGetReleaseQuery(
|
|
718
|
+
} = index.useGetReleaseQuery(
|
|
719
|
+
{ id: releaseId },
|
|
720
|
+
{
|
|
721
|
+
skip: !releaseId
|
|
722
|
+
}
|
|
723
|
+
);
|
|
689
724
|
const [publishRelease, { isLoading: isPublishing }] = index.usePublishReleaseMutation();
|
|
690
|
-
const toggleNotification =
|
|
691
|
-
const { formatAPIError } =
|
|
692
|
-
const {
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
const
|
|
696
|
-
const { trackUsage } = helperPlugin.useTracking();
|
|
725
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
726
|
+
const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
727
|
+
const { allowedActions } = strapiAdmin.useRBAC(index.PERMISSIONS);
|
|
728
|
+
const { canUpdate, canDelete, canPublish } = allowedActions;
|
|
729
|
+
const dispatch = useTypedDispatch();
|
|
730
|
+
const { trackUsage } = strapiAdmin.useTracking();
|
|
697
731
|
const release = data?.data;
|
|
698
|
-
const handlePublishRelease = async () => {
|
|
699
|
-
const response = await publishRelease({ id
|
|
732
|
+
const handlePublishRelease = (id) => async () => {
|
|
733
|
+
const response = await publishRelease({ id });
|
|
700
734
|
if ("data" in response) {
|
|
701
735
|
toggleNotification({
|
|
702
736
|
type: "success",
|
|
@@ -713,12 +747,12 @@ const ReleaseDetailsLayout = ({
|
|
|
713
747
|
});
|
|
714
748
|
} else if (index.isAxiosError(response.error)) {
|
|
715
749
|
toggleNotification({
|
|
716
|
-
type: "
|
|
750
|
+
type: "danger",
|
|
717
751
|
message: formatAPIError(response.error)
|
|
718
752
|
});
|
|
719
753
|
} else {
|
|
720
754
|
toggleNotification({
|
|
721
|
-
type: "
|
|
755
|
+
type: "danger",
|
|
722
756
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
723
757
|
});
|
|
724
758
|
}
|
|
@@ -744,21 +778,19 @@ const ReleaseDetailsLayout = ({
|
|
|
744
778
|
return release.createdBy.email;
|
|
745
779
|
};
|
|
746
780
|
if (isLoadingDetails) {
|
|
747
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
781
|
+
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
|
748
782
|
}
|
|
749
783
|
if (isError || !release) {
|
|
750
784
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
751
|
-
reactRouterDom.
|
|
785
|
+
reactRouterDom.Navigate,
|
|
752
786
|
{
|
|
753
|
-
to:
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
]
|
|
761
|
-
}
|
|
787
|
+
to: "..",
|
|
788
|
+
state: {
|
|
789
|
+
errors: [
|
|
790
|
+
{
|
|
791
|
+
code: error?.code
|
|
792
|
+
}
|
|
793
|
+
]
|
|
762
794
|
}
|
|
763
795
|
}
|
|
764
796
|
);
|
|
@@ -802,14 +834,11 @@ const ReleaseDetailsLayout = ({
|
|
|
802
834
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
|
|
803
835
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { ...getBadgeProps(release.status), children: release.status })
|
|
804
836
|
] }),
|
|
805
|
-
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(
|
|
806
|
-
id: "global.back",
|
|
807
|
-
defaultMessage: "Back"
|
|
808
|
-
}) }),
|
|
837
|
+
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
|
|
809
838
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
|
810
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
839
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Root, { children: [
|
|
811
840
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
812
|
-
|
|
841
|
+
designSystem.Menu.Trigger,
|
|
813
842
|
{
|
|
814
843
|
as: designSystem.IconButton,
|
|
815
844
|
paddingLeft: 2,
|
|
@@ -822,7 +851,7 @@ const ReleaseDetailsLayout = ({
|
|
|
822
851
|
variant: "tertiary"
|
|
823
852
|
}
|
|
824
853
|
),
|
|
825
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
854
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { top: 1, popoverPlacement: "bottom-end", maxHeight: void 0, children: [
|
|
826
855
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
827
856
|
designSystem.Flex,
|
|
828
857
|
{
|
|
@@ -871,7 +900,7 @@ const ReleaseDetailsLayout = ({
|
|
|
871
900
|
defaultMessage: "Created"
|
|
872
901
|
}) }),
|
|
873
902
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", color: "neutral300", children: [
|
|
874
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
903
|
+
/* @__PURE__ */ jsxRuntime.jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
875
904
|
formatMessage(
|
|
876
905
|
{
|
|
877
906
|
id: "content-releases.header.actions.created.description",
|
|
@@ -889,12 +918,12 @@ const ReleaseDetailsLayout = ({
|
|
|
889
918
|
id: "content-releases.header.actions.refresh",
|
|
890
919
|
defaultMessage: "Refresh"
|
|
891
920
|
}) }),
|
|
892
|
-
|
|
921
|
+
canPublish ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
893
922
|
designSystem.Button,
|
|
894
923
|
{
|
|
895
924
|
size: "S",
|
|
896
925
|
variant: "default",
|
|
897
|
-
onClick: handlePublishRelease,
|
|
926
|
+
onClick: handlePublishRelease(release.id.toString()),
|
|
898
927
|
loading: isPublishing,
|
|
899
928
|
disabled: release.actions.meta.count === 0,
|
|
900
929
|
children: formatMessage({
|
|
@@ -902,7 +931,7 @@ const ReleaseDetailsLayout = ({
|
|
|
902
931
|
defaultMessage: "Publish"
|
|
903
932
|
})
|
|
904
933
|
}
|
|
905
|
-
)
|
|
934
|
+
) : null
|
|
906
935
|
] })
|
|
907
936
|
}
|
|
908
937
|
),
|
|
@@ -910,6 +939,7 @@ const ReleaseDetailsLayout = ({
|
|
|
910
939
|
] });
|
|
911
940
|
};
|
|
912
941
|
const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
|
|
942
|
+
const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
|
|
913
943
|
const getGroupByOptionLabel = (value) => {
|
|
914
944
|
if (value === "locale") {
|
|
915
945
|
return {
|
|
@@ -928,12 +958,11 @@ const getGroupByOptionLabel = (value) => {
|
|
|
928
958
|
defaultMessage: "Content-Types"
|
|
929
959
|
};
|
|
930
960
|
};
|
|
931
|
-
const ReleaseDetailsBody = () => {
|
|
961
|
+
const ReleaseDetailsBody = ({ releaseId }) => {
|
|
932
962
|
const { formatMessage } = reactIntl.useIntl();
|
|
933
|
-
const {
|
|
934
|
-
const
|
|
935
|
-
const
|
|
936
|
-
const { formatAPIError } = helperPlugin.useAPIErrorHandler();
|
|
963
|
+
const [{ query }, setQuery] = strapiAdmin.useQueryParams();
|
|
964
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
965
|
+
const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
937
966
|
const {
|
|
938
967
|
data: releaseData,
|
|
939
968
|
isLoading: isReleaseLoading,
|
|
@@ -942,7 +971,21 @@ const ReleaseDetailsBody = () => {
|
|
|
942
971
|
} = index.useGetReleaseQuery({ id: releaseId });
|
|
943
972
|
const {
|
|
944
973
|
allowedActions: { canUpdate }
|
|
945
|
-
} =
|
|
974
|
+
} = strapiAdmin.useRBAC(index.PERMISSIONS);
|
|
975
|
+
const runHookWaterfall = strapiAdmin.useStrapiApp("ReleaseDetailsPage", (state) => state.runHookWaterfall);
|
|
976
|
+
const { hasI18nEnabled } = runHookWaterfall(
|
|
977
|
+
"ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
|
|
978
|
+
{
|
|
979
|
+
displayedHeaders: {
|
|
980
|
+
label: formatMessage({
|
|
981
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
982
|
+
defaultMessage: "locale"
|
|
983
|
+
}),
|
|
984
|
+
name: "locale"
|
|
985
|
+
},
|
|
986
|
+
hasI18nEnabled: false
|
|
987
|
+
}
|
|
988
|
+
);
|
|
946
989
|
const release = releaseData?.data;
|
|
947
990
|
const selectedGroupBy = query?.groupBy || "contentType";
|
|
948
991
|
const {
|
|
@@ -973,19 +1016,19 @@ const ReleaseDetailsBody = () => {
|
|
|
973
1016
|
if ("error" in response) {
|
|
974
1017
|
if (index.isAxiosError(response.error)) {
|
|
975
1018
|
toggleNotification({
|
|
976
|
-
type: "
|
|
1019
|
+
type: "danger",
|
|
977
1020
|
message: formatAPIError(response.error)
|
|
978
1021
|
});
|
|
979
1022
|
} else {
|
|
980
1023
|
toggleNotification({
|
|
981
|
-
type: "
|
|
1024
|
+
type: "danger",
|
|
982
1025
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
983
1026
|
});
|
|
984
1027
|
}
|
|
985
1028
|
}
|
|
986
1029
|
};
|
|
987
1030
|
if (isLoading || isReleaseLoading) {
|
|
988
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1031
|
+
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
|
989
1032
|
}
|
|
990
1033
|
const releaseActions = data?.data;
|
|
991
1034
|
const releaseMeta = data?.meta;
|
|
@@ -1004,30 +1047,24 @@ const ReleaseDetailsBody = () => {
|
|
|
1004
1047
|
});
|
|
1005
1048
|
}
|
|
1006
1049
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1007
|
-
reactRouterDom.
|
|
1050
|
+
reactRouterDom.Navigate,
|
|
1008
1051
|
{
|
|
1009
|
-
to:
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
errors: errorsArray
|
|
1013
|
-
}
|
|
1052
|
+
to: "..",
|
|
1053
|
+
state: {
|
|
1054
|
+
errors: errorsArray
|
|
1014
1055
|
}
|
|
1015
1056
|
}
|
|
1016
1057
|
);
|
|
1017
1058
|
}
|
|
1018
1059
|
if (isError || !releaseActions) {
|
|
1019
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1060
|
+
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
|
|
1020
1061
|
}
|
|
1021
1062
|
if (Object.keys(releaseActions).length === 0) {
|
|
1022
1063
|
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1023
|
-
|
|
1064
|
+
designSystem.EmptyStateLayout,
|
|
1024
1065
|
{
|
|
1025
|
-
content: {
|
|
1026
|
-
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1027
|
-
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1028
|
-
},
|
|
1029
1066
|
action: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1030
|
-
|
|
1067
|
+
designSystem.LinkButton,
|
|
1031
1068
|
{
|
|
1032
1069
|
as: reactRouterDom.Link,
|
|
1033
1070
|
to: {
|
|
@@ -1040,18 +1077,59 @@ const ReleaseDetailsBody = () => {
|
|
|
1040
1077
|
defaultMessage: "Open the Content Manager"
|
|
1041
1078
|
})
|
|
1042
1079
|
}
|
|
1043
|
-
)
|
|
1080
|
+
),
|
|
1081
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(symbols.EmptyDocuments, { width: "16rem" }),
|
|
1082
|
+
content: formatMessage({
|
|
1083
|
+
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1084
|
+
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1085
|
+
})
|
|
1044
1086
|
}
|
|
1045
1087
|
) });
|
|
1046
1088
|
}
|
|
1089
|
+
const groupByLabel = formatMessage({
|
|
1090
|
+
id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
|
|
1091
|
+
defaultMessage: "Group by"
|
|
1092
|
+
});
|
|
1093
|
+
const headers = [
|
|
1094
|
+
// ...displayedHeaders,
|
|
1095
|
+
{
|
|
1096
|
+
label: formatMessage({
|
|
1097
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1098
|
+
defaultMessage: "name"
|
|
1099
|
+
}),
|
|
1100
|
+
name: "name"
|
|
1101
|
+
},
|
|
1102
|
+
{
|
|
1103
|
+
label: formatMessage({
|
|
1104
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1105
|
+
defaultMessage: "content-type"
|
|
1106
|
+
}),
|
|
1107
|
+
name: "content-type"
|
|
1108
|
+
},
|
|
1109
|
+
{
|
|
1110
|
+
label: formatMessage({
|
|
1111
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1112
|
+
defaultMessage: "action"
|
|
1113
|
+
}),
|
|
1114
|
+
name: "action"
|
|
1115
|
+
},
|
|
1116
|
+
...!release.releasedAt ? [
|
|
1117
|
+
{
|
|
1118
|
+
label: formatMessage({
|
|
1119
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1120
|
+
defaultMessage: "status"
|
|
1121
|
+
}),
|
|
1122
|
+
name: "status"
|
|
1123
|
+
}
|
|
1124
|
+
] : []
|
|
1125
|
+
];
|
|
1126
|
+
const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
|
|
1047
1127
|
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1048
1128
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1049
1129
|
designSystem.SingleSelect,
|
|
1050
1130
|
{
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
defaultMessage: "Group by"
|
|
1054
|
-
}),
|
|
1131
|
+
placeholder: groupByLabel,
|
|
1132
|
+
"aria-label": groupByLabel,
|
|
1055
1133
|
customizeContent: (value) => formatMessage(
|
|
1056
1134
|
{
|
|
1057
1135
|
id: `content-releases.pages.ReleaseDetails.groupBy.label`,
|
|
@@ -1063,84 +1141,27 @@ const ReleaseDetailsBody = () => {
|
|
|
1063
1141
|
),
|
|
1064
1142
|
value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
|
|
1065
1143
|
onChange: (value) => setQuery({ groupBy: value }),
|
|
1066
|
-
children:
|
|
1144
|
+
children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
|
|
1067
1145
|
}
|
|
1068
1146
|
) }),
|
|
1069
1147
|
Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
|
|
1070
1148
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { role: "separator", "aria-label": key, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { children: key }) }),
|
|
1071
1149
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1072
|
-
|
|
1150
|
+
strapiAdmin.Table.Root,
|
|
1073
1151
|
{
|
|
1074
1152
|
rows: releaseActions[key].map((item) => ({
|
|
1075
1153
|
...item,
|
|
1076
1154
|
id: Number(item.entry.id)
|
|
1077
1155
|
})),
|
|
1078
|
-
|
|
1079
|
-
isLoading,
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1083
|
-
|
|
1084
|
-
helperPlugin.Table.HeaderCell,
|
|
1085
|
-
{
|
|
1086
|
-
fieldSchemaType: "string",
|
|
1087
|
-
label: formatMessage({
|
|
1088
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1089
|
-
defaultMessage: "name"
|
|
1090
|
-
}),
|
|
1091
|
-
name: "name"
|
|
1092
|
-
}
|
|
1093
|
-
),
|
|
1094
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1095
|
-
helperPlugin.Table.HeaderCell,
|
|
1096
|
-
{
|
|
1097
|
-
fieldSchemaType: "string",
|
|
1098
|
-
label: formatMessage({
|
|
1099
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1100
|
-
defaultMessage: "locale"
|
|
1101
|
-
}),
|
|
1102
|
-
name: "locale"
|
|
1103
|
-
}
|
|
1104
|
-
),
|
|
1105
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1106
|
-
helperPlugin.Table.HeaderCell,
|
|
1107
|
-
{
|
|
1108
|
-
fieldSchemaType: "string",
|
|
1109
|
-
label: formatMessage({
|
|
1110
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1111
|
-
defaultMessage: "content-type"
|
|
1112
|
-
}),
|
|
1113
|
-
name: "content-type"
|
|
1114
|
-
}
|
|
1115
|
-
),
|
|
1116
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1117
|
-
helperPlugin.Table.HeaderCell,
|
|
1118
|
-
{
|
|
1119
|
-
fieldSchemaType: "string",
|
|
1120
|
-
label: formatMessage({
|
|
1121
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1122
|
-
defaultMessage: "action"
|
|
1123
|
-
}),
|
|
1124
|
-
name: "action"
|
|
1125
|
-
}
|
|
1126
|
-
),
|
|
1127
|
-
!release.releasedAt && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1128
|
-
helperPlugin.Table.HeaderCell,
|
|
1129
|
-
{
|
|
1130
|
-
fieldSchemaType: "string",
|
|
1131
|
-
label: formatMessage({
|
|
1132
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1133
|
-
defaultMessage: "status"
|
|
1134
|
-
}),
|
|
1135
|
-
name: "status"
|
|
1136
|
-
}
|
|
1137
|
-
)
|
|
1138
|
-
] }),
|
|
1139
|
-
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.LoadingBody, {}),
|
|
1140
|
-
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.Body, { children: releaseActions[key].map(
|
|
1156
|
+
headers,
|
|
1157
|
+
isLoading: isLoading || isFetching,
|
|
1158
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Content, { children: [
|
|
1159
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Head, { children: headers.map((header) => /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, { ...header }, header.name)) }),
|
|
1160
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
|
|
1161
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: releaseActions[key].map(
|
|
1141
1162
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
|
1142
1163
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1143
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1164
|
+
hasI18nEnabled && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1144
1165
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: contentType.displayName || "" }) }),
|
|
1145
1166
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage(
|
|
1146
1167
|
{
|
|
@@ -1194,34 +1215,39 @@ const ReleaseDetailsBody = () => {
|
|
|
1194
1215
|
}
|
|
1195
1216
|
)
|
|
1196
1217
|
] }, `releases-group-${key}`)),
|
|
1197
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
}
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1218
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1219
|
+
strapiAdmin.Pagination.Root,
|
|
1220
|
+
{
|
|
1221
|
+
...releaseMeta?.pagination,
|
|
1222
|
+
defaultPageSize: releaseMeta?.pagination?.pageSize,
|
|
1223
|
+
children: [
|
|
1224
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, {}),
|
|
1225
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
|
|
1226
|
+
]
|
|
1227
|
+
}
|
|
1228
|
+
)
|
|
1208
1229
|
] }) });
|
|
1209
1230
|
};
|
|
1210
1231
|
const ReleaseDetailsPage = () => {
|
|
1211
1232
|
const { formatMessage } = reactIntl.useIntl();
|
|
1212
1233
|
const { releaseId } = reactRouterDom.useParams();
|
|
1213
|
-
const toggleNotification =
|
|
1214
|
-
const { formatAPIError } =
|
|
1215
|
-
const
|
|
1234
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
1235
|
+
const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
1236
|
+
const navigate = reactRouterDom.useNavigate();
|
|
1216
1237
|
const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
|
|
1217
1238
|
const [showWarningSubmit, setWarningSubmit] = React__namespace.useState(false);
|
|
1218
1239
|
const {
|
|
1219
1240
|
isLoading: isLoadingDetails,
|
|
1220
1241
|
data,
|
|
1221
1242
|
isSuccess: isSuccessDetails
|
|
1222
|
-
} = index.useGetReleaseQuery(
|
|
1243
|
+
} = index.useGetReleaseQuery(
|
|
1244
|
+
{ id: releaseId },
|
|
1245
|
+
{
|
|
1246
|
+
skip: !releaseId
|
|
1247
|
+
}
|
|
1248
|
+
);
|
|
1223
1249
|
const [updateRelease, { isLoading: isSubmittingForm }] = index.useUpdateReleaseMutation();
|
|
1224
|
-
const [deleteRelease
|
|
1250
|
+
const [deleteRelease] = index.useDeleteReleaseMutation();
|
|
1225
1251
|
const toggleEditReleaseModal = () => {
|
|
1226
1252
|
setReleaseModalShown((prev) => !prev);
|
|
1227
1253
|
};
|
|
@@ -1232,10 +1258,13 @@ const ReleaseDetailsPage = () => {
|
|
|
1232
1258
|
{
|
|
1233
1259
|
toggleEditReleaseModal,
|
|
1234
1260
|
toggleWarningSubmit,
|
|
1235
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1261
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {})
|
|
1236
1262
|
}
|
|
1237
1263
|
);
|
|
1238
1264
|
}
|
|
1265
|
+
if (!releaseId) {
|
|
1266
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: ".." });
|
|
1267
|
+
}
|
|
1239
1268
|
const releaseData = isSuccessDetails && data?.data || null;
|
|
1240
1269
|
const title = releaseData?.name || "";
|
|
1241
1270
|
const timezone = releaseData?.timezone ?? null;
|
|
@@ -1260,12 +1289,12 @@ const ReleaseDetailsPage = () => {
|
|
|
1260
1289
|
toggleEditReleaseModal();
|
|
1261
1290
|
} else if (index.isAxiosError(response.error)) {
|
|
1262
1291
|
toggleNotification({
|
|
1263
|
-
type: "
|
|
1292
|
+
type: "danger",
|
|
1264
1293
|
message: formatAPIError(response.error)
|
|
1265
1294
|
});
|
|
1266
1295
|
} else {
|
|
1267
1296
|
toggleNotification({
|
|
1268
|
-
type: "
|
|
1297
|
+
type: "danger",
|
|
1269
1298
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1270
1299
|
});
|
|
1271
1300
|
}
|
|
@@ -1275,15 +1304,15 @@ const ReleaseDetailsPage = () => {
|
|
|
1275
1304
|
id: releaseId
|
|
1276
1305
|
});
|
|
1277
1306
|
if ("data" in response) {
|
|
1278
|
-
|
|
1307
|
+
navigate("..");
|
|
1279
1308
|
} else if (index.isAxiosError(response.error)) {
|
|
1280
1309
|
toggleNotification({
|
|
1281
|
-
type: "
|
|
1310
|
+
type: "danger",
|
|
1282
1311
|
message: formatAPIError(response.error)
|
|
1283
1312
|
});
|
|
1284
1313
|
} else {
|
|
1285
1314
|
toggleNotification({
|
|
1286
|
-
type: "
|
|
1315
|
+
type: "danger",
|
|
1287
1316
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1288
1317
|
});
|
|
1289
1318
|
}
|
|
@@ -1294,7 +1323,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1294
1323
|
toggleEditReleaseModal,
|
|
1295
1324
|
toggleWarningSubmit,
|
|
1296
1325
|
children: [
|
|
1297
|
-
/* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, {}),
|
|
1326
|
+
/* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, { releaseId }),
|
|
1298
1327
|
releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1299
1328
|
ReleaseModal,
|
|
1300
1329
|
{
|
|
@@ -1312,16 +1341,15 @@ const ReleaseDetailsPage = () => {
|
|
|
1312
1341
|
}
|
|
1313
1342
|
),
|
|
1314
1343
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1315
|
-
|
|
1344
|
+
strapiAdmin.ConfirmDialog,
|
|
1316
1345
|
{
|
|
1317
|
-
|
|
1346
|
+
isOpen: showWarningSubmit,
|
|
1347
|
+
onClose: toggleWarningSubmit,
|
|
1348
|
+
onConfirm: handleDeleteRelease,
|
|
1349
|
+
children: formatMessage({
|
|
1318
1350
|
id: "content-releases.dialog.confirmation-message",
|
|
1319
1351
|
defaultMessage: "Are you sure you want to delete this release?"
|
|
1320
|
-
}
|
|
1321
|
-
isOpen: showWarningSubmit,
|
|
1322
|
-
isConfirmButtonLoading: isDeletingRelease,
|
|
1323
|
-
onToggleDialog: toggleWarningSubmit,
|
|
1324
|
-
onConfirm: handleDeleteRelease
|
|
1352
|
+
})
|
|
1325
1353
|
}
|
|
1326
1354
|
)
|
|
1327
1355
|
]
|
|
@@ -1329,10 +1357,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1329
1357
|
);
|
|
1330
1358
|
};
|
|
1331
1359
|
const App = () => {
|
|
1332
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1333
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, {
|
|
1334
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, {
|
|
1360
|
+
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Protect, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Routes, { children: [
|
|
1361
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { index: true, element: /* @__PURE__ */ jsxRuntime.jsx(ReleasesPage, {}) }),
|
|
1362
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: ":releaseId", element: /* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsPage, {}) })
|
|
1335
1363
|
] }) });
|
|
1336
1364
|
};
|
|
1337
1365
|
exports.App = App;
|
|
1338
|
-
//# sourceMappingURL=App-
|
|
1366
|
+
//# sourceMappingURL=App-C0DlH0im.js.map
|