@strapi/content-releases 0.0.0-next.f09bff0783c6e3dfd3c34ed73b6f1a47de7b8d80 → 0.0.0-next.f0bfcece1007e5aa527570187635aefc86db536e

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 (306) 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 +310 -0
  10. package/dist/admin/components/EntryValidationPopover.js.map +1 -0
  11. package/dist/admin/components/EntryValidationPopover.mjs +308 -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 +203 -0
  18. package/dist/admin/components/ReleaseAction.js.map +1 -0
  19. package/dist/admin/components/ReleaseAction.mjs +201 -0
  20. package/dist/admin/components/ReleaseAction.mjs.map +1 -0
  21. package/dist/admin/components/ReleaseActionMenu.js +194 -0
  22. package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
  23. package/dist/admin/components/ReleaseActionMenu.mjs +173 -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/components/Widgets.js +122 -0
  46. package/dist/admin/components/Widgets.js.map +1 -0
  47. package/dist/admin/components/Widgets.mjs +120 -0
  48. package/dist/admin/components/Widgets.mjs.map +1 -0
  49. package/dist/admin/constants.js +79 -0
  50. package/dist/admin/constants.js.map +1 -0
  51. package/dist/admin/constants.mjs +76 -0
  52. package/dist/admin/constants.mjs.map +1 -0
  53. package/dist/admin/index.js +143 -14
  54. package/dist/admin/index.js.map +1 -1
  55. package/dist/admin/index.mjs +144 -13
  56. package/dist/admin/index.mjs.map +1 -1
  57. package/dist/admin/{chunks/hooks-DA5VbUAp.js → modules/hooks.js} +1 -1
  58. package/dist/admin/modules/hooks.js.map +1 -0
  59. package/dist/admin/{chunks/hooks-CFk_8Q0b.mjs → modules/hooks.mjs} +2 -2
  60. package/dist/admin/modules/hooks.mjs.map +1 -0
  61. package/dist/admin/pages/App.js +29 -0
  62. package/dist/admin/pages/App.js.map +1 -0
  63. package/dist/admin/pages/App.mjs +27 -0
  64. package/dist/admin/pages/App.mjs.map +1 -0
  65. package/dist/admin/pages/PurchaseContentReleases.js +192 -0
  66. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
  67. package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
  68. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
  69. package/dist/admin/pages/ReleaseDetailsPage.js +772 -0
  70. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
  71. package/dist/admin/pages/ReleaseDetailsPage.mjs +751 -0
  72. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
  73. package/dist/admin/pages/ReleasesPage.js +403 -0
  74. package/dist/admin/pages/ReleasesPage.js.map +1 -0
  75. package/dist/admin/pages/ReleasesPage.mjs +381 -0
  76. package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
  77. package/dist/admin/{chunks/ReleasesSettingsPage-DV_y1NJZ.js → pages/ReleasesSettingsPage.js} +44 -26
  78. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
  79. package/dist/admin/{chunks/ReleasesSettingsPage-lky_0-wG.mjs → pages/ReleasesSettingsPage.mjs} +41 -23
  80. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
  81. package/dist/admin/pluginId.js +6 -0
  82. package/dist/admin/pluginId.js.map +1 -0
  83. package/dist/admin/pluginId.mjs +4 -0
  84. package/dist/admin/pluginId.mjs.map +1 -0
  85. package/dist/admin/services/homepage.js +24 -0
  86. package/dist/admin/services/homepage.js.map +1 -0
  87. package/dist/admin/services/homepage.mjs +22 -0
  88. package/dist/admin/services/homepage.mjs.map +1 -0
  89. package/dist/admin/services/release.js +474 -0
  90. package/dist/admin/services/release.js.map +1 -0
  91. package/dist/admin/services/release.mjs +457 -0
  92. package/dist/admin/services/release.mjs.map +1 -0
  93. package/dist/admin/src/components/Widgets.d.ts +2 -0
  94. package/dist/admin/src/constants.d.ts +1 -0
  95. package/dist/admin/src/services/homepage.d.ts +9 -0
  96. package/dist/admin/src/services/release.d.ts +28 -28
  97. package/dist/admin/store/hooks.js +8 -0
  98. package/dist/admin/store/hooks.js.map +1 -0
  99. package/dist/admin/store/hooks.mjs +6 -0
  100. package/dist/admin/store/hooks.mjs.map +1 -0
  101. package/dist/admin/{chunks/en-BOpqX2t_.js → translations/en.json.js} +8 -5
  102. package/dist/admin/translations/en.json.js.map +1 -0
  103. package/dist/admin/{chunks/en-aQo8Bn_U.mjs → translations/en.json.mjs} +7 -4
  104. package/dist/admin/translations/en.json.mjs.map +1 -0
  105. package/dist/admin/{chunks/uk-9T9su-bj.js → translations/uk.json.js} +2 -2
  106. package/dist/admin/translations/uk.json.js.map +1 -0
  107. package/dist/admin/{chunks/uk-Bp9HotPq.mjs → translations/uk.json.mjs} +1 -1
  108. package/dist/admin/translations/uk.json.mjs.map +1 -0
  109. package/dist/admin/utils/api.js +8 -0
  110. package/dist/admin/utils/api.js.map +1 -0
  111. package/dist/admin/utils/api.mjs +6 -0
  112. package/dist/admin/utils/api.mjs.map +1 -0
  113. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  114. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  115. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  116. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  117. package/dist/admin/utils/time.js +42 -0
  118. package/dist/admin/utils/time.js.map +1 -0
  119. package/dist/admin/utils/time.mjs +39 -0
  120. package/dist/admin/utils/time.mjs.map +1 -0
  121. package/dist/admin/{chunks/schemas-DS7NeFDN.js → validation/schemas.js} +1 -1
  122. package/dist/admin/validation/schemas.js.map +1 -0
  123. package/dist/admin/{chunks/schemas-DMt8h1z-.mjs → validation/schemas.mjs} +2 -2
  124. package/dist/admin/validation/schemas.mjs.map +1 -0
  125. package/dist/server/bootstrap.js +68 -0
  126. package/dist/server/bootstrap.js.map +1 -0
  127. package/dist/server/bootstrap.mjs +66 -0
  128. package/dist/server/bootstrap.mjs.map +1 -0
  129. package/dist/server/constants.js +74 -0
  130. package/dist/server/constants.js.map +1 -0
  131. package/dist/server/constants.mjs +69 -0
  132. package/dist/server/constants.mjs.map +1 -0
  133. package/dist/server/content-types/index.js +12 -0
  134. package/dist/server/content-types/index.js.map +1 -0
  135. package/dist/server/content-types/index.mjs +10 -0
  136. package/dist/server/content-types/index.mjs.map +1 -0
  137. package/dist/server/content-types/release/index.js +10 -0
  138. package/dist/server/content-types/release/index.js.map +1 -0
  139. package/dist/server/content-types/release/index.mjs +8 -0
  140. package/dist/server/content-types/release/index.mjs.map +1 -0
  141. package/dist/server/content-types/release/schema.js +58 -0
  142. package/dist/server/content-types/release/schema.js.map +1 -0
  143. package/dist/server/content-types/release/schema.mjs +56 -0
  144. package/dist/server/content-types/release/schema.mjs.map +1 -0
  145. package/dist/server/content-types/release-action/index.js +10 -0
  146. package/dist/server/content-types/release-action/index.js.map +1 -0
  147. package/dist/server/content-types/release-action/index.mjs +8 -0
  148. package/dist/server/content-types/release-action/index.mjs.map +1 -0
  149. package/dist/server/content-types/release-action/schema.js +55 -0
  150. package/dist/server/content-types/release-action/schema.js.map +1 -0
  151. package/dist/server/content-types/release-action/schema.mjs +53 -0
  152. package/dist/server/content-types/release-action/schema.mjs.map +1 -0
  153. package/dist/server/controllers/homepage.js +15 -0
  154. package/dist/server/controllers/homepage.js.map +1 -0
  155. package/dist/server/controllers/homepage.mjs +13 -0
  156. package/dist/server/controllers/homepage.mjs.map +1 -0
  157. package/dist/server/controllers/index.js +16 -0
  158. package/dist/server/controllers/index.js.map +1 -0
  159. package/dist/server/controllers/index.mjs +14 -0
  160. package/dist/server/controllers/index.mjs.map +1 -0
  161. package/dist/server/controllers/release-action.js +150 -0
  162. package/dist/server/controllers/release-action.js.map +1 -0
  163. package/dist/server/controllers/release-action.mjs +148 -0
  164. package/dist/server/controllers/release-action.mjs.map +1 -0
  165. package/dist/server/controllers/release.js +302 -0
  166. package/dist/server/controllers/release.js.map +1 -0
  167. package/dist/server/controllers/release.mjs +300 -0
  168. package/dist/server/controllers/release.mjs.map +1 -0
  169. package/dist/server/controllers/settings.js +37 -0
  170. package/dist/server/controllers/settings.js.map +1 -0
  171. package/dist/server/controllers/settings.mjs +35 -0
  172. package/dist/server/controllers/settings.mjs.map +1 -0
  173. package/dist/server/controllers/validation/release-action.js +34 -0
  174. package/dist/server/controllers/validation/release-action.js.map +1 -0
  175. package/dist/server/controllers/validation/release-action.mjs +30 -0
  176. package/dist/server/controllers/validation/release-action.mjs.map +1 -0
  177. package/dist/server/controllers/validation/release.js +26 -0
  178. package/dist/server/controllers/validation/release.js.map +1 -0
  179. package/dist/server/controllers/validation/release.mjs +22 -0
  180. package/dist/server/controllers/validation/release.mjs.map +1 -0
  181. package/dist/server/controllers/validation/settings.js +32 -0
  182. package/dist/server/controllers/validation/settings.js.map +1 -0
  183. package/dist/server/controllers/validation/settings.mjs +10 -0
  184. package/dist/server/controllers/validation/settings.mjs.map +1 -0
  185. package/dist/server/destroy.js +15 -0
  186. package/dist/server/destroy.js.map +1 -0
  187. package/dist/server/destroy.mjs +13 -0
  188. package/dist/server/destroy.mjs.map +1 -0
  189. package/dist/server/index.js +16 -2336
  190. package/dist/server/index.js.map +1 -1
  191. package/dist/server/index.mjs +7 -2308
  192. package/dist/server/index.mjs.map +1 -1
  193. package/dist/server/middlewares/documents.js +104 -0
  194. package/dist/server/middlewares/documents.js.map +1 -0
  195. package/dist/server/middlewares/documents.mjs +101 -0
  196. package/dist/server/middlewares/documents.mjs.map +1 -0
  197. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
  198. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
  199. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
  200. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
  201. package/dist/server/migrations/index.js +205 -0
  202. package/dist/server/migrations/index.js.map +1 -0
  203. package/dist/server/migrations/index.mjs +198 -0
  204. package/dist/server/migrations/index.mjs.map +1 -0
  205. package/dist/server/register.js +23 -0
  206. package/dist/server/register.js.map +1 -0
  207. package/dist/server/register.mjs +21 -0
  208. package/dist/server/register.mjs.map +1 -0
  209. package/dist/server/routes/homepage.js +25 -0
  210. package/dist/server/routes/homepage.js.map +1 -0
  211. package/dist/server/routes/homepage.mjs +23 -0
  212. package/dist/server/routes/homepage.mjs.map +1 -0
  213. package/dist/server/routes/index.js +16 -0
  214. package/dist/server/routes/index.js.map +1 -0
  215. package/dist/server/routes/index.mjs +14 -0
  216. package/dist/server/routes/index.mjs.map +1 -0
  217. package/dist/server/routes/release-action.js +100 -0
  218. package/dist/server/routes/release-action.js.map +1 -0
  219. package/dist/server/routes/release-action.mjs +98 -0
  220. package/dist/server/routes/release-action.mjs.map +1 -0
  221. package/dist/server/routes/release.js +154 -0
  222. package/dist/server/routes/release.js.map +1 -0
  223. package/dist/server/routes/release.mjs +152 -0
  224. package/dist/server/routes/release.mjs.map +1 -0
  225. package/dist/server/routes/settings.js +46 -0
  226. package/dist/server/routes/settings.js.map +1 -0
  227. package/dist/server/routes/settings.mjs +44 -0
  228. package/dist/server/routes/settings.mjs.map +1 -0
  229. package/dist/server/services/homepage.js +26 -0
  230. package/dist/server/services/homepage.js.map +1 -0
  231. package/dist/server/services/homepage.mjs +24 -0
  232. package/dist/server/services/homepage.mjs.map +1 -0
  233. package/dist/server/services/index.js +20 -0
  234. package/dist/server/services/index.js.map +1 -0
  235. package/dist/server/services/index.mjs +18 -0
  236. package/dist/server/services/index.mjs.map +1 -0
  237. package/dist/server/services/release-action.js +324 -0
  238. package/dist/server/services/release-action.js.map +1 -0
  239. package/dist/server/services/release-action.mjs +322 -0
  240. package/dist/server/services/release-action.mjs.map +1 -0
  241. package/dist/server/services/release.js +324 -0
  242. package/dist/server/services/release.js.map +1 -0
  243. package/dist/server/services/release.mjs +322 -0
  244. package/dist/server/services/release.mjs.map +1 -0
  245. package/dist/server/services/scheduling.js +74 -0
  246. package/dist/server/services/scheduling.js.map +1 -0
  247. package/dist/server/services/scheduling.mjs +72 -0
  248. package/dist/server/services/scheduling.mjs.map +1 -0
  249. package/dist/server/services/settings.js +34 -0
  250. package/dist/server/services/settings.js.map +1 -0
  251. package/dist/server/services/settings.mjs +32 -0
  252. package/dist/server/services/settings.mjs.map +1 -0
  253. package/dist/server/services/validation.js +91 -0
  254. package/dist/server/services/validation.js.map +1 -0
  255. package/dist/server/services/validation.mjs +86 -0
  256. package/dist/server/services/validation.mjs.map +1 -0
  257. package/dist/server/src/controllers/homepage.d.ts +6 -0
  258. package/dist/server/src/controllers/homepage.d.ts.map +1 -0
  259. package/dist/server/src/controllers/index.d.ts +3 -0
  260. package/dist/server/src/controllers/index.d.ts.map +1 -1
  261. package/dist/server/src/destroy.d.ts.map +1 -1
  262. package/dist/server/src/index.d.ts +13 -4
  263. package/dist/server/src/index.d.ts.map +1 -1
  264. package/dist/server/src/routes/homepage.d.ts +4 -0
  265. package/dist/server/src/routes/homepage.d.ts.map +1 -0
  266. package/dist/server/src/routes/index.d.ts +1 -0
  267. package/dist/server/src/routes/index.d.ts.map +1 -1
  268. package/dist/server/src/services/homepage.d.ts +9 -0
  269. package/dist/server/src/services/homepage.d.ts.map +1 -0
  270. package/dist/server/src/services/index.d.ts +9 -4
  271. package/dist/server/src/services/index.d.ts.map +1 -1
  272. package/dist/server/src/services/release-action.d.ts.map +1 -1
  273. package/dist/server/src/services/scheduling.d.ts +4 -5
  274. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  275. package/dist/server/src/utils/index.d.ts.map +1 -1
  276. package/dist/server/utils/index.js +94 -0
  277. package/dist/server/utils/index.js.map +1 -0
  278. package/dist/server/utils/index.mjs +88 -0
  279. package/dist/server/utils/index.mjs.map +1 -0
  280. package/dist/shared/contracts/homepage.d.ts +11 -0
  281. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  282. package/dist/shared/types.d.ts +1 -0
  283. package/dist/shared/types.d.ts.map +1 -1
  284. package/package.json +10 -11
  285. package/dist/admin/chunks/App-BEyv0kMo.mjs +0 -1845
  286. package/dist/admin/chunks/App-BEyv0kMo.mjs.map +0 -1
  287. package/dist/admin/chunks/App-BG-3LItb.js +0 -1866
  288. package/dist/admin/chunks/App-BG-3LItb.js.map +0 -1
  289. package/dist/admin/chunks/PurchaseContentReleases-U5sGMPgR.mjs +0 -173
  290. package/dist/admin/chunks/PurchaseContentReleases-U5sGMPgR.mjs.map +0 -1
  291. package/dist/admin/chunks/PurchaseContentReleases-hRg6ejD7.js +0 -175
  292. package/dist/admin/chunks/PurchaseContentReleases-hRg6ejD7.js.map +0 -1
  293. package/dist/admin/chunks/ReleasesSettingsPage-DV_y1NJZ.js.map +0 -1
  294. package/dist/admin/chunks/ReleasesSettingsPage-lky_0-wG.mjs.map +0 -1
  295. package/dist/admin/chunks/en-BOpqX2t_.js.map +0 -1
  296. package/dist/admin/chunks/en-aQo8Bn_U.mjs.map +0 -1
  297. package/dist/admin/chunks/hooks-CFk_8Q0b.mjs.map +0 -1
  298. package/dist/admin/chunks/hooks-DA5VbUAp.js.map +0 -1
  299. package/dist/admin/chunks/index-BZaFIG8z.js +0 -1658
  300. package/dist/admin/chunks/index-BZaFIG8z.js.map +0 -1
  301. package/dist/admin/chunks/index-DEy-8PzZ.mjs +0 -1619
  302. package/dist/admin/chunks/index-DEy-8PzZ.mjs.map +0 -1
  303. package/dist/admin/chunks/schemas-DMt8h1z-.mjs.map +0 -1
  304. package/dist/admin/chunks/schemas-DS7NeFDN.js.map +0 -1
  305. package/dist/admin/chunks/uk-9T9su-bj.js.map +0 -1
  306. package/dist/admin/chunks/uk-Bp9HotPq.mjs.map +0 -1
@@ -0,0 +1,201 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import 'react';
3
+ import { useNotification, useAPIErrorHandler, useQueryParams, useRBAC, isFetchError } from '@strapi/admin/strapi-admin';
4
+ import { unstable_useContentManagerContext } from '@strapi/content-manager/strapi-admin';
5
+ import { Modal, Flex, Box, Field, SingleSelect, SingleSelectOption, Button } from '@strapi/design-system';
6
+ import { Formik, Form } from 'formik';
7
+ import { useIntl } from 'react-intl';
8
+ import { PERMISSIONS } from '../constants.mjs';
9
+ import { useGetReleasesQuery, useCreateManyReleaseActionsMutation } from '../services/release.mjs';
10
+ import { RELEASE_ACTION_FORM_SCHEMA, INITIAL_VALUES, NoReleases } from './ReleaseActionModal.mjs';
11
+ import { ReleaseActionOptions } from './ReleaseActionOptions.mjs';
12
+
13
+ const getContentPermissions = (subject)=>{
14
+ const permissions = {
15
+ publish: [
16
+ {
17
+ action: 'plugin::content-manager.explorer.publish',
18
+ subject,
19
+ id: '',
20
+ actionParameters: {},
21
+ properties: {},
22
+ conditions: []
23
+ }
24
+ ]
25
+ };
26
+ return permissions;
27
+ };
28
+ const ReleaseAction = ({ documents, model })=>{
29
+ const { formatMessage } = useIntl();
30
+ const { toggleNotification } = useNotification();
31
+ const { formatAPIError } = useAPIErrorHandler();
32
+ const [{ query }] = useQueryParams();
33
+ const contentPermissions = getContentPermissions(model);
34
+ const { allowedActions: { canPublish } } = useRBAC(contentPermissions);
35
+ const { allowedActions: { canCreate } } = useRBAC(PERMISSIONS);
36
+ const { hasDraftAndPublish } = unstable_useContentManagerContext();
37
+ // Get all the releases not published
38
+ const response = useGetReleasesQuery();
39
+ const releases = response.data?.data;
40
+ const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();
41
+ const documentIds = documents.map((doc)=>doc.documentId);
42
+ const handleSubmit = async (values)=>{
43
+ const locale = query.plugins?.i18n?.locale;
44
+ const releaseActionEntries = documentIds.map((entryDocumentId)=>({
45
+ type: values.type,
46
+ contentType: model,
47
+ entryDocumentId,
48
+ locale
49
+ }));
50
+ const response = await createManyReleaseActions({
51
+ body: releaseActionEntries,
52
+ params: {
53
+ releaseId: values.releaseId
54
+ }
55
+ });
56
+ if ('data' in response) {
57
+ // Handle success
58
+ const notificationMessage = formatMessage({
59
+ id: 'content-releases.content-manager-list-view.add-to-release.notification.success.message',
60
+ defaultMessage: '{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release.'
61
+ }, {
62
+ entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,
63
+ totalEntries: response.data.meta.totalEntries
64
+ });
65
+ const notification = {
66
+ type: 'success',
67
+ title: formatMessage({
68
+ id: 'content-releases.content-manager-list-view.add-to-release.notification.success.title',
69
+ defaultMessage: 'Successfully added to release.'
70
+ }, {
71
+ entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,
72
+ totalEntries: response.data.meta.totalEntries
73
+ }),
74
+ message: response.data.meta.entriesAlreadyInRelease ? notificationMessage : ''
75
+ };
76
+ toggleNotification(notification);
77
+ return true;
78
+ }
79
+ if ('error' in response) {
80
+ if (isFetchError(response.error)) {
81
+ // Handle fetch error
82
+ toggleNotification({
83
+ type: 'warning',
84
+ message: formatAPIError(response.error)
85
+ });
86
+ } else {
87
+ // Handle generic error
88
+ toggleNotification({
89
+ type: 'warning',
90
+ message: formatMessage({
91
+ id: 'notification.error',
92
+ defaultMessage: 'An error occurred'
93
+ })
94
+ });
95
+ }
96
+ }
97
+ };
98
+ if (!hasDraftAndPublish || !canCreate || !canPublish) return null;
99
+ return {
100
+ actionType: 'release',
101
+ variant: 'tertiary',
102
+ label: formatMessage({
103
+ id: 'content-manager-list-view.add-to-release',
104
+ defaultMessage: 'Add to Release'
105
+ }),
106
+ dialog: {
107
+ type: 'modal',
108
+ title: formatMessage({
109
+ id: 'content-manager-list-view.add-to-release',
110
+ defaultMessage: 'Add to Release'
111
+ }),
112
+ content: ({ onClose })=>{
113
+ return /*#__PURE__*/ jsx(Formik, {
114
+ onSubmit: async (values)=>{
115
+ const data = await handleSubmit(values);
116
+ if (data) {
117
+ return onClose();
118
+ }
119
+ },
120
+ validationSchema: RELEASE_ACTION_FORM_SCHEMA,
121
+ initialValues: INITIAL_VALUES,
122
+ children: ({ values, setFieldValue })=>/*#__PURE__*/ jsxs(Form, {
123
+ children: [
124
+ releases?.length === 0 ? /*#__PURE__*/ jsx(NoReleases, {}) : /*#__PURE__*/ jsx(Modal.Body, {
125
+ children: /*#__PURE__*/ jsxs(Flex, {
126
+ direction: "column",
127
+ alignItems: "stretch",
128
+ gap: 2,
129
+ children: [
130
+ /*#__PURE__*/ jsx(Box, {
131
+ paddingBottom: 6,
132
+ children: /*#__PURE__*/ jsxs(Field.Root, {
133
+ required: true,
134
+ children: [
135
+ /*#__PURE__*/ jsx(Field.Label, {
136
+ children: formatMessage({
137
+ id: 'content-releases.content-manager-list-view.add-to-release.select-label',
138
+ defaultMessage: 'Select a release'
139
+ })
140
+ }),
141
+ /*#__PURE__*/ jsx(SingleSelect, {
142
+ placeholder: formatMessage({
143
+ id: 'content-releases.content-manager-list-view.add-to-release.select-placeholder',
144
+ defaultMessage: 'Select'
145
+ }),
146
+ onChange: (value)=>setFieldValue('releaseId', value),
147
+ value: values.releaseId,
148
+ children: releases?.map((release)=>/*#__PURE__*/ jsx(SingleSelectOption, {
149
+ value: release.id,
150
+ children: release.name
151
+ }, release.id))
152
+ })
153
+ ]
154
+ })
155
+ }),
156
+ /*#__PURE__*/ jsx(Field.Label, {
157
+ children: formatMessage({
158
+ id: 'content-releases.content-manager-list-view.add-to-release.action-type-label',
159
+ defaultMessage: 'What do you want to do with these entries?'
160
+ })
161
+ }),
162
+ /*#__PURE__*/ jsx(ReleaseActionOptions, {
163
+ selected: values.type,
164
+ handleChange: (e)=>setFieldValue('type', e.target.value),
165
+ name: "type"
166
+ })
167
+ ]
168
+ })
169
+ }),
170
+ /*#__PURE__*/ jsxs(Modal.Footer, {
171
+ children: [
172
+ /*#__PURE__*/ jsx(Button, {
173
+ onClick: onClose,
174
+ variant: "tertiary",
175
+ name: "cancel",
176
+ children: formatMessage({
177
+ id: 'content-releases.content-manager-list-view.add-to-release.cancel-button',
178
+ defaultMessage: 'Cancel'
179
+ })
180
+ }),
181
+ /*#__PURE__*/ jsx(Button, {
182
+ type: "submit",
183
+ disabled: !values.releaseId,
184
+ loading: isLoading,
185
+ children: formatMessage({
186
+ id: 'content-releases.content-manager-list-view.add-to-release.continue-button',
187
+ defaultMessage: 'Continue'
188
+ })
189
+ })
190
+ ]
191
+ })
192
+ ]
193
+ })
194
+ });
195
+ }
196
+ }
197
+ };
198
+ };
199
+
200
+ export { ReleaseAction };
201
+ //# sourceMappingURL=ReleaseAction.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReleaseAction.mjs","sources":["../../../admin/src/components/ReleaseAction.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { unstable_useContentManagerContext as useContentManagerContext } from '@strapi/content-manager/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n SingleSelect,\n SingleSelectOption,\n Modal,\n Field,\n} from '@strapi/design-system';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\n\nimport { CreateManyReleaseActions } from '../../../shared/contracts/release-actions';\nimport { PERMISSIONS as releasePermissions } from '../constants';\nimport { useCreateManyReleaseActionsMutation, useGetReleasesQuery } from '../services/release';\n\nimport {\n type FormValues,\n INITIAL_VALUES,\n RELEASE_ACTION_FORM_SCHEMA,\n NoReleases,\n} from './ReleaseActionModal';\nimport { ReleaseActionOptions } from './ReleaseActionOptions';\n\nimport type { BulkActionComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\nconst getContentPermissions = (subject: string) => {\n const permissions = {\n publish: [\n {\n action: 'plugin::content-manager.explorer.publish',\n subject,\n id: '',\n actionParameters: {},\n properties: {},\n conditions: [],\n },\n ],\n };\n\n return permissions;\n};\n\nconst ReleaseAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const contentPermissions = getContentPermissions(model);\n const {\n allowedActions: { canPublish },\n } = useRBAC(contentPermissions);\n const {\n allowedActions: { canCreate },\n } = useRBAC(releasePermissions);\n const { hasDraftAndPublish } = useContentManagerContext();\n\n // Get all the releases not published\n const response = useGetReleasesQuery();\n const releases = response.data?.data;\n const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();\n const documentIds = documents.map((doc) => doc.documentId);\n\n const handleSubmit = async (values: FormValues) => {\n const locale = query.plugins?.i18n?.locale;\n\n const releaseActionEntries: CreateManyReleaseActions.Request['body'] = documentIds.map(\n (entryDocumentId) => ({\n type: values.type,\n contentType: model as UID.ContentType,\n entryDocumentId,\n locale,\n })\n );\n\n const response = await createManyReleaseActions({\n body: releaseActionEntries,\n params: { releaseId: values.releaseId },\n });\n\n if ('data' in response) {\n // Handle success\n\n const notificationMessage = formatMessage(\n {\n id: 'content-releases.content-manager-list-view.add-to-release.notification.success.message',\n defaultMessage:\n '{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release.',\n },\n {\n entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,\n totalEntries: response.data.meta.totalEntries,\n }\n );\n\n const notification = {\n type: 'success' as const,\n title: formatMessage(\n {\n id: 'content-releases.content-manager-list-view.add-to-release.notification.success.title',\n defaultMessage: 'Successfully added to release.',\n },\n {\n entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,\n totalEntries: response.data.meta.totalEntries,\n }\n ),\n message: response.data.meta.entriesAlreadyInRelease ? notificationMessage : '',\n };\n\n toggleNotification(notification);\n\n return true;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'warning',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'warning',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!hasDraftAndPublish || !canCreate || !canPublish) return null;\n\n return {\n actionType: 'release',\n variant: 'tertiary',\n label: formatMessage({\n id: 'content-manager-list-view.add-to-release',\n defaultMessage: 'Add to Release',\n }),\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager-list-view.add-to-release',\n defaultMessage: 'Add to Release',\n }),\n content: ({ onClose }) => {\n return (\n <Formik\n onSubmit={async (values) => {\n const data = await handleSubmit(values);\n if (data) {\n return onClose();\n }\n }}\n validationSchema={RELEASE_ACTION_FORM_SCHEMA}\n initialValues={INITIAL_VALUES}\n >\n {({ values, setFieldValue }) => (\n <Form>\n {releases?.length === 0 ? (\n <NoReleases />\n ) : (\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Box paddingBottom={6}>\n <Field.Root required>\n <Field.Label>\n {formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.select-label',\n defaultMessage: 'Select a release',\n })}\n </Field.Label>\n <SingleSelect\n placeholder={formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.select-placeholder',\n defaultMessage: 'Select',\n })}\n onChange={(value) => setFieldValue('releaseId', value)}\n value={values.releaseId}\n >\n {releases?.map((release) => (\n <SingleSelectOption key={release.id} value={release.id}>\n {release.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Box>\n <Field.Label>\n {formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.action-type-label',\n defaultMessage: 'What do you want to do with these entries?',\n })}\n </Field.Label>\n <ReleaseActionOptions\n selected={values.type}\n handleChange={(e) => setFieldValue('type', e.target.value)}\n name=\"type\"\n />\n </Flex>\n </Modal.Body>\n )}\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.cancel-button',\n defaultMessage: 'Cancel',\n })}\n </Button>\n {/** * TODO: Ideally we would use isValid from Formik to disable the button,\n however currently it always returns true * for yup.string().required(), even when\n the value is falsy (including empty string) */}\n <Button type=\"submit\" disabled={!values.releaseId} loading={isLoading}>\n {formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.continue-button',\n defaultMessage: 'Continue',\n })}\n </Button>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n );\n },\n },\n };\n};\n\nexport { ReleaseAction };\n"],"names":["getContentPermissions","subject","permissions","publish","action","id","actionParameters","properties","conditions","ReleaseAction","documents","model","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","query","useQueryParams","contentPermissions","allowedActions","canPublish","useRBAC","canCreate","releasePermissions","hasDraftAndPublish","useContentManagerContext","response","useGetReleasesQuery","releases","data","createManyReleaseActions","isLoading","useCreateManyReleaseActionsMutation","documentIds","map","doc","documentId","handleSubmit","values","locale","plugins","i18n","releaseActionEntries","entryDocumentId","type","contentType","body","params","releaseId","notificationMessage","defaultMessage","entriesAlreadyInRelease","meta","totalEntries","notification","title","message","isFetchError","error","actionType","variant","label","dialog","content","onClose","_jsx","Formik","onSubmit","validationSchema","RELEASE_ACTION_FORM_SCHEMA","initialValues","INITIAL_VALUES","setFieldValue","_jsxs","Form","length","NoReleases","Modal","Body","Flex","direction","alignItems","gap","Box","paddingBottom","Field","Root","required","Label","SingleSelect","placeholder","onChange","value","release","SingleSelectOption","name","ReleaseActionOptions","selected","handleChange","e","target","Footer","Button","onClick","disabled","loading"],"mappings":"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"}
@@ -0,0 +1,194 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
+ var designSystem = require('@strapi/design-system');
7
+ var icons = require('@strapi/icons');
8
+ var reactIntl = require('react-intl');
9
+ var reactRouterDom = require('react-router-dom');
10
+ var styledComponents = require('styled-components');
11
+ var constants = require('../constants.js');
12
+ var release = require('../services/release.js');
13
+
14
+ function _interopNamespaceDefault(e) {
15
+ var n = Object.create(null);
16
+ if (e) {
17
+ Object.keys(e).forEach(function (k) {
18
+ if (k !== 'default') {
19
+ var d = Object.getOwnPropertyDescriptor(e, k);
20
+ Object.defineProperty(n, k, d.get ? d : {
21
+ enumerable: true,
22
+ get: function () { return e[k]; }
23
+ });
24
+ }
25
+ });
26
+ }
27
+ n.default = e;
28
+ return Object.freeze(n);
29
+ }
30
+
31
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
32
+
33
+ // TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934
34
+ const StyledMenuLink = styledComponents.styled(designSystem.Menu.Item)`
35
+ span,
36
+ &:hover span {
37
+ color: ${({ theme })=>theme.colors['neutral800']};
38
+ }
39
+
40
+ svg path,
41
+ &:hover svg path {
42
+ fill: ${({ theme })=>theme.colors['neutral500']};
43
+ }
44
+ `;
45
+ const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
46
+ const { formatMessage } = reactIntl.useIntl();
47
+ const { toggleNotification } = strapiAdmin.useNotification();
48
+ const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
49
+ const [deleteReleaseAction] = release.useDeleteReleaseActionMutation();
50
+ const { allowedActions: { canDeleteAction } } = strapiAdmin.useRBAC(constants.PERMISSIONS);
51
+ const handleDeleteAction = async ()=>{
52
+ const response = await deleteReleaseAction({
53
+ params: {
54
+ releaseId,
55
+ actionId
56
+ }
57
+ });
58
+ if ('data' in response) {
59
+ // Handle success
60
+ toggleNotification({
61
+ type: 'success',
62
+ message: formatMessage({
63
+ id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',
64
+ defaultMessage: 'Entry removed from release'
65
+ })
66
+ });
67
+ return;
68
+ }
69
+ if ('error' in response) {
70
+ if (strapiAdmin.isFetchError(response.error)) {
71
+ // Handle fetch error
72
+ toggleNotification({
73
+ type: 'danger',
74
+ message: formatAPIError(response.error)
75
+ });
76
+ } else {
77
+ // Handle generic error
78
+ toggleNotification({
79
+ type: 'danger',
80
+ message: formatMessage({
81
+ id: 'notification.error',
82
+ defaultMessage: 'An error occurred'
83
+ })
84
+ });
85
+ }
86
+ }
87
+ };
88
+ if (!canDeleteAction) {
89
+ return null;
90
+ }
91
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
92
+ variant: "danger",
93
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Cross, {}),
94
+ onSelect: handleDeleteAction,
95
+ children: formatMessage({
96
+ id: 'content-releases.content-manager-edit-view.remove-from-release',
97
+ defaultMessage: 'Remove from release'
98
+ })
99
+ });
100
+ };
101
+ const ReleaseActionEntryLinkItem = ({ contentTypeUid, documentId, locale })=>{
102
+ const { formatMessage } = reactIntl.useIntl();
103
+ const userPermissions = strapiAdmin.useAuth('ReleaseActionEntryLinkItem', (state)=>state.permissions);
104
+ // Confirm user has permissions to access the entry for the given locale
105
+ const canUpdateEntryForLocale = React__namespace.useMemo(()=>{
106
+ const updatePermissions = userPermissions.find((permission)=>permission.subject === contentTypeUid && permission.action === 'plugin::content-manager.explorer.update');
107
+ if (!updatePermissions) {
108
+ return false;
109
+ }
110
+ return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
111
+ }, [
112
+ contentTypeUid,
113
+ locale,
114
+ userPermissions
115
+ ]);
116
+ const { allowedActions: { canUpdate: canUpdateContentType } } = strapiAdmin.useRBAC({
117
+ updateContentType: [
118
+ {
119
+ action: 'plugin::content-manager.explorer.update',
120
+ subject: contentTypeUid
121
+ }
122
+ ]
123
+ });
124
+ if (!canUpdateContentType || !canUpdateEntryForLocale) {
125
+ return null;
126
+ }
127
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuLink, {
128
+ /* @ts-expect-error inference isn't working in DS */ tag: reactRouterDom.NavLink,
129
+ isLink: true,
130
+ to: {
131
+ pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,
132
+ search: locale && `?plugins[i18n][locale]=${locale}`
133
+ },
134
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {}),
135
+ children: formatMessage({
136
+ id: 'content-releases.content-manager-edit-view.edit-entry',
137
+ defaultMessage: 'Edit entry'
138
+ })
139
+ });
140
+ };
141
+ const EditReleaseItem = ({ releaseId })=>{
142
+ const { formatMessage } = reactIntl.useIntl();
143
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuLink, {
144
+ /* @ts-expect-error inference isn't working in DS */ tag: reactRouterDom.NavLink,
145
+ isLink: true,
146
+ to: `/plugins/content-releases/${releaseId}`,
147
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {}),
148
+ children: formatMessage({
149
+ id: 'content-releases.content-manager-edit-view.edit-release',
150
+ defaultMessage: 'Edit release'
151
+ })
152
+ });
153
+ };
154
+ const Root = ({ children })=>{
155
+ const { formatMessage } = reactIntl.useIntl();
156
+ const { allowedActions } = strapiAdmin.useRBAC(constants.PERMISSIONS);
157
+ return(// A user can access the dropdown if they have permissions to delete a release-action OR update a release
158
+ allowedActions.canDeleteAction || allowedActions.canUpdate ? /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Menu.Root, {
159
+ children: [
160
+ /*#__PURE__*/ jsxRuntime.jsx(StyledMoreButton, {
161
+ variant: "tertiary",
162
+ endIcon: null,
163
+ paddingLeft: "7px",
164
+ paddingRight: "7px",
165
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.AccessibleIcon, {
166
+ label: formatMessage({
167
+ id: 'content-releases.content-manager-edit-view.release-action-menu',
168
+ defaultMessage: 'Release action options'
169
+ }),
170
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.More, {})
171
+ })
172
+ }),
173
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Content, {
174
+ top: 1,
175
+ popoverPlacement: "bottom-end",
176
+ children: children
177
+ })
178
+ ]
179
+ }) : null);
180
+ };
181
+ const StyledMoreButton = styledComponents.styled(designSystem.Menu.Trigger)`
182
+ & > span {
183
+ display: flex;
184
+ }
185
+ `;
186
+ const ReleaseActionMenu = {
187
+ Root,
188
+ EditReleaseItem,
189
+ DeleteReleaseActionItem,
190
+ ReleaseActionEntryLinkItem
191
+ };
192
+
193
+ exports.ReleaseActionMenu = ReleaseActionMenu;
194
+ //# sourceMappingURL=ReleaseActionMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReleaseActionMenu.js","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\n// TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934\nconst StyledMenuLink = styled(Menu.Item)`\n span,\n &:hover span {\n color: ${({ theme }) => theme.colors['neutral800']};\n }\n\n svg path,\n &:hover svg path {\n fill: ${({ theme }) => theme.colors['neutral500']};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <Menu.Item variant=\"danger\" startIcon={<Cross />} onSelect={handleDeleteAction}>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Menu.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <StyledMenuLink\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={`/plugins/content-releases/${releaseId}`}\n startIcon={<Pencil />}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </StyledMenuLink>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\n"],"names":["StyledMenuLink","styled","Menu","Item","theme","colors","DeleteReleaseActionItem","releaseId","actionId","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","deleteReleaseAction","useDeleteReleaseActionMutation","allowedActions","canDeleteAction","useRBAC","PERMISSIONS","handleDeleteAction","response","params","type","message","id","defaultMessage","isFetchError","error","_jsx","variant","startIcon","Cross","onSelect","ReleaseActionEntryLinkItem","contentTypeUid","documentId","locale","userPermissions","useAuth","state","permissions","canUpdateEntryForLocale","React","useMemo","updatePermissions","find","permission","subject","action","Boolean","properties","locales","includes","canUpdate","canUpdateContentType","updateContentType","tag","NavLink","isLink","to","pathname","search","Pencil","EditReleaseItem","Root","children","_jsxs","StyledMoreButton","endIcon","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
@@ -0,0 +1,173 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { useNotification, useAPIErrorHandler, useRBAC, useAuth, isFetchError } from '@strapi/admin/strapi-admin';
4
+ import { Menu, AccessibleIcon } from '@strapi/design-system';
5
+ import { Cross, Pencil, More } from '@strapi/icons';
6
+ import { useIntl } from 'react-intl';
7
+ import { NavLink } from 'react-router-dom';
8
+ import { styled } from 'styled-components';
9
+ import { PERMISSIONS } from '../constants.mjs';
10
+ import { useDeleteReleaseActionMutation } from '../services/release.mjs';
11
+
12
+ // TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934
13
+ const StyledMenuLink = styled(Menu.Item)`
14
+ span,
15
+ &:hover span {
16
+ color: ${({ theme })=>theme.colors['neutral800']};
17
+ }
18
+
19
+ svg path,
20
+ &:hover svg path {
21
+ fill: ${({ theme })=>theme.colors['neutral500']};
22
+ }
23
+ `;
24
+ const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
25
+ const { formatMessage } = useIntl();
26
+ const { toggleNotification } = useNotification();
27
+ const { formatAPIError } = useAPIErrorHandler();
28
+ const [deleteReleaseAction] = useDeleteReleaseActionMutation();
29
+ const { allowedActions: { canDeleteAction } } = useRBAC(PERMISSIONS);
30
+ const handleDeleteAction = async ()=>{
31
+ const response = await deleteReleaseAction({
32
+ params: {
33
+ releaseId,
34
+ actionId
35
+ }
36
+ });
37
+ if ('data' in response) {
38
+ // Handle success
39
+ toggleNotification({
40
+ type: 'success',
41
+ message: formatMessage({
42
+ id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',
43
+ defaultMessage: 'Entry removed from release'
44
+ })
45
+ });
46
+ return;
47
+ }
48
+ if ('error' in response) {
49
+ if (isFetchError(response.error)) {
50
+ // Handle fetch error
51
+ toggleNotification({
52
+ type: 'danger',
53
+ message: formatAPIError(response.error)
54
+ });
55
+ } else {
56
+ // Handle generic error
57
+ toggleNotification({
58
+ type: 'danger',
59
+ message: formatMessage({
60
+ id: 'notification.error',
61
+ defaultMessage: 'An error occurred'
62
+ })
63
+ });
64
+ }
65
+ }
66
+ };
67
+ if (!canDeleteAction) {
68
+ return null;
69
+ }
70
+ return /*#__PURE__*/ jsx(Menu.Item, {
71
+ variant: "danger",
72
+ startIcon: /*#__PURE__*/ jsx(Cross, {}),
73
+ onSelect: handleDeleteAction,
74
+ children: formatMessage({
75
+ id: 'content-releases.content-manager-edit-view.remove-from-release',
76
+ defaultMessage: 'Remove from release'
77
+ })
78
+ });
79
+ };
80
+ const ReleaseActionEntryLinkItem = ({ contentTypeUid, documentId, locale })=>{
81
+ const { formatMessage } = useIntl();
82
+ const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state)=>state.permissions);
83
+ // Confirm user has permissions to access the entry for the given locale
84
+ const canUpdateEntryForLocale = React.useMemo(()=>{
85
+ const updatePermissions = userPermissions.find((permission)=>permission.subject === contentTypeUid && permission.action === 'plugin::content-manager.explorer.update');
86
+ if (!updatePermissions) {
87
+ return false;
88
+ }
89
+ return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
90
+ }, [
91
+ contentTypeUid,
92
+ locale,
93
+ userPermissions
94
+ ]);
95
+ const { allowedActions: { canUpdate: canUpdateContentType } } = useRBAC({
96
+ updateContentType: [
97
+ {
98
+ action: 'plugin::content-manager.explorer.update',
99
+ subject: contentTypeUid
100
+ }
101
+ ]
102
+ });
103
+ if (!canUpdateContentType || !canUpdateEntryForLocale) {
104
+ return null;
105
+ }
106
+ return /*#__PURE__*/ jsx(StyledMenuLink, {
107
+ /* @ts-expect-error inference isn't working in DS */ tag: NavLink,
108
+ isLink: true,
109
+ to: {
110
+ pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,
111
+ search: locale && `?plugins[i18n][locale]=${locale}`
112
+ },
113
+ startIcon: /*#__PURE__*/ jsx(Pencil, {}),
114
+ children: formatMessage({
115
+ id: 'content-releases.content-manager-edit-view.edit-entry',
116
+ defaultMessage: 'Edit entry'
117
+ })
118
+ });
119
+ };
120
+ const EditReleaseItem = ({ releaseId })=>{
121
+ const { formatMessage } = useIntl();
122
+ return /*#__PURE__*/ jsx(StyledMenuLink, {
123
+ /* @ts-expect-error inference isn't working in DS */ tag: NavLink,
124
+ isLink: true,
125
+ to: `/plugins/content-releases/${releaseId}`,
126
+ startIcon: /*#__PURE__*/ jsx(Pencil, {}),
127
+ children: formatMessage({
128
+ id: 'content-releases.content-manager-edit-view.edit-release',
129
+ defaultMessage: 'Edit release'
130
+ })
131
+ });
132
+ };
133
+ const Root = ({ children })=>{
134
+ const { formatMessage } = useIntl();
135
+ const { allowedActions } = useRBAC(PERMISSIONS);
136
+ return(// A user can access the dropdown if they have permissions to delete a release-action OR update a release
137
+ allowedActions.canDeleteAction || allowedActions.canUpdate ? /*#__PURE__*/ jsxs(Menu.Root, {
138
+ children: [
139
+ /*#__PURE__*/ jsx(StyledMoreButton, {
140
+ variant: "tertiary",
141
+ endIcon: null,
142
+ paddingLeft: "7px",
143
+ paddingRight: "7px",
144
+ children: /*#__PURE__*/ jsx(AccessibleIcon, {
145
+ label: formatMessage({
146
+ id: 'content-releases.content-manager-edit-view.release-action-menu',
147
+ defaultMessage: 'Release action options'
148
+ }),
149
+ children: /*#__PURE__*/ jsx(More, {})
150
+ })
151
+ }),
152
+ /*#__PURE__*/ jsx(Menu.Content, {
153
+ top: 1,
154
+ popoverPlacement: "bottom-end",
155
+ children: children
156
+ })
157
+ ]
158
+ }) : null);
159
+ };
160
+ const StyledMoreButton = styled(Menu.Trigger)`
161
+ & > span {
162
+ display: flex;
163
+ }
164
+ `;
165
+ const ReleaseActionMenu = {
166
+ Root,
167
+ EditReleaseItem,
168
+ DeleteReleaseActionItem,
169
+ ReleaseActionEntryLinkItem
170
+ };
171
+
172
+ export { ReleaseActionMenu };
173
+ //# sourceMappingURL=ReleaseActionMenu.mjs.map