@strapi/content-releases 5.12.0 → 5.12.2

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 (259) hide show
  1. package/dist/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
  2. package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
  3. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
  4. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
  5. package/dist/admin/assets/purchase-page-illustration-light.svg.js +6 -0
  6. package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
  7. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
  8. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
  9. package/dist/admin/components/EntryValidationPopover.js +344 -0
  10. package/dist/admin/components/EntryValidationPopover.js.map +1 -0
  11. package/dist/admin/components/EntryValidationPopover.mjs +342 -0
  12. package/dist/admin/components/EntryValidationPopover.mjs.map +1 -0
  13. package/dist/admin/components/RelativeTime.js +76 -0
  14. package/dist/admin/components/RelativeTime.js.map +1 -0
  15. package/dist/admin/components/RelativeTime.mjs +55 -0
  16. package/dist/admin/components/RelativeTime.mjs.map +1 -0
  17. package/dist/admin/components/ReleaseAction.js +201 -0
  18. package/dist/admin/components/ReleaseAction.js.map +1 -0
  19. package/dist/admin/components/ReleaseAction.mjs +199 -0
  20. package/dist/admin/components/ReleaseAction.mjs.map +1 -0
  21. package/dist/admin/components/ReleaseActionMenu.js +243 -0
  22. package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
  23. package/dist/admin/components/ReleaseActionMenu.mjs +222 -0
  24. package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -0
  25. package/dist/admin/components/ReleaseActionModal.js +268 -0
  26. package/dist/admin/components/ReleaseActionModal.js.map +1 -0
  27. package/dist/admin/components/ReleaseActionModal.mjs +244 -0
  28. package/dist/admin/components/ReleaseActionModal.mjs.map +1 -0
  29. package/dist/admin/components/ReleaseActionOptions.js +104 -0
  30. package/dist/admin/components/ReleaseActionOptions.js.map +1 -0
  31. package/dist/admin/components/ReleaseActionOptions.mjs +102 -0
  32. package/dist/admin/components/ReleaseActionOptions.mjs.map +1 -0
  33. package/dist/admin/components/ReleaseListCell.js +103 -0
  34. package/dist/admin/components/ReleaseListCell.js.map +1 -0
  35. package/dist/admin/components/ReleaseListCell.mjs +100 -0
  36. package/dist/admin/components/ReleaseListCell.mjs.map +1 -0
  37. package/dist/admin/components/ReleaseModal.js +323 -0
  38. package/dist/admin/components/ReleaseModal.js.map +1 -0
  39. package/dist/admin/components/ReleaseModal.mjs +302 -0
  40. package/dist/admin/components/ReleaseModal.mjs.map +1 -0
  41. package/dist/admin/components/ReleasesPanel.js +138 -0
  42. package/dist/admin/components/ReleasesPanel.js.map +1 -0
  43. package/dist/admin/components/ReleasesPanel.mjs +136 -0
  44. package/dist/admin/components/ReleasesPanel.mjs.map +1 -0
  45. package/dist/admin/constants.js +77 -0
  46. package/dist/admin/constants.js.map +1 -0
  47. package/dist/admin/constants.mjs +75 -0
  48. package/dist/admin/constants.mjs.map +1 -0
  49. package/dist/admin/index.js +120 -14
  50. package/dist/admin/index.js.map +1 -1
  51. package/dist/admin/index.mjs +121 -13
  52. package/dist/admin/index.mjs.map +1 -1
  53. package/dist/admin/{chunks/hooks-DA5VbUAp.js → modules/hooks.js} +1 -1
  54. package/dist/admin/modules/hooks.js.map +1 -0
  55. package/dist/admin/{chunks/hooks-CFk_8Q0b.mjs → modules/hooks.mjs} +2 -2
  56. package/dist/admin/modules/hooks.mjs.map +1 -0
  57. package/dist/admin/pages/App.js +29 -0
  58. package/dist/admin/pages/App.js.map +1 -0
  59. package/dist/admin/pages/App.mjs +27 -0
  60. package/dist/admin/pages/App.mjs.map +1 -0
  61. package/dist/admin/pages/PurchaseContentReleases.js +192 -0
  62. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
  63. package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
  64. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
  65. package/dist/admin/pages/ReleaseDetailsPage.js +821 -0
  66. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
  67. package/dist/admin/pages/ReleaseDetailsPage.mjs +800 -0
  68. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
  69. package/dist/admin/pages/ReleasesPage.js +397 -0
  70. package/dist/admin/pages/ReleasesPage.js.map +1 -0
  71. package/dist/admin/pages/ReleasesPage.mjs +375 -0
  72. package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
  73. package/dist/admin/{chunks/ReleasesSettingsPage-KRcoI1bC.js → pages/ReleasesSettingsPage.js} +9 -17
  74. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
  75. package/dist/admin/{chunks/ReleasesSettingsPage-DUKdFdvx.mjs → pages/ReleasesSettingsPage.mjs} +5 -13
  76. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
  77. package/dist/admin/pluginId.js +6 -0
  78. package/dist/admin/pluginId.js.map +1 -0
  79. package/dist/admin/pluginId.mjs +4 -0
  80. package/dist/admin/pluginId.mjs.map +1 -0
  81. package/dist/admin/services/release.js +464 -0
  82. package/dist/admin/services/release.js.map +1 -0
  83. package/dist/admin/services/release.mjs +447 -0
  84. package/dist/admin/services/release.mjs.map +1 -0
  85. package/dist/admin/store/hooks.js +8 -0
  86. package/dist/admin/store/hooks.js.map +1 -0
  87. package/dist/admin/store/hooks.mjs +6 -0
  88. package/dist/admin/store/hooks.mjs.map +1 -0
  89. package/dist/admin/{chunks/en-BOpqX2t_.js → translations/en.json.js} +2 -2
  90. package/dist/admin/translations/en.json.js.map +1 -0
  91. package/dist/admin/{chunks/en-aQo8Bn_U.mjs → translations/en.json.mjs} +1 -1
  92. package/dist/admin/translations/en.json.mjs.map +1 -0
  93. package/dist/admin/{chunks/uk-9T9su-bj.js → translations/uk.json.js} +2 -2
  94. package/dist/admin/translations/uk.json.js.map +1 -0
  95. package/dist/admin/{chunks/uk-Bp9HotPq.mjs → translations/uk.json.mjs} +1 -1
  96. package/dist/admin/translations/uk.json.mjs.map +1 -0
  97. package/dist/admin/utils/api.js +8 -0
  98. package/dist/admin/utils/api.js.map +1 -0
  99. package/dist/admin/utils/api.mjs +6 -0
  100. package/dist/admin/utils/api.mjs.map +1 -0
  101. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  102. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  103. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  104. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  105. package/dist/admin/utils/time.js +42 -0
  106. package/dist/admin/utils/time.js.map +1 -0
  107. package/dist/admin/utils/time.mjs +39 -0
  108. package/dist/admin/utils/time.mjs.map +1 -0
  109. package/dist/admin/{chunks/schemas-DS7NeFDN.js → validation/schemas.js} +1 -1
  110. package/dist/admin/validation/schemas.js.map +1 -0
  111. package/dist/admin/{chunks/schemas-DMt8h1z-.mjs → validation/schemas.mjs} +2 -2
  112. package/dist/admin/validation/schemas.mjs.map +1 -0
  113. package/dist/server/bootstrap.js +68 -0
  114. package/dist/server/bootstrap.js.map +1 -0
  115. package/dist/server/bootstrap.mjs +66 -0
  116. package/dist/server/bootstrap.mjs.map +1 -0
  117. package/dist/server/constants.js +74 -0
  118. package/dist/server/constants.js.map +1 -0
  119. package/dist/server/constants.mjs +69 -0
  120. package/dist/server/constants.mjs.map +1 -0
  121. package/dist/server/content-types/index.js +12 -0
  122. package/dist/server/content-types/index.js.map +1 -0
  123. package/dist/server/content-types/index.mjs +10 -0
  124. package/dist/server/content-types/index.mjs.map +1 -0
  125. package/dist/server/content-types/release/index.js +10 -0
  126. package/dist/server/content-types/release/index.js.map +1 -0
  127. package/dist/server/content-types/release/index.mjs +8 -0
  128. package/dist/server/content-types/release/index.mjs.map +1 -0
  129. package/dist/server/content-types/release/schema.js +58 -0
  130. package/dist/server/content-types/release/schema.js.map +1 -0
  131. package/dist/server/content-types/release/schema.mjs +56 -0
  132. package/dist/server/content-types/release/schema.mjs.map +1 -0
  133. package/dist/server/content-types/release-action/index.js +10 -0
  134. package/dist/server/content-types/release-action/index.js.map +1 -0
  135. package/dist/server/content-types/release-action/index.mjs +8 -0
  136. package/dist/server/content-types/release-action/index.mjs.map +1 -0
  137. package/dist/server/content-types/release-action/schema.js +55 -0
  138. package/dist/server/content-types/release-action/schema.js.map +1 -0
  139. package/dist/server/content-types/release-action/schema.mjs +53 -0
  140. package/dist/server/content-types/release-action/schema.mjs.map +1 -0
  141. package/dist/server/controllers/index.js +14 -0
  142. package/dist/server/controllers/index.js.map +1 -0
  143. package/dist/server/controllers/index.mjs +12 -0
  144. package/dist/server/controllers/index.mjs.map +1 -0
  145. package/dist/server/controllers/release-action.js +150 -0
  146. package/dist/server/controllers/release-action.js.map +1 -0
  147. package/dist/server/controllers/release-action.mjs +148 -0
  148. package/dist/server/controllers/release-action.mjs.map +1 -0
  149. package/dist/server/controllers/release.js +302 -0
  150. package/dist/server/controllers/release.js.map +1 -0
  151. package/dist/server/controllers/release.mjs +300 -0
  152. package/dist/server/controllers/release.mjs.map +1 -0
  153. package/dist/server/controllers/settings.js +37 -0
  154. package/dist/server/controllers/settings.js.map +1 -0
  155. package/dist/server/controllers/settings.mjs +35 -0
  156. package/dist/server/controllers/settings.mjs.map +1 -0
  157. package/dist/server/controllers/validation/release-action.js +34 -0
  158. package/dist/server/controllers/validation/release-action.js.map +1 -0
  159. package/dist/server/controllers/validation/release-action.mjs +30 -0
  160. package/dist/server/controllers/validation/release-action.mjs.map +1 -0
  161. package/dist/server/controllers/validation/release.js +26 -0
  162. package/dist/server/controllers/validation/release.js.map +1 -0
  163. package/dist/server/controllers/validation/release.mjs +22 -0
  164. package/dist/server/controllers/validation/release.mjs.map +1 -0
  165. package/dist/server/controllers/validation/settings.js +32 -0
  166. package/dist/server/controllers/validation/settings.js.map +1 -0
  167. package/dist/server/controllers/validation/settings.mjs +10 -0
  168. package/dist/server/controllers/validation/settings.mjs.map +1 -0
  169. package/dist/server/destroy.js +15 -0
  170. package/dist/server/destroy.js.map +1 -0
  171. package/dist/server/destroy.mjs +13 -0
  172. package/dist/server/destroy.mjs.map +1 -0
  173. package/dist/server/index.js +16 -2336
  174. package/dist/server/index.js.map +1 -1
  175. package/dist/server/index.mjs +7 -2308
  176. package/dist/server/index.mjs.map +1 -1
  177. package/dist/server/middlewares/documents.js +104 -0
  178. package/dist/server/middlewares/documents.js.map +1 -0
  179. package/dist/server/middlewares/documents.mjs +101 -0
  180. package/dist/server/middlewares/documents.mjs.map +1 -0
  181. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
  182. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
  183. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
  184. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
  185. package/dist/server/migrations/index.js +205 -0
  186. package/dist/server/migrations/index.js.map +1 -0
  187. package/dist/server/migrations/index.mjs +198 -0
  188. package/dist/server/migrations/index.mjs.map +1 -0
  189. package/dist/server/register.js +23 -0
  190. package/dist/server/register.js.map +1 -0
  191. package/dist/server/register.mjs +21 -0
  192. package/dist/server/register.mjs.map +1 -0
  193. package/dist/server/routes/index.js +14 -0
  194. package/dist/server/routes/index.js.map +1 -0
  195. package/dist/server/routes/index.mjs +12 -0
  196. package/dist/server/routes/index.mjs.map +1 -0
  197. package/dist/server/routes/release-action.js +100 -0
  198. package/dist/server/routes/release-action.js.map +1 -0
  199. package/dist/server/routes/release-action.mjs +98 -0
  200. package/dist/server/routes/release-action.mjs.map +1 -0
  201. package/dist/server/routes/release.js +154 -0
  202. package/dist/server/routes/release.js.map +1 -0
  203. package/dist/server/routes/release.mjs +152 -0
  204. package/dist/server/routes/release.mjs.map +1 -0
  205. package/dist/server/routes/settings.js +46 -0
  206. package/dist/server/routes/settings.js.map +1 -0
  207. package/dist/server/routes/settings.mjs +44 -0
  208. package/dist/server/routes/settings.mjs.map +1 -0
  209. package/dist/server/services/index.js +18 -0
  210. package/dist/server/services/index.js.map +1 -0
  211. package/dist/server/services/index.mjs +16 -0
  212. package/dist/server/services/index.mjs.map +1 -0
  213. package/dist/server/services/release-action.js +323 -0
  214. package/dist/server/services/release-action.js.map +1 -0
  215. package/dist/server/services/release-action.mjs +321 -0
  216. package/dist/server/services/release-action.mjs.map +1 -0
  217. package/dist/server/services/release.js +324 -0
  218. package/dist/server/services/release.js.map +1 -0
  219. package/dist/server/services/release.mjs +322 -0
  220. package/dist/server/services/release.mjs.map +1 -0
  221. package/dist/server/services/scheduling.js +70 -0
  222. package/dist/server/services/scheduling.js.map +1 -0
  223. package/dist/server/services/scheduling.mjs +68 -0
  224. package/dist/server/services/scheduling.mjs.map +1 -0
  225. package/dist/server/services/settings.js +34 -0
  226. package/dist/server/services/settings.js.map +1 -0
  227. package/dist/server/services/settings.mjs +32 -0
  228. package/dist/server/services/settings.mjs.map +1 -0
  229. package/dist/server/services/validation.js +91 -0
  230. package/dist/server/services/validation.js.map +1 -0
  231. package/dist/server/services/validation.mjs +86 -0
  232. package/dist/server/services/validation.mjs.map +1 -0
  233. package/dist/server/utils/index.js +93 -0
  234. package/dist/server/utils/index.js.map +1 -0
  235. package/dist/server/utils/index.mjs +87 -0
  236. package/dist/server/utils/index.mjs.map +1 -0
  237. package/package.json +7 -7
  238. package/dist/admin/chunks/App-BkWgp5q_.mjs +0 -1845
  239. package/dist/admin/chunks/App-BkWgp5q_.mjs.map +0 -1
  240. package/dist/admin/chunks/App-CJiqPP7-.js +0 -1866
  241. package/dist/admin/chunks/App-CJiqPP7-.js.map +0 -1
  242. package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs +0 -193
  243. package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs.map +0 -1
  244. package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js +0 -195
  245. package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js.map +0 -1
  246. package/dist/admin/chunks/ReleasesSettingsPage-DUKdFdvx.mjs.map +0 -1
  247. package/dist/admin/chunks/ReleasesSettingsPage-KRcoI1bC.js.map +0 -1
  248. package/dist/admin/chunks/en-BOpqX2t_.js.map +0 -1
  249. package/dist/admin/chunks/en-aQo8Bn_U.mjs.map +0 -1
  250. package/dist/admin/chunks/hooks-CFk_8Q0b.mjs.map +0 -1
  251. package/dist/admin/chunks/hooks-DA5VbUAp.js.map +0 -1
  252. package/dist/admin/chunks/index-DBUaMD56.mjs +0 -1619
  253. package/dist/admin/chunks/index-DBUaMD56.mjs.map +0 -1
  254. package/dist/admin/chunks/index-vjWrvGN3.js +0 -1658
  255. package/dist/admin/chunks/index-vjWrvGN3.js.map +0 -1
  256. package/dist/admin/chunks/schemas-DMt8h1z-.mjs.map +0 -1
  257. package/dist/admin/chunks/schemas-DS7NeFDN.js.map +0 -1
  258. package/dist/admin/chunks/uk-9T9su-bj.js.map +0 -1
  259. package/dist/admin/chunks/uk-Bp9HotPq.mjs.map +0 -1
@@ -1,1619 +0,0 @@
1
- import { PaperPlane, CaretDown, Cross, Pencil, More } from '@strapi/icons';
2
- import { jsxs, jsx } from 'react/jsx-runtime';
3
- import * as React from 'react';
4
- import { adminApi, useRBAC, useNotification, useAPIErrorHandler, useQueryParams, isFetchError, useTable, useAuth } from '@strapi/admin/strapi-admin';
5
- import { Field, Flex, VisuallyHidden, Modal, Button, EmptyStateLayout, LinkButton, Box, SingleSelect, SingleSelectOption, Popover, Typography, Link as Link$1, Menu, AccessibleIcon } from '@strapi/design-system';
6
- import { useFormik, Formik, Form } from 'formik';
7
- import { useIntl } from 'react-intl';
8
- import { unstable_useDocumentLayout } from '@strapi/content-manager/strapi-admin';
9
- import { EmptyDocuments } from '@strapi/icons/symbols';
10
- import { Link, NavLink } from 'react-router-dom';
11
- import * as yup from 'yup';
12
- import { styled } from 'styled-components';
13
-
14
- const PERMISSIONS = {
15
- main: [
16
- {
17
- action: 'plugin::content-releases.read',
18
- subject: null,
19
- id: '',
20
- actionParameters: {},
21
- properties: {},
22
- conditions: []
23
- }
24
- ],
25
- create: [
26
- {
27
- action: 'plugin::content-releases.create',
28
- subject: null,
29
- id: '',
30
- actionParameters: {},
31
- properties: {},
32
- conditions: []
33
- }
34
- ],
35
- update: [
36
- {
37
- action: 'plugin::content-releases.update',
38
- subject: null,
39
- id: '',
40
- actionParameters: {},
41
- properties: {},
42
- conditions: []
43
- }
44
- ],
45
- delete: [
46
- {
47
- action: 'plugin::content-releases.delete',
48
- subject: null,
49
- id: '',
50
- actionParameters: {},
51
- properties: {},
52
- conditions: []
53
- }
54
- ],
55
- createAction: [
56
- {
57
- action: 'plugin::content-releases.create-action',
58
- subject: null,
59
- id: '',
60
- actionParameters: {},
61
- properties: {},
62
- conditions: []
63
- }
64
- ],
65
- deleteAction: [
66
- {
67
- action: 'plugin::content-releases.delete-action',
68
- subject: null,
69
- id: '',
70
- actionParameters: {},
71
- properties: {},
72
- conditions: []
73
- }
74
- ],
75
- publish: [
76
- {
77
- action: 'plugin::content-releases.publish',
78
- subject: null,
79
- id: '',
80
- actionParameters: {},
81
- properties: {},
82
- conditions: []
83
- }
84
- ]
85
- };
86
-
87
- // TODO: move this into the admin code & expose an improved version of enhanceEndpoints or a new function
88
- const extendInvalidatesTags = (endpoint, extraTags)=>{
89
- if (!endpoint) {
90
- return;
91
- }
92
- const originalInvalidatesTags = endpoint.invalidatesTags;
93
- const newInvalidatesTags = (result, err, args, meta)=>{
94
- const originalTags = typeof originalInvalidatesTags === 'function' ? originalInvalidatesTags(result, err, args, meta) : originalInvalidatesTags;
95
- return [
96
- ...originalTags ?? [],
97
- ...extraTags
98
- ];
99
- };
100
- Object.assign(endpoint, {
101
- invalidatesTags: newInvalidatesTags
102
- });
103
- };
104
- const releaseApi = adminApi.enhanceEndpoints({
105
- addTagTypes: [
106
- 'Release',
107
- 'ReleaseAction',
108
- 'EntriesInRelease',
109
- 'ReleaseSettings',
110
- 'Document'
111
- ],
112
- endpoints: {
113
- updateDocument (endpoint) {
114
- extendInvalidatesTags(endpoint, [
115
- {
116
- type: 'Release',
117
- id: 'LIST'
118
- },
119
- {
120
- type: 'ReleaseAction',
121
- id: 'LIST'
122
- }
123
- ]);
124
- },
125
- deleteDocument (endpoint) {
126
- extendInvalidatesTags(endpoint, [
127
- {
128
- type: 'Release',
129
- id: 'LIST'
130
- },
131
- {
132
- type: 'ReleaseAction',
133
- id: 'LIST'
134
- }
135
- ]);
136
- },
137
- deleteManyDocuments (endpoint) {
138
- extendInvalidatesTags(endpoint, [
139
- {
140
- type: 'Release',
141
- id: 'LIST'
142
- },
143
- {
144
- type: 'ReleaseAction',
145
- id: 'LIST'
146
- }
147
- ]);
148
- },
149
- discardDocument (endpoint) {
150
- extendInvalidatesTags(endpoint, [
151
- {
152
- type: 'Release',
153
- id: 'LIST'
154
- },
155
- {
156
- type: 'ReleaseAction',
157
- id: 'LIST'
158
- }
159
- ]);
160
- },
161
- createWorkflow (endpoint) {
162
- extendInvalidatesTags(endpoint, [
163
- {
164
- type: 'Release',
165
- id: 'LIST'
166
- },
167
- {
168
- type: 'ReleaseAction',
169
- id: 'LIST'
170
- }
171
- ]);
172
- },
173
- updateWorkflow (endpoint) {
174
- extendInvalidatesTags(endpoint, [
175
- {
176
- type: 'Release',
177
- id: 'LIST'
178
- },
179
- {
180
- type: 'ReleaseAction',
181
- id: 'LIST'
182
- }
183
- ]);
184
- },
185
- deleteWorkflow (endpoint) {
186
- extendInvalidatesTags(endpoint, [
187
- {
188
- type: 'Release',
189
- id: 'LIST'
190
- },
191
- {
192
- type: 'ReleaseAction',
193
- id: 'LIST'
194
- }
195
- ]);
196
- }
197
- }
198
- }).injectEndpoints({
199
- endpoints: (build)=>{
200
- return {
201
- getReleasesForEntry: build.query({
202
- query (params) {
203
- return {
204
- url: '/content-releases/getByDocumentAttached',
205
- method: 'GET',
206
- config: {
207
- params
208
- }
209
- };
210
- },
211
- providesTags: (result)=>result ? [
212
- ...result.data.map(({ id })=>({
213
- type: 'Release',
214
- id
215
- })),
216
- {
217
- type: 'Release',
218
- id: 'LIST'
219
- }
220
- ] : []
221
- }),
222
- getReleases: build.query({
223
- query ({ page, pageSize, filters } = {
224
- page: 1,
225
- pageSize: 16,
226
- filters: {
227
- releasedAt: {
228
- $notNull: false
229
- }
230
- }
231
- }) {
232
- return {
233
- url: '/content-releases',
234
- method: 'GET',
235
- config: {
236
- params: {
237
- page: page || 1,
238
- pageSize: pageSize || 16,
239
- filters: filters || {
240
- releasedAt: {
241
- $notNull: false
242
- }
243
- }
244
- }
245
- }
246
- };
247
- },
248
- transformResponse (response, meta, arg) {
249
- const releasedAtValue = arg?.filters?.releasedAt?.$notNull;
250
- const isActiveDoneTab = releasedAtValue === 'true';
251
- const newResponse = {
252
- ...response,
253
- meta: {
254
- ...response.meta,
255
- activeTab: isActiveDoneTab ? 'done' : 'pending'
256
- }
257
- };
258
- return newResponse;
259
- },
260
- providesTags: (result)=>result ? [
261
- ...result.data.map(({ id })=>({
262
- type: 'Release',
263
- id
264
- })),
265
- {
266
- type: 'Release',
267
- id: 'LIST'
268
- }
269
- ] : [
270
- {
271
- type: 'Release',
272
- id: 'LIST'
273
- }
274
- ]
275
- }),
276
- getRelease: build.query({
277
- query ({ id }) {
278
- return {
279
- url: `/content-releases/${id}`,
280
- method: 'GET'
281
- };
282
- },
283
- providesTags: (result, error, arg)=>[
284
- {
285
- type: 'Release',
286
- id: 'LIST'
287
- },
288
- {
289
- type: 'Release',
290
- id: arg.id
291
- }
292
- ]
293
- }),
294
- getReleaseActions: build.query({
295
- query ({ releaseId, ...params }) {
296
- return {
297
- url: `/content-releases/${releaseId}/actions`,
298
- method: 'GET',
299
- config: {
300
- params
301
- }
302
- };
303
- },
304
- providesTags: [
305
- {
306
- type: 'ReleaseAction',
307
- id: 'LIST'
308
- }
309
- ]
310
- }),
311
- createRelease: build.mutation({
312
- query (data) {
313
- return {
314
- url: '/content-releases',
315
- method: 'POST',
316
- data
317
- };
318
- },
319
- invalidatesTags: [
320
- {
321
- type: 'Release',
322
- id: 'LIST'
323
- }
324
- ]
325
- }),
326
- updateRelease: build.mutation({
327
- query ({ id, ...data }) {
328
- return {
329
- url: `/content-releases/${id}`,
330
- method: 'PUT',
331
- data
332
- };
333
- },
334
- invalidatesTags: (result, error, arg)=>[
335
- {
336
- type: 'Release',
337
- id: arg.id
338
- }
339
- ]
340
- }),
341
- createReleaseAction: build.mutation({
342
- query ({ body, params }) {
343
- return {
344
- url: `/content-releases/${params.releaseId}/actions`,
345
- method: 'POST',
346
- data: body
347
- };
348
- },
349
- invalidatesTags: [
350
- {
351
- type: 'Release',
352
- id: 'LIST'
353
- },
354
- {
355
- type: 'ReleaseAction',
356
- id: 'LIST'
357
- }
358
- ]
359
- }),
360
- createManyReleaseActions: build.mutation({
361
- query ({ body, params }) {
362
- return {
363
- url: `/content-releases/${params.releaseId}/actions/bulk`,
364
- method: 'POST',
365
- data: body
366
- };
367
- },
368
- invalidatesTags: [
369
- {
370
- type: 'Release',
371
- id: 'LIST'
372
- },
373
- {
374
- type: 'ReleaseAction',
375
- id: 'LIST'
376
- },
377
- {
378
- type: 'EntriesInRelease'
379
- }
380
- ]
381
- }),
382
- updateReleaseAction: build.mutation({
383
- query ({ body, params }) {
384
- return {
385
- url: `/content-releases/${params.releaseId}/actions/${params.actionId}`,
386
- method: 'PUT',
387
- data: body
388
- };
389
- },
390
- invalidatesTags: (res, error, arg)=>[
391
- {
392
- type: 'ReleaseAction',
393
- id: 'LIST'
394
- },
395
- {
396
- type: 'Release',
397
- id: 'LIST'
398
- },
399
- {
400
- type: 'Release',
401
- id: arg.params.releaseId
402
- }
403
- ],
404
- async onQueryStarted ({ body, params, query, actionPath }, { dispatch, queryFulfilled }) {
405
- // We need to mimic the same params received by the getReleaseActions query
406
- const paramsWithoutActionId = {
407
- releaseId: params.releaseId,
408
- ...query
409
- };
410
- const patchResult = dispatch(releaseApi.util.updateQueryData('getReleaseActions', paramsWithoutActionId, (draft)=>{
411
- const [key, index] = actionPath;
412
- const action = draft.data[key][index];
413
- if (action) {
414
- action.type = body.type;
415
- }
416
- }));
417
- try {
418
- await queryFulfilled;
419
- } catch {
420
- patchResult.undo();
421
- }
422
- }
423
- }),
424
- deleteReleaseAction: build.mutation({
425
- query ({ params }) {
426
- return {
427
- url: `/content-releases/${params.releaseId}/actions/${params.actionId}`,
428
- method: 'DELETE'
429
- };
430
- },
431
- invalidatesTags: (result, error, arg)=>[
432
- {
433
- type: 'Release',
434
- id: 'LIST'
435
- },
436
- {
437
- type: 'Release',
438
- id: arg.params.releaseId
439
- },
440
- {
441
- type: 'ReleaseAction',
442
- id: 'LIST'
443
- },
444
- {
445
- type: 'EntriesInRelease'
446
- }
447
- ]
448
- }),
449
- publishRelease: build.mutation({
450
- query ({ id }) {
451
- return {
452
- url: `/content-releases/${id}/publish`,
453
- method: 'POST'
454
- };
455
- },
456
- invalidatesTags: (result, error, arg)=>[
457
- {
458
- type: 'Release',
459
- id: arg.id
460
- },
461
- {
462
- type: 'Document',
463
- id: `ALL_LIST`
464
- }
465
- ]
466
- }),
467
- deleteRelease: build.mutation({
468
- query ({ id }) {
469
- return {
470
- url: `/content-releases/${id}`,
471
- method: 'DELETE'
472
- };
473
- },
474
- invalidatesTags: ()=>[
475
- {
476
- type: 'Release',
477
- id: 'LIST'
478
- },
479
- {
480
- type: 'EntriesInRelease'
481
- }
482
- ]
483
- }),
484
- getMappedEntriesInReleases: build.query({
485
- query (params) {
486
- return {
487
- url: '/content-releases/mapEntriesToReleases',
488
- method: 'GET',
489
- config: {
490
- params
491
- }
492
- };
493
- },
494
- transformResponse (response) {
495
- return response.data;
496
- },
497
- providesTags: [
498
- {
499
- type: 'EntriesInRelease'
500
- }
501
- ]
502
- }),
503
- getReleaseSettings: build.query({
504
- query: ()=>'/content-releases/settings',
505
- providesTags: [
506
- {
507
- type: 'ReleaseSettings'
508
- }
509
- ]
510
- }),
511
- updateReleaseSettings: build.mutation({
512
- query (data) {
513
- return {
514
- url: '/content-releases/settings',
515
- method: 'PUT',
516
- data
517
- };
518
- },
519
- invalidatesTags: [
520
- {
521
- type: 'ReleaseSettings'
522
- }
523
- ]
524
- })
525
- };
526
- }
527
- });
528
- const { useGetReleasesQuery, useGetReleasesForEntryQuery, useGetReleaseQuery, useGetReleaseActionsQuery, useCreateReleaseMutation, useCreateReleaseActionMutation, useCreateManyReleaseActionsMutation, useUpdateReleaseMutation, useUpdateReleaseActionMutation, usePublishReleaseMutation, useDeleteReleaseActionMutation, useDeleteReleaseMutation, useGetMappedEntriesInReleasesQuery, useGetReleaseSettingsQuery, useUpdateReleaseSettingsMutation } = releaseApi;
529
-
530
- const getBorderLeftRadiusValue = (actionType)=>{
531
- return actionType === 'publish' ? 1 : 0;
532
- };
533
- const getBorderRightRadiusValue = (actionType)=>{
534
- return actionType === 'publish' ? 0 : 1;
535
- };
536
- const FieldWrapper = styled(Field.Root)`
537
- border-top-left-radius: ${({ $actionType, theme })=>theme.spaces[getBorderLeftRadiusValue($actionType)]};
538
- border-bottom-left-radius: ${({ $actionType, theme })=>theme.spaces[getBorderLeftRadiusValue($actionType)]};
539
- border-top-right-radius: ${({ $actionType, theme })=>theme.spaces[getBorderRightRadiusValue($actionType)]};
540
- border-bottom-right-radius: ${({ $actionType, theme })=>theme.spaces[getBorderRightRadiusValue($actionType)]};
541
-
542
- > label {
543
- color: inherit;
544
- padding: ${({ theme })=>`${theme.spaces[2]} ${theme.spaces[3]}`};
545
- text-align: center;
546
- vertical-align: middle;
547
- text-transform: capitalize;
548
- }
549
-
550
- &[data-checked='true'] {
551
- color: ${({ theme, $actionType })=>$actionType === 'publish' ? theme.colors.primary700 : theme.colors.danger600};
552
- background-color: ${({ theme, $actionType })=>$actionType === 'publish' ? theme.colors.primary100 : theme.colors.danger100};
553
- border-color: ${({ theme, $actionType })=>$actionType === 'publish' ? theme.colors.primary700 : theme.colors.danger600};
554
- }
555
-
556
- &[data-checked='false'] {
557
- border-left: ${({ $actionType })=>$actionType === 'unpublish' && 'none'};
558
- border-right: ${({ $actionType })=>$actionType === 'publish' && 'none'};
559
- }
560
-
561
- &[data-checked='false'][data-disabled='false']:hover {
562
- color: ${({ theme })=>theme.colors.neutral700};
563
- background-color: ${({ theme })=>theme.colors.neutral100};
564
- border-color: ${({ theme })=>theme.colors.neutral200};
565
-
566
- & > label {
567
- cursor: pointer;
568
- }
569
- }
570
-
571
- &[data-disabled='true'] {
572
- color: ${({ theme })=>theme.colors.neutral600};
573
- background-color: ${({ theme })=>theme.colors.neutral150};
574
- border-color: ${({ theme })=>theme.colors.neutral300};
575
- }
576
- `;
577
- const ActionOption = ({ selected, actionType, handleChange, name, disabled = false })=>{
578
- return /*#__PURE__*/ jsx(FieldWrapper, {
579
- $actionType: actionType,
580
- background: "primary0",
581
- borderColor: "neutral200",
582
- color: selected === actionType ? 'primary600' : 'neutral600',
583
- position: "relative",
584
- cursor: "pointer",
585
- "data-checked": selected === actionType,
586
- "data-disabled": disabled && selected !== actionType,
587
- children: /*#__PURE__*/ jsxs(Field.Label, {
588
- children: [
589
- /*#__PURE__*/ jsx(VisuallyHidden, {
590
- children: /*#__PURE__*/ jsx(Field.Input, {
591
- type: "radio",
592
- name: name,
593
- checked: selected === actionType,
594
- onChange: handleChange,
595
- value: actionType,
596
- disabled: disabled
597
- })
598
- }),
599
- actionType
600
- ]
601
- })
602
- });
603
- };
604
- const ReleaseActionOptions = ({ selected, handleChange, name, disabled = false })=>{
605
- return /*#__PURE__*/ jsxs(Flex, {
606
- children: [
607
- /*#__PURE__*/ jsx(ActionOption, {
608
- actionType: "publish",
609
- selected: selected,
610
- handleChange: handleChange,
611
- name: name,
612
- disabled: disabled
613
- }),
614
- /*#__PURE__*/ jsx(ActionOption, {
615
- actionType: "unpublish",
616
- selected: selected,
617
- handleChange: handleChange,
618
- name: name,
619
- disabled: disabled
620
- })
621
- ]
622
- });
623
- };
624
-
625
- /* -------------------------------------------------------------------------------------------------
626
- * AddActionToReleaseModal
627
- * -----------------------------------------------------------------------------------------------*/ const RELEASE_ACTION_FORM_SCHEMA = yup.object().shape({
628
- type: yup.string().oneOf([
629
- 'publish',
630
- 'unpublish'
631
- ]).required(),
632
- releaseId: yup.string().required()
633
- });
634
- const INITIAL_VALUES = {
635
- type: 'publish',
636
- releaseId: ''
637
- };
638
- const NoReleases = ()=>{
639
- const { formatMessage } = useIntl();
640
- return /*#__PURE__*/ jsx(EmptyStateLayout, {
641
- icon: /*#__PURE__*/ jsx(EmptyDocuments, {
642
- width: "16rem"
643
- }),
644
- content: formatMessage({
645
- id: 'content-releases.content-manager-edit-view.add-to-release.no-releases-message',
646
- defaultMessage: 'No available releases. Open the list of releases and create a new one from there.'
647
- }),
648
- action: /*#__PURE__*/ jsx(LinkButton, {
649
- to: {
650
- pathname: '/plugins/content-releases'
651
- },
652
- tag: Link,
653
- variant: "secondary",
654
- children: formatMessage({
655
- id: 'content-releases.content-manager-edit-view.add-to-release.redirect-button',
656
- defaultMessage: 'Open the list of releases'
657
- })
658
- }),
659
- shadow: "none"
660
- });
661
- };
662
- const AddActionToReleaseModal = ({ contentType, documentId, onInputChange, values })=>{
663
- const { formatMessage } = useIntl();
664
- const [{ query }] = useQueryParams();
665
- const locale = query.plugins?.i18n?.locale;
666
- // Get all 'pending' releases that do not have the entry attached
667
- const response = useGetReleasesForEntryQuery({
668
- contentType,
669
- entryDocumentId: documentId,
670
- hasEntryAttached: false,
671
- locale
672
- });
673
- const releases = response.data?.data;
674
- if (releases?.length === 0) {
675
- return /*#__PURE__*/ jsx(NoReleases, {});
676
- }
677
- return /*#__PURE__*/ jsxs(Flex, {
678
- direction: "column",
679
- alignItems: "stretch",
680
- gap: 2,
681
- children: [
682
- /*#__PURE__*/ jsx(Box, {
683
- paddingBottom: 6,
684
- children: /*#__PURE__*/ jsxs(Field.Root, {
685
- required: true,
686
- children: [
687
- /*#__PURE__*/ jsx(Field.Label, {
688
- children: formatMessage({
689
- id: 'content-releases.content-manager-edit-view.add-to-release.select-label',
690
- defaultMessage: 'Select a release'
691
- })
692
- }),
693
- /*#__PURE__*/ jsx(SingleSelect, {
694
- required: true,
695
- placeholder: formatMessage({
696
- id: 'content-releases.content-manager-edit-view.add-to-release.select-placeholder',
697
- defaultMessage: 'Select'
698
- }),
699
- name: "releaseId",
700
- onChange: (value)=>onInputChange('releaseId', value),
701
- value: values.releaseId,
702
- children: releases?.map((release)=>/*#__PURE__*/ jsx(SingleSelectOption, {
703
- value: release.id,
704
- children: release.name
705
- }, release.id))
706
- })
707
- ]
708
- })
709
- }),
710
- /*#__PURE__*/ jsx(Field.Label, {
711
- children: formatMessage({
712
- id: 'content-releases.content-manager-edit-view.add-to-release.action-type-label',
713
- defaultMessage: 'What do you want to do with this entry?'
714
- })
715
- }),
716
- /*#__PURE__*/ jsx(ReleaseActionOptions, {
717
- selected: values.type,
718
- handleChange: (e)=>onInputChange('type', e.target.value),
719
- name: "type"
720
- })
721
- ]
722
- });
723
- };
724
- /* -------------------------------------------------------------------------------------------------
725
- * ReleaseActionModalForm
726
- * -----------------------------------------------------------------------------------------------*/ const ReleaseActionModalForm = ({ documentId, document, model, collectionType })=>{
727
- const { formatMessage } = useIntl();
728
- const { allowedActions } = useRBAC(PERMISSIONS);
729
- const { canCreateAction } = allowedActions;
730
- const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
731
- const { toggleNotification } = useNotification();
732
- const { formatAPIError } = useAPIErrorHandler();
733
- const [{ query }] = useQueryParams();
734
- const locale = query.plugins?.i18n?.locale;
735
- const handleSubmit = async (e, onClose)=>{
736
- try {
737
- await formik.handleSubmit(e);
738
- onClose();
739
- } catch (error) {
740
- if (isFetchError(error)) {
741
- // Handle axios error
742
- toggleNotification({
743
- type: 'danger',
744
- message: formatAPIError(error)
745
- });
746
- } else {
747
- // Handle generic error
748
- toggleNotification({
749
- type: 'danger',
750
- message: formatMessage({
751
- id: 'notification.error',
752
- defaultMessage: 'An error occurred'
753
- })
754
- });
755
- }
756
- }
757
- };
758
- const formik = useFormik({
759
- initialValues: INITIAL_VALUES,
760
- validationSchema: RELEASE_ACTION_FORM_SCHEMA,
761
- onSubmit: async (values)=>{
762
- if (collectionType === 'collection-types' && !documentId) {
763
- throw new Error('Document id is required');
764
- }
765
- const response = await createReleaseAction({
766
- body: {
767
- type: values.type,
768
- contentType: model,
769
- entryDocumentId: documentId,
770
- locale
771
- },
772
- params: {
773
- releaseId: values.releaseId
774
- }
775
- });
776
- if ('data' in response) {
777
- // Handle success
778
- toggleNotification({
779
- type: 'success',
780
- message: formatMessage({
781
- id: 'content-releases.content-manager-edit-view.add-to-release.notification.success',
782
- defaultMessage: 'Entry added to release'
783
- })
784
- });
785
- return;
786
- }
787
- if ('error' in response) {
788
- throw response.error;
789
- }
790
- }
791
- });
792
- const { edit: { options } } = unstable_useDocumentLayout(model);
793
- // Project is not EE or contentType does not have draftAndPublish enabled
794
- if (!window.strapi.isEE || !options?.draftAndPublish || !canCreateAction) {
795
- return null;
796
- }
797
- if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {
798
- return null;
799
- }
800
- return {
801
- label: formatMessage({
802
- id: 'content-releases.content-manager-edit-view.add-to-release',
803
- defaultMessage: 'Add to release'
804
- }),
805
- icon: /*#__PURE__*/ jsx(PaperPlane, {}),
806
- // Entry is creating so we don't want to allow adding it to a release
807
- disabled: !document,
808
- position: [
809
- 'panel',
810
- 'table-row'
811
- ],
812
- dialog: {
813
- type: 'modal',
814
- title: formatMessage({
815
- id: 'content-releases.content-manager-edit-view.add-to-release',
816
- defaultMessage: 'Add to release'
817
- }),
818
- content: /*#__PURE__*/ jsx(AddActionToReleaseModal, {
819
- contentType: model,
820
- documentId: documentId,
821
- onInputChange: formik.setFieldValue,
822
- values: formik.values
823
- }),
824
- footer: ({ onClose })=>/*#__PURE__*/ jsxs(Modal.Footer, {
825
- children: [
826
- /*#__PURE__*/ jsx(Button, {
827
- onClick: onClose,
828
- variant: "tertiary",
829
- name: "cancel",
830
- children: formatMessage({
831
- id: 'content-releases.content-manager-edit-view.add-to-release.cancel-button',
832
- defaultMessage: 'Cancel'
833
- })
834
- }),
835
- /*#__PURE__*/ jsx(Button, {
836
- type: "submit",
837
- // @ts-expect-error - formik ReactEvent types don't match button onClick types as they expect a MouseEvent
838
- onClick: (e)=>handleSubmit(e, onClose),
839
- disabled: !formik.values.releaseId,
840
- loading: isLoading,
841
- children: formatMessage({
842
- id: 'content-releases.content-manager-edit-view.add-to-release.continue-button',
843
- defaultMessage: 'Continue'
844
- })
845
- })
846
- ]
847
- })
848
- }
849
- };
850
- };
851
-
852
- const getContentPermissions = (subject)=>{
853
- const permissions = {
854
- publish: [
855
- {
856
- action: 'plugin::content-manager.explorer.publish',
857
- subject,
858
- id: '',
859
- actionParameters: {},
860
- properties: {},
861
- conditions: []
862
- }
863
- ]
864
- };
865
- return permissions;
866
- };
867
- const ReleaseAction = ({ documents, model })=>{
868
- const { formatMessage } = useIntl();
869
- const { toggleNotification } = useNotification();
870
- const { formatAPIError } = useAPIErrorHandler();
871
- const [{ query }] = useQueryParams();
872
- const contentPermissions = getContentPermissions(model);
873
- const { allowedActions: { canPublish } } = useRBAC(contentPermissions);
874
- const { allowedActions: { canCreate } } = useRBAC(PERMISSIONS);
875
- // Get all the releases not published
876
- const response = useGetReleasesQuery();
877
- const releases = response.data?.data;
878
- const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
879
- const documentIds = documents.map((doc)=>doc.documentId);
880
- const handleSubmit = async (values)=>{
881
- const locale = query.plugins?.i18n?.locale;
882
- const releaseActionEntries = documentIds.map((entryDocumentId)=>({
883
- type: values.type,
884
- contentType: model,
885
- entryDocumentId,
886
- locale
887
- }));
888
- const response = await createManyReleaseActions({
889
- body: releaseActionEntries,
890
- params: {
891
- releaseId: values.releaseId
892
- }
893
- });
894
- if ('data' in response) {
895
- // Handle success
896
- const notificationMessage = formatMessage({
897
- id: 'content-releases.content-manager-list-view.add-to-release.notification.success.message',
898
- defaultMessage: '{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release.'
899
- }, {
900
- entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,
901
- totalEntries: response.data.meta.totalEntries
902
- });
903
- const notification = {
904
- type: 'success',
905
- title: formatMessage({
906
- id: 'content-releases.content-manager-list-view.add-to-release.notification.success.title',
907
- defaultMessage: 'Successfully added to release.'
908
- }, {
909
- entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,
910
- totalEntries: response.data.meta.totalEntries
911
- }),
912
- message: response.data.meta.entriesAlreadyInRelease ? notificationMessage : ''
913
- };
914
- toggleNotification(notification);
915
- return true;
916
- }
917
- if ('error' in response) {
918
- if (isFetchError(response.error)) {
919
- // Handle fetch error
920
- toggleNotification({
921
- type: 'warning',
922
- message: formatAPIError(response.error)
923
- });
924
- } else {
925
- // Handle generic error
926
- toggleNotification({
927
- type: 'warning',
928
- message: formatMessage({
929
- id: 'notification.error',
930
- defaultMessage: 'An error occurred'
931
- })
932
- });
933
- }
934
- }
935
- };
936
- if (!canCreate || !canPublish) return null;
937
- return {
938
- actionType: 'release',
939
- variant: 'tertiary',
940
- label: formatMessage({
941
- id: 'content-manager-list-view.add-to-release',
942
- defaultMessage: 'Add to Release'
943
- }),
944
- dialog: {
945
- type: 'modal',
946
- title: formatMessage({
947
- id: 'content-manager-list-view.add-to-release',
948
- defaultMessage: 'Add to Release'
949
- }),
950
- content: ({ onClose })=>{
951
- return /*#__PURE__*/ jsx(Formik, {
952
- onSubmit: async (values)=>{
953
- const data = await handleSubmit(values);
954
- if (data) {
955
- return onClose();
956
- }
957
- },
958
- validationSchema: RELEASE_ACTION_FORM_SCHEMA,
959
- initialValues: INITIAL_VALUES,
960
- children: ({ values, setFieldValue })=>/*#__PURE__*/ jsxs(Form, {
961
- children: [
962
- releases?.length === 0 ? /*#__PURE__*/ jsx(NoReleases, {}) : /*#__PURE__*/ jsx(Modal.Body, {
963
- children: /*#__PURE__*/ jsxs(Flex, {
964
- direction: "column",
965
- alignItems: "stretch",
966
- gap: 2,
967
- children: [
968
- /*#__PURE__*/ jsx(Box, {
969
- paddingBottom: 6,
970
- children: /*#__PURE__*/ jsxs(Field.Root, {
971
- required: true,
972
- children: [
973
- /*#__PURE__*/ jsx(Field.Label, {
974
- children: formatMessage({
975
- id: 'content-releases.content-manager-list-view.add-to-release.select-label',
976
- defaultMessage: 'Select a release'
977
- })
978
- }),
979
- /*#__PURE__*/ jsx(SingleSelect, {
980
- placeholder: formatMessage({
981
- id: 'content-releases.content-manager-list-view.add-to-release.select-placeholder',
982
- defaultMessage: 'Select'
983
- }),
984
- onChange: (value)=>setFieldValue('releaseId', value),
985
- value: values.releaseId,
986
- children: releases?.map((release)=>/*#__PURE__*/ jsx(SingleSelectOption, {
987
- value: release.id,
988
- children: release.name
989
- }, release.id))
990
- })
991
- ]
992
- })
993
- }),
994
- /*#__PURE__*/ jsx(Field.Label, {
995
- children: formatMessage({
996
- id: 'content-releases.content-manager-list-view.add-to-release.action-type-label',
997
- defaultMessage: 'What do you want to do with these entries?'
998
- })
999
- }),
1000
- /*#__PURE__*/ jsx(ReleaseActionOptions, {
1001
- selected: values.type,
1002
- handleChange: (e)=>setFieldValue('type', e.target.value),
1003
- name: "type"
1004
- })
1005
- ]
1006
- })
1007
- }),
1008
- /*#__PURE__*/ jsxs(Modal.Footer, {
1009
- children: [
1010
- /*#__PURE__*/ jsx(Button, {
1011
- onClick: onClose,
1012
- variant: "tertiary",
1013
- name: "cancel",
1014
- children: formatMessage({
1015
- id: 'content-releases.content-manager-list-view.add-to-release.cancel-button',
1016
- defaultMessage: 'Cancel'
1017
- })
1018
- }),
1019
- /*#__PURE__*/ jsx(Button, {
1020
- type: "submit",
1021
- disabled: !values.releaseId,
1022
- loading: isLoading,
1023
- children: formatMessage({
1024
- id: 'content-releases.content-manager-list-view.add-to-release.continue-button',
1025
- defaultMessage: 'Continue'
1026
- })
1027
- })
1028
- ]
1029
- })
1030
- ]
1031
- })
1032
- });
1033
- }
1034
- }
1035
- };
1036
- };
1037
-
1038
- const useReleasesList = (contentTypeUid, documentId)=>{
1039
- const listViewData = useTable('ListView', (state)=>state.rows);
1040
- const documentIds = listViewData.map((entry)=>entry.documentId);
1041
- const [{ query }] = useQueryParams();
1042
- const locale = query?.plugins?.i18n?.locale || undefined;
1043
- const response = useGetMappedEntriesInReleasesQuery({
1044
- contentTypeUid,
1045
- documentIds,
1046
- locale
1047
- }, {
1048
- skip: !documentIds || !contentTypeUid || documentIds.length === 0
1049
- });
1050
- const mappedEntriesInReleases = response.data || {};
1051
- return mappedEntriesInReleases?.[documentId] || [];
1052
- };
1053
- const addColumnToTableHook = ({ displayedHeaders, layout })=>{
1054
- const { options } = layout;
1055
- if (!options?.draftAndPublish) {
1056
- return {
1057
- displayedHeaders,
1058
- layout
1059
- };
1060
- }
1061
- return {
1062
- displayedHeaders: [
1063
- ...displayedHeaders,
1064
- {
1065
- searchable: false,
1066
- sortable: false,
1067
- name: 'releases',
1068
- label: {
1069
- id: 'content-releases.content-manager.list-view.releases.header',
1070
- defaultMessage: 'To be released in'
1071
- },
1072
- cellFormatter: (props, _, { model })=>/*#__PURE__*/ jsx(ReleaseListCell, {
1073
- ...props,
1074
- model: model
1075
- })
1076
- }
1077
- ],
1078
- layout
1079
- };
1080
- };
1081
- const ReleaseListCell = ({ documentId, model })=>{
1082
- const releases = useReleasesList(model, documentId);
1083
- const { formatMessage } = useIntl();
1084
- return /*#__PURE__*/ jsxs(Popover.Root, {
1085
- children: [
1086
- /*#__PURE__*/ jsx(Popover.Trigger, {
1087
- children: /*#__PURE__*/ jsx(Button, {
1088
- variant: "ghost",
1089
- onClick: (e)=>e.stopPropagation(),
1090
- // TODO: find a way in the DS to define the widht and height of the icon
1091
- endIcon: releases.length > 0 ? /*#__PURE__*/ jsx(CaretDown, {
1092
- width: "1.2rem",
1093
- height: "1.2rem"
1094
- }) : null,
1095
- children: /*#__PURE__*/ jsx(Typography, {
1096
- style: {
1097
- maxWidth: '252px',
1098
- cursor: 'pointer'
1099
- },
1100
- textColor: "neutral800",
1101
- fontWeight: "regular",
1102
- children: releases.length > 0 ? formatMessage({
1103
- id: 'content-releases.content-manager.list-view.releases-number',
1104
- defaultMessage: '{number} {number, plural, one {release} other {releases}}'
1105
- }, {
1106
- number: releases.length
1107
- }) : '-'
1108
- })
1109
- })
1110
- }),
1111
- /*#__PURE__*/ jsx(Popover.Content, {
1112
- children: /*#__PURE__*/ jsx("ul", {
1113
- children: releases.map(({ id, name })=>/*#__PURE__*/ jsx(Box, {
1114
- padding: 3,
1115
- tag: "li",
1116
- children: /*#__PURE__*/ jsx(Link$1, {
1117
- href: `/admin/plugins/content-releases/${id}`,
1118
- isExternal: false,
1119
- children: name
1120
- })
1121
- }, id))
1122
- })
1123
- })
1124
- ]
1125
- });
1126
- };
1127
-
1128
- const getTimezoneOffset = (timezone, date)=>{
1129
- try {
1130
- const offsetPart = new Intl.DateTimeFormat('en', {
1131
- timeZone: timezone,
1132
- timeZoneName: 'longOffset'
1133
- }).formatToParts(date).find((part)=>part.type === 'timeZoneName');
1134
- const offset = offsetPart ? offsetPart.value : '';
1135
- // We want to show time based on UTC, not GMT so we swap that.
1136
- let utcOffset = offset.replace('GMT', 'UTC');
1137
- // For perfect UTC (UTC+0:00) we only get the string UTC, So we need to append the 0's.
1138
- if (!utcOffset.includes('+') && !utcOffset.includes('-')) {
1139
- utcOffset = `${utcOffset}+00:00`;
1140
- }
1141
- return utcOffset;
1142
- } catch (error) {
1143
- // When timezone is invalid we catch the error and return empty to don't break the app
1144
- return '';
1145
- }
1146
- };
1147
- const getTimezones = (selectedDate)=>{
1148
- const timezoneList = Intl.supportedValuesOf('timeZone').map((timezone)=>{
1149
- // Timezone will be in the format GMT${OFFSET} where offset could be nothing,
1150
- // a four digit string e.g. +05:00 or -08:00
1151
- const utcOffset = getTimezoneOffset(timezone, selectedDate);
1152
- // Offset and timezone are concatenated with '&', so to split and save the required timezone in DB
1153
- return {
1154
- offset: utcOffset,
1155
- value: `${utcOffset}&${timezone}`
1156
- };
1157
- });
1158
- const systemTimezone = timezoneList.find((timezone)=>timezone.value.split('&')[1] === Intl.DateTimeFormat().resolvedOptions().timeZone);
1159
- return {
1160
- timezoneList,
1161
- systemTimezone
1162
- };
1163
- };
1164
-
1165
- const StyledMenuItem = styled(Menu.Item)`
1166
- &:hover {
1167
- background: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}100`]};
1168
-
1169
- svg {
1170
- fill: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}600`]};
1171
- }
1172
-
1173
- a {
1174
- color: ${({ theme })=>theme.colors.neutral800};
1175
- }
1176
- }
1177
-
1178
- svg {
1179
- color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}500`]};
1180
- }
1181
-
1182
- span {
1183
- color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}800`]};
1184
- }
1185
-
1186
- span,
1187
- a {
1188
- width: 100%;
1189
- }
1190
- `;
1191
- const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
1192
- const { formatMessage } = useIntl();
1193
- const { toggleNotification } = useNotification();
1194
- const { formatAPIError } = useAPIErrorHandler();
1195
- const [deleteReleaseAction] = useDeleteReleaseActionMutation();
1196
- const { allowedActions: { canDeleteAction } } = useRBAC(PERMISSIONS);
1197
- const handleDeleteAction = async ()=>{
1198
- const response = await deleteReleaseAction({
1199
- params: {
1200
- releaseId,
1201
- actionId
1202
- }
1203
- });
1204
- if ('data' in response) {
1205
- // Handle success
1206
- toggleNotification({
1207
- type: 'success',
1208
- message: formatMessage({
1209
- id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',
1210
- defaultMessage: 'Entry removed from release'
1211
- })
1212
- });
1213
- return;
1214
- }
1215
- if ('error' in response) {
1216
- if (isFetchError(response.error)) {
1217
- // Handle fetch error
1218
- toggleNotification({
1219
- type: 'danger',
1220
- message: formatAPIError(response.error)
1221
- });
1222
- } else {
1223
- // Handle generic error
1224
- toggleNotification({
1225
- type: 'danger',
1226
- message: formatMessage({
1227
- id: 'notification.error',
1228
- defaultMessage: 'An error occurred'
1229
- })
1230
- });
1231
- }
1232
- }
1233
- };
1234
- if (!canDeleteAction) {
1235
- return null;
1236
- }
1237
- return /*#__PURE__*/ jsx(StyledMenuItem, {
1238
- $variant: "danger",
1239
- onSelect: handleDeleteAction,
1240
- children: /*#__PURE__*/ jsxs(Flex, {
1241
- gap: 2,
1242
- children: [
1243
- /*#__PURE__*/ jsx(Cross, {
1244
- width: "1.6rem",
1245
- height: "1.6rem"
1246
- }),
1247
- /*#__PURE__*/ jsx(Typography, {
1248
- textColor: "danger600",
1249
- variant: "omega",
1250
- children: formatMessage({
1251
- id: 'content-releases.content-manager-edit-view.remove-from-release',
1252
- defaultMessage: 'Remove from release'
1253
- })
1254
- })
1255
- ]
1256
- })
1257
- });
1258
- };
1259
- const ReleaseActionEntryLinkItem = ({ contentTypeUid, documentId, locale })=>{
1260
- const { formatMessage } = useIntl();
1261
- const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state)=>state.permissions);
1262
- // Confirm user has permissions to access the entry for the given locale
1263
- const canUpdateEntryForLocale = React.useMemo(()=>{
1264
- const updatePermissions = userPermissions.find((permission)=>permission.subject === contentTypeUid && permission.action === 'plugin::content-manager.explorer.update');
1265
- if (!updatePermissions) {
1266
- return false;
1267
- }
1268
- return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
1269
- }, [
1270
- contentTypeUid,
1271
- locale,
1272
- userPermissions
1273
- ]);
1274
- const { allowedActions: { canUpdate: canUpdateContentType } } = useRBAC({
1275
- updateContentType: [
1276
- {
1277
- action: 'plugin::content-manager.explorer.update',
1278
- subject: contentTypeUid
1279
- }
1280
- ]
1281
- });
1282
- if (!canUpdateContentType || !canUpdateEntryForLocale) {
1283
- return null;
1284
- }
1285
- return /*#__PURE__*/ jsx(StyledMenuItem, {
1286
- /* @ts-expect-error inference isn't working in DS */ tag: NavLink,
1287
- isLink: true,
1288
- to: {
1289
- pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,
1290
- search: locale && `?plugins[i18n][locale]=${locale}`
1291
- },
1292
- children: /*#__PURE__*/ jsxs(Flex, {
1293
- gap: 2,
1294
- children: [
1295
- /*#__PURE__*/ jsx(Pencil, {
1296
- width: "1.6rem",
1297
- height: "1.6rem"
1298
- }),
1299
- /*#__PURE__*/ jsx(Typography, {
1300
- variant: "omega",
1301
- children: formatMessage({
1302
- id: 'content-releases.content-manager-edit-view.edit-entry',
1303
- defaultMessage: 'Edit entry'
1304
- })
1305
- })
1306
- ]
1307
- })
1308
- });
1309
- };
1310
- const EditReleaseItem = ({ releaseId })=>{
1311
- const { formatMessage } = useIntl();
1312
- return /* @ts-expect-error inference isn't working in DS */ /*#__PURE__*/ jsx(StyledMenuItem, {
1313
- tag: NavLink,
1314
- isLink: true,
1315
- to: `/plugins/content-releases/${releaseId}`,
1316
- children: /*#__PURE__*/ jsxs(Flex, {
1317
- gap: 2,
1318
- children: [
1319
- /*#__PURE__*/ jsx(Pencil, {
1320
- width: "1.6rem",
1321
- height: "1.6rem"
1322
- }),
1323
- /*#__PURE__*/ jsx(Typography, {
1324
- textColor: "neutral800",
1325
- variant: "omega",
1326
- children: formatMessage({
1327
- id: 'content-releases.content-manager-edit-view.edit-release',
1328
- defaultMessage: 'Edit release'
1329
- })
1330
- })
1331
- ]
1332
- })
1333
- });
1334
- };
1335
- const Root = ({ children })=>{
1336
- const { formatMessage } = useIntl();
1337
- const { allowedActions } = useRBAC(PERMISSIONS);
1338
- return(// A user can access the dropdown if they have permissions to delete a release-action OR update a release
1339
- allowedActions.canDeleteAction || allowedActions.canUpdate ? /*#__PURE__*/ jsxs(Menu.Root, {
1340
- children: [
1341
- /*#__PURE__*/ jsx(StyledMoreButton, {
1342
- variant: "tertiary",
1343
- endIcon: null,
1344
- paddingLeft: "7px",
1345
- paddingRight: "7px",
1346
- children: /*#__PURE__*/ jsx(AccessibleIcon, {
1347
- label: formatMessage({
1348
- id: 'content-releases.content-manager-edit-view.release-action-menu',
1349
- defaultMessage: 'Release action options'
1350
- }),
1351
- children: /*#__PURE__*/ jsx(More, {})
1352
- })
1353
- }),
1354
- /*#__PURE__*/ jsx(Menu.Content, {
1355
- top: 1,
1356
- popoverPlacement: "bottom-end",
1357
- children: children
1358
- })
1359
- ]
1360
- }) : null);
1361
- };
1362
- const StyledMoreButton = styled(Menu.Trigger)`
1363
- & > span {
1364
- display: flex;
1365
- }
1366
- `;
1367
- const ReleaseActionMenu = {
1368
- Root,
1369
- EditReleaseItem,
1370
- DeleteReleaseActionItem,
1371
- ReleaseActionEntryLinkItem
1372
- };
1373
-
1374
- const Panel = ({ model, document, documentId, collectionType })=>{
1375
- const [{ query }] = useQueryParams();
1376
- const locale = query.plugins?.i18n?.locale;
1377
- const { edit: { options } } = unstable_useDocumentLayout(model);
1378
- const { formatMessage, formatDate, formatTime } = useIntl();
1379
- const { allowedActions } = useRBAC(PERMISSIONS);
1380
- const { canRead, canDeleteAction } = allowedActions;
1381
- const response = useGetReleasesForEntryQuery({
1382
- contentType: model,
1383
- entryDocumentId: documentId,
1384
- locale,
1385
- hasEntryAttached: true
1386
- }, {
1387
- skip: !document
1388
- });
1389
- const releases = response.data?.data;
1390
- const getReleaseColorVariant = (actionType, shade)=>{
1391
- if (actionType === 'unpublish') {
1392
- return `secondary${shade}`;
1393
- }
1394
- return `success${shade}`;
1395
- };
1396
- // Project is not EE or contentType does not have draftAndPublish enabled
1397
- if (!window.strapi.isEE || !options?.draftAndPublish || !canRead) {
1398
- return null;
1399
- }
1400
- if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {
1401
- return null;
1402
- }
1403
- if (!releases || releases.length === 0) {
1404
- return null;
1405
- }
1406
- return {
1407
- title: formatMessage({
1408
- id: 'content-releases.plugin.name',
1409
- defaultMessage: 'Releases'
1410
- }),
1411
- content: /*#__PURE__*/ jsx(Flex, {
1412
- direction: "column",
1413
- alignItems: "stretch",
1414
- gap: 3,
1415
- width: "100%",
1416
- children: releases?.map((release)=>/*#__PURE__*/ jsxs(Flex, {
1417
- direction: "column",
1418
- alignItems: "start",
1419
- borderWidth: "1px",
1420
- borderStyle: "solid",
1421
- borderColor: getReleaseColorVariant(release.actions[0].type, '200'),
1422
- overflow: "hidden",
1423
- hasRadius: true,
1424
- children: [
1425
- /*#__PURE__*/ jsx(Box, {
1426
- paddingTop: 3,
1427
- paddingBottom: 3,
1428
- paddingLeft: 4,
1429
- paddingRight: 4,
1430
- background: getReleaseColorVariant(release.actions[0].type, '100'),
1431
- width: "100%",
1432
- children: /*#__PURE__*/ jsx(Typography, {
1433
- fontSize: 1,
1434
- variant: "pi",
1435
- textColor: getReleaseColorVariant(release.actions[0].type, '600'),
1436
- children: formatMessage({
1437
- id: 'content-releases.content-manager-edit-view.list-releases.title',
1438
- defaultMessage: '{isPublish, select, true {Will be published in} other {Will be unpublished in}}'
1439
- }, {
1440
- isPublish: release.actions[0].type === 'publish'
1441
- })
1442
- })
1443
- }),
1444
- /*#__PURE__*/ jsxs(Flex, {
1445
- padding: 4,
1446
- direction: "column",
1447
- gap: 2,
1448
- width: "100%",
1449
- alignItems: "flex-start",
1450
- children: [
1451
- /*#__PURE__*/ jsx(Typography, {
1452
- fontSize: 2,
1453
- fontWeight: "bold",
1454
- variant: "omega",
1455
- textColor: "neutral700",
1456
- children: release.name
1457
- }),
1458
- release.scheduledAt && release.timezone && /*#__PURE__*/ jsx(Typography, {
1459
- variant: "pi",
1460
- textColor: "neutral600",
1461
- children: formatMessage({
1462
- id: 'content-releases.content-manager-edit-view.scheduled.date',
1463
- defaultMessage: '{date} at {time} ({offset})'
1464
- }, {
1465
- date: formatDate(new Date(release.scheduledAt), {
1466
- day: '2-digit',
1467
- month: '2-digit',
1468
- year: 'numeric',
1469
- timeZone: release.timezone
1470
- }),
1471
- time: formatTime(new Date(release.scheduledAt), {
1472
- hourCycle: 'h23',
1473
- timeZone: release.timezone
1474
- }),
1475
- offset: getTimezoneOffset(release.timezone, new Date(release.scheduledAt))
1476
- })
1477
- }),
1478
- canDeleteAction ? /*#__PURE__*/ jsxs(ReleaseActionMenu.Root, {
1479
- hasTriggerBorder: true,
1480
- children: [
1481
- /*#__PURE__*/ jsx(ReleaseActionMenu.EditReleaseItem, {
1482
- releaseId: release.id
1483
- }),
1484
- /*#__PURE__*/ jsx(ReleaseActionMenu.DeleteReleaseActionItem, {
1485
- releaseId: release.id,
1486
- actionId: release.actions[0].id
1487
- })
1488
- ]
1489
- }) : null
1490
- ]
1491
- })
1492
- ]
1493
- }, release.id))
1494
- })
1495
- };
1496
- };
1497
-
1498
- const pluginId = 'content-releases';
1499
-
1500
- const prefixPluginTranslations = (trad, pluginId)=>{
1501
- return Object.keys(trad).reduce((acc, current)=>{
1502
- acc[`${pluginId}.${current}`] = trad[current];
1503
- return acc;
1504
- }, {});
1505
- };
1506
-
1507
- function __variableDynamicImportRuntime3__(path) {
1508
- switch (path) {
1509
- case './translations/en.json': return import('./en-aQo8Bn_U.mjs');
1510
- case './translations/uk.json': return import('./uk-Bp9HotPq.mjs');
1511
- default: return new Promise(function(resolve, reject) {
1512
- (typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout)(
1513
- reject.bind(null, new Error("Unknown variable dynamic import: " + path))
1514
- );
1515
- })
1516
- }
1517
- }
1518
- // eslint-disable-next-line import/no-default-export
1519
- const admin = {
1520
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1521
- register (app) {
1522
- /**
1523
- * Hook that adds the locale column in the Release Details table
1524
- * @constant
1525
- * @type {string}
1526
- */ app.createHook('ContentReleases/pages/ReleaseDetails/add-locale-in-releases');
1527
- if (window.strapi.features.isEnabled('cms-content-releases')) {
1528
- app.addMenuLink({
1529
- to: `plugins/${pluginId}`,
1530
- icon: PaperPlane,
1531
- intlLabel: {
1532
- id: `${pluginId}.plugin.name`,
1533
- defaultMessage: 'Releases'
1534
- },
1535
- Component: ()=>import('./App-BkWgp5q_.mjs').then((mod)=>({
1536
- default: mod.App
1537
- })),
1538
- permissions: PERMISSIONS.main,
1539
- position: 2
1540
- });
1541
- // Insert the releases container into the CM's sidebar on the Edit View
1542
- const contentManagerPluginApis = app.getPlugin('content-manager').apis;
1543
- if ('addEditViewSidePanel' in contentManagerPluginApis && typeof contentManagerPluginApis.addEditViewSidePanel === 'function') {
1544
- contentManagerPluginApis.addEditViewSidePanel([
1545
- Panel
1546
- ]);
1547
- }
1548
- // Insert the "add to release" action into the CM's Edit View
1549
- if ('addDocumentAction' in contentManagerPluginApis && typeof contentManagerPluginApis.addDocumentAction === 'function') {
1550
- contentManagerPluginApis.addDocumentAction((actions)=>{
1551
- const indexOfDeleteAction = actions.findIndex((action)=>action.type === 'unpublish');
1552
- actions.splice(indexOfDeleteAction, 0, ReleaseActionModalForm);
1553
- return actions;
1554
- });
1555
- }
1556
- app.addSettingsLink('global', {
1557
- id: pluginId,
1558
- to: 'releases',
1559
- intlLabel: {
1560
- id: `${pluginId}.plugin.name`,
1561
- defaultMessage: 'Releases'
1562
- },
1563
- permissions: [],
1564
- async Component () {
1565
- const { ProtectedReleasesSettingsPage } = await import('./ReleasesSettingsPage-DUKdFdvx.mjs');
1566
- return {
1567
- default: ProtectedReleasesSettingsPage
1568
- };
1569
- }
1570
- });
1571
- if ('addBulkAction' in contentManagerPluginApis && typeof contentManagerPluginApis.addBulkAction === 'function') {
1572
- contentManagerPluginApis.addBulkAction((actions)=>{
1573
- // We want to add this action to just before the delete action all the time
1574
- const deleteActionIndex = actions.findIndex((action)=>action.type === 'delete');
1575
- actions.splice(deleteActionIndex, 0, ReleaseAction);
1576
- return actions;
1577
- });
1578
- }
1579
- // Hook that adds a column into the CM's LV table
1580
- app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);
1581
- } else if (!window.strapi.features.isEnabled('cms-content-releases') && window.strapi?.flags?.promoteEE) {
1582
- app.addSettingsLink('global', {
1583
- id: pluginId,
1584
- to: '/plugins/purchase-content-releases',
1585
- intlLabel: {
1586
- id: `${pluginId}.plugin.name`,
1587
- defaultMessage: 'Releases'
1588
- },
1589
- permissions: [],
1590
- async Component () {
1591
- const { PurchaseContentReleases } = await import('./PurchaseContentReleases-CzayeVUD.mjs');
1592
- return {
1593
- default: PurchaseContentReleases
1594
- };
1595
- },
1596
- licenseOnly: true
1597
- });
1598
- }
1599
- },
1600
- async registerTrads ({ locales }) {
1601
- const importedTrads = await Promise.all(locales.map((locale)=>{
1602
- return __variableDynamicImportRuntime3__(`./translations/${locale}.json`).then(({ default: data })=>{
1603
- return {
1604
- data: prefixPluginTranslations(data, 'content-releases'),
1605
- locale
1606
- };
1607
- }).catch(()=>{
1608
- return {
1609
- data: {},
1610
- locale
1611
- };
1612
- });
1613
- }));
1614
- return Promise.resolve(importedTrads);
1615
- }
1616
- };
1617
-
1618
- export { PERMISSIONS as P, ReleaseActionOptions as R, useGetReleaseSettingsQuery as a, useCreateReleaseMutation as b, useGetReleaseQuery as c, useUpdateReleaseMutation as d, useDeleteReleaseMutation as e, usePublishReleaseMutation as f, getTimezones as g, getTimezoneOffset as h, useGetReleaseActionsQuery as i, useUpdateReleaseActionMutation as j, ReleaseActionMenu as k, useUpdateReleaseSettingsMutation as l, admin as m, pluginId as p, releaseApi as r, useGetReleasesQuery as u };
1619
- //# sourceMappingURL=index-DBUaMD56.mjs.map