@strapi/content-releases 0.0.0-experimental.d362bf200f5f9359a4bbd4a549603de5ee1f04ca → 0.0.0-experimental.d3cdf79a0d5f803dfeb6d0f055bb2f3b913bb015

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 (121) hide show
  1. package/LICENSE +17 -1
  2. package/dist/_chunks/{App-X01LBg5V.mjs → App-CiZCkScI.mjs} +666 -437
  3. package/dist/_chunks/App-CiZCkScI.mjs.map +1 -0
  4. package/dist/_chunks/App-SGjO5UPV.js +1578 -0
  5. package/dist/_chunks/App-SGjO5UPV.js.map +1 -0
  6. package/dist/_chunks/{PurchaseContentReleases-YhAPgpG9.js → PurchaseContentReleases--qQepXpP.js} +9 -8
  7. package/dist/_chunks/PurchaseContentReleases--qQepXpP.js.map +1 -0
  8. package/dist/_chunks/{PurchaseContentReleases-Clm0iACO.mjs → PurchaseContentReleases-D-n-w-st.mjs} +10 -9
  9. package/dist/_chunks/PurchaseContentReleases-D-n-w-st.mjs.map +1 -0
  10. package/dist/_chunks/ReleasesSettingsPage-Cto_NLUd.js +178 -0
  11. package/dist/_chunks/ReleasesSettingsPage-Cto_NLUd.js.map +1 -0
  12. package/dist/_chunks/ReleasesSettingsPage-DQT8N3A-.mjs +178 -0
  13. package/dist/_chunks/ReleasesSettingsPage-DQT8N3A-.mjs.map +1 -0
  14. package/dist/_chunks/{en-faJDuv3q.js → en-BWPPsSH-.js} +28 -3
  15. package/dist/_chunks/en-BWPPsSH-.js.map +1 -0
  16. package/dist/_chunks/{en-RdapH-9X.mjs → en-D9Q4YW03.mjs} +28 -3
  17. package/dist/_chunks/en-D9Q4YW03.mjs.map +1 -0
  18. package/dist/_chunks/index-BjvFfTtA.mjs +1386 -0
  19. package/dist/_chunks/index-BjvFfTtA.mjs.map +1 -0
  20. package/dist/_chunks/index-CyU534vL.js +1404 -0
  21. package/dist/_chunks/index-CyU534vL.js.map +1 -0
  22. package/dist/_chunks/schemas-DBYv9gK8.js +61 -0
  23. package/dist/_chunks/schemas-DBYv9gK8.js.map +1 -0
  24. package/dist/_chunks/schemas-DdA2ic2U.mjs +44 -0
  25. package/dist/_chunks/schemas-DdA2ic2U.mjs.map +1 -0
  26. package/dist/admin/index.js +1 -1
  27. package/dist/admin/index.mjs +2 -2
  28. package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
  29. package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
  30. package/dist/admin/src/components/ReleaseActionMenu.d.ts +3 -3
  31. package/dist/admin/src/components/ReleaseActionModal.d.ts +24 -0
  32. package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
  33. package/dist/admin/src/components/ReleaseModal.d.ts +3 -2
  34. package/dist/admin/src/components/ReleasesPanel.d.ts +3 -0
  35. package/dist/admin/src/constants.d.ts +18 -0
  36. package/dist/admin/src/modules/hooks.d.ts +7 -0
  37. package/dist/admin/src/pages/ReleasesSettingsPage.d.ts +1 -0
  38. package/dist/admin/src/services/release.d.ts +56 -313
  39. package/dist/admin/src/utils/api.d.ts +6 -0
  40. package/dist/admin/src/utils/time.d.ts +9 -0
  41. package/dist/admin/src/validation/schemas.d.ts +6 -0
  42. package/dist/server/index.js +916 -580
  43. package/dist/server/index.js.map +1 -1
  44. package/dist/server/index.mjs +916 -579
  45. package/dist/server/index.mjs.map +1 -1
  46. package/dist/server/src/bootstrap.d.ts +1 -1
  47. package/dist/server/src/bootstrap.d.ts.map +1 -1
  48. package/dist/server/src/constants.d.ts +11 -2
  49. package/dist/server/src/constants.d.ts.map +1 -1
  50. package/dist/server/src/content-types/index.d.ts +3 -5
  51. package/dist/server/src/content-types/index.d.ts.map +1 -1
  52. package/dist/server/src/content-types/release-action/index.d.ts +3 -5
  53. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -1
  54. package/dist/server/src/content-types/release-action/schema.d.ts +3 -5
  55. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -1
  56. package/dist/server/src/controllers/index.d.ts +7 -1
  57. package/dist/server/src/controllers/index.d.ts.map +1 -1
  58. package/dist/server/src/controllers/release-action.d.ts.map +1 -1
  59. package/dist/server/src/controllers/release.d.ts +8 -1
  60. package/dist/server/src/controllers/release.d.ts.map +1 -1
  61. package/dist/server/src/controllers/settings.d.ts +11 -0
  62. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  63. package/dist/server/src/controllers/validation/release-action.d.ts +7 -1
  64. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -1
  65. package/dist/server/src/controllers/validation/release.d.ts +2 -0
  66. package/dist/server/src/controllers/validation/release.d.ts.map +1 -1
  67. package/dist/server/src/controllers/validation/settings.d.ts +3 -0
  68. package/dist/server/src/controllers/validation/settings.d.ts.map +1 -0
  69. package/dist/server/src/destroy.d.ts +1 -1
  70. package/dist/server/src/destroy.d.ts.map +1 -1
  71. package/dist/server/src/index.d.ts +72 -56
  72. package/dist/server/src/index.d.ts.map +1 -1
  73. package/dist/server/src/middlewares/documents.d.ts +6 -0
  74. package/dist/server/src/middlewares/documents.d.ts.map +1 -0
  75. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts +9 -0
  76. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -0
  77. package/dist/server/src/migrations/index.d.ts.map +1 -1
  78. package/dist/server/src/register.d.ts +1 -1
  79. package/dist/server/src/register.d.ts.map +1 -1
  80. package/dist/server/src/routes/index.d.ts +16 -0
  81. package/dist/server/src/routes/index.d.ts.map +1 -1
  82. package/dist/server/src/routes/release.d.ts.map +1 -1
  83. package/dist/server/src/routes/settings.d.ts +18 -0
  84. package/dist/server/src/routes/settings.d.ts.map +1 -0
  85. package/dist/server/src/services/index.d.ts +39 -41
  86. package/dist/server/src/services/index.d.ts.map +1 -1
  87. package/dist/server/src/services/release-action.d.ts +34 -0
  88. package/dist/server/src/services/release-action.d.ts.map +1 -0
  89. package/dist/server/src/services/release.d.ts +7 -42
  90. package/dist/server/src/services/release.d.ts.map +1 -1
  91. package/dist/server/src/services/scheduling.d.ts +1 -1
  92. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  93. package/dist/server/src/services/settings.d.ts +13 -0
  94. package/dist/server/src/services/settings.d.ts.map +1 -0
  95. package/dist/server/src/services/validation.d.ts +2 -2
  96. package/dist/server/src/services/validation.d.ts.map +1 -1
  97. package/dist/server/src/utils/index.d.ts +33 -12
  98. package/dist/server/src/utils/index.d.ts.map +1 -1
  99. package/dist/shared/contracts/release-actions.d.ts +17 -11
  100. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  101. package/dist/shared/contracts/releases.d.ts +24 -6
  102. package/dist/shared/contracts/releases.d.ts.map +1 -1
  103. package/dist/shared/contracts/settings.d.ts +39 -0
  104. package/dist/shared/contracts/settings.d.ts.map +1 -0
  105. package/package.json +24 -22
  106. package/dist/_chunks/App-1LckaIGY.js +0 -1352
  107. package/dist/_chunks/App-1LckaIGY.js.map +0 -1
  108. package/dist/_chunks/App-X01LBg5V.mjs.map +0 -1
  109. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +0 -1
  110. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +0 -1
  111. package/dist/_chunks/en-RdapH-9X.mjs.map +0 -1
  112. package/dist/_chunks/en-faJDuv3q.js.map +0 -1
  113. package/dist/_chunks/index-OD9AlD-6.mjs +0 -1033
  114. package/dist/_chunks/index-OD9AlD-6.mjs.map +0 -1
  115. package/dist/_chunks/index-cYWov2wa.js +0 -1054
  116. package/dist/_chunks/index-cYWov2wa.js.map +0 -1
  117. package/dist/admin/src/components/CMReleasesContainer.d.ts +0 -1
  118. package/dist/admin/src/services/axios.d.ts +0 -29
  119. package/dist/shared/validation-schemas.d.ts +0 -2
  120. package/dist/shared/validation-schemas.d.ts.map +0 -1
  121. package/strapi-server.js +0 -3
@@ -1,1054 +0,0 @@
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