@strapi/content-releases 0.0.0-experimental.check-license → 0.0.0-experimental.d362bf200f5f9359a4bbd4a549603de5ee1f04ca

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/_chunks/App-1LckaIGY.js +1352 -0
  2. package/dist/_chunks/App-1LckaIGY.js.map +1 -0
  3. package/dist/_chunks/App-X01LBg5V.mjs +1329 -0
  4. package/dist/_chunks/App-X01LBg5V.mjs.map +1 -0
  5. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs +51 -0
  6. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +1 -0
  7. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js +51 -0
  8. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +1 -0
  9. package/dist/_chunks/en-RdapH-9X.mjs +77 -0
  10. package/dist/_chunks/en-RdapH-9X.mjs.map +1 -0
  11. package/dist/_chunks/en-faJDuv3q.js +77 -0
  12. package/dist/_chunks/en-faJDuv3q.js.map +1 -0
  13. package/dist/_chunks/index-OD9AlD-6.mjs +1033 -0
  14. package/dist/_chunks/index-OD9AlD-6.mjs.map +1 -0
  15. package/dist/_chunks/index-cYWov2wa.js +1054 -0
  16. package/dist/_chunks/index-cYWov2wa.js.map +1 -0
  17. package/dist/admin/index.js +3 -35
  18. package/dist/admin/index.js.map +1 -1
  19. package/dist/admin/index.mjs +3 -35
  20. package/dist/admin/index.mjs.map +1 -1
  21. package/dist/admin/src/components/CMReleasesContainer.d.ts +1 -0
  22. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  23. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  24. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  25. package/dist/admin/src/components/ReleaseModal.d.ts +16 -0
  26. package/dist/admin/src/constants.d.ts +58 -0
  27. package/dist/admin/src/index.d.ts +3 -15
  28. package/dist/admin/src/pages/App.d.ts +1 -0
  29. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  30. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  31. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  32. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  33. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  34. package/dist/admin/src/pluginId.d.ts +1 -0
  35. package/dist/admin/src/services/axios.d.ts +29 -0
  36. package/dist/admin/src/services/release.d.ts +369 -0
  37. package/dist/admin/src/store/hooks.d.ts +7 -0
  38. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  39. package/dist/admin/src/utils/time.d.ts +1 -0
  40. package/dist/server/index.js +1715 -6
  41. package/dist/server/index.js.map +1 -1
  42. package/dist/server/index.mjs +1693 -6
  43. package/dist/server/index.mjs.map +1 -1
  44. package/dist/server/src/bootstrap.d.ts +5 -0
  45. package/dist/server/src/bootstrap.d.ts.map +1 -0
  46. package/dist/server/src/constants.d.ts +12 -0
  47. package/dist/server/src/constants.d.ts.map +1 -0
  48. package/dist/server/src/content-types/index.d.ts +99 -0
  49. package/dist/server/src/content-types/index.d.ts.map +1 -0
  50. package/dist/server/src/content-types/release/index.d.ts +48 -0
  51. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  52. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  53. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  54. package/dist/server/src/content-types/release-action/index.d.ts +50 -0
  55. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  56. package/dist/server/src/content-types/release-action/schema.d.ts +49 -0
  57. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  58. package/dist/server/src/controllers/index.d.ts +19 -0
  59. package/dist/server/src/controllers/index.d.ts.map +1 -0
  60. package/dist/server/src/controllers/release-action.d.ts +10 -0
  61. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  62. package/dist/server/src/controllers/release.d.ts +11 -0
  63. package/dist/server/src/controllers/release.d.ts.map +1 -0
  64. package/dist/server/src/controllers/validation/release-action.d.ts +8 -0
  65. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  66. package/dist/server/src/controllers/validation/release.d.ts +2 -0
  67. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  68. package/dist/server/src/destroy.d.ts +5 -0
  69. package/dist/server/src/destroy.d.ts.map +1 -0
  70. package/dist/server/src/index.d.ts +2092 -1
  71. package/dist/server/src/index.d.ts.map +1 -0
  72. package/dist/server/src/migrations/index.d.ts +13 -0
  73. package/dist/server/src/migrations/index.d.ts.map +1 -0
  74. package/dist/server/src/register.d.ts +5 -1
  75. package/dist/server/src/register.d.ts.map +1 -0
  76. package/dist/server/src/routes/index.d.ts +35 -0
  77. package/dist/server/src/routes/index.d.ts.map +1 -0
  78. package/dist/server/src/routes/release-action.d.ts +18 -0
  79. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  80. package/dist/server/src/routes/release.d.ts +18 -0
  81. package/dist/server/src/routes/release.d.ts.map +1 -0
  82. package/dist/server/src/services/index.d.ts +1826 -0
  83. package/dist/server/src/services/index.d.ts.map +1 -0
  84. package/dist/server/src/services/release.d.ts +66 -0
  85. package/dist/server/src/services/release.d.ts.map +1 -0
  86. package/dist/server/src/services/scheduling.d.ts +18 -0
  87. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  88. package/dist/server/src/services/validation.d.ts +18 -0
  89. package/dist/server/src/services/validation.d.ts.map +1 -0
  90. package/dist/server/src/utils/index.d.ts +14 -0
  91. package/dist/server/src/utils/index.d.ts.map +1 -0
  92. package/dist/shared/contracts/release-actions.d.ts +131 -0
  93. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  94. package/dist/shared/contracts/releases.d.ts +166 -0
  95. package/dist/shared/contracts/releases.d.ts.map +1 -0
  96. package/dist/shared/types.d.ts +24 -0
  97. package/dist/shared/types.d.ts.map +1 -0
  98. package/dist/shared/validation-schemas.d.ts +2 -0
  99. package/dist/shared/validation-schemas.d.ts.map +1 -0
  100. package/package.json +39 -30
  101. package/dist/_chunks/en-21947221.js +0 -5
  102. package/dist/_chunks/en-21947221.js.map +0 -1
  103. package/dist/_chunks/en-92157b33.mjs +0 -5
  104. package/dist/_chunks/en-92157b33.mjs.map +0 -1
  105. package/dist/admin/src/tests/index.test.d.ts +0 -0
  106. package/dist/server/src/__tests__/index.test.d.ts +0 -2
@@ -0,0 +1,1054 @@
1
+ "use strict";
2
+ const icons = require("@strapi/icons");
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const React = require("react");
5
+ const query = require("@reduxjs/toolkit/query");
6
+ const strapiAdmin = require("@strapi/admin/strapi-admin");
7
+ const designSystem = require("@strapi/design-system");
8
+ const v2 = require("@strapi/design-system/v2");
9
+ const axios = require("axios");
10
+ const formik = require("formik");
11
+ const reactIntl = require("react-intl");
12
+ const reactRouterDom = require("react-router-dom");
13
+ const yup = require("yup");
14
+ const react = require("@reduxjs/toolkit/query/react");
15
+ const styled = require("styled-components");
16
+ const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
17
+ function _interopNamespace(e) {
18
+ if (e && e.__esModule)
19
+ return e;
20
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
21
+ if (e) {
22
+ for (const k in e) {
23
+ if (k !== "default") {
24
+ const d = Object.getOwnPropertyDescriptor(e, k);
25
+ Object.defineProperty(n, k, d.get ? d : {
26
+ enumerable: true,
27
+ get: () => e[k]
28
+ });
29
+ }
30
+ }
31
+ }
32
+ n.default = e;
33
+ return Object.freeze(n);
34
+ }
35
+ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
36
+ const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
37
+ const styled__default = /* @__PURE__ */ _interopDefault(styled);
38
+ const __variableDynamicImportRuntimeHelper = (glob, path) => {
39
+ const v = glob[path];
40
+ if (v) {
41
+ return typeof v === "function" ? v() : Promise.resolve(v);
42
+ }
43
+ return new Promise((_, reject) => {
44
+ (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(reject.bind(null, new Error("Unknown variable dynamic import: " + path)));
45
+ });
46
+ };
47
+ const PERMISSIONS = {
48
+ main: [
49
+ {
50
+ action: "plugin::content-releases.read",
51
+ subject: null,
52
+ id: "",
53
+ actionParameters: {},
54
+ properties: {},
55
+ conditions: []
56
+ }
57
+ ],
58
+ create: [
59
+ {
60
+ action: "plugin::content-releases.create",
61
+ subject: null,
62
+ id: "",
63
+ actionParameters: {},
64
+ properties: {},
65
+ conditions: []
66
+ }
67
+ ],
68
+ update: [
69
+ {
70
+ action: "plugin::content-releases.update",
71
+ subject: null,
72
+ id: "",
73
+ actionParameters: {},
74
+ properties: {},
75
+ conditions: []
76
+ }
77
+ ],
78
+ delete: [
79
+ {
80
+ action: "plugin::content-releases.delete",
81
+ subject: null,
82
+ id: "",
83
+ actionParameters: {},
84
+ properties: {},
85
+ conditions: []
86
+ }
87
+ ],
88
+ createAction: [
89
+ {
90
+ action: "plugin::content-releases.create-action",
91
+ subject: null,
92
+ id: "",
93
+ actionParameters: {},
94
+ properties: {},
95
+ conditions: []
96
+ }
97
+ ],
98
+ deleteAction: [
99
+ {
100
+ action: "plugin::content-releases.delete-action",
101
+ subject: null,
102
+ id: "",
103
+ actionParameters: {},
104
+ properties: {},
105
+ conditions: []
106
+ }
107
+ ],
108
+ publish: [
109
+ {
110
+ action: "plugin::content-releases.publish",
111
+ subject: null,
112
+ id: "",
113
+ actionParameters: {},
114
+ properties: {},
115
+ conditions: []
116
+ }
117
+ ]
118
+ };
119
+ const pluginId = "content-releases";
120
+ const axiosBaseQuery = async ({
121
+ url,
122
+ method,
123
+ data,
124
+ config
125
+ }) => {
126
+ try {
127
+ const { get, post, del, put } = strapiAdmin.getFetchClient();
128
+ if (method === "POST") {
129
+ const result2 = await post(url, data, config);
130
+ return { data: result2.data };
131
+ }
132
+ if (method === "DELETE") {
133
+ const result2 = await del(url, config);
134
+ return { data: result2.data };
135
+ }
136
+ if (method === "PUT") {
137
+ const result2 = await put(url, data, config);
138
+ return { data: result2.data };
139
+ }
140
+ const result = await get(url, config);
141
+ return { data: result.data };
142
+ } catch (error) {
143
+ const err = error;
144
+ return {
145
+ error: {
146
+ status: err.response?.status,
147
+ code: err.code,
148
+ response: {
149
+ data: err.response?.data
150
+ }
151
+ }
152
+ };
153
+ }
154
+ };
155
+ const isAxiosError = (err) => {
156
+ return typeof err === "object" && err !== null && "response" in err && typeof err.response === "object" && err.response !== null && "data" in err.response;
157
+ };
158
+ const releaseApi = react.createApi({
159
+ reducerPath: pluginId,
160
+ baseQuery: axiosBaseQuery,
161
+ tagTypes: ["Release", "ReleaseAction"],
162
+ endpoints: (build) => {
163
+ return {
164
+ getReleasesForEntry: build.query({
165
+ query(params) {
166
+ return {
167
+ url: "/content-releases",
168
+ method: "GET",
169
+ config: {
170
+ params
171
+ }
172
+ };
173
+ },
174
+ providesTags: (result) => result ? [
175
+ ...result.data.map(({ id }) => ({ type: "Release", id })),
176
+ { type: "Release", id: "LIST" }
177
+ ] : []
178
+ }),
179
+ getReleases: build.query({
180
+ query({ page, pageSize, filters } = {
181
+ page: 1,
182
+ pageSize: 16,
183
+ filters: {
184
+ releasedAt: {
185
+ $notNull: false
186
+ }
187
+ }
188
+ }) {
189
+ return {
190
+ url: "/content-releases",
191
+ method: "GET",
192
+ config: {
193
+ params: {
194
+ page: page || 1,
195
+ pageSize: pageSize || 16,
196
+ filters: filters || {
197
+ releasedAt: {
198
+ $notNull: false
199
+ }
200
+ }
201
+ }
202
+ }
203
+ };
204
+ },
205
+ transformResponse(response, meta, arg) {
206
+ const releasedAtValue = arg?.filters?.releasedAt?.$notNull;
207
+ const isActiveDoneTab = releasedAtValue === "true";
208
+ const newResponse = {
209
+ ...response,
210
+ meta: {
211
+ ...response.meta,
212
+ activeTab: isActiveDoneTab ? "done" : "pending"
213
+ }
214
+ };
215
+ return newResponse;
216
+ },
217
+ providesTags: (result) => result ? [
218
+ ...result.data.map(({ id }) => ({ type: "Release", id })),
219
+ { type: "Release", id: "LIST" }
220
+ ] : [{ type: "Release", id: "LIST" }]
221
+ }),
222
+ getRelease: build.query({
223
+ query({ id }) {
224
+ return {
225
+ url: `/content-releases/${id}`,
226
+ method: "GET"
227
+ };
228
+ },
229
+ providesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
230
+ }),
231
+ getReleaseActions: build.query({
232
+ query({ releaseId, ...params }) {
233
+ return {
234
+ url: `/content-releases/${releaseId}/actions`,
235
+ method: "GET",
236
+ config: {
237
+ params
238
+ }
239
+ };
240
+ },
241
+ providesTags: [{ type: "ReleaseAction", id: "LIST" }]
242
+ }),
243
+ createRelease: build.mutation({
244
+ query(data) {
245
+ return {
246
+ url: "/content-releases",
247
+ method: "POST",
248
+ data
249
+ };
250
+ },
251
+ invalidatesTags: [{ type: "Release", id: "LIST" }]
252
+ }),
253
+ updateRelease: build.mutation({
254
+ query({ id, ...data }) {
255
+ return {
256
+ url: `/content-releases/${id}`,
257
+ method: "PUT",
258
+ data
259
+ };
260
+ },
261
+ invalidatesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
262
+ }),
263
+ createReleaseAction: build.mutation({
264
+ query({ body, params }) {
265
+ return {
266
+ url: `/content-releases/${params.releaseId}/actions`,
267
+ method: "POST",
268
+ data: body
269
+ };
270
+ },
271
+ invalidatesTags: [
272
+ { type: "Release", id: "LIST" },
273
+ { type: "ReleaseAction", id: "LIST" }
274
+ ]
275
+ }),
276
+ updateReleaseAction: build.mutation({
277
+ query({ body, params }) {
278
+ return {
279
+ url: `/content-releases/${params.releaseId}/actions/${params.actionId}`,
280
+ method: "PUT",
281
+ data: body
282
+ };
283
+ },
284
+ invalidatesTags: () => [{ type: "ReleaseAction", id: "LIST" }],
285
+ async onQueryStarted({ body, params, query: query2, actionPath }, { dispatch, queryFulfilled }) {
286
+ const paramsWithoutActionId = {
287
+ releaseId: params.releaseId,
288
+ ...query2
289
+ };
290
+ const patchResult = dispatch(
291
+ releaseApi.util.updateQueryData("getReleaseActions", paramsWithoutActionId, (draft) => {
292
+ const [key, index] = actionPath;
293
+ const action = draft.data[key][index];
294
+ if (action) {
295
+ action.type = body.type;
296
+ }
297
+ })
298
+ );
299
+ try {
300
+ await queryFulfilled;
301
+ } catch {
302
+ patchResult.undo();
303
+ }
304
+ }
305
+ }),
306
+ deleteReleaseAction: build.mutation({
307
+ query({ params }) {
308
+ return {
309
+ url: `/content-releases/${params.releaseId}/actions/${params.actionId}`,
310
+ method: "DELETE"
311
+ };
312
+ },
313
+ invalidatesTags: (result, error, arg) => [
314
+ { type: "Release", id: "LIST" },
315
+ { type: "Release", id: arg.params.releaseId },
316
+ { type: "ReleaseAction", id: "LIST" }
317
+ ]
318
+ }),
319
+ publishRelease: build.mutation({
320
+ query({ id }) {
321
+ return {
322
+ url: `/content-releases/${id}/publish`,
323
+ method: "POST"
324
+ };
325
+ },
326
+ invalidatesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
327
+ }),
328
+ deleteRelease: build.mutation({
329
+ query({ id }) {
330
+ return {
331
+ url: `/content-releases/${id}`,
332
+ method: "DELETE"
333
+ };
334
+ },
335
+ invalidatesTags: () => [{ type: "Release", id: "LIST" }]
336
+ })
337
+ };
338
+ }
339
+ });
340
+ const {
341
+ useGetReleasesQuery,
342
+ useGetReleasesForEntryQuery,
343
+ useGetReleaseQuery,
344
+ useGetReleaseActionsQuery,
345
+ useCreateReleaseMutation,
346
+ useCreateReleaseActionMutation,
347
+ useUpdateReleaseMutation,
348
+ useUpdateReleaseActionMutation,
349
+ usePublishReleaseMutation,
350
+ useDeleteReleaseActionMutation,
351
+ useDeleteReleaseMutation
352
+ } = releaseApi;
353
+ const getTimezoneOffset = (timezone, date) => {
354
+ try {
355
+ const offsetPart = new Intl.DateTimeFormat("en", {
356
+ timeZone: timezone,
357
+ timeZoneName: "longOffset"
358
+ }).formatToParts(date).find((part) => part.type === "timeZoneName");
359
+ const offset = offsetPart ? offsetPart.value : "";
360
+ let utcOffset = offset.replace("GMT", "UTC");
361
+ if (!utcOffset.includes("+") && !utcOffset.includes("-")) {
362
+ utcOffset = `${utcOffset}+00:00`;
363
+ }
364
+ return utcOffset;
365
+ } catch (error) {
366
+ return "";
367
+ }
368
+ };
369
+ const StyledMenuItem = styled__default.default(v2.Menu.Item)`
370
+ &:hover {
371
+ background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
372
+
373
+ svg {
374
+ path {
375
+ fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
376
+ }
377
+ }
378
+
379
+ a {
380
+ color: ${({ theme }) => theme.colors.neutral800};
381
+ }
382
+ }
383
+
384
+ svg {
385
+ path {
386
+ fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
387
+ }
388
+ }
389
+
390
+ a {
391
+ color: ${({ theme }) => theme.colors.neutral800};
392
+ }
393
+
394
+ span,
395
+ a {
396
+ width: 100%;
397
+ }
398
+ `;
399
+ const StyledIconButton = styled__default.default(designSystem.IconButton)`
400
+ /* Setting this style inline with borderColor will not apply the style */
401
+ border: ${({ theme }) => `1px solid ${theme.colors.neutral200}`};
402
+ `;
403
+ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
404
+ const { formatMessage } = reactIntl.useIntl();
405
+ const { toggleNotification } = strapiAdmin.useNotification();
406
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
407
+ const [deleteReleaseAction] = useDeleteReleaseActionMutation();
408
+ const {
409
+ allowedActions: { canDeleteAction }
410
+ } = strapiAdmin.useRBAC(PERMISSIONS);
411
+ const handleDeleteAction = async () => {
412
+ const response = await deleteReleaseAction({
413
+ params: { releaseId, actionId }
414
+ });
415
+ if ("data" in response) {
416
+ toggleNotification({
417
+ type: "success",
418
+ message: formatMessage({
419
+ id: "content-releases.content-manager-edit-view.remove-from-release.notification.success",
420
+ defaultMessage: "Entry removed from release"
421
+ })
422
+ });
423
+ return;
424
+ }
425
+ if ("error" in response) {
426
+ if (axios.isAxiosError(response.error)) {
427
+ toggleNotification({
428
+ type: "danger",
429
+ message: formatAPIError(response.error)
430
+ });
431
+ } else {
432
+ toggleNotification({
433
+ type: "danger",
434
+ message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
435
+ });
436
+ }
437
+ }
438
+ };
439
+ if (!canDeleteAction) {
440
+ return null;
441
+ }
442
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
443
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Cross, width: 3, height: 3 }),
444
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
445
+ id: "content-releases.content-manager-edit-view.remove-from-release",
446
+ defaultMessage: "Remove from release"
447
+ }) })
448
+ ] }) });
449
+ };
450
+ const ReleaseActionEntryLinkItem = ({
451
+ contentTypeUid,
452
+ entryId,
453
+ locale
454
+ }) => {
455
+ const { formatMessage } = reactIntl.useIntl();
456
+ const userPermissions = strapiAdmin.useAuth("ReleaseActionEntryLinkItem", (state) => state.permissions);
457
+ const canUpdateEntryForLocale = React__namespace.useMemo(() => {
458
+ const updatePermissions = userPermissions.find(
459
+ (permission) => permission.subject === contentTypeUid && permission.action === "plugin::content-manager.explorer.update"
460
+ );
461
+ if (!updatePermissions) {
462
+ return false;
463
+ }
464
+ return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
465
+ }, [contentTypeUid, locale, userPermissions]);
466
+ const {
467
+ allowedActions: { canUpdateContentType }
468
+ } = strapiAdmin.useRBAC({
469
+ updateContentType: [
470
+ {
471
+ action: "plugin::content-manager.explorer.update",
472
+ subject: contentTypeUid
473
+ }
474
+ ]
475
+ });
476
+ if (!canUpdateContentType || !canUpdateEntryForLocale) {
477
+ return null;
478
+ }
479
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
480
+ v2.Link,
481
+ {
482
+ as: reactRouterDom.NavLink,
483
+ to: {
484
+ pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
485
+ search: locale && `?plugins[i18n][locale]=${locale}`
486
+ },
487
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
488
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
489
+ id: "content-releases.content-manager-edit-view.edit-entry",
490
+ defaultMessage: "Edit entry"
491
+ }) })
492
+ }
493
+ ) });
494
+ };
495
+ const EditReleaseItem = ({ releaseId }) => {
496
+ const { formatMessage } = reactIntl.useIntl();
497
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
498
+ v2.Link,
499
+ {
500
+ href: `/admin/plugins/content-releases/${releaseId}`,
501
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: icons.Pencil, width: 3, height: 3 }),
502
+ isExternal: false,
503
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
504
+ id: "content-releases.content-manager-edit-view.edit-release",
505
+ defaultMessage: "Edit release"
506
+ }) })
507
+ }
508
+ ) });
509
+ };
510
+ const Root = ({ children, hasTriggerBorder = false }) => {
511
+ const { formatMessage } = reactIntl.useIntl();
512
+ const { allowedActions } = strapiAdmin.useRBAC(PERMISSIONS);
513
+ return (
514
+ // A user can access the dropdown if they have permissions to delete a release-action OR update a release
515
+ allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
516
+ /* @__PURE__ */ jsxRuntime.jsx(
517
+ v2.Menu.Trigger,
518
+ {
519
+ as: hasTriggerBorder ? StyledIconButton : designSystem.IconButton,
520
+ paddingLeft: 2,
521
+ paddingRight: 2,
522
+ "aria-label": formatMessage({
523
+ id: "content-releases.content-manager-edit-view.release-action-menu",
524
+ defaultMessage: "Release action options"
525
+ }),
526
+ icon: /* @__PURE__ */ jsxRuntime.jsx(icons.More, {})
527
+ }
528
+ ),
529
+ /* @__PURE__ */ jsxRuntime.jsx(v2.Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
530
+ ] }) : null
531
+ );
532
+ };
533
+ const ReleaseActionMenu = {
534
+ Root,
535
+ EditReleaseItem,
536
+ DeleteReleaseActionItem,
537
+ ReleaseActionEntryLinkItem
538
+ };
539
+ const getBorderLeftRadiusValue = (actionType) => {
540
+ return actionType === "publish" ? 1 : 0;
541
+ };
542
+ const getBorderRightRadiusValue = (actionType) => {
543
+ return actionType === "publish" ? 0 : 1;
544
+ };
545
+ const FieldWrapper = styled__default.default(designSystem.Field)`
546
+ border-top-left-radius: ${({ actionType, theme }) => theme.spaces[getBorderLeftRadiusValue(actionType)]};
547
+ border-bottom-left-radius: ${({ actionType, theme }) => theme.spaces[getBorderLeftRadiusValue(actionType)]};
548
+ border-top-right-radius: ${({ actionType, theme }) => theme.spaces[getBorderRightRadiusValue(actionType)]};
549
+ border-bottom-right-radius: ${({ actionType, theme }) => theme.spaces[getBorderRightRadiusValue(actionType)]};
550
+
551
+ > label {
552
+ color: inherit;
553
+ padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[3]}`};
554
+ text-align: center;
555
+ vertical-align: middle;
556
+ text-transform: capitalize;
557
+ }
558
+
559
+ &[data-checked='true'] {
560
+ color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
561
+ background-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
562
+ border-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
563
+ }
564
+
565
+ &[data-checked='false'] {
566
+ border-left: ${({ actionType }) => actionType === "unpublish" && "none"};
567
+ border-right: ${({ actionType }) => actionType === "publish" && "none"};
568
+ }
569
+
570
+ &[data-checked='false'][data-disabled='false']:hover {
571
+ color: ${({ theme }) => theme.colors.neutral700};
572
+ background-color: ${({ theme }) => theme.colors.neutral100};
573
+ border-color: ${({ theme }) => theme.colors.neutral200};
574
+
575
+ & > label {
576
+ cursor: pointer;
577
+ }
578
+ }
579
+
580
+ &[data-disabled='true'] {
581
+ color: ${({ theme }) => theme.colors.neutral600};
582
+ background-color: ${({ theme }) => theme.colors.neutral150};
583
+ border-color: ${({ theme }) => theme.colors.neutral300};
584
+ }
585
+ `;
586
+ const ActionOption = ({
587
+ selected,
588
+ actionType,
589
+ handleChange,
590
+ name,
591
+ disabled = false
592
+ }) => {
593
+ return /* @__PURE__ */ jsxRuntime.jsx(
594
+ FieldWrapper,
595
+ {
596
+ actionType,
597
+ background: "primary0",
598
+ borderColor: "neutral200",
599
+ color: selected === actionType ? "primary600" : "neutral600",
600
+ position: "relative",
601
+ cursor: "pointer",
602
+ "data-checked": selected === actionType,
603
+ "data-disabled": disabled && selected !== actionType,
604
+ children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.FieldLabel, { htmlFor: `${name}-${actionType}`, children: [
605
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { children: /* @__PURE__ */ jsxRuntime.jsx(
606
+ designSystem.FieldInput,
607
+ {
608
+ type: "radio",
609
+ id: `${name}-${actionType}`,
610
+ name,
611
+ checked: selected === actionType,
612
+ onChange: handleChange,
613
+ value: actionType,
614
+ disabled
615
+ }
616
+ ) }),
617
+ actionType
618
+ ] })
619
+ }
620
+ );
621
+ };
622
+ const ReleaseActionOptions = ({
623
+ selected,
624
+ handleChange,
625
+ name,
626
+ disabled = false
627
+ }) => {
628
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { children: [
629
+ /* @__PURE__ */ jsxRuntime.jsx(
630
+ ActionOption,
631
+ {
632
+ actionType: "publish",
633
+ selected,
634
+ handleChange,
635
+ name,
636
+ disabled
637
+ }
638
+ ),
639
+ /* @__PURE__ */ jsxRuntime.jsx(
640
+ ActionOption,
641
+ {
642
+ actionType: "unpublish",
643
+ selected,
644
+ handleChange,
645
+ name,
646
+ disabled
647
+ }
648
+ )
649
+ ] });
650
+ };
651
+ const RELEASE_ACTION_FORM_SCHEMA = yup__namespace.object().shape({
652
+ type: yup__namespace.string().oneOf(["publish", "unpublish"]).required(),
653
+ releaseId: yup__namespace.string().required()
654
+ });
655
+ const INITIAL_VALUES = {
656
+ type: "publish",
657
+ releaseId: ""
658
+ };
659
+ const NoReleases = () => {
660
+ const { formatMessage } = reactIntl.useIntl();
661
+ return /* @__PURE__ */ jsxRuntime.jsx(
662
+ designSystem.EmptyStateLayout,
663
+ {
664
+ icon: /* @__PURE__ */ jsxRuntime.jsx(icons.EmptyDocuments, { width: "10rem" }),
665
+ content: formatMessage({
666
+ id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
667
+ defaultMessage: "No available releases. Open the list of releases and create a new one from there."
668
+ }),
669
+ action: /* @__PURE__ */ jsxRuntime.jsx(
670
+ v2.LinkButton,
671
+ {
672
+ to: {
673
+ pathname: "/plugins/content-releases"
674
+ },
675
+ as: reactRouterDom.Link,
676
+ variant: "secondary",
677
+ children: formatMessage({
678
+ id: "content-releases.content-manager-edit-view.add-to-release.redirect-button",
679
+ defaultMessage: "Open the list of releases"
680
+ })
681
+ }
682
+ )
683
+ }
684
+ );
685
+ };
686
+ const AddActionToReleaseModal = ({
687
+ handleClose,
688
+ contentTypeUid,
689
+ entryId
690
+ }) => {
691
+ const releaseHeaderId = React__namespace.useId();
692
+ const { formatMessage } = reactIntl.useIntl();
693
+ const { toggleNotification } = strapiAdmin.useNotification();
694
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
695
+ const [{ query: query2 }] = strapiAdmin.useQueryParams();
696
+ const locale = query2.plugins?.i18n?.locale;
697
+ const response = useGetReleasesForEntryQuery({
698
+ contentTypeUid,
699
+ entryId,
700
+ hasEntryAttached: false
701
+ });
702
+ const releases = response.data?.data;
703
+ const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
704
+ const handleSubmit = async (values) => {
705
+ const releaseActionEntry = {
706
+ contentType: contentTypeUid,
707
+ id: entryId,
708
+ locale
709
+ };
710
+ const response2 = await createReleaseAction({
711
+ body: { type: values.type, entry: releaseActionEntry },
712
+ params: { releaseId: values.releaseId }
713
+ });
714
+ if ("data" in response2) {
715
+ toggleNotification({
716
+ type: "success",
717
+ message: formatMessage({
718
+ id: "content-releases.content-manager-edit-view.add-to-release.notification.success",
719
+ defaultMessage: "Entry added to release"
720
+ })
721
+ });
722
+ handleClose();
723
+ return;
724
+ }
725
+ if ("error" in response2) {
726
+ if (axios.isAxiosError(response2.error)) {
727
+ toggleNotification({
728
+ type: "danger",
729
+ message: formatAPIError(response2.error)
730
+ });
731
+ } else {
732
+ toggleNotification({
733
+ type: "danger",
734
+ message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
735
+ });
736
+ }
737
+ }
738
+ };
739
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.ModalLayout, { onClose: handleClose, labelledBy: releaseHeaderId, children: [
740
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { id: releaseHeaderId, fontWeight: "bold", textColor: "neutral800", children: formatMessage({
741
+ id: "content-releases.content-manager-edit-view.add-to-release",
742
+ defaultMessage: "Add to release"
743
+ }) }) }),
744
+ /* @__PURE__ */ jsxRuntime.jsx(
745
+ formik.Formik,
746
+ {
747
+ onSubmit: handleSubmit,
748
+ validationSchema: RELEASE_ACTION_FORM_SCHEMA,
749
+ initialValues: INITIAL_VALUES,
750
+ children: ({ values, setFieldValue }) => {
751
+ return /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { children: [
752
+ releases?.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(NoReleases, {}) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalBody, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
753
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsx(
754
+ designSystem.SingleSelect,
755
+ {
756
+ required: true,
757
+ label: formatMessage({
758
+ id: "content-releases.content-manager-edit-view.add-to-release.select-label",
759
+ defaultMessage: "Select a release"
760
+ }),
761
+ placeholder: formatMessage({
762
+ id: "content-releases.content-manager-edit-view.add-to-release.select-placeholder",
763
+ defaultMessage: "Select"
764
+ }),
765
+ onChange: (value) => setFieldValue("releaseId", value),
766
+ value: values.releaseId,
767
+ children: releases?.map((release) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: release.id, children: release.name }, release.id))
768
+ }
769
+ ) }),
770
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.FieldLabel, { children: formatMessage({
771
+ id: "content-releases.content-manager-edit-view.add-to-release.action-type-label",
772
+ defaultMessage: "What do you want to do with this entry?"
773
+ }) }),
774
+ /* @__PURE__ */ jsxRuntime.jsx(
775
+ ReleaseActionOptions,
776
+ {
777
+ selected: values.type,
778
+ handleChange: (e) => setFieldValue("type", e.target.value),
779
+ name: "type"
780
+ }
781
+ )
782
+ ] }) }),
783
+ /* @__PURE__ */ jsxRuntime.jsx(
784
+ designSystem.ModalFooter,
785
+ {
786
+ startActions: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: handleClose, variant: "tertiary", name: "cancel", children: formatMessage({
787
+ id: "content-releases.content-manager-edit-view.add-to-release.cancel-button",
788
+ defaultMessage: "Cancel"
789
+ }) }),
790
+ endActions: (
791
+ /**
792
+ * TODO: Ideally we would use isValid from Formik to disable the button, however currently it always returns true
793
+ * for yup.string().required(), even when the value is falsy (including empty string)
794
+ */
795
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
796
+ id: "content-releases.content-manager-edit-view.add-to-release.continue-button",
797
+ defaultMessage: "Continue"
798
+ }) })
799
+ )
800
+ }
801
+ )
802
+ ] });
803
+ }
804
+ }
805
+ )
806
+ ] });
807
+ };
808
+ const CMReleasesContainer = () => {
809
+ const [isModalOpen, setIsModalOpen] = React__namespace.useState(false);
810
+ const { formatMessage, formatDate, formatTime } = reactIntl.useIntl();
811
+ const { id, slug, collectionType } = reactRouterDom.useParams();
812
+ const isCreatingEntry = id === "create";
813
+ const {
814
+ allowedActions: { canCreateAction, canMain, canDeleteAction }
815
+ } = strapiAdmin.useRBAC(PERMISSIONS);
816
+ const { schema } = strapiAdmin.unstable_useDocument({
817
+ collectionType,
818
+ model: slug
819
+ });
820
+ const hasDraftAndPublish = schema?.options?.draftAndPublish;
821
+ const contentTypeUid = slug;
822
+ const canFetch = id != null && contentTypeUid != null;
823
+ const fetchParams = canFetch ? {
824
+ contentTypeUid,
825
+ entryId: id,
826
+ hasEntryAttached: true
827
+ } : query.skipToken;
828
+ const response = useGetReleasesForEntryQuery(fetchParams);
829
+ const releases = response.data?.data;
830
+ if (!canFetch) {
831
+ return null;
832
+ }
833
+ if (isCreatingEntry || !hasDraftAndPublish) {
834
+ return null;
835
+ }
836
+ const toggleModal = () => setIsModalOpen((prev) => !prev);
837
+ const getReleaseColorVariant = (actionType, shade) => {
838
+ if (actionType === "unpublish") {
839
+ return `secondary${shade}`;
840
+ }
841
+ return `success${shade}`;
842
+ };
843
+ if (!canMain) {
844
+ return null;
845
+ }
846
+ return /* @__PURE__ */ jsxRuntime.jsxs(
847
+ designSystem.Box,
848
+ {
849
+ as: "aside",
850
+ "aria-label": formatMessage({
851
+ id: "content-releases.plugin.name",
852
+ defaultMessage: "Releases"
853
+ }),
854
+ background: "neutral0",
855
+ borderColor: "neutral150",
856
+ hasRadius: true,
857
+ padding: 4,
858
+ shadow: "tableShadow",
859
+ children: [
860
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 3, children: [
861
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", children: formatMessage({
862
+ id: "content-releases.plugin.name",
863
+ defaultMessage: "Releases"
864
+ }) }),
865
+ releases?.map((release) => {
866
+ return /* @__PURE__ */ jsxRuntime.jsxs(
867
+ designSystem.Flex,
868
+ {
869
+ direction: "column",
870
+ alignItems: "start",
871
+ borderWidth: "1px",
872
+ borderStyle: "solid",
873
+ borderColor: getReleaseColorVariant(release.action.type, "200"),
874
+ overflow: "hidden",
875
+ hasRadius: true,
876
+ children: [
877
+ /* @__PURE__ */ jsxRuntime.jsx(
878
+ designSystem.Box,
879
+ {
880
+ paddingTop: 3,
881
+ paddingBottom: 3,
882
+ paddingLeft: 4,
883
+ paddingRight: 4,
884
+ background: getReleaseColorVariant(release.action.type, "100"),
885
+ width: "100%",
886
+ children: /* @__PURE__ */ jsxRuntime.jsx(
887
+ designSystem.Typography,
888
+ {
889
+ fontSize: 1,
890
+ variant: "pi",
891
+ textColor: getReleaseColorVariant(release.action.type, "600"),
892
+ children: formatMessage(
893
+ {
894
+ id: "content-releases.content-manager-edit-view.list-releases.title",
895
+ defaultMessage: "{isPublish, select, true {Will be published in} other {Will be unpublished in}}"
896
+ },
897
+ { isPublish: release.action.type === "publish" }
898
+ )
899
+ }
900
+ )
901
+ }
902
+ ),
903
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
904
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
905
+ release.scheduledAt && release.timezone && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
906
+ {
907
+ id: "content-releases.content-manager-edit-view.scheduled.date",
908
+ defaultMessage: "{date} at {time} ({offset})"
909
+ },
910
+ {
911
+ date: formatDate(new Date(release.scheduledAt), {
912
+ day: "2-digit",
913
+ month: "2-digit",
914
+ year: "numeric",
915
+ timeZone: release.timezone
916
+ }),
917
+ time: formatTime(new Date(release.scheduledAt), {
918
+ hourCycle: "h23",
919
+ timeZone: release.timezone
920
+ }),
921
+ offset: getTimezoneOffset(
922
+ release.timezone,
923
+ new Date(release.scheduledAt)
924
+ )
925
+ }
926
+ ) }),
927
+ canDeleteAction ? /* @__PURE__ */ jsxRuntime.jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
928
+ /* @__PURE__ */ jsxRuntime.jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
929
+ /* @__PURE__ */ jsxRuntime.jsx(
930
+ ReleaseActionMenu.DeleteReleaseActionItem,
931
+ {
932
+ releaseId: release.id,
933
+ actionId: release.action.id
934
+ }
935
+ )
936
+ ] }) : null
937
+ ] }) })
938
+ ]
939
+ },
940
+ release.id
941
+ );
942
+ }),
943
+ canCreateAction ? /* @__PURE__ */ jsxRuntime.jsx(
944
+ designSystem.Button,
945
+ {
946
+ justifyContent: "center",
947
+ paddingLeft: 4,
948
+ paddingRight: 4,
949
+ color: "neutral700",
950
+ variant: "tertiary",
951
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
952
+ onClick: toggleModal,
953
+ children: formatMessage({
954
+ id: "content-releases.content-manager-edit-view.add-to-release",
955
+ defaultMessage: "Add to release"
956
+ })
957
+ }
958
+ ) : null
959
+ ] }),
960
+ isModalOpen && /* @__PURE__ */ jsxRuntime.jsx(
961
+ AddActionToReleaseModal,
962
+ {
963
+ handleClose: toggleModal,
964
+ contentTypeUid,
965
+ entryId: id
966
+ }
967
+ )
968
+ ]
969
+ }
970
+ );
971
+ };
972
+ const prefixPluginTranslations = (trad, pluginId2) => {
973
+ if (!pluginId2) {
974
+ throw new TypeError("pluginId can't be empty");
975
+ }
976
+ return Object.keys(trad).reduce((acc, current) => {
977
+ acc[`${pluginId2}.${current}`] = trad[current];
978
+ return acc;
979
+ }, {});
980
+ };
981
+ const admin = {
982
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
983
+ register(app) {
984
+ if (window.strapi.features.isEnabled("cms-content-releases")) {
985
+ app.addMenuLink({
986
+ to: `plugins/${pluginId}`,
987
+ icon: icons.PaperPlane,
988
+ intlLabel: {
989
+ id: `${pluginId}.plugin.name`,
990
+ defaultMessage: "Releases"
991
+ },
992
+ Component: () => Promise.resolve().then(() => require("./App-1LckaIGY.js")).then((mod) => ({ default: mod.App })),
993
+ permissions: PERMISSIONS.main
994
+ });
995
+ app.addMiddlewares([() => releaseApi.middleware]);
996
+ app.addReducers({
997
+ [releaseApi.reducerPath]: releaseApi.reducer
998
+ });
999
+ app.injectContentManagerComponent("editView", "right-links", {
1000
+ name: `${pluginId}-link`,
1001
+ Component: CMReleasesContainer
1002
+ });
1003
+ } else if (!window.strapi.features.isEnabled("cms-content-releases") && window.strapi?.flags?.promoteEE) {
1004
+ app.addMenuLink({
1005
+ to: `/plugins/purchase-content-releases`,
1006
+ icon: icons.PaperPlane,
1007
+ intlLabel: {
1008
+ id: `${pluginId}.plugin.name`,
1009
+ defaultMessage: "Releases"
1010
+ },
1011
+ async Component() {
1012
+ const { PurchaseContentReleases } = await Promise.resolve().then(() => require("./PurchaseContentReleases-YhAPgpG9.js"));
1013
+ return PurchaseContentReleases;
1014
+ },
1015
+ lockIcon: true
1016
+ });
1017
+ }
1018
+ },
1019
+ async registerTrads({ locales }) {
1020
+ const importedTrads = await Promise.all(
1021
+ locales.map((locale) => {
1022
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-faJDuv3q.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
1023
+ return {
1024
+ data: prefixPluginTranslations(data, "content-releases"),
1025
+ locale
1026
+ };
1027
+ }).catch(() => {
1028
+ return {
1029
+ data: {},
1030
+ locale
1031
+ };
1032
+ });
1033
+ })
1034
+ );
1035
+ return Promise.resolve(importedTrads);
1036
+ }
1037
+ };
1038
+ exports.PERMISSIONS = PERMISSIONS;
1039
+ exports.ReleaseActionMenu = ReleaseActionMenu;
1040
+ exports.ReleaseActionOptions = ReleaseActionOptions;
1041
+ exports.admin = admin;
1042
+ exports.getTimezoneOffset = getTimezoneOffset;
1043
+ exports.isAxiosError = isAxiosError;
1044
+ exports.pluginId = pluginId;
1045
+ exports.releaseApi = releaseApi;
1046
+ exports.useCreateReleaseMutation = useCreateReleaseMutation;
1047
+ exports.useDeleteReleaseMutation = useDeleteReleaseMutation;
1048
+ exports.useGetReleaseActionsQuery = useGetReleaseActionsQuery;
1049
+ exports.useGetReleaseQuery = useGetReleaseQuery;
1050
+ exports.useGetReleasesQuery = useGetReleasesQuery;
1051
+ exports.usePublishReleaseMutation = usePublishReleaseMutation;
1052
+ exports.useUpdateReleaseActionMutation = useUpdateReleaseActionMutation;
1053
+ exports.useUpdateReleaseMutation = useUpdateReleaseMutation;
1054
+ //# sourceMappingURL=index-cYWov2wa.js.map