@strapi/content-releases 0.0.0-experimental.ee4d311a5e6a131fad03cf07e4696f49fdd9c2e6 → 0.0.0-experimental.f75e3c6d67cc47c64ab37479efdbb7b43be50b78
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-DUmziQ17.js +1366 -0
- package/dist/_chunks/App-DUmziQ17.js.map +1 -0
- package/dist/_chunks/App-D_6Y9N2F.mjs +1344 -0
- package/dist/_chunks/App-D_6Y9N2F.mjs.map +1 -0
- package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js +52 -0
- package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +1 -0
- package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs +52 -0
- package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +1 -0
- package/dist/_chunks/{en-MyLPoISH.mjs → en-B9Ur3VsE.mjs} +30 -7
- package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
- package/dist/_chunks/{en-gYDqKYFd.js → en-DtFJ5ViE.js} +30 -7
- package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
- package/dist/_chunks/{index-EIe8S-cw.mjs → index-BomF0-yY.mjs} +352 -221
- package/dist/_chunks/index-BomF0-yY.mjs.map +1 -0
- package/dist/_chunks/{index-l5iuP0Hb.js → index-C5Hc767q.js} +346 -217
- package/dist/_chunks/index-C5Hc767q.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/release.d.ts +105 -0
- package/dist/admin/src/store/hooks.d.ts +7 -0
- package/dist/admin/src/utils/api.d.ts +6 -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 +1113 -418
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +1113 -418
- 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 +31 -35
- package/dist/_chunks/App-0yPbcoGt.js +0 -1037
- package/dist/_chunks/App-0yPbcoGt.js.map +0 -1
- package/dist/_chunks/App-BWaM2ihP.mjs +0 -1015
- package/dist/_chunks/App-BWaM2ihP.mjs.map +0 -1
- package/dist/_chunks/en-MyLPoISH.mjs.map +0 -1
- package/dist/_chunks/en-gYDqKYFd.js.map +0 -1
- package/dist/_chunks/index-EIe8S-cw.mjs.map +0 -1
- package/dist/_chunks/index-l5iuP0Hb.js.map +0 -1
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import { getFetchClient, useNotification, useAPIErrorHandler, CheckPermissions, useCMEditViewDataManager, NoContent, 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 {
|
|
8
|
-
import {
|
|
5
|
+
import { adminApi, useNotification, useAPIErrorHandler, useRBAC, useAuth, isFetchError, useQueryParams } from "@strapi/admin/strapi-admin";
|
|
6
|
+
import { unstable_useDocument } from "@strapi/content-manager/strapi-admin";
|
|
7
|
+
import { Menu, Flex, Typography, AccessibleIcon, Field, VisuallyHidden, Box, Button, ModalLayout, ModalHeader, ModalBody, SingleSelect, SingleSelectOption, ModalFooter, EmptyStateLayout, LinkButton } from "@strapi/design-system";
|
|
8
|
+
import { EmptyDocuments } from "@strapi/icons/symbols";
|
|
9
9
|
import { Formik, Form } from "formik";
|
|
10
10
|
import { useIntl } from "react-intl";
|
|
11
|
-
import {
|
|
11
|
+
import { Link, useParams } from "react-router-dom";
|
|
12
12
|
import * as yup from "yup";
|
|
13
|
-
import {
|
|
14
|
-
import styled from "styled-components";
|
|
15
|
-
import { useDispatch, useSelector } from "react-redux";
|
|
13
|
+
import { styled } from "styled-components";
|
|
16
14
|
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
|
17
15
|
const v = glob[path];
|
|
18
16
|
if (v) {
|
|
@@ -94,49 +92,9 @@ const PERMISSIONS = {
|
|
|
94
92
|
}
|
|
95
93
|
]
|
|
96
94
|
};
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
method,
|
|
101
|
-
data,
|
|
102
|
-
config
|
|
103
|
-
}) => {
|
|
104
|
-
try {
|
|
105
|
-
const { get, post, del, put } = getFetchClient();
|
|
106
|
-
if (method === "POST") {
|
|
107
|
-
const result2 = await post(url, data, config);
|
|
108
|
-
return { data: result2.data };
|
|
109
|
-
}
|
|
110
|
-
if (method === "DELETE") {
|
|
111
|
-
const result2 = await del(url, config);
|
|
112
|
-
return { data: result2.data };
|
|
113
|
-
}
|
|
114
|
-
if (method === "PUT") {
|
|
115
|
-
const result2 = await put(url, data, config);
|
|
116
|
-
return { data: result2.data };
|
|
117
|
-
}
|
|
118
|
-
const result = await get(url, config);
|
|
119
|
-
return { data: result.data };
|
|
120
|
-
} catch (error) {
|
|
121
|
-
const err = error;
|
|
122
|
-
return {
|
|
123
|
-
error: {
|
|
124
|
-
status: err.response?.status,
|
|
125
|
-
code: err.code,
|
|
126
|
-
response: {
|
|
127
|
-
data: err.response?.data
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
const isAxiosError = (err) => {
|
|
134
|
-
return typeof err === "object" && err !== null && "response" in err && typeof err.response === "object" && err.response !== null && "data" in err.response;
|
|
135
|
-
};
|
|
136
|
-
const releaseApi = createApi({
|
|
137
|
-
reducerPath: pluginId,
|
|
138
|
-
baseQuery: axiosBaseQuery,
|
|
139
|
-
tagTypes: ["Release", "ReleaseAction"],
|
|
95
|
+
const releaseApi = adminApi.enhanceEndpoints({
|
|
96
|
+
addTagTypes: ["Release", "ReleaseAction", "EntriesInRelease"]
|
|
97
|
+
}).injectEndpoints({
|
|
140
98
|
endpoints: (build) => {
|
|
141
99
|
return {
|
|
142
100
|
getReleasesForEntry: build.query({
|
|
@@ -251,6 +209,20 @@ const releaseApi = createApi({
|
|
|
251
209
|
{ type: "ReleaseAction", id: "LIST" }
|
|
252
210
|
]
|
|
253
211
|
}),
|
|
212
|
+
createManyReleaseActions: build.mutation({
|
|
213
|
+
query({ body, params }) {
|
|
214
|
+
return {
|
|
215
|
+
url: `/content-releases/${params.releaseId}/actions/bulk`,
|
|
216
|
+
method: "POST",
|
|
217
|
+
data: body
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
invalidatesTags: [
|
|
221
|
+
{ type: "Release", id: "LIST" },
|
|
222
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
223
|
+
{ type: "EntriesInRelease" }
|
|
224
|
+
]
|
|
225
|
+
}),
|
|
254
226
|
updateReleaseAction: build.mutation({
|
|
255
227
|
query({ body, params }) {
|
|
256
228
|
return {
|
|
@@ -259,7 +231,31 @@ const releaseApi = createApi({
|
|
|
259
231
|
data: body
|
|
260
232
|
};
|
|
261
233
|
},
|
|
262
|
-
invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }]
|
|
234
|
+
invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }],
|
|
235
|
+
async onQueryStarted({ body, params, query, actionPath }, { dispatch, queryFulfilled }) {
|
|
236
|
+
const paramsWithoutActionId = {
|
|
237
|
+
releaseId: params.releaseId,
|
|
238
|
+
...query
|
|
239
|
+
};
|
|
240
|
+
const patchResult = dispatch(
|
|
241
|
+
releaseApi.util.updateQueryData(
|
|
242
|
+
"getReleaseActions",
|
|
243
|
+
paramsWithoutActionId,
|
|
244
|
+
(draft) => {
|
|
245
|
+
const [key, index] = actionPath;
|
|
246
|
+
const action = draft.data[key][index];
|
|
247
|
+
if (action) {
|
|
248
|
+
action.type = body.type;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
)
|
|
252
|
+
);
|
|
253
|
+
try {
|
|
254
|
+
await queryFulfilled;
|
|
255
|
+
} catch {
|
|
256
|
+
patchResult.undo();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
263
259
|
}),
|
|
264
260
|
deleteReleaseAction: build.mutation({
|
|
265
261
|
query({ params }) {
|
|
@@ -268,9 +264,11 @@ const releaseApi = createApi({
|
|
|
268
264
|
method: "DELETE"
|
|
269
265
|
};
|
|
270
266
|
},
|
|
271
|
-
invalidatesTags: [
|
|
267
|
+
invalidatesTags: (result, error, arg) => [
|
|
272
268
|
{ type: "Release", id: "LIST" },
|
|
273
|
-
{ type: "
|
|
269
|
+
{ type: "Release", id: arg.params.releaseId },
|
|
270
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
271
|
+
{ type: "EntriesInRelease" }
|
|
274
272
|
]
|
|
275
273
|
}),
|
|
276
274
|
publishRelease: build.mutation({
|
|
@@ -289,7 +287,22 @@ const releaseApi = createApi({
|
|
|
289
287
|
method: "DELETE"
|
|
290
288
|
};
|
|
291
289
|
},
|
|
292
|
-
invalidatesTags: (
|
|
290
|
+
invalidatesTags: () => [{ type: "Release", id: "LIST" }, { type: "EntriesInRelease" }]
|
|
291
|
+
}),
|
|
292
|
+
getMappedEntriesInReleases: build.query({
|
|
293
|
+
query(params) {
|
|
294
|
+
return {
|
|
295
|
+
url: "/content-releases/mapEntriesToReleases",
|
|
296
|
+
method: "GET",
|
|
297
|
+
config: {
|
|
298
|
+
params
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
},
|
|
302
|
+
transformResponse(response) {
|
|
303
|
+
return response.data;
|
|
304
|
+
},
|
|
305
|
+
providesTags: [{ type: "EntriesInRelease" }]
|
|
293
306
|
})
|
|
294
307
|
};
|
|
295
308
|
}
|
|
@@ -301,22 +314,36 @@ const {
|
|
|
301
314
|
useGetReleaseActionsQuery,
|
|
302
315
|
useCreateReleaseMutation,
|
|
303
316
|
useCreateReleaseActionMutation,
|
|
317
|
+
useCreateManyReleaseActionsMutation,
|
|
304
318
|
useUpdateReleaseMutation,
|
|
305
319
|
useUpdateReleaseActionMutation,
|
|
306
320
|
usePublishReleaseMutation,
|
|
307
321
|
useDeleteReleaseActionMutation,
|
|
308
|
-
useDeleteReleaseMutation
|
|
322
|
+
useDeleteReleaseMutation,
|
|
323
|
+
useGetMappedEntriesInReleasesQuery
|
|
309
324
|
} = releaseApi;
|
|
310
|
-
const
|
|
311
|
-
|
|
325
|
+
const getTimezoneOffset = (timezone, date) => {
|
|
326
|
+
try {
|
|
327
|
+
const offsetPart = new Intl.DateTimeFormat("en", {
|
|
328
|
+
timeZone: timezone,
|
|
329
|
+
timeZoneName: "longOffset"
|
|
330
|
+
}).formatToParts(date).find((part) => part.type === "timeZoneName");
|
|
331
|
+
const offset = offsetPart ? offsetPart.value : "";
|
|
332
|
+
let utcOffset = offset.replace("GMT", "UTC");
|
|
333
|
+
if (!utcOffset.includes("+") && !utcOffset.includes("-")) {
|
|
334
|
+
utcOffset = `${utcOffset}+00:00`;
|
|
335
|
+
}
|
|
336
|
+
return utcOffset;
|
|
337
|
+
} catch (error) {
|
|
338
|
+
return "";
|
|
339
|
+
}
|
|
340
|
+
};
|
|
312
341
|
const StyledMenuItem = styled(Menu.Item)`
|
|
313
342
|
&:hover {
|
|
314
|
-
background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
|
|
343
|
+
background: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}100`]};
|
|
315
344
|
|
|
316
345
|
svg {
|
|
317
|
-
|
|
318
|
-
fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
|
|
319
|
-
}
|
|
346
|
+
fill: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}600`]};
|
|
320
347
|
}
|
|
321
348
|
|
|
322
349
|
a {
|
|
@@ -325,9 +352,7 @@ const StyledMenuItem = styled(Menu.Item)`
|
|
|
325
352
|
}
|
|
326
353
|
|
|
327
354
|
svg {
|
|
328
|
-
|
|
329
|
-
fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
|
|
330
|
-
}
|
|
355
|
+
fill: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}600`]};
|
|
331
356
|
}
|
|
332
357
|
|
|
333
358
|
a {
|
|
@@ -339,15 +364,14 @@ const StyledMenuItem = styled(Menu.Item)`
|
|
|
339
364
|
width: 100%;
|
|
340
365
|
}
|
|
341
366
|
`;
|
|
342
|
-
const StyledIconButton = styled(IconButton)`
|
|
343
|
-
/* Setting this style inline with borderColor will not apply the style */
|
|
344
|
-
border: ${({ theme }) => `1px solid ${theme.colors.neutral200}`};
|
|
345
|
-
`;
|
|
346
367
|
const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
347
368
|
const { formatMessage } = useIntl();
|
|
348
|
-
const toggleNotification = useNotification();
|
|
369
|
+
const { toggleNotification } = useNotification();
|
|
349
370
|
const { formatAPIError } = useAPIErrorHandler();
|
|
350
371
|
const [deleteReleaseAction] = useDeleteReleaseActionMutation();
|
|
372
|
+
const {
|
|
373
|
+
allowedActions: { canDeleteAction }
|
|
374
|
+
} = useRBAC(PERMISSIONS);
|
|
351
375
|
const handleDeleteAction = async () => {
|
|
352
376
|
const response = await deleteReleaseAction({
|
|
353
377
|
params: { releaseId, actionId }
|
|
@@ -363,26 +387,29 @@ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
|
|
|
363
387
|
return;
|
|
364
388
|
}
|
|
365
389
|
if ("error" in response) {
|
|
366
|
-
if (
|
|
390
|
+
if (isFetchError(response.error)) {
|
|
367
391
|
toggleNotification({
|
|
368
|
-
type: "
|
|
392
|
+
type: "danger",
|
|
369
393
|
message: formatAPIError(response.error)
|
|
370
394
|
});
|
|
371
395
|
} else {
|
|
372
396
|
toggleNotification({
|
|
373
|
-
type: "
|
|
397
|
+
type: "danger",
|
|
374
398
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
375
399
|
});
|
|
376
400
|
}
|
|
377
401
|
}
|
|
378
402
|
};
|
|
379
|
-
|
|
380
|
-
|
|
403
|
+
if (!canDeleteAction) {
|
|
404
|
+
return null;
|
|
405
|
+
}
|
|
406
|
+
return /* @__PURE__ */ jsx(StyledMenuItem, { $variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
407
|
+
/* @__PURE__ */ jsx(Cross, { width: "1.6rem", height: "1.6rem" }),
|
|
381
408
|
/* @__PURE__ */ jsx(Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
|
|
382
409
|
id: "content-releases.content-manager-edit-view.remove-from-release",
|
|
383
410
|
defaultMessage: "Remove from release"
|
|
384
411
|
}) })
|
|
385
|
-
] }) })
|
|
412
|
+
] }) });
|
|
386
413
|
};
|
|
387
414
|
const ReleaseActionEntryLinkItem = ({
|
|
388
415
|
contentTypeUid,
|
|
@@ -390,66 +417,84 @@ const ReleaseActionEntryLinkItem = ({
|
|
|
390
417
|
locale
|
|
391
418
|
}) => {
|
|
392
419
|
const { formatMessage } = useIntl();
|
|
393
|
-
const
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
!
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
420
|
+
const userPermissions = useAuth("ReleaseActionEntryLinkItem", (state) => state.permissions);
|
|
421
|
+
const canUpdateEntryForLocale = React.useMemo(() => {
|
|
422
|
+
const updatePermissions = userPermissions.find(
|
|
423
|
+
(permission) => permission.subject === contentTypeUid && permission.action === "plugin::content-manager.explorer.update"
|
|
424
|
+
);
|
|
425
|
+
if (!updatePermissions) {
|
|
426
|
+
return false;
|
|
427
|
+
}
|
|
428
|
+
return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
|
|
429
|
+
}, [contentTypeUid, locale, userPermissions]);
|
|
430
|
+
const {
|
|
431
|
+
allowedActions: { canUpdate: canUpdateContentType }
|
|
432
|
+
} = useRBAC({
|
|
433
|
+
updateContentType: [
|
|
434
|
+
{
|
|
435
|
+
action: "plugin::content-manager.explorer.update",
|
|
436
|
+
subject: contentTypeUid
|
|
437
|
+
}
|
|
438
|
+
]
|
|
439
|
+
});
|
|
440
|
+
if (!canUpdateContentType || !canUpdateEntryForLocale) {
|
|
441
|
+
return null;
|
|
442
|
+
}
|
|
402
443
|
return /* @__PURE__ */ jsx(
|
|
403
|
-
|
|
444
|
+
StyledMenuItem,
|
|
404
445
|
{
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
children:
|
|
412
|
-
|
|
413
|
-
{
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
},
|
|
419
|
-
startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, padding: 1 }),
|
|
420
|
-
children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
421
|
-
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
422
|
-
defaultMessage: "Edit entry"
|
|
423
|
-
}) })
|
|
424
|
-
}
|
|
425
|
-
) })
|
|
446
|
+
tag: Link,
|
|
447
|
+
isLink: true,
|
|
448
|
+
to: {
|
|
449
|
+
pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
|
|
450
|
+
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
451
|
+
},
|
|
452
|
+
children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
453
|
+
/* @__PURE__ */ jsx(Pencil, { width: "1.6rem", height: "1.6rem" }),
|
|
454
|
+
/* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
455
|
+
id: "content-releases.content-manager-edit-view.edit-entry",
|
|
456
|
+
defaultMessage: "Edit entry"
|
|
457
|
+
}) })
|
|
458
|
+
] })
|
|
426
459
|
}
|
|
427
460
|
);
|
|
428
461
|
};
|
|
429
|
-
const
|
|
462
|
+
const EditReleaseItem = ({ releaseId }) => {
|
|
463
|
+
const { formatMessage } = useIntl();
|
|
464
|
+
return (
|
|
465
|
+
/* @ts-expect-error inference isn't working in DS */
|
|
466
|
+
/* @__PURE__ */ jsx(StyledMenuItem, { tag: Link, isLink: true, to: `/plugins/content-releases/${releaseId}`, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
467
|
+
/* @__PURE__ */ jsx(Pencil, { width: "1.6rem", height: "1.6rem" }),
|
|
468
|
+
/* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
|
|
469
|
+
id: "content-releases.content-manager-edit-view.edit-release",
|
|
470
|
+
defaultMessage: "Edit release"
|
|
471
|
+
}) })
|
|
472
|
+
] }) })
|
|
473
|
+
);
|
|
474
|
+
};
|
|
475
|
+
const Root = ({ children }) => {
|
|
430
476
|
const { formatMessage } = useIntl();
|
|
477
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
431
478
|
return (
|
|
432
479
|
// A user can access the dropdown if they have permissions to delete a release-action OR update a release
|
|
433
|
-
|
|
434
|
-
/* @__PURE__ */ jsx(
|
|
435
|
-
|
|
480
|
+
allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
481
|
+
/* @__PURE__ */ jsx(Menu.Trigger, { paddingLeft: 2, paddingRight: 2, children: /* @__PURE__ */ jsx(
|
|
482
|
+
AccessibleIcon,
|
|
436
483
|
{
|
|
437
|
-
|
|
438
|
-
paddingLeft: 2,
|
|
439
|
-
paddingRight: 2,
|
|
440
|
-
"aria-label": formatMessage({
|
|
484
|
+
label: formatMessage({
|
|
441
485
|
id: "content-releases.content-manager-edit-view.release-action-menu",
|
|
442
486
|
defaultMessage: "Release action options"
|
|
443
487
|
}),
|
|
444
|
-
|
|
488
|
+
children: /* @__PURE__ */ jsx(More, {})
|
|
445
489
|
}
|
|
446
|
-
),
|
|
490
|
+
) }),
|
|
447
491
|
/* @__PURE__ */ jsx(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
|
|
448
|
-
] })
|
|
492
|
+
] }) : null
|
|
449
493
|
);
|
|
450
494
|
};
|
|
451
495
|
const ReleaseActionMenu = {
|
|
452
496
|
Root,
|
|
497
|
+
EditReleaseItem,
|
|
453
498
|
DeleteReleaseActionItem,
|
|
454
499
|
ReleaseActionEntryLinkItem
|
|
455
500
|
};
|
|
@@ -459,11 +504,11 @@ const getBorderLeftRadiusValue = (actionType) => {
|
|
|
459
504
|
const getBorderRightRadiusValue = (actionType) => {
|
|
460
505
|
return actionType === "publish" ? 0 : 1;
|
|
461
506
|
};
|
|
462
|
-
const FieldWrapper = styled(Field)`
|
|
463
|
-
border-top-left-radius: ${({ actionType, theme }) => theme.spaces[getBorderLeftRadiusValue(actionType)]};
|
|
464
|
-
border-bottom-left-radius: ${({ actionType, theme }) => theme.spaces[getBorderLeftRadiusValue(actionType)]};
|
|
465
|
-
border-top-right-radius: ${({ actionType, theme }) => theme.spaces[getBorderRightRadiusValue(actionType)]};
|
|
466
|
-
border-bottom-right-radius: ${({ actionType, theme }) => theme.spaces[getBorderRightRadiusValue(actionType)]};
|
|
507
|
+
const FieldWrapper = styled(Field.Root)`
|
|
508
|
+
border-top-left-radius: ${({ $actionType, theme }) => theme.spaces[getBorderLeftRadiusValue($actionType)]};
|
|
509
|
+
border-bottom-left-radius: ${({ $actionType, theme }) => theme.spaces[getBorderLeftRadiusValue($actionType)]};
|
|
510
|
+
border-top-right-radius: ${({ $actionType, theme }) => theme.spaces[getBorderRightRadiusValue($actionType)]};
|
|
511
|
+
border-bottom-right-radius: ${({ $actionType, theme }) => theme.spaces[getBorderRightRadiusValue($actionType)]};
|
|
467
512
|
|
|
468
513
|
> label {
|
|
469
514
|
color: inherit;
|
|
@@ -473,39 +518,61 @@ const FieldWrapper = styled(Field)`
|
|
|
473
518
|
text-transform: capitalize;
|
|
474
519
|
}
|
|
475
520
|
|
|
476
|
-
&:active,
|
|
477
521
|
&[data-checked='true'] {
|
|
478
|
-
color: ${({ theme }) => theme.colors.primary700};
|
|
479
|
-
background-color: ${({ theme }) => theme.colors.primary100};
|
|
480
|
-
border-color: ${({ theme }) => theme.colors.primary700};
|
|
522
|
+
color: ${({ theme, $actionType }) => $actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
|
|
523
|
+
background-color: ${({ theme, $actionType }) => $actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
|
|
524
|
+
border-color: ${({ theme, $actionType }) => $actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
|
|
481
525
|
}
|
|
482
526
|
|
|
483
527
|
&[data-checked='false'] {
|
|
484
|
-
border-left: ${({ actionType }) => actionType === "unpublish" && "none"};
|
|
485
|
-
border-right: ${({ actionType }) => actionType === "publish" && "none"};
|
|
528
|
+
border-left: ${({ $actionType }) => $actionType === "unpublish" && "none"};
|
|
529
|
+
border-right: ${({ $actionType }) => $actionType === "publish" && "none"};
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
&[data-checked='false'][data-disabled='false']:hover {
|
|
533
|
+
color: ${({ theme }) => theme.colors.neutral700};
|
|
534
|
+
background-color: ${({ theme }) => theme.colors.neutral100};
|
|
535
|
+
border-color: ${({ theme }) => theme.colors.neutral200};
|
|
536
|
+
|
|
537
|
+
& > label {
|
|
538
|
+
cursor: pointer;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
&[data-disabled='true'] {
|
|
543
|
+
color: ${({ theme }) => theme.colors.neutral600};
|
|
544
|
+
background-color: ${({ theme }) => theme.colors.neutral150};
|
|
545
|
+
border-color: ${({ theme }) => theme.colors.neutral300};
|
|
486
546
|
}
|
|
487
547
|
`;
|
|
488
|
-
const ActionOption = ({
|
|
548
|
+
const ActionOption = ({
|
|
549
|
+
selected,
|
|
550
|
+
actionType,
|
|
551
|
+
handleChange,
|
|
552
|
+
name,
|
|
553
|
+
disabled = false
|
|
554
|
+
}) => {
|
|
489
555
|
return /* @__PURE__ */ jsx(
|
|
490
556
|
FieldWrapper,
|
|
491
557
|
{
|
|
492
|
-
actionType,
|
|
558
|
+
$actionType: actionType,
|
|
493
559
|
background: "primary0",
|
|
494
560
|
borderColor: "neutral200",
|
|
495
561
|
color: selected === actionType ? "primary600" : "neutral600",
|
|
496
562
|
position: "relative",
|
|
497
563
|
cursor: "pointer",
|
|
498
564
|
"data-checked": selected === actionType,
|
|
499
|
-
|
|
565
|
+
"data-disabled": disabled && selected !== actionType,
|
|
566
|
+
children: /* @__PURE__ */ jsxs(Field.Label, { children: [
|
|
500
567
|
/* @__PURE__ */ jsx(VisuallyHidden, { children: /* @__PURE__ */ jsx(
|
|
501
|
-
|
|
568
|
+
Field.Input,
|
|
502
569
|
{
|
|
503
570
|
type: "radio",
|
|
504
|
-
id: `${name}-${actionType}`,
|
|
505
571
|
name,
|
|
506
572
|
checked: selected === actionType,
|
|
507
573
|
onChange: handleChange,
|
|
508
|
-
value: actionType
|
|
574
|
+
value: actionType,
|
|
575
|
+
disabled
|
|
509
576
|
}
|
|
510
577
|
) }),
|
|
511
578
|
actionType
|
|
@@ -513,7 +580,12 @@ const ActionOption = ({ selected, actionType, handleChange, name }) => {
|
|
|
513
580
|
}
|
|
514
581
|
);
|
|
515
582
|
};
|
|
516
|
-
const ReleaseActionOptions = ({
|
|
583
|
+
const ReleaseActionOptions = ({
|
|
584
|
+
selected,
|
|
585
|
+
handleChange,
|
|
586
|
+
name,
|
|
587
|
+
disabled = false
|
|
588
|
+
}) => {
|
|
517
589
|
return /* @__PURE__ */ jsxs(Flex, { children: [
|
|
518
590
|
/* @__PURE__ */ jsx(
|
|
519
591
|
ActionOption,
|
|
@@ -521,7 +593,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
|
|
|
521
593
|
actionType: "publish",
|
|
522
594
|
selected,
|
|
523
595
|
handleChange,
|
|
524
|
-
name
|
|
596
|
+
name,
|
|
597
|
+
disabled
|
|
525
598
|
}
|
|
526
599
|
),
|
|
527
600
|
/* @__PURE__ */ jsx(
|
|
@@ -530,7 +603,8 @@ const ReleaseActionOptions = ({ selected, handleChange, name }) => {
|
|
|
530
603
|
actionType: "unpublish",
|
|
531
604
|
selected,
|
|
532
605
|
handleChange,
|
|
533
|
-
name
|
|
606
|
+
name,
|
|
607
|
+
disabled
|
|
534
608
|
}
|
|
535
609
|
)
|
|
536
610
|
] });
|
|
@@ -546,19 +620,20 @@ const INITIAL_VALUES = {
|
|
|
546
620
|
const NoReleases = () => {
|
|
547
621
|
const { formatMessage } = useIntl();
|
|
548
622
|
return /* @__PURE__ */ jsx(
|
|
549
|
-
|
|
623
|
+
EmptyStateLayout,
|
|
550
624
|
{
|
|
551
|
-
|
|
625
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
|
|
626
|
+
content: formatMessage({
|
|
552
627
|
id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
|
|
553
628
|
defaultMessage: "No available releases. Open the list of releases and create a new one from there."
|
|
554
|
-
},
|
|
629
|
+
}),
|
|
555
630
|
action: /* @__PURE__ */ jsx(
|
|
556
631
|
LinkButton,
|
|
557
632
|
{
|
|
558
633
|
to: {
|
|
559
634
|
pathname: "/plugins/content-releases"
|
|
560
635
|
},
|
|
561
|
-
|
|
636
|
+
tag: Link,
|
|
562
637
|
variant: "secondary",
|
|
563
638
|
children: formatMessage({
|
|
564
639
|
id: "content-releases.content-manager-edit-view.add-to-release.redirect-button",
|
|
@@ -574,10 +649,12 @@ const AddActionToReleaseModal = ({
|
|
|
574
649
|
contentTypeUid,
|
|
575
650
|
entryId
|
|
576
651
|
}) => {
|
|
652
|
+
const releaseHeaderId = React.useId();
|
|
577
653
|
const { formatMessage } = useIntl();
|
|
578
|
-
const toggleNotification = useNotification();
|
|
654
|
+
const { toggleNotification } = useNotification();
|
|
579
655
|
const { formatAPIError } = useAPIErrorHandler();
|
|
580
|
-
const {
|
|
656
|
+
const [{ query }] = useQueryParams();
|
|
657
|
+
const locale = query.plugins?.i18n?.locale;
|
|
581
658
|
const response = useGetReleasesForEntryQuery({
|
|
582
659
|
contentTypeUid,
|
|
583
660
|
entryId,
|
|
@@ -586,7 +663,6 @@ const AddActionToReleaseModal = ({
|
|
|
586
663
|
const releases = response.data?.data;
|
|
587
664
|
const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
|
|
588
665
|
const handleSubmit = async (values) => {
|
|
589
|
-
const locale = modifiedData.locale;
|
|
590
666
|
const releaseActionEntry = {
|
|
591
667
|
contentType: contentTypeUid,
|
|
592
668
|
id: entryId,
|
|
@@ -608,21 +684,21 @@ const AddActionToReleaseModal = ({
|
|
|
608
684
|
return;
|
|
609
685
|
}
|
|
610
686
|
if ("error" in response2) {
|
|
611
|
-
if (
|
|
687
|
+
if (isFetchError(response2.error)) {
|
|
612
688
|
toggleNotification({
|
|
613
|
-
type: "
|
|
689
|
+
type: "danger",
|
|
614
690
|
message: formatAPIError(response2.error)
|
|
615
691
|
});
|
|
616
692
|
} else {
|
|
617
693
|
toggleNotification({
|
|
618
|
-
type: "
|
|
694
|
+
type: "danger",
|
|
619
695
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
620
696
|
});
|
|
621
697
|
}
|
|
622
698
|
}
|
|
623
699
|
};
|
|
624
|
-
return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy:
|
|
625
|
-
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id:
|
|
700
|
+
return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy: releaseHeaderId, children: [
|
|
701
|
+
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id: releaseHeaderId, fontWeight: "bold", textColor: "neutral800", children: formatMessage({
|
|
626
702
|
id: "content-releases.content-manager-edit-view.add-to-release",
|
|
627
703
|
defaultMessage: "Add to release"
|
|
628
704
|
}) }) }),
|
|
@@ -635,24 +711,25 @@ const AddActionToReleaseModal = ({
|
|
|
635
711
|
children: ({ values, setFieldValue }) => {
|
|
636
712
|
return /* @__PURE__ */ jsxs(Form, { children: [
|
|
637
713
|
releases?.length === 0 ? /* @__PURE__ */ jsx(NoReleases, {}) : /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
638
|
-
/* @__PURE__ */ jsx(Box, { paddingBottom: 6, children: /* @__PURE__ */
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
714
|
+
/* @__PURE__ */ jsx(Box, { paddingBottom: 6, children: /* @__PURE__ */ jsxs(Field.Root, { required: true, children: [
|
|
715
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
716
|
+
id: "content-releases.content-manager-edit-view.add-to-release.select-label",
|
|
717
|
+
defaultMessage: "Select a release"
|
|
718
|
+
}) }),
|
|
719
|
+
/* @__PURE__ */ jsx(
|
|
720
|
+
SingleSelect,
|
|
721
|
+
{
|
|
722
|
+
placeholder: formatMessage({
|
|
723
|
+
id: "content-releases.content-manager-edit-view.add-to-release.select-placeholder",
|
|
724
|
+
defaultMessage: "Select"
|
|
725
|
+
}),
|
|
726
|
+
onChange: (value) => setFieldValue("releaseId", value),
|
|
727
|
+
value: values.releaseId,
|
|
728
|
+
children: releases?.map((release) => /* @__PURE__ */ jsx(SingleSelectOption, { value: release.id, children: release.name }, release.id))
|
|
729
|
+
}
|
|
730
|
+
)
|
|
731
|
+
] }) }),
|
|
732
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
656
733
|
id: "content-releases.content-manager-edit-view.add-to-release.action-type-label",
|
|
657
734
|
defaultMessage: "What do you want to do with this entry?"
|
|
658
735
|
}) }),
|
|
@@ -692,16 +769,22 @@ const AddActionToReleaseModal = ({
|
|
|
692
769
|
};
|
|
693
770
|
const CMReleasesContainer = () => {
|
|
694
771
|
const [isModalOpen, setIsModalOpen] = React.useState(false);
|
|
695
|
-
const { formatMessage } = useIntl();
|
|
696
|
-
const {
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
} =
|
|
700
|
-
const
|
|
701
|
-
const
|
|
772
|
+
const { formatMessage, formatDate, formatTime } = useIntl();
|
|
773
|
+
const { id, slug, collectionType } = useParams();
|
|
774
|
+
const isCreatingEntry = id === "create";
|
|
775
|
+
const entryId = parseInt(id, 10);
|
|
776
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
777
|
+
const { canCreateAction, canRead: canMain, canDeleteAction } = allowedActions;
|
|
778
|
+
const { schema } = unstable_useDocument({
|
|
779
|
+
collectionType,
|
|
780
|
+
model: slug
|
|
781
|
+
});
|
|
782
|
+
const hasDraftAndPublish = schema?.options?.draftAndPublish;
|
|
783
|
+
const contentTypeUid = slug;
|
|
784
|
+
const canFetch = id != null && contentTypeUid != null;
|
|
702
785
|
const fetchParams = canFetch ? {
|
|
703
|
-
contentTypeUid
|
|
704
|
-
entryId
|
|
786
|
+
contentTypeUid,
|
|
787
|
+
entryId,
|
|
705
788
|
hasEntryAttached: true
|
|
706
789
|
} : skipToken;
|
|
707
790
|
const response = useGetReleasesForEntryQuery(fetchParams);
|
|
@@ -709,7 +792,7 @@ const CMReleasesContainer = () => {
|
|
|
709
792
|
if (!canFetch) {
|
|
710
793
|
return null;
|
|
711
794
|
}
|
|
712
|
-
if (isCreatingEntry || !
|
|
795
|
+
if (isCreatingEntry || !hasDraftAndPublish) {
|
|
713
796
|
return null;
|
|
714
797
|
}
|
|
715
798
|
const toggleModal = () => setIsModalOpen((prev) => !prev);
|
|
@@ -719,10 +802,13 @@ const CMReleasesContainer = () => {
|
|
|
719
802
|
}
|
|
720
803
|
return `success${shade}`;
|
|
721
804
|
};
|
|
722
|
-
|
|
805
|
+
if (!canMain) {
|
|
806
|
+
return null;
|
|
807
|
+
}
|
|
808
|
+
return /* @__PURE__ */ jsxs(
|
|
723
809
|
Box,
|
|
724
810
|
{
|
|
725
|
-
|
|
811
|
+
tag: "aside",
|
|
726
812
|
"aria-label": formatMessage({
|
|
727
813
|
id: "content-releases.plugin.name",
|
|
728
814
|
defaultMessage: "Releases"
|
|
@@ -746,7 +832,7 @@ const CMReleasesContainer = () => {
|
|
|
746
832
|
alignItems: "start",
|
|
747
833
|
borderWidth: "1px",
|
|
748
834
|
borderStyle: "solid",
|
|
749
|
-
borderColor: getReleaseColorVariant(release.
|
|
835
|
+
borderColor: getReleaseColorVariant(release.actions[0].type, "200"),
|
|
750
836
|
overflow: "hidden",
|
|
751
837
|
hasRadius: true,
|
|
752
838
|
children: [
|
|
@@ -757,41 +843,66 @@ const CMReleasesContainer = () => {
|
|
|
757
843
|
paddingBottom: 3,
|
|
758
844
|
paddingLeft: 4,
|
|
759
845
|
paddingRight: 4,
|
|
760
|
-
background: getReleaseColorVariant(release.
|
|
846
|
+
background: getReleaseColorVariant(release.actions[0].type, "100"),
|
|
761
847
|
width: "100%",
|
|
762
848
|
children: /* @__PURE__ */ jsx(
|
|
763
849
|
Typography,
|
|
764
850
|
{
|
|
765
851
|
fontSize: 1,
|
|
766
852
|
variant: "pi",
|
|
767
|
-
textColor: getReleaseColorVariant(release.
|
|
853
|
+
textColor: getReleaseColorVariant(release.actions[0].type, "600"),
|
|
768
854
|
children: formatMessage(
|
|
769
855
|
{
|
|
770
856
|
id: "content-releases.content-manager-edit-view.list-releases.title",
|
|
771
857
|
defaultMessage: "{isPublish, select, true {Will be published in} other {Will be unpublished in}}"
|
|
772
858
|
},
|
|
773
|
-
{ isPublish: release.
|
|
859
|
+
{ isPublish: release.actions[0].type === "publish" }
|
|
774
860
|
)
|
|
775
861
|
}
|
|
776
862
|
)
|
|
777
863
|
}
|
|
778
864
|
),
|
|
779
|
-
/* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap:
|
|
865
|
+
/* @__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: [
|
|
780
866
|
/* @__PURE__ */ jsx(Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
|
|
781
|
-
/* @__PURE__ */ jsx(
|
|
782
|
-
ReleaseActionMenu.DeleteReleaseActionItem,
|
|
867
|
+
release.scheduledAt && release.timezone && /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
|
|
783
868
|
{
|
|
784
|
-
|
|
785
|
-
|
|
869
|
+
id: "content-releases.content-manager-edit-view.scheduled.date",
|
|
870
|
+
defaultMessage: "{date} at {time} ({offset})"
|
|
871
|
+
},
|
|
872
|
+
{
|
|
873
|
+
date: formatDate(new Date(release.scheduledAt), {
|
|
874
|
+
day: "2-digit",
|
|
875
|
+
month: "2-digit",
|
|
876
|
+
year: "numeric",
|
|
877
|
+
timeZone: release.timezone
|
|
878
|
+
}),
|
|
879
|
+
time: formatTime(new Date(release.scheduledAt), {
|
|
880
|
+
hourCycle: "h23",
|
|
881
|
+
timeZone: release.timezone
|
|
882
|
+
}),
|
|
883
|
+
offset: getTimezoneOffset(
|
|
884
|
+
release.timezone,
|
|
885
|
+
new Date(release.scheduledAt)
|
|
886
|
+
)
|
|
786
887
|
}
|
|
787
|
-
) })
|
|
788
|
-
|
|
888
|
+
) }),
|
|
889
|
+
canDeleteAction ? /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
|
|
890
|
+
/* @__PURE__ */ jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
|
|
891
|
+
/* @__PURE__ */ jsx(
|
|
892
|
+
ReleaseActionMenu.DeleteReleaseActionItem,
|
|
893
|
+
{
|
|
894
|
+
releaseId: release.id,
|
|
895
|
+
actionId: release.actions[0].id
|
|
896
|
+
}
|
|
897
|
+
)
|
|
898
|
+
] }) : null
|
|
899
|
+
] }) })
|
|
789
900
|
]
|
|
790
901
|
},
|
|
791
902
|
release.id
|
|
792
903
|
);
|
|
793
904
|
}),
|
|
794
|
-
|
|
905
|
+
canCreateAction ? /* @__PURE__ */ jsx(
|
|
795
906
|
Button,
|
|
796
907
|
{
|
|
797
908
|
justifyContent: "center",
|
|
@@ -806,51 +917,72 @@ const CMReleasesContainer = () => {
|
|
|
806
917
|
defaultMessage: "Add to release"
|
|
807
918
|
})
|
|
808
919
|
}
|
|
809
|
-
)
|
|
920
|
+
) : null
|
|
810
921
|
] }),
|
|
811
922
|
isModalOpen && /* @__PURE__ */ jsx(
|
|
812
923
|
AddActionToReleaseModal,
|
|
813
924
|
{
|
|
814
925
|
handleClose: toggleModal,
|
|
815
|
-
contentTypeUid
|
|
816
|
-
entryId
|
|
926
|
+
contentTypeUid,
|
|
927
|
+
entryId
|
|
817
928
|
}
|
|
818
929
|
)
|
|
819
930
|
]
|
|
820
931
|
}
|
|
821
|
-
)
|
|
932
|
+
);
|
|
933
|
+
};
|
|
934
|
+
const pluginId = "content-releases";
|
|
935
|
+
const prefixPluginTranslations = (trad, pluginId2) => {
|
|
936
|
+
if (!pluginId2) {
|
|
937
|
+
throw new TypeError("pluginId can't be empty");
|
|
938
|
+
}
|
|
939
|
+
return Object.keys(trad).reduce((acc, current) => {
|
|
940
|
+
acc[`${pluginId2}.${current}`] = trad[current];
|
|
941
|
+
return acc;
|
|
942
|
+
}, {});
|
|
822
943
|
};
|
|
823
944
|
const admin = {
|
|
824
945
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
825
946
|
register(app) {
|
|
947
|
+
app.createHook("ContentReleases/pages/ReleaseDetails/add-locale-in-releases");
|
|
826
948
|
if (window.strapi.features.isEnabled("cms-content-releases")) {
|
|
827
949
|
app.addMenuLink({
|
|
828
|
-
to:
|
|
950
|
+
to: `plugins/${pluginId}`,
|
|
829
951
|
icon: PaperPlane,
|
|
830
952
|
intlLabel: {
|
|
831
953
|
id: `${pluginId}.plugin.name`,
|
|
832
954
|
defaultMessage: "Releases"
|
|
833
955
|
},
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
},
|
|
838
|
-
permissions: PERMISSIONS.main
|
|
839
|
-
});
|
|
840
|
-
app.addMiddlewares([() => releaseApi.middleware]);
|
|
841
|
-
app.addReducers({
|
|
842
|
-
[releaseApi.reducerPath]: releaseApi.reducer
|
|
956
|
+
Component: () => import("./App-D_6Y9N2F.mjs").then((mod) => ({ default: mod.App })),
|
|
957
|
+
permissions: PERMISSIONS.main,
|
|
958
|
+
position: 2
|
|
843
959
|
});
|
|
844
|
-
app.
|
|
960
|
+
app.getPlugin("content-manager").injectComponent("editView", "right-links", {
|
|
845
961
|
name: `${pluginId}-link`,
|
|
846
962
|
Component: CMReleasesContainer
|
|
847
963
|
});
|
|
964
|
+
} else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
|
|
965
|
+
app.addMenuLink({
|
|
966
|
+
to: `/plugins/purchase-content-releases`,
|
|
967
|
+
icon: PaperPlane,
|
|
968
|
+
intlLabel: {
|
|
969
|
+
id: `${pluginId}.plugin.name`,
|
|
970
|
+
defaultMessage: "Releases"
|
|
971
|
+
},
|
|
972
|
+
permissions: [],
|
|
973
|
+
async Component() {
|
|
974
|
+
const { PurchaseContentReleases } = await import("./PurchaseContentReleases-_MxP6-Dt.mjs");
|
|
975
|
+
return { default: PurchaseContentReleases };
|
|
976
|
+
},
|
|
977
|
+
lockIcon: true,
|
|
978
|
+
position: 2
|
|
979
|
+
});
|
|
848
980
|
}
|
|
849
981
|
},
|
|
850
982
|
async registerTrads({ locales }) {
|
|
851
983
|
const importedTrads = await Promise.all(
|
|
852
984
|
locales.map((locale) => {
|
|
853
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-
|
|
985
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-B9Ur3VsE.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
|
|
854
986
|
return {
|
|
855
987
|
data: prefixPluginTranslations(data, "content-releases"),
|
|
856
988
|
locale
|
|
@@ -869,19 +1001,18 @@ const admin = {
|
|
|
869
1001
|
export {
|
|
870
1002
|
PERMISSIONS as P,
|
|
871
1003
|
ReleaseActionOptions as R,
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
admin as k,
|
|
1004
|
+
useCreateReleaseMutation as a,
|
|
1005
|
+
useGetReleaseQuery as b,
|
|
1006
|
+
useUpdateReleaseMutation as c,
|
|
1007
|
+
useDeleteReleaseMutation as d,
|
|
1008
|
+
usePublishReleaseMutation as e,
|
|
1009
|
+
useGetReleaseActionsQuery as f,
|
|
1010
|
+
getTimezoneOffset as g,
|
|
1011
|
+
useUpdateReleaseActionMutation as h,
|
|
1012
|
+
ReleaseActionMenu as i,
|
|
1013
|
+
admin as j,
|
|
883
1014
|
pluginId as p,
|
|
884
1015
|
releaseApi as r,
|
|
885
|
-
|
|
1016
|
+
useGetReleasesQuery as u
|
|
886
1017
|
};
|
|
887
|
-
//# sourceMappingURL=index-
|
|
1018
|
+
//# sourceMappingURL=index-BomF0-yY.mjs.map
|