@strapi/content-releases 0.0.0-experimental.cae3a5a17d131a6f59673b62d01cfac869ea9cc2 → 0.0.0-experimental.d362bf200f5f9359a4bbd4a549603de5ee1f04ca
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-1LckaIGY.js +1352 -0
- package/dist/_chunks/App-1LckaIGY.js.map +1 -0
- package/dist/_chunks/App-X01LBg5V.mjs +1329 -0
- package/dist/_chunks/App-X01LBg5V.mjs.map +1 -0
- package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs +51 -0
- package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +1 -0
- package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js +51 -0
- package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +1 -0
- package/dist/_chunks/{en-SOqjCdyh.mjs → en-RdapH-9X.mjs} +18 -7
- package/dist/_chunks/en-RdapH-9X.mjs.map +1 -0
- package/dist/_chunks/{en-2DuPv5k0.js → en-faJDuv3q.js} +18 -7
- package/dist/_chunks/en-faJDuv3q.js.map +1 -0
- package/dist/_chunks/{index-bsuc8ZwZ.mjs → index-OD9AlD-6.mjs} +233 -107
- package/dist/_chunks/index-OD9AlD-6.mjs.map +1 -0
- package/dist/_chunks/{index-_lT-gI3M.js → index-cYWov2wa.js} +226 -100
- package/dist/_chunks/index-cYWov2wa.js.map +1 -0
- package/dist/admin/index.js +1 -15
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -15
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/CMReleasesContainer.d.ts +1 -0
- package/dist/admin/src/components/RelativeTime.d.ts +28 -0
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
- package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
- package/dist/admin/src/components/ReleaseModal.d.ts +16 -0
- package/dist/admin/src/constants.d.ts +58 -0
- package/dist/admin/src/index.d.ts +3 -0
- package/dist/admin/src/pages/App.d.ts +1 -0
- package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
- package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
- package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
- package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
- package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
- package/dist/admin/src/pluginId.d.ts +1 -0
- package/dist/admin/src/services/axios.d.ts +29 -0
- package/dist/admin/src/services/release.d.ts +369 -0
- package/dist/admin/src/store/hooks.d.ts +7 -0
- package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
- package/dist/admin/src/utils/time.d.ts +1 -0
- package/dist/server/index.js +1014 -417
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +1014 -417
- 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 +19 -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 +11 -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 +2095 -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 +166 -0
- package/dist/shared/contracts/releases.d.ts.map +1 -0
- package/dist/shared/types.d.ts +24 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/validation-schemas.d.ts +2 -0
- package/dist/shared/validation-schemas.d.ts.map +1 -0
- package/package.json +25 -29
- package/dist/_chunks/App-_Jj3tWts.mjs +0 -1053
- package/dist/_chunks/App-_Jj3tWts.mjs.map +0 -1
- package/dist/_chunks/App-iqqoPnBO.js +0 -1075
- package/dist/_chunks/App-iqqoPnBO.js.map +0 -1
- package/dist/_chunks/en-2DuPv5k0.js.map +0 -1
- package/dist/_chunks/en-SOqjCdyh.mjs.map +0 -1
- package/dist/_chunks/index-_lT-gI3M.js.map +0 -1
- package/dist/_chunks/index-bsuc8ZwZ.mjs.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Cross, Pencil, More, Plus, PaperPlane } from "@strapi/icons";
|
|
1
|
+
import { Cross, Pencil, More, Plus, EmptyDocuments, PaperPlane } from "@strapi/icons";
|
|
3
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
3
|
import * as React from "react";
|
|
5
4
|
import { skipToken } from "@reduxjs/toolkit/query";
|
|
6
|
-
import {
|
|
5
|
+
import { getFetchClient, useNotification, useAPIErrorHandler, useRBAC, useAuth, unstable_useDocument, useQueryParams } from "@strapi/admin/strapi-admin";
|
|
6
|
+
import { IconButton, Flex, Icon, Typography, Field, FieldLabel, VisuallyHidden, FieldInput, Box, Button, ModalLayout, ModalHeader, ModalBody, SingleSelect, SingleSelectOption, ModalFooter, EmptyStateLayout } from "@strapi/design-system";
|
|
7
7
|
import { Menu, Link, LinkButton } from "@strapi/design-system/v2";
|
|
8
8
|
import { isAxiosError as isAxiosError$1 } from "axios";
|
|
9
9
|
import { Formik, Form } from "formik";
|
|
@@ -12,7 +12,6 @@ import { NavLink, useParams, Link as Link$1 } from "react-router-dom";
|
|
|
12
12
|
import * as yup from "yup";
|
|
13
13
|
import { createApi } from "@reduxjs/toolkit/query/react";
|
|
14
14
|
import styled from "styled-components";
|
|
15
|
-
import { useDispatch, useSelector } from "react-redux";
|
|
16
15
|
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
|
17
16
|
const v = glob[path];
|
|
18
17
|
if (v) {
|
|
@@ -288,8 +287,9 @@ const releaseApi = createApi({
|
|
|
288
287
|
method: "DELETE"
|
|
289
288
|
};
|
|
290
289
|
},
|
|
291
|
-
invalidatesTags: [
|
|
290
|
+
invalidatesTags: (result, error, arg) => [
|
|
292
291
|
{ type: "Release", id: "LIST" },
|
|
292
|
+
{ type: "Release", id: arg.params.releaseId },
|
|
293
293
|
{ type: "ReleaseAction", id: "LIST" }
|
|
294
294
|
]
|
|
295
295
|
}),
|
|
@@ -309,7 +309,7 @@ const releaseApi = createApi({
|
|
|
309
309
|
method: "DELETE"
|
|
310
310
|
};
|
|
311
311
|
},
|
|
312
|
-
invalidatesTags: (
|
|
312
|
+
invalidatesTags: () => [{ type: "Release", id: "LIST" }]
|
|
313
313
|
})
|
|
314
314
|
};
|
|
315
315
|
}
|
|
@@ -327,8 +327,22 @@ const {
|
|
|
327
327
|
useDeleteReleaseActionMutation,
|
|
328
328
|
useDeleteReleaseMutation
|
|
329
329
|
} = releaseApi;
|
|
330
|
-
const
|
|
331
|
-
|
|
330
|
+
const getTimezoneOffset = (timezone, date) => {
|
|
331
|
+
try {
|
|
332
|
+
const offsetPart = new Intl.DateTimeFormat("en", {
|
|
333
|
+
timeZone: timezone,
|
|
334
|
+
timeZoneName: "longOffset"
|
|
335
|
+
}).formatToParts(date).find((part) => part.type === "timeZoneName");
|
|
336
|
+
const offset = offsetPart ? offsetPart.value : "";
|
|
337
|
+
let utcOffset = offset.replace("GMT", "UTC");
|
|
338
|
+
if (!utcOffset.includes("+") && !utcOffset.includes("-")) {
|
|
339
|
+
utcOffset = `${utcOffset}+00:00`;
|
|
340
|
+
}
|
|
341
|
+
return utcOffset;
|
|
342
|
+
} catch (error) {
|
|
343
|
+
return "";
|
|
344
|
+
}
|
|
345
|
+
};
|
|
332
346
|
const StyledMenuItem = styled(Menu.Item)`
|
|
333
347
|
&:hover {
|
|
334
348
|
background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
|
|
@@ -365,9 +379,12 @@ const StyledIconButton = styled(IconButton)`
|
|
|
365
379
|
`;
|
|
366
380
|
const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
367
381
|
const { formatMessage } = useIntl();
|
|
368
|
-
const toggleNotification = useNotification();
|
|
382
|
+
const { toggleNotification } = useNotification();
|
|
369
383
|
const { formatAPIError } = useAPIErrorHandler();
|
|
370
384
|
const [deleteReleaseAction] = useDeleteReleaseActionMutation();
|
|
385
|
+
const {
|
|
386
|
+
allowedActions: { canDeleteAction }
|
|
387
|
+
} = useRBAC(PERMISSIONS);
|
|
371
388
|
const handleDeleteAction = async () => {
|
|
372
389
|
const response = await deleteReleaseAction({
|
|
373
390
|
params: { releaseId, actionId }
|
|
@@ -385,24 +402,27 @@ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
|
385
402
|
if ("error" in response) {
|
|
386
403
|
if (isAxiosError$1(response.error)) {
|
|
387
404
|
toggleNotification({
|
|
388
|
-
type: "
|
|
405
|
+
type: "danger",
|
|
389
406
|
message: formatAPIError(response.error)
|
|
390
407
|
});
|
|
391
408
|
} else {
|
|
392
409
|
toggleNotification({
|
|
393
|
-
type: "
|
|
410
|
+
type: "danger",
|
|
394
411
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
395
412
|
});
|
|
396
413
|
}
|
|
397
414
|
}
|
|
398
415
|
};
|
|
399
|
-
|
|
400
|
-
|
|
416
|
+
if (!canDeleteAction) {
|
|
417
|
+
return null;
|
|
418
|
+
}
|
|
419
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
420
|
+
/* @__PURE__ */ jsx(Icon, { as: Cross, width: 3, height: 3 }),
|
|
401
421
|
/* @__PURE__ */ jsx(Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
|
|
402
422
|
id: "content-releases.content-manager-edit-view.remove-from-release",
|
|
403
423
|
defaultMessage: "Remove from release"
|
|
404
424
|
}) })
|
|
405
|
-
] }) })
|
|
425
|
+
] }) });
|
|
406
426
|
};
|
|
407
427
|
const ReleaseActionEntryLinkItem = ({
|
|
408
428
|
contentTypeUid,
|
|
@@ -410,47 +430,66 @@ const ReleaseActionEntryLinkItem = ({
|
|
|
410
430
|
locale
|
|
411
431
|
}) => {
|
|
412
432
|
const { formatMessage } = useIntl();
|
|
413
|
-
const
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
!
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
433
|
+
const userPermissions = useAuth("ReleaseActionEntryLinkItem", (state) => state.permissions);
|
|
434
|
+
const canUpdateEntryForLocale = React.useMemo(() => {
|
|
435
|
+
const updatePermissions = userPermissions.find(
|
|
436
|
+
(permission) => permission.subject === contentTypeUid && permission.action === "plugin::content-manager.explorer.update"
|
|
437
|
+
);
|
|
438
|
+
if (!updatePermissions) {
|
|
439
|
+
return false;
|
|
440
|
+
}
|
|
441
|
+
return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
|
|
442
|
+
}, [contentTypeUid, locale, userPermissions]);
|
|
443
|
+
const {
|
|
444
|
+
allowedActions: { canUpdateContentType }
|
|
445
|
+
} = useRBAC({
|
|
446
|
+
updateContentType: [
|
|
447
|
+
{
|
|
448
|
+
action: "plugin::content-manager.explorer.update",
|
|
449
|
+
subject: contentTypeUid
|
|
450
|
+
}
|
|
451
|
+
]
|
|
452
|
+
});
|
|
453
|
+
if (!canUpdateContentType || !canUpdateEntryForLocale) {
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { children: /* @__PURE__ */ jsx(
|
|
457
|
+
Link,
|
|
424
458
|
{
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
children:
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
to: {
|
|
436
|
-
pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
|
|
437
|
-
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
438
|
-
},
|
|
439
|
-
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, padding: 1 }),
|
|
440
|
-
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
441
|
-
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
442
|
-
defaultMessage: "Edit entry"
|
|
443
|
-
}) })
|
|
444
|
-
}
|
|
445
|
-
) })
|
|
459
|
+
as: NavLink,
|
|
460
|
+
to: {
|
|
461
|
+
pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
|
|
462
|
+
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
463
|
+
},
|
|
464
|
+
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
|
|
465
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
466
|
+
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
467
|
+
defaultMessage: "Edit entry"
|
|
468
|
+
}) })
|
|
446
469
|
}
|
|
447
|
-
);
|
|
470
|
+
) });
|
|
471
|
+
};
|
|
472
|
+
const EditReleaseItem = ({ releaseId }) => {
|
|
473
|
+
const { formatMessage } = useIntl();
|
|
474
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { children: /* @__PURE__ */ jsx(
|
|
475
|
+
Link,
|
|
476
|
+
{
|
|
477
|
+
href: `/admin/plugins/content-releases/${releaseId}`,
|
|
478
|
+
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
|
|
479
|
+
isExternal: false,
|
|
480
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
481
|
+
id: "content-releases.content-manager-edit-view.edit-release",
|
|
482
|
+
defaultMessage: "Edit release"
|
|
483
|
+
}) })
|
|
484
|
+
}
|
|
485
|
+
) });
|
|
448
486
|
};
|
|
449
487
|
const Root = ({ children, hasTriggerBorder = false }) => {
|
|
450
488
|
const { formatMessage } = useIntl();
|
|
489
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
451
490
|
return (
|
|
452
491
|
// A user can access the dropdown if they have permissions to delete a release-action OR update a release
|
|
453
|
-
|
|
492
|
+
allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
454
493
|
/* @__PURE__ */ jsx(
|
|
455
494
|
Menu.Trigger,
|
|
456
495
|
{
|
|
@@ -465,11 +504,12 @@ const Root = ({ children, hasTriggerBorder = false }) => {
|
|
|
465
504
|
}
|
|
466
505
|
),
|
|
467
506
|
/* @__PURE__ */ jsx(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
|
|
468
|
-
] })
|
|
507
|
+
] }) : null
|
|
469
508
|
);
|
|
470
509
|
};
|
|
471
510
|
const ReleaseActionMenu = {
|
|
472
511
|
Root,
|
|
512
|
+
EditReleaseItem,
|
|
473
513
|
DeleteReleaseActionItem,
|
|
474
514
|
ReleaseActionEntryLinkItem
|
|
475
515
|
};
|
|
@@ -493,19 +533,40 @@ const FieldWrapper = styled(Field)`
|
|
|
493
533
|
text-transform: capitalize;
|
|
494
534
|
}
|
|
495
535
|
|
|
496
|
-
&:active,
|
|
497
536
|
&[data-checked='true'] {
|
|
498
|
-
color: ${({ theme }) => theme.colors.primary700};
|
|
499
|
-
background-color: ${({ theme }) => theme.colors.primary100};
|
|
500
|
-
border-color: ${({ theme }) => theme.colors.primary700};
|
|
537
|
+
color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
|
|
538
|
+
background-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
|
|
539
|
+
border-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
|
|
501
540
|
}
|
|
502
541
|
|
|
503
542
|
&[data-checked='false'] {
|
|
504
543
|
border-left: ${({ actionType }) => actionType === "unpublish" && "none"};
|
|
505
544
|
border-right: ${({ actionType }) => actionType === "publish" && "none"};
|
|
506
545
|
}
|
|
546
|
+
|
|
547
|
+
&[data-checked='false'][data-disabled='false']:hover {
|
|
548
|
+
color: ${({ theme }) => theme.colors.neutral700};
|
|
549
|
+
background-color: ${({ theme }) => theme.colors.neutral100};
|
|
550
|
+
border-color: ${({ theme }) => theme.colors.neutral200};
|
|
551
|
+
|
|
552
|
+
& > label {
|
|
553
|
+
cursor: pointer;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
&[data-disabled='true'] {
|
|
558
|
+
color: ${({ theme }) => theme.colors.neutral600};
|
|
559
|
+
background-color: ${({ theme }) => theme.colors.neutral150};
|
|
560
|
+
border-color: ${({ theme }) => theme.colors.neutral300};
|
|
561
|
+
}
|
|
507
562
|
`;
|
|
508
|
-
const ActionOption = ({
|
|
563
|
+
const ActionOption = ({
|
|
564
|
+
selected,
|
|
565
|
+
actionType,
|
|
566
|
+
handleChange,
|
|
567
|
+
name,
|
|
568
|
+
disabled = false
|
|
569
|
+
}) => {
|
|
509
570
|
return /* @__PURE__ */ jsx(
|
|
510
571
|
FieldWrapper,
|
|
511
572
|
{
|
|
@@ -516,6 +577,7 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
516
577
|
position: "relative",
|
|
517
578
|
cursor: "pointer",
|
|
518
579
|
"data-checked": selected === actionType,
|
|
580
|
+
"data-disabled": disabled && selected !== actionType,
|
|
519
581
|
children: /* @__PURE__ */ jsxs(FieldLabel, { htmlFor: `${name}-${actionType}`, children: [
|
|
520
582
|
/* @__PURE__ */ jsx(VisuallyHidden, { children: /* @__PURE__ */ jsx(
|
|
521
583
|
FieldInput,
|
|
@@ -525,7 +587,8 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
525
587
|
name,
|
|
526
588
|
checked: selected === actionType,
|
|
527
589
|
onChange: handleChange,
|
|
528
|
-
value: actionType
|
|
590
|
+
value: actionType,
|
|
591
|
+
disabled
|
|
529
592
|
}
|
|
530
593
|
) }),
|
|
531
594
|
actionType
|
|
@@ -533,7 +596,12 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
533
596
|
}
|
|
534
597
|
);
|
|
535
598
|
};
|
|
536
|
-
const ReleaseActionOptions = ({
|
|
599
|
+
const ReleaseActionOptions = ({
|
|
600
|
+
selected,
|
|
601
|
+
handleChange,
|
|
602
|
+
name,
|
|
603
|
+
disabled = false
|
|
604
|
+
}) => {
|
|
537
605
|
return /* @__PURE__ */ jsxs(Flex, { children: [
|
|
538
606
|
/* @__PURE__ */ jsx(
|
|
539
607
|
ActionOption,
|
|
@@ -541,7 +609,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
|
|
|
541
609
|
actionType: "publish",
|
|
542
610
|
selected,
|
|
543
611
|
handleChange,
|
|
544
|
-
name
|
|
612
|
+
name,
|
|
613
|
+
disabled
|
|
545
614
|
}
|
|
546
615
|
),
|
|
547
616
|
/* @__PURE__ */ jsx(
|
|
@@ -550,7 +619,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
|
|
|
550
619
|
actionType: "unpublish",
|
|
551
620
|
selected,
|
|
552
621
|
handleChange,
|
|
553
|
-
name
|
|
622
|
+
name,
|
|
623
|
+
disabled
|
|
554
624
|
}
|
|
555
625
|
)
|
|
556
626
|
] });
|
|
@@ -566,12 +636,13 @@ const INITIAL_VALUES = {
|
|
|
566
636
|
const NoReleases = () => {
|
|
567
637
|
const { formatMessage } = useIntl();
|
|
568
638
|
return /* @__PURE__ */ jsx(
|
|
569
|
-
|
|
639
|
+
EmptyStateLayout,
|
|
570
640
|
{
|
|
571
|
-
|
|
641
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" }),
|
|
642
|
+
content: formatMessage({
|
|
572
643
|
id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
|
|
573
644
|
defaultMessage: "No available releases. Open the list of releases and create a new one from there."
|
|
574
|
-
},
|
|
645
|
+
}),
|
|
575
646
|
action: /* @__PURE__ */ jsx(
|
|
576
647
|
LinkButton,
|
|
577
648
|
{
|
|
@@ -594,10 +665,12 @@ const AddActionToReleaseModal = ({
|
|
|
594
665
|
contentTypeUid,
|
|
595
666
|
entryId
|
|
596
667
|
}) => {
|
|
668
|
+
const releaseHeaderId = React.useId();
|
|
597
669
|
const { formatMessage } = useIntl();
|
|
598
|
-
const toggleNotification = useNotification();
|
|
670
|
+
const { toggleNotification } = useNotification();
|
|
599
671
|
const { formatAPIError } = useAPIErrorHandler();
|
|
600
|
-
const {
|
|
672
|
+
const [{ query }] = useQueryParams();
|
|
673
|
+
const locale = query.plugins?.i18n?.locale;
|
|
601
674
|
const response = useGetReleasesForEntryQuery({
|
|
602
675
|
contentTypeUid,
|
|
603
676
|
entryId,
|
|
@@ -606,7 +679,6 @@ const AddActionToReleaseModal = ({
|
|
|
606
679
|
const releases = response.data?.data;
|
|
607
680
|
const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
|
|
608
681
|
const handleSubmit = async (values) => {
|
|
609
|
-
const locale = modifiedData.locale;
|
|
610
682
|
const releaseActionEntry = {
|
|
611
683
|
contentType: contentTypeUid,
|
|
612
684
|
id: entryId,
|
|
@@ -630,19 +702,19 @@ const AddActionToReleaseModal = ({
|
|
|
630
702
|
if ("error" in response2) {
|
|
631
703
|
if (isAxiosError$1(response2.error)) {
|
|
632
704
|
toggleNotification({
|
|
633
|
-
type: "
|
|
705
|
+
type: "danger",
|
|
634
706
|
message: formatAPIError(response2.error)
|
|
635
707
|
});
|
|
636
708
|
} else {
|
|
637
709
|
toggleNotification({
|
|
638
|
-
type: "
|
|
710
|
+
type: "danger",
|
|
639
711
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
640
712
|
});
|
|
641
713
|
}
|
|
642
714
|
}
|
|
643
715
|
};
|
|
644
|
-
return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy:
|
|
645
|
-
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id:
|
|
716
|
+
return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy: releaseHeaderId, children: [
|
|
717
|
+
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id: releaseHeaderId, fontWeight: "bold", textColor: "neutral800", children: formatMessage({
|
|
646
718
|
id: "content-releases.content-manager-edit-view.add-to-release",
|
|
647
719
|
defaultMessage: "Add to release"
|
|
648
720
|
}) }) }),
|
|
@@ -712,16 +784,22 @@ const AddActionToReleaseModal = ({
|
|
|
712
784
|
};
|
|
713
785
|
const CMReleasesContainer = () => {
|
|
714
786
|
const [isModalOpen, setIsModalOpen] = React.useState(false);
|
|
715
|
-
const { formatMessage } = useIntl();
|
|
787
|
+
const { formatMessage, formatDate, formatTime } = useIntl();
|
|
788
|
+
const { id, slug, collectionType } = useParams();
|
|
789
|
+
const isCreatingEntry = id === "create";
|
|
716
790
|
const {
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
} =
|
|
720
|
-
|
|
721
|
-
|
|
791
|
+
allowedActions: { canCreateAction, canMain, canDeleteAction }
|
|
792
|
+
} = useRBAC(PERMISSIONS);
|
|
793
|
+
const { schema } = unstable_useDocument({
|
|
794
|
+
collectionType,
|
|
795
|
+
model: slug
|
|
796
|
+
});
|
|
797
|
+
const hasDraftAndPublish = schema?.options?.draftAndPublish;
|
|
798
|
+
const contentTypeUid = slug;
|
|
799
|
+
const canFetch = id != null && contentTypeUid != null;
|
|
722
800
|
const fetchParams = canFetch ? {
|
|
723
|
-
contentTypeUid
|
|
724
|
-
entryId:
|
|
801
|
+
contentTypeUid,
|
|
802
|
+
entryId: id,
|
|
725
803
|
hasEntryAttached: true
|
|
726
804
|
} : skipToken;
|
|
727
805
|
const response = useGetReleasesForEntryQuery(fetchParams);
|
|
@@ -729,7 +807,7 @@ const CMReleasesContainer = () => {
|
|
|
729
807
|
if (!canFetch) {
|
|
730
808
|
return null;
|
|
731
809
|
}
|
|
732
|
-
if (isCreatingEntry || !
|
|
810
|
+
if (isCreatingEntry || !hasDraftAndPublish) {
|
|
733
811
|
return null;
|
|
734
812
|
}
|
|
735
813
|
const toggleModal = () => setIsModalOpen((prev) => !prev);
|
|
@@ -739,7 +817,10 @@ const CMReleasesContainer = () => {
|
|
|
739
817
|
}
|
|
740
818
|
return `success${shade}`;
|
|
741
819
|
};
|
|
742
|
-
|
|
820
|
+
if (!canMain) {
|
|
821
|
+
return null;
|
|
822
|
+
}
|
|
823
|
+
return /* @__PURE__ */ jsxs(
|
|
743
824
|
Box,
|
|
744
825
|
{
|
|
745
826
|
as: "aside",
|
|
@@ -796,22 +877,47 @@ const CMReleasesContainer = () => {
|
|
|
796
877
|
)
|
|
797
878
|
}
|
|
798
879
|
),
|
|
799
|
-
/* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap:
|
|
880
|
+
/* @__PURE__ */ jsx(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: /* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
|
|
800
881
|
/* @__PURE__ */ jsx(Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
|
|
801
|
-
|
|
802
|
-
ReleaseActionMenu.DeleteReleaseActionItem,
|
|
882
|
+
release.scheduledAt && release.timezone && /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
|
|
803
883
|
{
|
|
804
|
-
|
|
805
|
-
|
|
884
|
+
id: "content-releases.content-manager-edit-view.scheduled.date",
|
|
885
|
+
defaultMessage: "{date} at {time} ({offset})"
|
|
886
|
+
},
|
|
887
|
+
{
|
|
888
|
+
date: formatDate(new Date(release.scheduledAt), {
|
|
889
|
+
day: "2-digit",
|
|
890
|
+
month: "2-digit",
|
|
891
|
+
year: "numeric",
|
|
892
|
+
timeZone: release.timezone
|
|
893
|
+
}),
|
|
894
|
+
time: formatTime(new Date(release.scheduledAt), {
|
|
895
|
+
hourCycle: "h23",
|
|
896
|
+
timeZone: release.timezone
|
|
897
|
+
}),
|
|
898
|
+
offset: getTimezoneOffset(
|
|
899
|
+
release.timezone,
|
|
900
|
+
new Date(release.scheduledAt)
|
|
901
|
+
)
|
|
806
902
|
}
|
|
807
|
-
) })
|
|
808
|
-
|
|
903
|
+
) }),
|
|
904
|
+
canDeleteAction ? /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
|
|
905
|
+
/* @__PURE__ */ jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
|
|
906
|
+
/* @__PURE__ */ jsx(
|
|
907
|
+
ReleaseActionMenu.DeleteReleaseActionItem,
|
|
908
|
+
{
|
|
909
|
+
releaseId: release.id,
|
|
910
|
+
actionId: release.action.id
|
|
911
|
+
}
|
|
912
|
+
)
|
|
913
|
+
] }) : null
|
|
914
|
+
] }) })
|
|
809
915
|
]
|
|
810
916
|
},
|
|
811
917
|
release.id
|
|
812
918
|
);
|
|
813
919
|
}),
|
|
814
|
-
|
|
920
|
+
canCreateAction ? /* @__PURE__ */ jsx(
|
|
815
921
|
Button,
|
|
816
922
|
{
|
|
817
923
|
justifyContent: "center",
|
|
@@ -826,35 +932,41 @@ const CMReleasesContainer = () => {
|
|
|
826
932
|
defaultMessage: "Add to release"
|
|
827
933
|
})
|
|
828
934
|
}
|
|
829
|
-
)
|
|
935
|
+
) : null
|
|
830
936
|
] }),
|
|
831
937
|
isModalOpen && /* @__PURE__ */ jsx(
|
|
832
938
|
AddActionToReleaseModal,
|
|
833
939
|
{
|
|
834
940
|
handleClose: toggleModal,
|
|
835
|
-
contentTypeUid
|
|
836
|
-
entryId:
|
|
941
|
+
contentTypeUid,
|
|
942
|
+
entryId: id
|
|
837
943
|
}
|
|
838
944
|
)
|
|
839
945
|
]
|
|
840
946
|
}
|
|
841
|
-
)
|
|
947
|
+
);
|
|
948
|
+
};
|
|
949
|
+
const prefixPluginTranslations = (trad, pluginId2) => {
|
|
950
|
+
if (!pluginId2) {
|
|
951
|
+
throw new TypeError("pluginId can't be empty");
|
|
952
|
+
}
|
|
953
|
+
return Object.keys(trad).reduce((acc, current) => {
|
|
954
|
+
acc[`${pluginId2}.${current}`] = trad[current];
|
|
955
|
+
return acc;
|
|
956
|
+
}, {});
|
|
842
957
|
};
|
|
843
958
|
const admin = {
|
|
844
959
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
845
960
|
register(app) {
|
|
846
961
|
if (window.strapi.features.isEnabled("cms-content-releases")) {
|
|
847
962
|
app.addMenuLink({
|
|
848
|
-
to:
|
|
963
|
+
to: `plugins/${pluginId}`,
|
|
849
964
|
icon: PaperPlane,
|
|
850
965
|
intlLabel: {
|
|
851
966
|
id: `${pluginId}.plugin.name`,
|
|
852
967
|
defaultMessage: "Releases"
|
|
853
968
|
},
|
|
854
|
-
|
|
855
|
-
const { App } = await import("./App-_Jj3tWts.mjs");
|
|
856
|
-
return App;
|
|
857
|
-
},
|
|
969
|
+
Component: () => import("./App-X01LBg5V.mjs").then((mod) => ({ default: mod.App })),
|
|
858
970
|
permissions: PERMISSIONS.main
|
|
859
971
|
});
|
|
860
972
|
app.addMiddlewares([() => releaseApi.middleware]);
|
|
@@ -865,12 +977,26 @@ const admin = {
|
|
|
865
977
|
name: `${pluginId}-link`,
|
|
866
978
|
Component: CMReleasesContainer
|
|
867
979
|
});
|
|
980
|
+
} else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
|
|
981
|
+
app.addMenuLink({
|
|
982
|
+
to: `/plugins/purchase-content-releases`,
|
|
983
|
+
icon: PaperPlane,
|
|
984
|
+
intlLabel: {
|
|
985
|
+
id: `${pluginId}.plugin.name`,
|
|
986
|
+
defaultMessage: "Releases"
|
|
987
|
+
},
|
|
988
|
+
async Component() {
|
|
989
|
+
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-Clm0iACO.mjs");
|
|
990
|
+
return PurchaseContentReleases;
|
|
991
|
+
},
|
|
992
|
+
lockIcon: true
|
|
993
|
+
});
|
|
868
994
|
}
|
|
869
995
|
},
|
|
870
996
|
async registerTrads({ locales }) {
|
|
871
997
|
const importedTrads = await Promise.all(
|
|
872
998
|
locales.map((locale) => {
|
|
873
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-
|
|
999
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-RdapH-9X.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
|
|
874
1000
|
return {
|
|
875
1001
|
data: prefixPluginTranslations(data, "content-releases"),
|
|
876
1002
|
locale
|
|
@@ -889,19 +1015,19 @@ const admin = {
|
|
|
889
1015
|
export {
|
|
890
1016
|
PERMISSIONS as P,
|
|
891
1017
|
ReleaseActionOptions as R,
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
1018
|
+
useCreateReleaseMutation as a,
|
|
1019
|
+
useGetReleaseQuery as b,
|
|
1020
|
+
useUpdateReleaseMutation as c,
|
|
1021
|
+
useDeleteReleaseMutation as d,
|
|
1022
|
+
usePublishReleaseMutation as e,
|
|
1023
|
+
useGetReleaseActionsQuery as f,
|
|
1024
|
+
getTimezoneOffset as g,
|
|
1025
|
+
useUpdateReleaseActionMutation as h,
|
|
900
1026
|
isAxiosError as i,
|
|
901
|
-
|
|
1027
|
+
ReleaseActionMenu as j,
|
|
902
1028
|
admin as k,
|
|
903
1029
|
pluginId as p,
|
|
904
1030
|
releaseApi as r,
|
|
905
|
-
|
|
1031
|
+
useGetReleasesQuery as u
|
|
906
1032
|
};
|
|
907
|
-
//# sourceMappingURL=index-
|
|
1033
|
+
//# sourceMappingURL=index-OD9AlD-6.mjs.map
|