@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
@@ -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-BEyv0kMo.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-lky_0-wG.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-U5sGMPgR.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-DEy-8PzZ.mjs.map