@strapi/content-releases 0.0.0-experimental.e60ec1829240dae21c1e1d29076681c322288813 → 0.0.0-experimental.e86ac7192458208dc921b643405f97aeba7cccb9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +17 -1
- package/dist/_chunks/{App-CXRpb2hi.js → App-dLXY5ei3.js} +228 -241
- package/dist/_chunks/App-dLXY5ei3.js.map +1 -0
- package/dist/_chunks/{App-BsUSTHVD.mjs → App-jrh58sXY.mjs} +211 -224
- package/dist/_chunks/App-jrh58sXY.mjs.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-_MxP6-Dt.mjs → PurchaseContentReleases-3tRbmbY3.mjs} +7 -8
- package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-Be3acS2L.js → PurchaseContentReleases-bpIYXOfu.js} +6 -7
- package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js.map +1 -0
- package/dist/_chunks/{en-DtFJ5ViE.js → en-HrREghh3.js} +1 -1
- package/dist/_chunks/en-HrREghh3.js.map +1 -0
- package/dist/_chunks/{en-B9Ur3VsE.mjs → en-ltT1TlKQ.mjs} +1 -1
- package/dist/_chunks/en-ltT1TlKQ.mjs.map +1 -0
- package/dist/_chunks/{index-B6-lic1Q.js → index-CVO0Rqdm.js} +210 -135
- package/dist/_chunks/index-CVO0Rqdm.js.map +1 -0
- package/dist/_chunks/{index-DJLIZdZv.mjs → index-PiOGBETy.mjs} +211 -136
- package/dist/_chunks/index-PiOGBETy.mjs.map +1 -0
- package/dist/admin/index.js +15 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +16 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/server/index.js +96 -86
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +96 -87
- package/dist/server/index.mjs.map +1 -1
- package/package.json +34 -28
- package/dist/_chunks/App-BsUSTHVD.mjs.map +0 -1
- package/dist/_chunks/App-CXRpb2hi.js.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +0 -1
- package/dist/_chunks/en-B9Ur3VsE.mjs.map +0 -1
- package/dist/_chunks/en-DtFJ5ViE.js.map +0 -1
- package/dist/_chunks/index-B6-lic1Q.js.map +0 -1
- package/dist/_chunks/index-DJLIZdZv.mjs.map +0 -1
- package/dist/admin/src/components/CMReleasesContainer.d.ts +0 -22
- package/dist/admin/src/components/RelativeTime.d.ts +0 -28
- package/dist/admin/src/components/ReleaseAction.d.ts +0 -3
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +0 -26
- package/dist/admin/src/components/ReleaseActionOptions.d.ts +0 -9
- package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
- package/dist/admin/src/components/ReleaseModal.d.ts +0 -16
- package/dist/admin/src/constants.d.ts +0 -58
- package/dist/admin/src/index.d.ts +0 -3
- package/dist/admin/src/pages/App.d.ts +0 -1
- package/dist/admin/src/pages/PurchaseContentReleases.d.ts +0 -2
- package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +0 -2
- package/dist/admin/src/pages/ReleasesPage.d.ts +0 -8
- package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +0 -181
- package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +0 -39
- package/dist/admin/src/pluginId.d.ts +0 -1
- package/dist/admin/src/services/axios.d.ts +0 -29
- package/dist/admin/src/services/release.d.ts +0 -429
- package/dist/admin/src/store/hooks.d.ts +0 -7
- package/dist/admin/src/utils/prefixPluginTranslations.d.ts +0 -3
- package/dist/admin/src/utils/time.d.ts +0 -1
- package/dist/server/src/bootstrap.d.ts +0 -5
- package/dist/server/src/bootstrap.d.ts.map +0 -1
- package/dist/server/src/constants.d.ts +0 -12
- package/dist/server/src/constants.d.ts.map +0 -1
- package/dist/server/src/content-types/index.d.ts +0 -99
- package/dist/server/src/content-types/index.d.ts.map +0 -1
- package/dist/server/src/content-types/release/index.d.ts +0 -48
- package/dist/server/src/content-types/release/index.d.ts.map +0 -1
- package/dist/server/src/content-types/release/schema.d.ts +0 -47
- package/dist/server/src/content-types/release/schema.d.ts.map +0 -1
- package/dist/server/src/content-types/release-action/index.d.ts +0 -50
- package/dist/server/src/content-types/release-action/index.d.ts.map +0 -1
- package/dist/server/src/content-types/release-action/schema.d.ts +0 -49
- package/dist/server/src/content-types/release-action/schema.d.ts.map +0 -1
- package/dist/server/src/controllers/index.d.ts +0 -20
- package/dist/server/src/controllers/index.d.ts.map +0 -1
- package/dist/server/src/controllers/release-action.d.ts +0 -10
- package/dist/server/src/controllers/release-action.d.ts.map +0 -1
- package/dist/server/src/controllers/release.d.ts +0 -12
- package/dist/server/src/controllers/release.d.ts.map +0 -1
- package/dist/server/src/controllers/validation/release-action.d.ts +0 -8
- package/dist/server/src/controllers/validation/release-action.d.ts.map +0 -1
- package/dist/server/src/controllers/validation/release.d.ts +0 -2
- package/dist/server/src/controllers/validation/release.d.ts.map +0 -1
- package/dist/server/src/destroy.d.ts +0 -5
- package/dist/server/src/destroy.d.ts.map +0 -1
- package/dist/server/src/index.d.ts +0 -2096
- package/dist/server/src/index.d.ts.map +0 -1
- package/dist/server/src/migrations/index.d.ts +0 -13
- package/dist/server/src/migrations/index.d.ts.map +0 -1
- package/dist/server/src/register.d.ts +0 -5
- package/dist/server/src/register.d.ts.map +0 -1
- package/dist/server/src/routes/index.d.ts +0 -35
- package/dist/server/src/routes/index.d.ts.map +0 -1
- package/dist/server/src/routes/release-action.d.ts +0 -18
- package/dist/server/src/routes/release-action.d.ts.map +0 -1
- package/dist/server/src/routes/release.d.ts +0 -18
- package/dist/server/src/routes/release.d.ts.map +0 -1
- package/dist/server/src/services/index.d.ts +0 -1826
- package/dist/server/src/services/index.d.ts.map +0 -1
- package/dist/server/src/services/release.d.ts +0 -66
- package/dist/server/src/services/release.d.ts.map +0 -1
- package/dist/server/src/services/scheduling.d.ts +0 -18
- package/dist/server/src/services/scheduling.d.ts.map +0 -1
- package/dist/server/src/services/validation.d.ts +0 -18
- package/dist/server/src/services/validation.d.ts.map +0 -1
- package/dist/server/src/utils/index.d.ts +0 -14
- package/dist/server/src/utils/index.d.ts.map +0 -1
- package/dist/shared/contracts/release-actions.d.ts +0 -131
- package/dist/shared/contracts/release-actions.d.ts.map +0 -1
- package/dist/shared/contracts/releases.d.ts +0 -182
- package/dist/shared/contracts/releases.d.ts.map +0 -1
- package/dist/shared/types.d.ts +0 -24
- package/dist/shared/types.d.ts.map +0 -1
- package/dist/shared/validation-schemas.d.ts +0 -2
- package/dist/shared/validation-schemas.d.ts.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 helperPlugin = require("@strapi/helper-plugin");
|
|
5
5
|
const reactRouterDom = require("react-router-dom");
|
|
6
|
-
const index = require("./index-
|
|
6
|
+
const index = require("./index-CVO0Rqdm.js");
|
|
7
7
|
const React = require("react");
|
|
8
|
-
const strapiAdmin
|
|
8
|
+
const strapiAdmin = require("@strapi/admin/strapi-admin");
|
|
9
9
|
const designSystem = require("@strapi/design-system");
|
|
10
|
+
const v2 = require("@strapi/design-system/v2");
|
|
10
11
|
const icons = require("@strapi/icons");
|
|
11
|
-
const symbols = require("@strapi/icons/symbols");
|
|
12
12
|
const format = require("date-fns/format");
|
|
13
13
|
const dateFnsTz = require("date-fns-tz");
|
|
14
14
|
const reactIntl = require("react-intl");
|
|
@@ -16,8 +16,10 @@ 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
|
-
|
|
20
|
-
|
|
19
|
+
require("@reduxjs/toolkit/query");
|
|
20
|
+
require("axios");
|
|
21
|
+
require("@reduxjs/toolkit/query/react");
|
|
22
|
+
require("react-redux");
|
|
21
23
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
22
24
|
function _interopNamespace(e) {
|
|
23
25
|
if (e && e.__esModule)
|
|
@@ -41,36 +43,6 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
|
41
43
|
const format__default = /* @__PURE__ */ _interopDefault(format);
|
|
42
44
|
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
43
45
|
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
|
-
);
|
|
74
46
|
const RELEASE_SCHEMA = yup__namespace.object().shape({
|
|
75
47
|
name: yup__namespace.string().trim().required(),
|
|
76
48
|
scheduledAt: yup__namespace.string().nullable(),
|
|
@@ -308,11 +280,10 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
308
280
|
}
|
|
309
281
|
);
|
|
310
282
|
};
|
|
311
|
-
const
|
|
312
|
-
const LinkCard = styled__default.default(designSystem.Link)`
|
|
283
|
+
const LinkCard = styled__default.default(v2.Link)`
|
|
313
284
|
display: block;
|
|
314
285
|
`;
|
|
315
|
-
const RelativeTime = styled__default.default(RelativeTime
|
|
286
|
+
const RelativeTime = styled__default.default(helperPlugin.RelativeTime)`
|
|
316
287
|
display: inline-block;
|
|
317
288
|
&::first-letter {
|
|
318
289
|
text-transform: uppercase;
|
|
@@ -346,7 +317,7 @@ const getBadgeProps = (status) => {
|
|
|
346
317
|
const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
347
318
|
const { formatMessage } = reactIntl.useIntl();
|
|
348
319
|
if (isError) {
|
|
349
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
320
|
+
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {});
|
|
350
321
|
}
|
|
351
322
|
if (releases?.length === 0) {
|
|
352
323
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -361,7 +332,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
361
332
|
target: sectionTitle
|
|
362
333
|
}
|
|
363
334
|
),
|
|
364
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(
|
|
335
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.EmptyDocuments, { width: "10rem" })
|
|
365
336
|
}
|
|
366
337
|
);
|
|
367
338
|
}
|
|
@@ -411,26 +382,23 @@ const ReleasesPage = () => {
|
|
|
411
382
|
const tabRef = React__namespace.useRef(null);
|
|
412
383
|
const location = reactRouterDom.useLocation();
|
|
413
384
|
const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
|
|
414
|
-
const
|
|
385
|
+
const toggleNotification = helperPlugin.useNotification();
|
|
415
386
|
const { formatMessage } = reactIntl.useIntl();
|
|
416
|
-
const
|
|
417
|
-
const { formatAPIError } =
|
|
418
|
-
const [{ query }, setQuery] =
|
|
387
|
+
const { push, replace } = reactRouterDom.useHistory();
|
|
388
|
+
const { formatAPIError } = helperPlugin.useAPIErrorHandler();
|
|
389
|
+
const [{ query }, setQuery] = helperPlugin.useQueryParams();
|
|
419
390
|
const response = index.useGetReleasesQuery(query);
|
|
420
391
|
const [createRelease, { isLoading: isSubmittingForm }] = index.useCreateReleaseMutation();
|
|
421
|
-
const { getFeature } =
|
|
392
|
+
const { getFeature } = strapiAdmin.useLicenseLimits();
|
|
422
393
|
const { maximumReleases = 3 } = getFeature("cms-content-releases");
|
|
423
|
-
const { trackUsage } =
|
|
424
|
-
const {
|
|
425
|
-
allowedActions: { canCreate }
|
|
426
|
-
} = strapiAdmin.useRBAC(index.PERMISSIONS);
|
|
394
|
+
const { trackUsage } = helperPlugin.useTracking();
|
|
427
395
|
const { isLoading, isSuccess, isError } = response;
|
|
428
396
|
const activeTab = response?.currentData?.meta?.activeTab || "pending";
|
|
429
397
|
const activeTabIndex = ["pending", "done"].indexOf(activeTab);
|
|
430
398
|
React__namespace.useEffect(() => {
|
|
431
399
|
if (location?.state?.errors) {
|
|
432
400
|
toggleNotification({
|
|
433
|
-
type: "
|
|
401
|
+
type: "warning",
|
|
434
402
|
title: formatMessage({
|
|
435
403
|
id: "content-releases.pages.Releases.notification.error.title",
|
|
436
404
|
defaultMessage: "Your request could not be processed."
|
|
@@ -440,9 +408,9 @@ const ReleasesPage = () => {
|
|
|
440
408
|
defaultMessage: "Please try again or open another release."
|
|
441
409
|
})
|
|
442
410
|
});
|
|
443
|
-
|
|
411
|
+
replace({ state: null });
|
|
444
412
|
}
|
|
445
|
-
}, [formatMessage, location?.state?.errors,
|
|
413
|
+
}, [formatMessage, location?.state?.errors, replace, toggleNotification]);
|
|
446
414
|
React__namespace.useEffect(() => {
|
|
447
415
|
if (tabRef.current) {
|
|
448
416
|
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
@@ -452,7 +420,7 @@ const ReleasesPage = () => {
|
|
|
452
420
|
setReleaseModalShown((prev) => !prev);
|
|
453
421
|
};
|
|
454
422
|
if (isLoading) {
|
|
455
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
423
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoading, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
|
|
456
424
|
}
|
|
457
425
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
458
426
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
@@ -483,22 +451,22 @@ const ReleasesPage = () => {
|
|
|
483
451
|
})
|
|
484
452
|
});
|
|
485
453
|
trackUsage("didCreateRelease");
|
|
486
|
-
|
|
454
|
+
push(`/plugins/content-releases/${response2.data.data.id}`);
|
|
487
455
|
} else if (index.isAxiosError(response2.error)) {
|
|
488
456
|
toggleNotification({
|
|
489
|
-
type: "
|
|
457
|
+
type: "warning",
|
|
490
458
|
message: formatAPIError(response2.error)
|
|
491
459
|
});
|
|
492
460
|
} else {
|
|
493
461
|
toggleNotification({
|
|
494
|
-
type: "
|
|
462
|
+
type: "warning",
|
|
495
463
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
496
464
|
});
|
|
497
465
|
}
|
|
498
466
|
};
|
|
499
467
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { "aria-busy": isLoading, children: [
|
|
500
468
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
501
|
-
|
|
469
|
+
designSystem.HeaderLayout,
|
|
502
470
|
{
|
|
503
471
|
title: formatMessage({
|
|
504
472
|
id: "content-releases.pages.Releases.title",
|
|
@@ -508,7 +476,7 @@ const ReleasesPage = () => {
|
|
|
508
476
|
id: "content-releases.pages.Releases.header-subtitle",
|
|
509
477
|
defaultMessage: "Create and manage content updates"
|
|
510
478
|
}),
|
|
511
|
-
primaryAction:
|
|
479
|
+
primaryAction: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: index.PERMISSIONS.create, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
512
480
|
designSystem.Button,
|
|
513
481
|
{
|
|
514
482
|
startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
|
|
@@ -519,15 +487,15 @@ const ReleasesPage = () => {
|
|
|
519
487
|
defaultMessage: "New release"
|
|
520
488
|
})
|
|
521
489
|
}
|
|
522
|
-
)
|
|
490
|
+
) })
|
|
523
491
|
}
|
|
524
492
|
),
|
|
525
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
493
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
526
494
|
hasReachedMaximumPendingReleases && /* @__PURE__ */ jsxRuntime.jsx(
|
|
527
495
|
StyledAlert,
|
|
528
496
|
{
|
|
529
497
|
marginBottom: 6,
|
|
530
|
-
action: /* @__PURE__ */ jsxRuntime.jsx(
|
|
498
|
+
action: /* @__PURE__ */ jsxRuntime.jsx(v2.Link, { href: "https://strapi.io/pricing-cloud", isExternal: true, children: formatMessage({
|
|
531
499
|
id: "content-releases.pages.Releases.max-limit-reached.action",
|
|
532
500
|
defaultMessage: "Explore plans"
|
|
533
501
|
}) }),
|
|
@@ -598,17 +566,23 @@ const ReleasesPage = () => {
|
|
|
598
566
|
]
|
|
599
567
|
}
|
|
600
568
|
),
|
|
601
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
569
|
+
response.currentData?.meta?.pagination?.total ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
|
|
570
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
571
|
+
helperPlugin.PageSizeURLQuery,
|
|
572
|
+
{
|
|
573
|
+
options: ["8", "16", "32", "64"],
|
|
574
|
+
defaultValue: response?.currentData?.meta?.pagination?.pageSize.toString()
|
|
575
|
+
}
|
|
576
|
+
),
|
|
577
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
578
|
+
helperPlugin.PaginationURLQuery,
|
|
579
|
+
{
|
|
580
|
+
pagination: {
|
|
581
|
+
pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
)
|
|
585
|
+
] }) : null
|
|
612
586
|
] }) }),
|
|
613
587
|
releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
|
|
614
588
|
ReleaseModal,
|
|
@@ -627,7 +601,7 @@ const ReleaseInfoWrapper = styled__default.default(designSystem.Flex)`
|
|
|
627
601
|
border-bottom-left-radius: ${({ theme }) => theme.borderRadius};
|
|
628
602
|
border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
|
|
629
603
|
`;
|
|
630
|
-
const StyledMenuItem = styled__default.default(
|
|
604
|
+
const StyledMenuItem = styled__default.default(v2.Menu.Item)`
|
|
631
605
|
svg path {
|
|
632
606
|
fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
|
|
633
607
|
}
|
|
@@ -656,18 +630,14 @@ const TrashIcon = styled__default.default(icons.Trash)`
|
|
|
656
630
|
const TypographyMaxWidth = styled__default.default(designSystem.Typography)`
|
|
657
631
|
max-width: 300px;
|
|
658
632
|
`;
|
|
659
|
-
const EntryValidationText = ({ action, schema, entry }) => {
|
|
633
|
+
const EntryValidationText = ({ action, schema, components, entry }) => {
|
|
660
634
|
const { formatMessage } = reactIntl.useIntl();
|
|
661
|
-
const { validate } = strapiAdmin
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
skip: !schema
|
|
668
|
-
}
|
|
669
|
-
);
|
|
670
|
-
const errors = validate(entry) ?? {};
|
|
635
|
+
const { validate } = strapiAdmin.unstable_useDocument();
|
|
636
|
+
const { errors } = validate(entry, {
|
|
637
|
+
contentType: schema,
|
|
638
|
+
components,
|
|
639
|
+
isCreatingEntry: false
|
|
640
|
+
});
|
|
671
641
|
if (Object.keys(errors).length > 0) {
|
|
672
642
|
const validationErrorsMessages = Object.entries(errors).map(
|
|
673
643
|
([key, value]) => formatMessage(
|
|
@@ -676,13 +646,13 @@ const EntryValidationText = ({ action, schema, entry }) => {
|
|
|
676
646
|
)
|
|
677
647
|
).join(" ");
|
|
678
648
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
|
679
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
649
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { color: "danger600", as: icons.CrossCircle }),
|
|
680
650
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsxRuntime.jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
|
|
681
651
|
] });
|
|
682
652
|
}
|
|
683
653
|
if (action == "publish") {
|
|
684
654
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
|
685
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
655
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { color: "success600", as: icons.CheckCircle }),
|
|
686
656
|
entry.publishedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
687
657
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
|
|
688
658
|
defaultMessage: "Already published"
|
|
@@ -693,7 +663,7 @@ const EntryValidationText = ({ action, schema, entry }) => {
|
|
|
693
663
|
] });
|
|
694
664
|
}
|
|
695
665
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
|
696
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
666
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { color: "success600", as: icons.CheckCircle }),
|
|
697
667
|
!entry.publishedAt ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
698
668
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-unpublished",
|
|
699
669
|
defaultMessage: "Already unpublished"
|
|
@@ -715,22 +685,18 @@ const ReleaseDetailsLayout = ({
|
|
|
715
685
|
isLoading: isLoadingDetails,
|
|
716
686
|
isError,
|
|
717
687
|
error
|
|
718
|
-
} = index.useGetReleaseQuery(
|
|
719
|
-
{ id: releaseId },
|
|
720
|
-
{
|
|
721
|
-
skip: !releaseId
|
|
722
|
-
}
|
|
723
|
-
);
|
|
688
|
+
} = index.useGetReleaseQuery({ id: releaseId });
|
|
724
689
|
const [publishRelease, { isLoading: isPublishing }] = index.usePublishReleaseMutation();
|
|
725
|
-
const
|
|
726
|
-
const { formatAPIError } =
|
|
727
|
-
const {
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
const
|
|
690
|
+
const toggleNotification = helperPlugin.useNotification();
|
|
691
|
+
const { formatAPIError } = helperPlugin.useAPIErrorHandler();
|
|
692
|
+
const {
|
|
693
|
+
allowedActions: { canUpdate, canDelete }
|
|
694
|
+
} = helperPlugin.useRBAC(index.PERMISSIONS);
|
|
695
|
+
const dispatch = index.useTypedDispatch();
|
|
696
|
+
const { trackUsage } = helperPlugin.useTracking();
|
|
731
697
|
const release = data?.data;
|
|
732
|
-
const handlePublishRelease =
|
|
733
|
-
const response = await publishRelease({ id });
|
|
698
|
+
const handlePublishRelease = async () => {
|
|
699
|
+
const response = await publishRelease({ id: releaseId });
|
|
734
700
|
if ("data" in response) {
|
|
735
701
|
toggleNotification({
|
|
736
702
|
type: "success",
|
|
@@ -747,12 +713,12 @@ const ReleaseDetailsLayout = ({
|
|
|
747
713
|
});
|
|
748
714
|
} else if (index.isAxiosError(response.error)) {
|
|
749
715
|
toggleNotification({
|
|
750
|
-
type: "
|
|
716
|
+
type: "warning",
|
|
751
717
|
message: formatAPIError(response.error)
|
|
752
718
|
});
|
|
753
719
|
} else {
|
|
754
720
|
toggleNotification({
|
|
755
|
-
type: "
|
|
721
|
+
type: "warning",
|
|
756
722
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
757
723
|
});
|
|
758
724
|
}
|
|
@@ -778,19 +744,21 @@ const ReleaseDetailsLayout = ({
|
|
|
778
744
|
return release.createdBy.email;
|
|
779
745
|
};
|
|
780
746
|
if (isLoadingDetails) {
|
|
781
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
747
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoadingDetails, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
|
|
782
748
|
}
|
|
783
749
|
if (isError || !release) {
|
|
784
750
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
785
|
-
reactRouterDom.
|
|
751
|
+
reactRouterDom.Redirect,
|
|
786
752
|
{
|
|
787
|
-
to:
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
753
|
+
to: {
|
|
754
|
+
pathname: "/plugins/content-releases",
|
|
755
|
+
state: {
|
|
756
|
+
errors: [
|
|
757
|
+
{
|
|
758
|
+
code: error?.code
|
|
759
|
+
}
|
|
760
|
+
]
|
|
761
|
+
}
|
|
794
762
|
}
|
|
795
763
|
}
|
|
796
764
|
);
|
|
@@ -827,18 +795,21 @@ const ReleaseDetailsLayout = ({
|
|
|
827
795
|
) : "";
|
|
828
796
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { "aria-busy": isLoadingDetails, children: [
|
|
829
797
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
830
|
-
|
|
798
|
+
designSystem.HeaderLayout,
|
|
831
799
|
{
|
|
832
800
|
title: release.name,
|
|
833
801
|
subtitle: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, lineHeight: 6, children: [
|
|
834
802
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
|
|
835
803
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { ...getBadgeProps(release.status), children: release.status })
|
|
836
804
|
] }),
|
|
837
|
-
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(
|
|
805
|
+
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Link, { startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
|
|
806
|
+
id: "global.back",
|
|
807
|
+
defaultMessage: "Back"
|
|
808
|
+
}) }),
|
|
838
809
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
|
839
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
810
|
+
/* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
|
|
840
811
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
841
|
-
|
|
812
|
+
v2.Menu.Trigger,
|
|
842
813
|
{
|
|
843
814
|
as: designSystem.IconButton,
|
|
844
815
|
paddingLeft: 2,
|
|
@@ -851,7 +822,7 @@ const ReleaseDetailsLayout = ({
|
|
|
851
822
|
variant: "tertiary"
|
|
852
823
|
}
|
|
853
824
|
),
|
|
854
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
825
|
+
/* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children: [
|
|
855
826
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
856
827
|
designSystem.Flex,
|
|
857
828
|
{
|
|
@@ -900,7 +871,7 @@ const ReleaseDetailsLayout = ({
|
|
|
900
871
|
defaultMessage: "Created"
|
|
901
872
|
}) }),
|
|
902
873
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", color: "neutral300", children: [
|
|
903
|
-
/* @__PURE__ */ jsxRuntime.jsx(RelativeTime
|
|
874
|
+
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.RelativeTime, { timestamp: new Date(release.createdAt) }),
|
|
904
875
|
formatMessage(
|
|
905
876
|
{
|
|
906
877
|
id: "content-releases.header.actions.created.description",
|
|
@@ -918,12 +889,12 @@ const ReleaseDetailsLayout = ({
|
|
|
918
889
|
id: "content-releases.header.actions.refresh",
|
|
919
890
|
defaultMessage: "Refresh"
|
|
920
891
|
}) }),
|
|
921
|
-
|
|
892
|
+
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPermissions, { permissions: index.PERMISSIONS.publish, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
922
893
|
designSystem.Button,
|
|
923
894
|
{
|
|
924
895
|
size: "S",
|
|
925
896
|
variant: "default",
|
|
926
|
-
onClick: handlePublishRelease
|
|
897
|
+
onClick: handlePublishRelease,
|
|
927
898
|
loading: isPublishing,
|
|
928
899
|
disabled: release.actions.meta.count === 0,
|
|
929
900
|
children: formatMessage({
|
|
@@ -931,7 +902,7 @@ const ReleaseDetailsLayout = ({
|
|
|
931
902
|
defaultMessage: "Publish"
|
|
932
903
|
})
|
|
933
904
|
}
|
|
934
|
-
)
|
|
905
|
+
) })
|
|
935
906
|
] })
|
|
936
907
|
}
|
|
937
908
|
),
|
|
@@ -958,11 +929,27 @@ const getGroupByOptionLabel = (value) => {
|
|
|
958
929
|
defaultMessage: "Content-Types"
|
|
959
930
|
};
|
|
960
931
|
};
|
|
961
|
-
const
|
|
932
|
+
const DEFAULT_RELEASE_DETAILS_HEADER = [
|
|
933
|
+
{
|
|
934
|
+
key: "__name__",
|
|
935
|
+
fieldSchema: { type: "string" },
|
|
936
|
+
metadatas: {
|
|
937
|
+
label: {
|
|
938
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
939
|
+
defaultMessage: "name"
|
|
940
|
+
},
|
|
941
|
+
searchable: false,
|
|
942
|
+
sortable: false
|
|
943
|
+
},
|
|
944
|
+
name: "name"
|
|
945
|
+
}
|
|
946
|
+
];
|
|
947
|
+
const ReleaseDetailsBody = () => {
|
|
962
948
|
const { formatMessage } = reactIntl.useIntl();
|
|
963
|
-
const
|
|
964
|
-
const {
|
|
965
|
-
const
|
|
949
|
+
const { releaseId } = reactRouterDom.useParams();
|
|
950
|
+
const [{ query }, setQuery] = helperPlugin.useQueryParams();
|
|
951
|
+
const toggleNotification = helperPlugin.useNotification();
|
|
952
|
+
const { formatAPIError } = helperPlugin.useAPIErrorHandler();
|
|
966
953
|
const {
|
|
967
954
|
data: releaseData,
|
|
968
955
|
isLoading: isReleaseLoading,
|
|
@@ -971,18 +958,15 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
971
958
|
} = index.useGetReleaseQuery({ id: releaseId });
|
|
972
959
|
const {
|
|
973
960
|
allowedActions: { canUpdate }
|
|
974
|
-
} =
|
|
975
|
-
const runHookWaterfall =
|
|
976
|
-
const {
|
|
961
|
+
} = helperPlugin.useRBAC(index.PERMISSIONS);
|
|
962
|
+
const { runHookWaterfall } = helperPlugin.useStrapiApp();
|
|
963
|
+
const {
|
|
964
|
+
displayedHeaders,
|
|
965
|
+
hasI18nEnabled
|
|
966
|
+
} = runHookWaterfall(
|
|
977
967
|
"ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
|
|
978
968
|
{
|
|
979
|
-
displayedHeaders:
|
|
980
|
-
label: formatMessage({
|
|
981
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
982
|
-
defaultMessage: "locale"
|
|
983
|
-
}),
|
|
984
|
-
name: "locale"
|
|
985
|
-
},
|
|
969
|
+
displayedHeaders: DEFAULT_RELEASE_DETAILS_HEADER,
|
|
986
970
|
hasI18nEnabled: false
|
|
987
971
|
}
|
|
988
972
|
);
|
|
@@ -1016,19 +1000,19 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1016
1000
|
if ("error" in response) {
|
|
1017
1001
|
if (index.isAxiosError(response.error)) {
|
|
1018
1002
|
toggleNotification({
|
|
1019
|
-
type: "
|
|
1003
|
+
type: "warning",
|
|
1020
1004
|
message: formatAPIError(response.error)
|
|
1021
1005
|
});
|
|
1022
1006
|
} else {
|
|
1023
1007
|
toggleNotification({
|
|
1024
|
-
type: "
|
|
1008
|
+
type: "warning",
|
|
1025
1009
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1026
1010
|
});
|
|
1027
1011
|
}
|
|
1028
1012
|
}
|
|
1029
1013
|
};
|
|
1030
1014
|
if (isLoading || isReleaseLoading) {
|
|
1031
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1015
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
|
|
1032
1016
|
}
|
|
1033
1017
|
const releaseActions = data?.data;
|
|
1034
1018
|
const releaseMeta = data?.meta;
|
|
@@ -1047,24 +1031,30 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1047
1031
|
});
|
|
1048
1032
|
}
|
|
1049
1033
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1050
|
-
reactRouterDom.
|
|
1034
|
+
reactRouterDom.Redirect,
|
|
1051
1035
|
{
|
|
1052
|
-
to:
|
|
1053
|
-
|
|
1054
|
-
|
|
1036
|
+
to: {
|
|
1037
|
+
pathname: "/plugins/content-releases",
|
|
1038
|
+
state: {
|
|
1039
|
+
errors: errorsArray
|
|
1040
|
+
}
|
|
1055
1041
|
}
|
|
1056
1042
|
}
|
|
1057
1043
|
);
|
|
1058
1044
|
}
|
|
1059
1045
|
if (isError || !releaseActions) {
|
|
1060
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1046
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {}) });
|
|
1061
1047
|
}
|
|
1062
1048
|
if (Object.keys(releaseActions).length === 0) {
|
|
1063
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1064
|
-
|
|
1049
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1050
|
+
helperPlugin.NoContent,
|
|
1065
1051
|
{
|
|
1052
|
+
content: {
|
|
1053
|
+
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1054
|
+
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1055
|
+
},
|
|
1066
1056
|
action: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1067
|
-
|
|
1057
|
+
v2.LinkButton,
|
|
1068
1058
|
{
|
|
1069
1059
|
as: reactRouterDom.Link,
|
|
1070
1060
|
to: {
|
|
@@ -1077,59 +1067,19 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1077
1067
|
defaultMessage: "Open the Content Manager"
|
|
1078
1068
|
})
|
|
1079
1069
|
}
|
|
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
|
-
})
|
|
1070
|
+
)
|
|
1086
1071
|
}
|
|
1087
1072
|
) });
|
|
1088
1073
|
}
|
|
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
1074
|
const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
|
|
1127
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1075
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1128
1076
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1129
1077
|
designSystem.SingleSelect,
|
|
1130
1078
|
{
|
|
1131
|
-
|
|
1132
|
-
|
|
1079
|
+
"aria-label": formatMessage({
|
|
1080
|
+
id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
|
|
1081
|
+
defaultMessage: "Group by"
|
|
1082
|
+
}),
|
|
1133
1083
|
customizeContent: (value) => formatMessage(
|
|
1134
1084
|
{
|
|
1135
1085
|
id: `content-releases.pages.ReleaseDetails.groupBy.label`,
|
|
@@ -1147,18 +1097,62 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1147
1097
|
Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
|
|
1148
1098
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { role: "separator", "aria-label": key, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { children: key }) }),
|
|
1149
1099
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1150
|
-
|
|
1100
|
+
helperPlugin.Table.Root,
|
|
1151
1101
|
{
|
|
1152
1102
|
rows: releaseActions[key].map((item) => ({
|
|
1153
1103
|
...item,
|
|
1154
1104
|
id: Number(item.entry.id)
|
|
1155
1105
|
})),
|
|
1156
|
-
|
|
1157
|
-
isLoading
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1161
|
-
|
|
1106
|
+
colCount: releaseActions[key].length,
|
|
1107
|
+
isLoading,
|
|
1108
|
+
isFetching,
|
|
1109
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Content, { children: [
|
|
1110
|
+
/* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Head, { children: [
|
|
1111
|
+
displayedHeaders.map(({ key: key2, fieldSchema, metadatas, name }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1112
|
+
helperPlugin.Table.HeaderCell,
|
|
1113
|
+
{
|
|
1114
|
+
fieldSchemaType: fieldSchema.type,
|
|
1115
|
+
label: formatMessage(metadatas.label),
|
|
1116
|
+
name
|
|
1117
|
+
},
|
|
1118
|
+
key2
|
|
1119
|
+
)),
|
|
1120
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1121
|
+
helperPlugin.Table.HeaderCell,
|
|
1122
|
+
{
|
|
1123
|
+
fieldSchemaType: "string",
|
|
1124
|
+
label: formatMessage({
|
|
1125
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1126
|
+
defaultMessage: "content-type"
|
|
1127
|
+
}),
|
|
1128
|
+
name: "content-type"
|
|
1129
|
+
}
|
|
1130
|
+
),
|
|
1131
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1132
|
+
helperPlugin.Table.HeaderCell,
|
|
1133
|
+
{
|
|
1134
|
+
fieldSchemaType: "string",
|
|
1135
|
+
label: formatMessage({
|
|
1136
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1137
|
+
defaultMessage: "action"
|
|
1138
|
+
}),
|
|
1139
|
+
name: "action"
|
|
1140
|
+
}
|
|
1141
|
+
),
|
|
1142
|
+
!release.releasedAt && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1143
|
+
helperPlugin.Table.HeaderCell,
|
|
1144
|
+
{
|
|
1145
|
+
fieldSchemaType: "string",
|
|
1146
|
+
label: formatMessage({
|
|
1147
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1148
|
+
defaultMessage: "status"
|
|
1149
|
+
}),
|
|
1150
|
+
name: "status"
|
|
1151
|
+
}
|
|
1152
|
+
)
|
|
1153
|
+
] }),
|
|
1154
|
+
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.LoadingBody, {}),
|
|
1155
|
+
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.Body, { children: releaseActions[key].map(
|
|
1162
1156
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
|
1163
1157
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1164
1158
|
hasI18nEnabled && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
@@ -1215,39 +1209,34 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1215
1209
|
}
|
|
1216
1210
|
)
|
|
1217
1211
|
] }, `releases-group-${key}`)),
|
|
1218
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
)
|
|
1212
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
|
|
1213
|
+
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.PageSizeURLQuery, { defaultValue: releaseMeta?.pagination?.pageSize.toString() }),
|
|
1214
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1215
|
+
helperPlugin.PaginationURLQuery,
|
|
1216
|
+
{
|
|
1217
|
+
pagination: {
|
|
1218
|
+
pageCount: releaseMeta?.pagination?.pageCount || 0
|
|
1219
|
+
}
|
|
1220
|
+
}
|
|
1221
|
+
)
|
|
1222
|
+
] })
|
|
1229
1223
|
] }) });
|
|
1230
1224
|
};
|
|
1231
1225
|
const ReleaseDetailsPage = () => {
|
|
1232
1226
|
const { formatMessage } = reactIntl.useIntl();
|
|
1233
1227
|
const { releaseId } = reactRouterDom.useParams();
|
|
1234
|
-
const
|
|
1235
|
-
const { formatAPIError } =
|
|
1236
|
-
const
|
|
1228
|
+
const toggleNotification = helperPlugin.useNotification();
|
|
1229
|
+
const { formatAPIError } = helperPlugin.useAPIErrorHandler();
|
|
1230
|
+
const { replace } = reactRouterDom.useHistory();
|
|
1237
1231
|
const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
|
|
1238
1232
|
const [showWarningSubmit, setWarningSubmit] = React__namespace.useState(false);
|
|
1239
1233
|
const {
|
|
1240
1234
|
isLoading: isLoadingDetails,
|
|
1241
1235
|
data,
|
|
1242
1236
|
isSuccess: isSuccessDetails
|
|
1243
|
-
} = index.useGetReleaseQuery(
|
|
1244
|
-
{ id: releaseId },
|
|
1245
|
-
{
|
|
1246
|
-
skip: !releaseId
|
|
1247
|
-
}
|
|
1248
|
-
);
|
|
1237
|
+
} = index.useGetReleaseQuery({ id: releaseId });
|
|
1249
1238
|
const [updateRelease, { isLoading: isSubmittingForm }] = index.useUpdateReleaseMutation();
|
|
1250
|
-
const [deleteRelease] = index.useDeleteReleaseMutation();
|
|
1239
|
+
const [deleteRelease, { isLoading: isDeletingRelease }] = index.useDeleteReleaseMutation();
|
|
1251
1240
|
const toggleEditReleaseModal = () => {
|
|
1252
1241
|
setReleaseModalShown((prev) => !prev);
|
|
1253
1242
|
};
|
|
@@ -1258,13 +1247,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1258
1247
|
{
|
|
1259
1248
|
toggleEditReleaseModal,
|
|
1260
1249
|
toggleWarningSubmit,
|
|
1261
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1250
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) })
|
|
1262
1251
|
}
|
|
1263
1252
|
);
|
|
1264
1253
|
}
|
|
1265
|
-
if (!releaseId) {
|
|
1266
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: ".." });
|
|
1267
|
-
}
|
|
1268
1254
|
const releaseData = isSuccessDetails && data?.data || null;
|
|
1269
1255
|
const title = releaseData?.name || "";
|
|
1270
1256
|
const timezone = releaseData?.timezone ?? null;
|
|
@@ -1289,12 +1275,12 @@ const ReleaseDetailsPage = () => {
|
|
|
1289
1275
|
toggleEditReleaseModal();
|
|
1290
1276
|
} else if (index.isAxiosError(response.error)) {
|
|
1291
1277
|
toggleNotification({
|
|
1292
|
-
type: "
|
|
1278
|
+
type: "warning",
|
|
1293
1279
|
message: formatAPIError(response.error)
|
|
1294
1280
|
});
|
|
1295
1281
|
} else {
|
|
1296
1282
|
toggleNotification({
|
|
1297
|
-
type: "
|
|
1283
|
+
type: "warning",
|
|
1298
1284
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1299
1285
|
});
|
|
1300
1286
|
}
|
|
@@ -1304,15 +1290,15 @@ const ReleaseDetailsPage = () => {
|
|
|
1304
1290
|
id: releaseId
|
|
1305
1291
|
});
|
|
1306
1292
|
if ("data" in response) {
|
|
1307
|
-
|
|
1293
|
+
replace("/plugins/content-releases");
|
|
1308
1294
|
} else if (index.isAxiosError(response.error)) {
|
|
1309
1295
|
toggleNotification({
|
|
1310
|
-
type: "
|
|
1296
|
+
type: "warning",
|
|
1311
1297
|
message: formatAPIError(response.error)
|
|
1312
1298
|
});
|
|
1313
1299
|
} else {
|
|
1314
1300
|
toggleNotification({
|
|
1315
|
-
type: "
|
|
1301
|
+
type: "warning",
|
|
1316
1302
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1317
1303
|
});
|
|
1318
1304
|
}
|
|
@@ -1323,7 +1309,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1323
1309
|
toggleEditReleaseModal,
|
|
1324
1310
|
toggleWarningSubmit,
|
|
1325
1311
|
children: [
|
|
1326
|
-
/* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, {
|
|
1312
|
+
/* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, {}),
|
|
1327
1313
|
releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1328
1314
|
ReleaseModal,
|
|
1329
1315
|
{
|
|
@@ -1341,15 +1327,16 @@ const ReleaseDetailsPage = () => {
|
|
|
1341
1327
|
}
|
|
1342
1328
|
),
|
|
1343
1329
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1344
|
-
|
|
1330
|
+
helperPlugin.ConfirmDialog,
|
|
1345
1331
|
{
|
|
1346
|
-
|
|
1347
|
-
onClose: toggleWarningSubmit,
|
|
1348
|
-
onConfirm: handleDeleteRelease,
|
|
1349
|
-
children: formatMessage({
|
|
1332
|
+
bodyText: {
|
|
1350
1333
|
id: "content-releases.dialog.confirmation-message",
|
|
1351
1334
|
defaultMessage: "Are you sure you want to delete this release?"
|
|
1352
|
-
}
|
|
1335
|
+
},
|
|
1336
|
+
isOpen: showWarningSubmit,
|
|
1337
|
+
isConfirmButtonLoading: isDeletingRelease,
|
|
1338
|
+
onToggleDialog: toggleWarningSubmit,
|
|
1339
|
+
onConfirm: handleDeleteRelease
|
|
1353
1340
|
}
|
|
1354
1341
|
)
|
|
1355
1342
|
]
|
|
@@ -1357,10 +1344,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1357
1344
|
);
|
|
1358
1345
|
};
|
|
1359
1346
|
const App = () => {
|
|
1360
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1361
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, {
|
|
1362
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, {
|
|
1347
|
+
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Switch, { children: [
|
|
1348
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}`, component: ReleasesPage }),
|
|
1349
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}/:releaseId`, component: ReleaseDetailsPage })
|
|
1363
1350
|
] }) });
|
|
1364
1351
|
};
|
|
1365
1352
|
exports.App = App;
|
|
1366
|
-
//# sourceMappingURL=App-
|
|
1353
|
+
//# sourceMappingURL=App-dLXY5ei3.js.map
|