@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,18 +1,18 @@
|
|
|
1
|
-
import { getFetchClient, useNotification, useAPIErrorHandler, CheckPermissions, useCMEditViewDataManager, NoContent, useRBAC, prefixPluginTranslations } from "@strapi/helper-plugin";
|
|
2
1
|
import { Cross, Pencil, More, Plus, 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 {
|
|
7
|
-
import { Menu, Link, LinkButton } from "@strapi/design-system
|
|
5
|
+
import { getFetchClient, useNotification, useAPIErrorHandler, useRBAC, useAuth, useQueryParams } from "@strapi/admin/strapi-admin";
|
|
6
|
+
import { Menu, IconButton, Flex, Typography, Link, Field, FieldLabel, VisuallyHidden, FieldInput, Box, Button, EmptyStateLayout, LinkButton, ModalLayout, ModalHeader, ModalBody, SingleSelect, SingleSelectOption, ModalFooter } from "@strapi/design-system";
|
|
7
|
+
import { EmptyDocuments } from "@strapi/icons/symbols";
|
|
8
|
+
import { unstable_useDocument } from "@strapi/plugin-content-manager/strapi-admin";
|
|
8
9
|
import { isAxiosError as isAxiosError$1 } from "axios";
|
|
9
10
|
import { Formik, Form } from "formik";
|
|
10
11
|
import { useIntl } from "react-intl";
|
|
11
|
-
import { NavLink, Link as Link$1 } from "react-router-dom";
|
|
12
|
+
import { NavLink, useParams, Link as Link$1 } from "react-router-dom";
|
|
12
13
|
import * as yup from "yup";
|
|
13
14
|
import { createApi } from "@reduxjs/toolkit/query/react";
|
|
14
15
|
import styled from "styled-components";
|
|
15
|
-
import { useDispatch, useSelector } from "react-redux";
|
|
16
16
|
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
|
17
17
|
const v = glob[path];
|
|
18
18
|
if (v) {
|
|
@@ -136,7 +136,7 @@ const isAxiosError = (err) => {
|
|
|
136
136
|
const releaseApi = createApi({
|
|
137
137
|
reducerPath: pluginId,
|
|
138
138
|
baseQuery: axiosBaseQuery,
|
|
139
|
-
tagTypes: ["Release", "ReleaseAction"],
|
|
139
|
+
tagTypes: ["Release", "ReleaseAction", "EntriesInRelease"],
|
|
140
140
|
endpoints: (build) => {
|
|
141
141
|
return {
|
|
142
142
|
getReleasesForEntry: build.query({
|
|
@@ -261,7 +261,8 @@ const releaseApi = createApi({
|
|
|
261
261
|
},
|
|
262
262
|
invalidatesTags: [
|
|
263
263
|
{ type: "Release", id: "LIST" },
|
|
264
|
-
{ type: "ReleaseAction", id: "LIST" }
|
|
264
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
265
|
+
{ type: "EntriesInRelease" }
|
|
265
266
|
]
|
|
266
267
|
}),
|
|
267
268
|
updateReleaseAction: build.mutation({
|
|
@@ -304,7 +305,8 @@ const releaseApi = createApi({
|
|
|
304
305
|
invalidatesTags: (result, error, arg) => [
|
|
305
306
|
{ type: "Release", id: "LIST" },
|
|
306
307
|
{ type: "Release", id: arg.params.releaseId },
|
|
307
|
-
{ type: "ReleaseAction", id: "LIST" }
|
|
308
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
309
|
+
{ type: "EntriesInRelease" }
|
|
308
310
|
]
|
|
309
311
|
}),
|
|
310
312
|
publishRelease: build.mutation({
|
|
@@ -323,7 +325,22 @@ const releaseApi = createApi({
|
|
|
323
325
|
method: "DELETE"
|
|
324
326
|
};
|
|
325
327
|
},
|
|
326
|
-
invalidatesTags: () => [{ type: "Release", id: "LIST" }]
|
|
328
|
+
invalidatesTags: () => [{ type: "Release", id: "LIST" }, { type: "EntriesInRelease" }]
|
|
329
|
+
}),
|
|
330
|
+
getMappedEntriesInReleases: build.query({
|
|
331
|
+
query(params) {
|
|
332
|
+
return {
|
|
333
|
+
url: "/content-releases/mapEntriesToReleases",
|
|
334
|
+
method: "GET",
|
|
335
|
+
config: {
|
|
336
|
+
params
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
},
|
|
340
|
+
transformResponse(response) {
|
|
341
|
+
return response.data;
|
|
342
|
+
},
|
|
343
|
+
providesTags: [{ type: "EntriesInRelease" }]
|
|
327
344
|
})
|
|
328
345
|
};
|
|
329
346
|
}
|
|
@@ -340,7 +357,8 @@ const {
|
|
|
340
357
|
useUpdateReleaseActionMutation,
|
|
341
358
|
usePublishReleaseMutation,
|
|
342
359
|
useDeleteReleaseActionMutation,
|
|
343
|
-
useDeleteReleaseMutation
|
|
360
|
+
useDeleteReleaseMutation,
|
|
361
|
+
useGetMappedEntriesInReleasesQuery
|
|
344
362
|
} = releaseApi;
|
|
345
363
|
const getTimezoneOffset = (timezone, date) => {
|
|
346
364
|
try {
|
|
@@ -358,16 +376,12 @@ const getTimezoneOffset = (timezone, date) => {
|
|
|
358
376
|
return "";
|
|
359
377
|
}
|
|
360
378
|
};
|
|
361
|
-
const useTypedDispatch = useDispatch;
|
|
362
|
-
const useTypedSelector = useSelector;
|
|
363
379
|
const StyledMenuItem = styled(Menu.Item)`
|
|
364
380
|
&:hover {
|
|
365
381
|
background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
|
|
366
382
|
|
|
367
383
|
svg {
|
|
368
|
-
|
|
369
|
-
fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
|
|
370
|
-
}
|
|
384
|
+
fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
|
|
371
385
|
}
|
|
372
386
|
|
|
373
387
|
a {
|
|
@@ -376,9 +390,7 @@ const StyledMenuItem = styled(Menu.Item)`
|
|
|
376
390
|
}
|
|
377
391
|
|
|
378
392
|
svg {
|
|
379
|
-
|
|
380
|
-
fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
|
|
381
|
-
}
|
|
393
|
+
fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
|
|
382
394
|
}
|
|
383
395
|
|
|
384
396
|
a {
|
|
@@ -396,9 +408,12 @@ const StyledIconButton = styled(IconButton)`
|
|
|
396
408
|
`;
|
|
397
409
|
const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
398
410
|
const { formatMessage } = useIntl();
|
|
399
|
-
const toggleNotification = useNotification();
|
|
411
|
+
const { toggleNotification } = useNotification();
|
|
400
412
|
const { formatAPIError } = useAPIErrorHandler();
|
|
401
413
|
const [deleteReleaseAction] = useDeleteReleaseActionMutation();
|
|
414
|
+
const {
|
|
415
|
+
allowedActions: { canDeleteAction }
|
|
416
|
+
} = useRBAC(PERMISSIONS);
|
|
402
417
|
const handleDeleteAction = async () => {
|
|
403
418
|
const response = await deleteReleaseAction({
|
|
404
419
|
params: { releaseId, actionId }
|
|
@@ -416,24 +431,27 @@ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
|
416
431
|
if ("error" in response) {
|
|
417
432
|
if (isAxiosError$1(response.error)) {
|
|
418
433
|
toggleNotification({
|
|
419
|
-
type: "
|
|
434
|
+
type: "danger",
|
|
420
435
|
message: formatAPIError(response.error)
|
|
421
436
|
});
|
|
422
437
|
} else {
|
|
423
438
|
toggleNotification({
|
|
424
|
-
type: "
|
|
439
|
+
type: "danger",
|
|
425
440
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
426
441
|
});
|
|
427
442
|
}
|
|
428
443
|
}
|
|
429
444
|
};
|
|
430
|
-
|
|
431
|
-
|
|
445
|
+
if (!canDeleteAction) {
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
449
|
+
/* @__PURE__ */ jsx(Cross, { width: "1.2rem", height: "1.2rem" }),
|
|
432
450
|
/* @__PURE__ */ jsx(Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
|
|
433
451
|
id: "content-releases.content-manager-edit-view.remove-from-release",
|
|
434
452
|
defaultMessage: "Remove from release"
|
|
435
453
|
}) })
|
|
436
|
-
] }) })
|
|
454
|
+
] }) });
|
|
437
455
|
};
|
|
438
456
|
const ReleaseActionEntryLinkItem = ({
|
|
439
457
|
contentTypeUid,
|
|
@@ -441,41 +459,44 @@ const ReleaseActionEntryLinkItem = ({
|
|
|
441
459
|
locale
|
|
442
460
|
}) => {
|
|
443
461
|
const { formatMessage } = useIntl();
|
|
444
|
-
const
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
!
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
462
|
+
const userPermissions = useAuth("ReleaseActionEntryLinkItem", (state) => state.permissions);
|
|
463
|
+
const canUpdateEntryForLocale = React.useMemo(() => {
|
|
464
|
+
const updatePermissions = userPermissions.find(
|
|
465
|
+
(permission) => permission.subject === contentTypeUid && permission.action === "plugin::content-manager.explorer.update"
|
|
466
|
+
);
|
|
467
|
+
if (!updatePermissions) {
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
470
|
+
return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
|
|
471
|
+
}, [contentTypeUid, locale, userPermissions]);
|
|
472
|
+
const {
|
|
473
|
+
allowedActions: { canUpdate: canUpdateContentType }
|
|
474
|
+
} = useRBAC({
|
|
475
|
+
updateContentType: [
|
|
476
|
+
{
|
|
477
|
+
action: "plugin::content-manager.explorer.update",
|
|
478
|
+
subject: contentTypeUid
|
|
479
|
+
}
|
|
480
|
+
]
|
|
481
|
+
});
|
|
482
|
+
if (!canUpdateContentType || !canUpdateEntryForLocale) {
|
|
483
|
+
return null;
|
|
484
|
+
}
|
|
485
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { children: /* @__PURE__ */ jsx(
|
|
486
|
+
Link,
|
|
455
487
|
{
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
children:
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
to: {
|
|
467
|
-
pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
|
|
468
|
-
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
469
|
-
},
|
|
470
|
-
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
|
|
471
|
-
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
472
|
-
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
473
|
-
defaultMessage: "Edit entry"
|
|
474
|
-
}) })
|
|
475
|
-
}
|
|
476
|
-
) })
|
|
488
|
+
as: NavLink,
|
|
489
|
+
to: {
|
|
490
|
+
pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
|
|
491
|
+
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
492
|
+
},
|
|
493
|
+
startIcon: /* @__PURE__ */ jsx(Pencil, { width: "1.2rem", height: "1.2rem" }),
|
|
494
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
495
|
+
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
496
|
+
defaultMessage: "Edit entry"
|
|
497
|
+
}) })
|
|
477
498
|
}
|
|
478
|
-
);
|
|
499
|
+
) });
|
|
479
500
|
};
|
|
480
501
|
const EditReleaseItem = ({ releaseId }) => {
|
|
481
502
|
const { formatMessage } = useIntl();
|
|
@@ -483,7 +504,7 @@ const EditReleaseItem = ({ releaseId }) => {
|
|
|
483
504
|
Link,
|
|
484
505
|
{
|
|
485
506
|
href: `/admin/plugins/content-releases/${releaseId}`,
|
|
486
|
-
startIcon: /* @__PURE__ */ jsx(
|
|
507
|
+
startIcon: /* @__PURE__ */ jsx(Pencil, { width: "1.2rem", height: "1.2rem" }),
|
|
487
508
|
isExternal: false,
|
|
488
509
|
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
489
510
|
id: "content-releases.content-manager-edit-view.edit-release",
|
|
@@ -494,9 +515,10 @@ const EditReleaseItem = ({ releaseId }) => {
|
|
|
494
515
|
};
|
|
495
516
|
const Root = ({ children, hasTriggerBorder = false }) => {
|
|
496
517
|
const { formatMessage } = useIntl();
|
|
518
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
497
519
|
return (
|
|
498
520
|
// A user can access the dropdown if they have permissions to delete a release-action OR update a release
|
|
499
|
-
|
|
521
|
+
allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
500
522
|
/* @__PURE__ */ jsx(
|
|
501
523
|
Menu.Trigger,
|
|
502
524
|
{
|
|
@@ -511,7 +533,7 @@ const Root = ({ children, hasTriggerBorder = false }) => {
|
|
|
511
533
|
}
|
|
512
534
|
),
|
|
513
535
|
/* @__PURE__ */ jsx(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
|
|
514
|
-
] })
|
|
536
|
+
] }) : null
|
|
515
537
|
);
|
|
516
538
|
};
|
|
517
539
|
const ReleaseActionMenu = {
|
|
@@ -643,12 +665,13 @@ const INITIAL_VALUES = {
|
|
|
643
665
|
const NoReleases = () => {
|
|
644
666
|
const { formatMessage } = useIntl();
|
|
645
667
|
return /* @__PURE__ */ jsx(
|
|
646
|
-
|
|
668
|
+
EmptyStateLayout,
|
|
647
669
|
{
|
|
648
|
-
|
|
670
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
|
|
671
|
+
content: formatMessage({
|
|
649
672
|
id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
|
|
650
673
|
defaultMessage: "No available releases. Open the list of releases and create a new one from there."
|
|
651
|
-
},
|
|
674
|
+
}),
|
|
652
675
|
action: /* @__PURE__ */ jsx(
|
|
653
676
|
LinkButton,
|
|
654
677
|
{
|
|
@@ -673,9 +696,10 @@ const AddActionToReleaseModal = ({
|
|
|
673
696
|
}) => {
|
|
674
697
|
const releaseHeaderId = React.useId();
|
|
675
698
|
const { formatMessage } = useIntl();
|
|
676
|
-
const toggleNotification = useNotification();
|
|
699
|
+
const { toggleNotification } = useNotification();
|
|
677
700
|
const { formatAPIError } = useAPIErrorHandler();
|
|
678
|
-
const {
|
|
701
|
+
const [{ query }] = useQueryParams();
|
|
702
|
+
const locale = query.plugins?.i18n?.locale;
|
|
679
703
|
const response = useGetReleasesForEntryQuery({
|
|
680
704
|
contentTypeUid,
|
|
681
705
|
entryId,
|
|
@@ -684,7 +708,6 @@ const AddActionToReleaseModal = ({
|
|
|
684
708
|
const releases = response.data?.data;
|
|
685
709
|
const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
|
|
686
710
|
const handleSubmit = async (values) => {
|
|
687
|
-
const locale = modifiedData.locale;
|
|
688
711
|
const releaseActionEntry = {
|
|
689
712
|
contentType: contentTypeUid,
|
|
690
713
|
id: entryId,
|
|
@@ -708,12 +731,12 @@ const AddActionToReleaseModal = ({
|
|
|
708
731
|
if ("error" in response2) {
|
|
709
732
|
if (isAxiosError$1(response2.error)) {
|
|
710
733
|
toggleNotification({
|
|
711
|
-
type: "
|
|
734
|
+
type: "danger",
|
|
712
735
|
message: formatAPIError(response2.error)
|
|
713
736
|
});
|
|
714
737
|
} else {
|
|
715
738
|
toggleNotification({
|
|
716
|
-
type: "
|
|
739
|
+
type: "danger",
|
|
717
740
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
718
741
|
});
|
|
719
742
|
}
|
|
@@ -791,17 +814,20 @@ const AddActionToReleaseModal = ({
|
|
|
791
814
|
const CMReleasesContainer = () => {
|
|
792
815
|
const [isModalOpen, setIsModalOpen] = React.useState(false);
|
|
793
816
|
const { formatMessage, formatDate, formatTime } = useIntl();
|
|
794
|
-
const {
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
817
|
+
const { id, slug, collectionType } = useParams();
|
|
818
|
+
const isCreatingEntry = id === "create";
|
|
819
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
820
|
+
const { canCreateAction, canRead: canMain, canDeleteAction } = allowedActions;
|
|
821
|
+
const { schema } = unstable_useDocument({
|
|
822
|
+
collectionType,
|
|
823
|
+
model: slug
|
|
824
|
+
});
|
|
825
|
+
const hasDraftAndPublish = schema?.options?.draftAndPublish;
|
|
800
826
|
const contentTypeUid = slug;
|
|
801
|
-
const canFetch =
|
|
827
|
+
const canFetch = id != null && contentTypeUid != null;
|
|
802
828
|
const fetchParams = canFetch ? {
|
|
803
829
|
contentTypeUid,
|
|
804
|
-
entryId,
|
|
830
|
+
entryId: id,
|
|
805
831
|
hasEntryAttached: true
|
|
806
832
|
} : skipToken;
|
|
807
833
|
const response = useGetReleasesForEntryQuery(fetchParams);
|
|
@@ -819,7 +845,10 @@ const CMReleasesContainer = () => {
|
|
|
819
845
|
}
|
|
820
846
|
return `success${shade}`;
|
|
821
847
|
};
|
|
822
|
-
|
|
848
|
+
if (!canMain) {
|
|
849
|
+
return null;
|
|
850
|
+
}
|
|
851
|
+
return /* @__PURE__ */ jsxs(
|
|
823
852
|
Box,
|
|
824
853
|
{
|
|
825
854
|
as: "aside",
|
|
@@ -846,7 +875,7 @@ const CMReleasesContainer = () => {
|
|
|
846
875
|
alignItems: "start",
|
|
847
876
|
borderWidth: "1px",
|
|
848
877
|
borderStyle: "solid",
|
|
849
|
-
borderColor: getReleaseColorVariant(release.
|
|
878
|
+
borderColor: getReleaseColorVariant(release.actions[0].type, "200"),
|
|
850
879
|
overflow: "hidden",
|
|
851
880
|
hasRadius: true,
|
|
852
881
|
children: [
|
|
@@ -857,26 +886,26 @@ const CMReleasesContainer = () => {
|
|
|
857
886
|
paddingBottom: 3,
|
|
858
887
|
paddingLeft: 4,
|
|
859
888
|
paddingRight: 4,
|
|
860
|
-
background: getReleaseColorVariant(release.
|
|
889
|
+
background: getReleaseColorVariant(release.actions[0].type, "100"),
|
|
861
890
|
width: "100%",
|
|
862
891
|
children: /* @__PURE__ */ jsx(
|
|
863
892
|
Typography,
|
|
864
893
|
{
|
|
865
894
|
fontSize: 1,
|
|
866
895
|
variant: "pi",
|
|
867
|
-
textColor: getReleaseColorVariant(release.
|
|
896
|
+
textColor: getReleaseColorVariant(release.actions[0].type, "600"),
|
|
868
897
|
children: formatMessage(
|
|
869
898
|
{
|
|
870
899
|
id: "content-releases.content-manager-edit-view.list-releases.title",
|
|
871
900
|
defaultMessage: "{isPublish, select, true {Will be published in} other {Will be unpublished in}}"
|
|
872
901
|
},
|
|
873
|
-
{ isPublish: release.
|
|
902
|
+
{ isPublish: release.actions[0].type === "publish" }
|
|
874
903
|
)
|
|
875
904
|
}
|
|
876
905
|
)
|
|
877
906
|
}
|
|
878
907
|
),
|
|
879
|
-
/* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
|
|
908
|
+
/* @__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: [
|
|
880
909
|
/* @__PURE__ */ jsx(Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
|
|
881
910
|
release.scheduledAt && release.timezone && /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
|
|
882
911
|
{
|
|
@@ -900,23 +929,23 @@ const CMReleasesContainer = () => {
|
|
|
900
929
|
)
|
|
901
930
|
}
|
|
902
931
|
) }),
|
|
903
|
-
|
|
932
|
+
canDeleteAction ? /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
|
|
904
933
|
/* @__PURE__ */ jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
|
|
905
934
|
/* @__PURE__ */ jsx(
|
|
906
935
|
ReleaseActionMenu.DeleteReleaseActionItem,
|
|
907
936
|
{
|
|
908
937
|
releaseId: release.id,
|
|
909
|
-
actionId: release.
|
|
938
|
+
actionId: release.actions[0].id
|
|
910
939
|
}
|
|
911
940
|
)
|
|
912
|
-
] })
|
|
913
|
-
] })
|
|
941
|
+
] }) : null
|
|
942
|
+
] }) })
|
|
914
943
|
]
|
|
915
944
|
},
|
|
916
945
|
release.id
|
|
917
946
|
);
|
|
918
947
|
}),
|
|
919
|
-
|
|
948
|
+
canCreateAction ? /* @__PURE__ */ jsx(
|
|
920
949
|
Button,
|
|
921
950
|
{
|
|
922
951
|
justifyContent: "center",
|
|
@@ -931,19 +960,19 @@ const CMReleasesContainer = () => {
|
|
|
931
960
|
defaultMessage: "Add to release"
|
|
932
961
|
})
|
|
933
962
|
}
|
|
934
|
-
)
|
|
963
|
+
) : null
|
|
935
964
|
] }),
|
|
936
965
|
isModalOpen && /* @__PURE__ */ jsx(
|
|
937
966
|
AddActionToReleaseModal,
|
|
938
967
|
{
|
|
939
968
|
handleClose: toggleModal,
|
|
940
969
|
contentTypeUid,
|
|
941
|
-
entryId
|
|
970
|
+
entryId: id
|
|
942
971
|
}
|
|
943
972
|
)
|
|
944
973
|
]
|
|
945
974
|
}
|
|
946
|
-
)
|
|
975
|
+
);
|
|
947
976
|
};
|
|
948
977
|
const getContentPermissions = (subject) => {
|
|
949
978
|
const permissions = {
|
|
@@ -960,11 +989,11 @@ const getContentPermissions = (subject) => {
|
|
|
960
989
|
};
|
|
961
990
|
return permissions;
|
|
962
991
|
};
|
|
963
|
-
const ReleaseAction = ({
|
|
992
|
+
const ReleaseAction = ({ documentIds, model }) => {
|
|
964
993
|
const { formatMessage } = useIntl();
|
|
965
|
-
const toggleNotification = useNotification();
|
|
994
|
+
const { toggleNotification } = useNotification();
|
|
966
995
|
const { formatAPIError } = useAPIErrorHandler();
|
|
967
|
-
const {
|
|
996
|
+
const [{ query }] = useQueryParams();
|
|
968
997
|
const contentPermissions = getContentPermissions(model);
|
|
969
998
|
const {
|
|
970
999
|
allowedActions: { canPublish }
|
|
@@ -976,15 +1005,17 @@ const ReleaseAction = ({ ids, model }) => {
|
|
|
976
1005
|
const releases = response.data?.data;
|
|
977
1006
|
const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
|
|
978
1007
|
const handleSubmit = async (values) => {
|
|
979
|
-
const locale =
|
|
980
|
-
const releaseActionEntries =
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
1008
|
+
const locale = query.plugins?.i18n?.locale;
|
|
1009
|
+
const releaseActionEntries = documentIds.map(
|
|
1010
|
+
(id) => ({
|
|
1011
|
+
type: values.type,
|
|
1012
|
+
entry: {
|
|
1013
|
+
contentType: model,
|
|
1014
|
+
id,
|
|
1015
|
+
locale
|
|
1016
|
+
}
|
|
1017
|
+
})
|
|
1018
|
+
);
|
|
988
1019
|
const response2 = await createManyReleaseActions({
|
|
989
1020
|
body: releaseActionEntries,
|
|
990
1021
|
params: { releaseId: values.releaseId }
|
|
@@ -1116,28 +1147,35 @@ const ReleaseAction = ({ ids, model }) => {
|
|
|
1116
1147
|
}
|
|
1117
1148
|
};
|
|
1118
1149
|
};
|
|
1150
|
+
const prefixPluginTranslations = (trad, pluginId2) => {
|
|
1151
|
+
if (!pluginId2) {
|
|
1152
|
+
throw new TypeError("pluginId can't be empty");
|
|
1153
|
+
}
|
|
1154
|
+
return Object.keys(trad).reduce((acc, current) => {
|
|
1155
|
+
acc[`${pluginId2}.${current}`] = trad[current];
|
|
1156
|
+
return acc;
|
|
1157
|
+
}, {});
|
|
1158
|
+
};
|
|
1119
1159
|
const admin = {
|
|
1120
1160
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1121
1161
|
register(app) {
|
|
1162
|
+
app.createHook("ContentReleases/pages/ReleaseDetails/add-locale-in-releases");
|
|
1122
1163
|
if (window.strapi.features.isEnabled("cms-content-releases")) {
|
|
1123
1164
|
app.addMenuLink({
|
|
1124
|
-
to:
|
|
1165
|
+
to: `plugins/${pluginId}`,
|
|
1125
1166
|
icon: PaperPlane,
|
|
1126
1167
|
intlLabel: {
|
|
1127
1168
|
id: `${pluginId}.plugin.name`,
|
|
1128
1169
|
defaultMessage: "Releases"
|
|
1129
1170
|
},
|
|
1130
|
-
|
|
1131
|
-
const { App } = await import("./App-x6Tjj3HN.mjs");
|
|
1132
|
-
return App;
|
|
1133
|
-
},
|
|
1171
|
+
Component: () => import("./App-O0ZO-S35.mjs").then((mod) => ({ default: mod.App })),
|
|
1134
1172
|
permissions: PERMISSIONS.main
|
|
1135
1173
|
});
|
|
1136
1174
|
app.addMiddlewares([() => releaseApi.middleware]);
|
|
1137
1175
|
app.addReducers({
|
|
1138
1176
|
[releaseApi.reducerPath]: releaseApi.reducer
|
|
1139
1177
|
});
|
|
1140
|
-
app.
|
|
1178
|
+
app.getPlugin("content-manager").injectComponent("editView", "right-links", {
|
|
1141
1179
|
name: `${pluginId}-link`,
|
|
1142
1180
|
Component: CMReleasesContainer
|
|
1143
1181
|
});
|
|
@@ -1154,9 +1192,10 @@ const admin = {
|
|
|
1154
1192
|
id: `${pluginId}.plugin.name`,
|
|
1155
1193
|
defaultMessage: "Releases"
|
|
1156
1194
|
},
|
|
1195
|
+
permissions: [],
|
|
1157
1196
|
async Component() {
|
|
1158
|
-
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-
|
|
1159
|
-
return PurchaseContentReleases;
|
|
1197
|
+
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-Ex09YpKR.mjs");
|
|
1198
|
+
return { default: PurchaseContentReleases };
|
|
1160
1199
|
},
|
|
1161
1200
|
lockIcon: true
|
|
1162
1201
|
});
|
|
@@ -1165,7 +1204,7 @@ const admin = {
|
|
|
1165
1204
|
async registerTrads({ locales }) {
|
|
1166
1205
|
const importedTrads = await Promise.all(
|
|
1167
1206
|
locales.map((locale) => {
|
|
1168
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-
|
|
1207
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-B9Ur3VsE.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
|
|
1169
1208
|
return {
|
|
1170
1209
|
data: prefixPluginTranslations(data, "content-releases"),
|
|
1171
1210
|
locale
|
|
@@ -1189,15 +1228,14 @@ export {
|
|
|
1189
1228
|
useUpdateReleaseMutation as c,
|
|
1190
1229
|
useDeleteReleaseMutation as d,
|
|
1191
1230
|
usePublishReleaseMutation as e,
|
|
1192
|
-
|
|
1231
|
+
useGetReleaseActionsQuery as f,
|
|
1193
1232
|
getTimezoneOffset as g,
|
|
1194
|
-
|
|
1233
|
+
useUpdateReleaseActionMutation as h,
|
|
1195
1234
|
isAxiosError as i,
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
admin as l,
|
|
1235
|
+
ReleaseActionMenu as j,
|
|
1236
|
+
admin as k,
|
|
1199
1237
|
pluginId as p,
|
|
1200
1238
|
releaseApi as r,
|
|
1201
1239
|
useGetReleasesQuery as u
|
|
1202
1240
|
};
|
|
1203
|
-
//# sourceMappingURL=index-
|
|
1241
|
+
//# sourceMappingURL=index-DjDPK8kb.mjs.map
|