@strapi/content-releases 0.0.0-experimental.e1ede8c55a0e1e22ce20137bf238fc374bd5dd51 → 0.0.0-experimental.e3e48deb89bd0a1b6cc69b698696566fa7854a95
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-PQlYzNfb.mjs +1337 -0
- package/dist/_chunks/App-PQlYzNfb.mjs.map +1 -0
- package/dist/_chunks/App-lzeJz92X.js +1360 -0
- package/dist/_chunks/App-lzeJz92X.js.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-ngTk74JV.mjs → en-WuuhP6Bn.mjs} +22 -6
- package/dist/_chunks/en-WuuhP6Bn.mjs.map +1 -0
- package/dist/_chunks/{en-haKSQIo8.js → en-gcJJ5htG.js} +22 -6
- package/dist/_chunks/en-gcJJ5htG.js.map +1 -0
- package/dist/_chunks/{index-XAQOX_IB.mjs → index--4AgLDzb.mjs} +262 -83
- package/dist/_chunks/index--4AgLDzb.mjs.map +1 -0
- package/dist/_chunks/{index-EdBmRHRU.js → index-Nf1JfI-m.js} +246 -67
- package/dist/_chunks/index-Nf1JfI-m.js.map +1 -0
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +3 -2
- 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/time.d.ts +1 -0
- package/dist/server/index.js +999 -309
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +999 -310
- 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 +18 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -0
- package/dist/server/src/controllers/release-action.d.ts +9 -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 +3 -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 +2092 -0
- package/dist/server/src/index.d.ts.map +1 -0
- package/dist/server/src/migrations/index.d.ts +10 -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 +14 -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 +105 -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 +19 -22
- package/dist/_chunks/App-g2P5kbSm.mjs +0 -945
- package/dist/_chunks/App-g2P5kbSm.mjs.map +0 -1
- package/dist/_chunks/App-o5_WfqR-.js +0 -967
- package/dist/_chunks/App-o5_WfqR-.js.map +0 -1
- package/dist/_chunks/en-haKSQIo8.js.map +0 -1
- package/dist/_chunks/en-ngTk74JV.mjs.map +0 -1
- package/dist/_chunks/index-EdBmRHRU.js.map +0 -1
- package/dist/_chunks/index-XAQOX_IB.mjs.map +0 -1
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { getFetchClient, useNotification, useAPIErrorHandler, CheckPermissions,
|
|
2
|
-
import { Cross, More, Plus, PaperPlane } from "@strapi/icons";
|
|
1
|
+
import { getFetchClient, useNotification, useAPIErrorHandler, CheckPermissions, useQueryParams, prefixPluginTranslations } from "@strapi/helper-plugin";
|
|
2
|
+
import { Cross, Pencil, More, Plus, EmptyDocuments, PaperPlane } from "@strapi/icons";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
import { skipToken } from "@reduxjs/toolkit/query";
|
|
6
|
-
import { IconButton, Flex, Typography, Field, FieldLabel, VisuallyHidden, FieldInput, Box, Button, ModalLayout, ModalHeader, ModalBody, SingleSelect, SingleSelectOption, ModalFooter } from "@strapi/design-system";
|
|
7
|
-
import { Menu, LinkButton } from "@strapi/design-system/v2";
|
|
6
|
+
import { IconButton, Flex, Icon, Typography, Field, FieldLabel, VisuallyHidden, FieldInput, Box, Button, ModalLayout, ModalHeader, ModalBody, SingleSelect, SingleSelectOption, ModalFooter, EmptyStateLayout } from "@strapi/design-system";
|
|
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";
|
|
10
10
|
import { useIntl } from "react-intl";
|
|
11
|
-
import { useParams, Link } from "react-router-dom";
|
|
11
|
+
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";
|
|
15
16
|
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
|
16
17
|
const v = glob[path];
|
|
17
18
|
if (v) {
|
|
@@ -258,7 +259,27 @@ const releaseApi = createApi({
|
|
|
258
259
|
data: body
|
|
259
260
|
};
|
|
260
261
|
},
|
|
261
|
-
invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }]
|
|
262
|
+
invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }],
|
|
263
|
+
async onQueryStarted({ body, params, query, actionPath }, { dispatch, queryFulfilled }) {
|
|
264
|
+
const paramsWithoutActionId = {
|
|
265
|
+
releaseId: params.releaseId,
|
|
266
|
+
...query
|
|
267
|
+
};
|
|
268
|
+
const patchResult = dispatch(
|
|
269
|
+
releaseApi.util.updateQueryData("getReleaseActions", paramsWithoutActionId, (draft) => {
|
|
270
|
+
const [key, index] = actionPath;
|
|
271
|
+
const action = draft.data[key][index];
|
|
272
|
+
if (action) {
|
|
273
|
+
action.type = body.type;
|
|
274
|
+
}
|
|
275
|
+
})
|
|
276
|
+
);
|
|
277
|
+
try {
|
|
278
|
+
await queryFulfilled;
|
|
279
|
+
} catch {
|
|
280
|
+
patchResult.undo();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
262
283
|
}),
|
|
263
284
|
deleteReleaseAction: build.mutation({
|
|
264
285
|
query({ params }) {
|
|
@@ -306,37 +327,59 @@ const {
|
|
|
306
327
|
useDeleteReleaseActionMutation,
|
|
307
328
|
useDeleteReleaseMutation
|
|
308
329
|
} = releaseApi;
|
|
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
|
+
};
|
|
346
|
+
const useTypedDispatch = useDispatch;
|
|
347
|
+
const useTypedSelector = useSelector;
|
|
309
348
|
const StyledMenuItem = styled(Menu.Item)`
|
|
310
349
|
&:hover {
|
|
311
|
-
background: ${({ theme }) => theme.colors
|
|
350
|
+
background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
|
|
351
|
+
|
|
352
|
+
svg {
|
|
353
|
+
path {
|
|
354
|
+
fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
a {
|
|
359
|
+
color: ${({ theme }) => theme.colors.neutral800};
|
|
360
|
+
}
|
|
312
361
|
}
|
|
313
362
|
|
|
314
363
|
svg {
|
|
315
364
|
path {
|
|
316
|
-
fill: ${({ theme }) => theme.colors
|
|
365
|
+
fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
|
|
317
366
|
}
|
|
318
367
|
}
|
|
319
368
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
369
|
+
a {
|
|
370
|
+
color: ${({ theme }) => theme.colors.neutral800};
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
span,
|
|
374
|
+
a {
|
|
375
|
+
width: 100%;
|
|
326
376
|
}
|
|
327
|
-
`;
|
|
328
|
-
const StyledCross = styled(Cross)`
|
|
329
|
-
padding: ${({ theme }) => theme.spaces[1]};
|
|
330
377
|
`;
|
|
331
378
|
const StyledIconButton = styled(IconButton)`
|
|
332
379
|
/* Setting this style inline with borderColor will not apply the style */
|
|
333
380
|
border: ${({ theme }) => `1px solid ${theme.colors.neutral200}`};
|
|
334
381
|
`;
|
|
335
|
-
const
|
|
336
|
-
releaseId,
|
|
337
|
-
actionId,
|
|
338
|
-
hasTriggerBorder = false
|
|
339
|
-
}) => {
|
|
382
|
+
const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
340
383
|
const { formatMessage } = useIntl();
|
|
341
384
|
const toggleNotification = useNotification();
|
|
342
385
|
const { formatAPIError } = useAPIErrorHandler();
|
|
@@ -369,6 +412,73 @@ const ReleaseActionMenu = ({
|
|
|
369
412
|
}
|
|
370
413
|
}
|
|
371
414
|
};
|
|
415
|
+
return /* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
416
|
+
/* @__PURE__ */ jsx(Icon, { as: Cross, width: 3, height: 3 }),
|
|
417
|
+
/* @__PURE__ */ jsx(Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
|
|
418
|
+
id: "content-releases.content-manager-edit-view.remove-from-release",
|
|
419
|
+
defaultMessage: "Remove from release"
|
|
420
|
+
}) })
|
|
421
|
+
] }) }) });
|
|
422
|
+
};
|
|
423
|
+
const ReleaseActionEntryLinkItem = ({
|
|
424
|
+
contentTypeUid,
|
|
425
|
+
entryId,
|
|
426
|
+
locale
|
|
427
|
+
}) => {
|
|
428
|
+
const { formatMessage } = useIntl();
|
|
429
|
+
const collectionTypePermissions = useTypedSelector(
|
|
430
|
+
(state) => state.rbacProvider.collectionTypesRelatedPermissions
|
|
431
|
+
);
|
|
432
|
+
const updatePermissions = contentTypeUid ? collectionTypePermissions[contentTypeUid]?.["plugin::content-manager.explorer.update"] : [];
|
|
433
|
+
const canUpdateEntryForLocale = Boolean(
|
|
434
|
+
!locale || updatePermissions?.find(
|
|
435
|
+
(permission) => permission.properties?.locales?.includes(locale)
|
|
436
|
+
)
|
|
437
|
+
);
|
|
438
|
+
return /* @__PURE__ */ jsx(
|
|
439
|
+
CheckPermissions,
|
|
440
|
+
{
|
|
441
|
+
permissions: [
|
|
442
|
+
{
|
|
443
|
+
action: "plugin::content-manager.explorer.update",
|
|
444
|
+
subject: contentTypeUid
|
|
445
|
+
}
|
|
446
|
+
],
|
|
447
|
+
children: canUpdateEntryForLocale && /* @__PURE__ */ jsx(StyledMenuItem, { children: /* @__PURE__ */ jsx(
|
|
448
|
+
Link,
|
|
449
|
+
{
|
|
450
|
+
as: NavLink,
|
|
451
|
+
to: {
|
|
452
|
+
pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
|
|
453
|
+
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
454
|
+
},
|
|
455
|
+
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
|
|
456
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
457
|
+
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
458
|
+
defaultMessage: "Edit entry"
|
|
459
|
+
}) })
|
|
460
|
+
}
|
|
461
|
+
) })
|
|
462
|
+
}
|
|
463
|
+
);
|
|
464
|
+
};
|
|
465
|
+
const EditReleaseItem = ({ releaseId }) => {
|
|
466
|
+
const { formatMessage } = useIntl();
|
|
467
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { children: /* @__PURE__ */ jsx(
|
|
468
|
+
Link,
|
|
469
|
+
{
|
|
470
|
+
as: NavLink,
|
|
471
|
+
to: `/plugins/content-releases/${releaseId}`,
|
|
472
|
+
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
|
|
473
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
474
|
+
id: "content-releases.content-manager-edit-view.edit-release",
|
|
475
|
+
defaultMessage: "Edit release"
|
|
476
|
+
}) })
|
|
477
|
+
}
|
|
478
|
+
) });
|
|
479
|
+
};
|
|
480
|
+
const Root = ({ children, hasTriggerBorder = false }) => {
|
|
481
|
+
const { formatMessage } = useIntl();
|
|
372
482
|
return (
|
|
373
483
|
// A user can access the dropdown if they have permissions to delete a release-action OR update a release
|
|
374
484
|
/* @__PURE__ */ jsx(CheckPermissions, { permissions: [...PERMISSIONS.deleteAction, ...PERMISSIONS.update], children: /* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
@@ -385,16 +495,16 @@ const ReleaseActionMenu = ({
|
|
|
385
495
|
icon: /* @__PURE__ */ jsx(More, {})
|
|
386
496
|
}
|
|
387
497
|
),
|
|
388
|
-
/* @__PURE__ */ jsx(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children
|
|
389
|
-
/* @__PURE__ */ jsx(StyledCross, {}),
|
|
390
|
-
/* @__PURE__ */ jsx(Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
|
|
391
|
-
id: "content-releases.content-manager-edit-view.remove-from-release",
|
|
392
|
-
defaultMessage: "Remove from release"
|
|
393
|
-
}) })
|
|
394
|
-
] }) }) }) })
|
|
498
|
+
/* @__PURE__ */ jsx(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
|
|
395
499
|
] }) })
|
|
396
500
|
);
|
|
397
501
|
};
|
|
502
|
+
const ReleaseActionMenu = {
|
|
503
|
+
Root,
|
|
504
|
+
EditReleaseItem,
|
|
505
|
+
DeleteReleaseActionItem,
|
|
506
|
+
ReleaseActionEntryLinkItem
|
|
507
|
+
};
|
|
398
508
|
const getBorderLeftRadiusValue = (actionType) => {
|
|
399
509
|
return actionType === "publish" ? 1 : 0;
|
|
400
510
|
};
|
|
@@ -415,19 +525,40 @@ const FieldWrapper = styled(Field)`
|
|
|
415
525
|
text-transform: capitalize;
|
|
416
526
|
}
|
|
417
527
|
|
|
418
|
-
&:active,
|
|
419
528
|
&[data-checked='true'] {
|
|
420
|
-
color: ${({ theme }) => theme.colors.primary700};
|
|
421
|
-
background-color: ${({ theme }) => theme.colors.primary100};
|
|
422
|
-
border-color: ${({ theme }) => theme.colors.primary700};
|
|
529
|
+
color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
|
|
530
|
+
background-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
|
|
531
|
+
border-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
|
|
423
532
|
}
|
|
424
533
|
|
|
425
534
|
&[data-checked='false'] {
|
|
426
535
|
border-left: ${({ actionType }) => actionType === "unpublish" && "none"};
|
|
427
536
|
border-right: ${({ actionType }) => actionType === "publish" && "none"};
|
|
428
537
|
}
|
|
538
|
+
|
|
539
|
+
&[data-checked='false'][data-disabled='false']:hover {
|
|
540
|
+
color: ${({ theme }) => theme.colors.neutral700};
|
|
541
|
+
background-color: ${({ theme }) => theme.colors.neutral100};
|
|
542
|
+
border-color: ${({ theme }) => theme.colors.neutral200};
|
|
543
|
+
|
|
544
|
+
& > label {
|
|
545
|
+
cursor: pointer;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
&[data-disabled='true'] {
|
|
550
|
+
color: ${({ theme }) => theme.colors.neutral600};
|
|
551
|
+
background-color: ${({ theme }) => theme.colors.neutral150};
|
|
552
|
+
border-color: ${({ theme }) => theme.colors.neutral300};
|
|
553
|
+
}
|
|
429
554
|
`;
|
|
430
|
-
const ActionOption = ({
|
|
555
|
+
const ActionOption = ({
|
|
556
|
+
selected,
|
|
557
|
+
actionType,
|
|
558
|
+
handleChange,
|
|
559
|
+
name,
|
|
560
|
+
disabled = false
|
|
561
|
+
}) => {
|
|
431
562
|
return /* @__PURE__ */ jsx(
|
|
432
563
|
FieldWrapper,
|
|
433
564
|
{
|
|
@@ -438,6 +569,7 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
438
569
|
position: "relative",
|
|
439
570
|
cursor: "pointer",
|
|
440
571
|
"data-checked": selected === actionType,
|
|
572
|
+
"data-disabled": disabled && selected !== actionType,
|
|
441
573
|
children: /* @__PURE__ */ jsxs(FieldLabel, { htmlFor: `${name}-${actionType}`, children: [
|
|
442
574
|
/* @__PURE__ */ jsx(VisuallyHidden, { children: /* @__PURE__ */ jsx(
|
|
443
575
|
FieldInput,
|
|
@@ -447,7 +579,8 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
447
579
|
name,
|
|
448
580
|
checked: selected === actionType,
|
|
449
581
|
onChange: handleChange,
|
|
450
|
-
value: actionType
|
|
582
|
+
value: actionType,
|
|
583
|
+
disabled
|
|
451
584
|
}
|
|
452
585
|
) }),
|
|
453
586
|
actionType
|
|
@@ -455,7 +588,12 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
455
588
|
}
|
|
456
589
|
);
|
|
457
590
|
};
|
|
458
|
-
const ReleaseActionOptions = ({
|
|
591
|
+
const ReleaseActionOptions = ({
|
|
592
|
+
selected,
|
|
593
|
+
handleChange,
|
|
594
|
+
name,
|
|
595
|
+
disabled = false
|
|
596
|
+
}) => {
|
|
459
597
|
return /* @__PURE__ */ jsxs(Flex, { children: [
|
|
460
598
|
/* @__PURE__ */ jsx(
|
|
461
599
|
ActionOption,
|
|
@@ -463,7 +601,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
|
|
|
463
601
|
actionType: "publish",
|
|
464
602
|
selected,
|
|
465
603
|
handleChange,
|
|
466
|
-
name
|
|
604
|
+
name,
|
|
605
|
+
disabled
|
|
467
606
|
}
|
|
468
607
|
),
|
|
469
608
|
/* @__PURE__ */ jsx(
|
|
@@ -472,7 +611,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
|
|
|
472
611
|
actionType: "unpublish",
|
|
473
612
|
selected,
|
|
474
613
|
handleChange,
|
|
475
|
-
name
|
|
614
|
+
name,
|
|
615
|
+
disabled
|
|
476
616
|
}
|
|
477
617
|
)
|
|
478
618
|
] });
|
|
@@ -488,19 +628,20 @@ const INITIAL_VALUES = {
|
|
|
488
628
|
const NoReleases = () => {
|
|
489
629
|
const { formatMessage } = useIntl();
|
|
490
630
|
return /* @__PURE__ */ jsx(
|
|
491
|
-
|
|
631
|
+
EmptyStateLayout,
|
|
492
632
|
{
|
|
493
|
-
|
|
633
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" }),
|
|
634
|
+
content: formatMessage({
|
|
494
635
|
id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
|
|
495
636
|
defaultMessage: "No available releases. Open the list of releases and create a new one from there."
|
|
496
|
-
},
|
|
637
|
+
}),
|
|
497
638
|
action: /* @__PURE__ */ jsx(
|
|
498
639
|
LinkButton,
|
|
499
640
|
{
|
|
500
641
|
to: {
|
|
501
642
|
pathname: "/plugins/content-releases"
|
|
502
643
|
},
|
|
503
|
-
as: Link,
|
|
644
|
+
as: Link$1,
|
|
504
645
|
variant: "secondary",
|
|
505
646
|
children: formatMessage({
|
|
506
647
|
id: "content-releases.content-manager-edit-view.add-to-release.redirect-button",
|
|
@@ -516,10 +657,12 @@ const AddActionToReleaseModal = ({
|
|
|
516
657
|
contentTypeUid,
|
|
517
658
|
entryId
|
|
518
659
|
}) => {
|
|
660
|
+
const releaseHeaderId = React.useId();
|
|
519
661
|
const { formatMessage } = useIntl();
|
|
520
662
|
const toggleNotification = useNotification();
|
|
521
663
|
const { formatAPIError } = useAPIErrorHandler();
|
|
522
|
-
const {
|
|
664
|
+
const [{ query }] = useQueryParams();
|
|
665
|
+
const locale = query.plugins?.i18n?.locale;
|
|
523
666
|
const response = useGetReleasesForEntryQuery({
|
|
524
667
|
contentTypeUid,
|
|
525
668
|
entryId,
|
|
@@ -528,7 +671,6 @@ const AddActionToReleaseModal = ({
|
|
|
528
671
|
const releases = response.data?.data;
|
|
529
672
|
const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
|
|
530
673
|
const handleSubmit = async (values) => {
|
|
531
|
-
const locale = modifiedData.locale;
|
|
532
674
|
const releaseActionEntry = {
|
|
533
675
|
contentType: contentTypeUid,
|
|
534
676
|
id: entryId,
|
|
@@ -563,8 +705,8 @@ const AddActionToReleaseModal = ({
|
|
|
563
705
|
}
|
|
564
706
|
}
|
|
565
707
|
};
|
|
566
|
-
return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy:
|
|
567
|
-
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id:
|
|
708
|
+
return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy: releaseHeaderId, children: [
|
|
709
|
+
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id: releaseHeaderId, fontWeight: "bold", textColor: "neutral800", children: formatMessage({
|
|
568
710
|
id: "content-releases.content-manager-edit-view.add-to-release",
|
|
569
711
|
defaultMessage: "Add to release"
|
|
570
712
|
}) }) }),
|
|
@@ -634,16 +776,15 @@ const AddActionToReleaseModal = ({
|
|
|
634
776
|
};
|
|
635
777
|
const CMReleasesContainer = () => {
|
|
636
778
|
const [isModalOpen, setIsModalOpen] = React.useState(false);
|
|
637
|
-
const { formatMessage } = useIntl();
|
|
638
|
-
const {
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
const
|
|
643
|
-
const canFetch = params?.id != null && contentType?.uid != null;
|
|
779
|
+
const { formatMessage, formatDate, formatTime } = useIntl();
|
|
780
|
+
const { id, slug } = useParams();
|
|
781
|
+
const isCreatingEntry = id === "create";
|
|
782
|
+
const contentTypeUid = slug;
|
|
783
|
+
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
784
|
+
const canFetch = id != null && contentTypeUid != null;
|
|
644
785
|
const fetchParams = canFetch ? {
|
|
645
|
-
contentTypeUid
|
|
646
|
-
entryId:
|
|
786
|
+
contentTypeUid,
|
|
787
|
+
entryId: id,
|
|
647
788
|
hasEntryAttached: true
|
|
648
789
|
} : skipToken;
|
|
649
790
|
const response = useGetReleasesForEntryQuery(fetchParams);
|
|
@@ -651,7 +792,7 @@ const CMReleasesContainer = () => {
|
|
|
651
792
|
if (!canFetch) {
|
|
652
793
|
return null;
|
|
653
794
|
}
|
|
654
|
-
if (isCreatingEntry
|
|
795
|
+
if (isCreatingEntry) {
|
|
655
796
|
return null;
|
|
656
797
|
}
|
|
657
798
|
const toggleModal = () => setIsModalOpen((prev) => !prev);
|
|
@@ -718,16 +859,40 @@ const CMReleasesContainer = () => {
|
|
|
718
859
|
)
|
|
719
860
|
}
|
|
720
861
|
),
|
|
721
|
-
/* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap:
|
|
862
|
+
/* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
|
|
722
863
|
/* @__PURE__ */ jsx(Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
|
|
723
|
-
/* @__PURE__ */ jsx(
|
|
724
|
-
|
|
864
|
+
IsSchedulingEnabled && release.scheduledAt && release.timezone && /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
|
|
865
|
+
{
|
|
866
|
+
id: "content-releases.content-manager-edit-view.scheduled.date",
|
|
867
|
+
defaultMessage: "{date} at {time} ({offset})"
|
|
868
|
+
},
|
|
725
869
|
{
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
870
|
+
date: formatDate(new Date(release.scheduledAt), {
|
|
871
|
+
day: "2-digit",
|
|
872
|
+
month: "2-digit",
|
|
873
|
+
year: "numeric",
|
|
874
|
+
timeZone: release.timezone
|
|
875
|
+
}),
|
|
876
|
+
time: formatTime(new Date(release.scheduledAt), {
|
|
877
|
+
hourCycle: "h23",
|
|
878
|
+
timeZone: release.timezone
|
|
879
|
+
}),
|
|
880
|
+
offset: getTimezoneOffset(
|
|
881
|
+
release.timezone,
|
|
882
|
+
new Date(release.scheduledAt)
|
|
883
|
+
)
|
|
729
884
|
}
|
|
730
|
-
)
|
|
885
|
+
) }),
|
|
886
|
+
/* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
|
|
887
|
+
/* @__PURE__ */ jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
|
|
888
|
+
/* @__PURE__ */ jsx(
|
|
889
|
+
ReleaseActionMenu.DeleteReleaseActionItem,
|
|
890
|
+
{
|
|
891
|
+
releaseId: release.id,
|
|
892
|
+
actionId: release.action.id
|
|
893
|
+
}
|
|
894
|
+
)
|
|
895
|
+
] }) })
|
|
731
896
|
] })
|
|
732
897
|
]
|
|
733
898
|
},
|
|
@@ -755,8 +920,8 @@ const CMReleasesContainer = () => {
|
|
|
755
920
|
AddActionToReleaseModal,
|
|
756
921
|
{
|
|
757
922
|
handleClose: toggleModal,
|
|
758
|
-
contentTypeUid
|
|
759
|
-
entryId:
|
|
923
|
+
contentTypeUid,
|
|
924
|
+
entryId: id
|
|
760
925
|
}
|
|
761
926
|
)
|
|
762
927
|
]
|
|
@@ -766,18 +931,15 @@ const CMReleasesContainer = () => {
|
|
|
766
931
|
const admin = {
|
|
767
932
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
768
933
|
register(app) {
|
|
769
|
-
if (window.strapi.features.isEnabled("cms-content-releases")
|
|
934
|
+
if (window.strapi.features.isEnabled("cms-content-releases")) {
|
|
770
935
|
app.addMenuLink({
|
|
771
|
-
to:
|
|
936
|
+
to: `plugins/${pluginId}`,
|
|
772
937
|
icon: PaperPlane,
|
|
773
938
|
intlLabel: {
|
|
774
939
|
id: `${pluginId}.plugin.name`,
|
|
775
940
|
defaultMessage: "Releases"
|
|
776
941
|
},
|
|
777
|
-
|
|
778
|
-
const { App } = await import("./App-g2P5kbSm.mjs");
|
|
779
|
-
return App;
|
|
780
|
-
},
|
|
942
|
+
Component: () => import("./App-PQlYzNfb.mjs").then((mod) => ({ default: mod.App })),
|
|
781
943
|
permissions: PERMISSIONS.main
|
|
782
944
|
});
|
|
783
945
|
app.addMiddlewares([() => releaseApi.middleware]);
|
|
@@ -788,12 +950,26 @@ const admin = {
|
|
|
788
950
|
name: `${pluginId}-link`,
|
|
789
951
|
Component: CMReleasesContainer
|
|
790
952
|
});
|
|
953
|
+
} else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
|
|
954
|
+
app.addMenuLink({
|
|
955
|
+
to: `/plugins/purchase-content-releases`,
|
|
956
|
+
icon: PaperPlane,
|
|
957
|
+
intlLabel: {
|
|
958
|
+
id: `${pluginId}.plugin.name`,
|
|
959
|
+
defaultMessage: "Releases"
|
|
960
|
+
},
|
|
961
|
+
async Component() {
|
|
962
|
+
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-Clm0iACO.mjs");
|
|
963
|
+
return PurchaseContentReleases;
|
|
964
|
+
},
|
|
965
|
+
lockIcon: true
|
|
966
|
+
});
|
|
791
967
|
}
|
|
792
968
|
},
|
|
793
969
|
async registerTrads({ locales }) {
|
|
794
970
|
const importedTrads = await Promise.all(
|
|
795
971
|
locales.map((locale) => {
|
|
796
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-
|
|
972
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-WuuhP6Bn.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
|
|
797
973
|
return {
|
|
798
974
|
data: prefixPluginTranslations(data, "content-releases"),
|
|
799
975
|
locale
|
|
@@ -812,17 +988,20 @@ const admin = {
|
|
|
812
988
|
export {
|
|
813
989
|
PERMISSIONS as P,
|
|
814
990
|
ReleaseActionOptions as R,
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
991
|
+
useCreateReleaseMutation as a,
|
|
992
|
+
useGetReleaseQuery as b,
|
|
993
|
+
useUpdateReleaseMutation as c,
|
|
994
|
+
useDeleteReleaseMutation as d,
|
|
995
|
+
usePublishReleaseMutation as e,
|
|
996
|
+
useTypedDispatch as f,
|
|
997
|
+
getTimezoneOffset as g,
|
|
998
|
+
useGetReleaseActionsQuery as h,
|
|
823
999
|
isAxiosError as i,
|
|
824
|
-
|
|
1000
|
+
useUpdateReleaseActionMutation as j,
|
|
1001
|
+
ReleaseActionMenu as k,
|
|
1002
|
+
admin as l,
|
|
825
1003
|
pluginId as p,
|
|
826
|
-
|
|
1004
|
+
releaseApi as r,
|
|
1005
|
+
useGetReleasesQuery as u
|
|
827
1006
|
};
|
|
828
|
-
//# sourceMappingURL=index
|
|
1007
|
+
//# sourceMappingURL=index--4AgLDzb.mjs.map
|