@strapi/content-releases 0.0.0-next.f6dca5adf05ef6bed9605a1535999ab0bbbf063e → 0.0.0-next.f86041c89a8c1545c6437a881dc613e98bc52bd7

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 (321) hide show
  1. package/dist/admin/assets/purchase-page-illustration-dark.jpg.js +6 -0
  2. package/dist/admin/assets/purchase-page-illustration-dark.jpg.js.map +1 -0
  3. package/dist/admin/assets/purchase-page-illustration-dark.jpg.mjs +4 -0
  4. package/dist/admin/assets/purchase-page-illustration-dark.jpg.mjs.map +1 -0
  5. package/dist/admin/assets/purchase-page-illustration-light.jpg.js +6 -0
  6. package/dist/admin/assets/purchase-page-illustration-light.jpg.js.map +1 -0
  7. package/dist/admin/assets/purchase-page-illustration-light.jpg.mjs +4 -0
  8. package/dist/admin/assets/purchase-page-illustration-light.jpg.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 +331 -0
  38. package/dist/admin/components/ReleaseModal.js.map +1 -0
  39. package/dist/admin/components/ReleaseModal.mjs +310 -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 +148 -4
  54. package/dist/admin/index.js.map +1 -1
  55. package/dist/admin/index.mjs +143 -4
  56. package/dist/admin/index.mjs.map +1 -1
  57. package/dist/admin/modules/hooks.js +8 -0
  58. package/dist/admin/modules/hooks.js.map +1 -0
  59. package/dist/admin/modules/hooks.mjs +6 -0
  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 +774 -0
  70. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
  71. package/dist/admin/pages/ReleaseDetailsPage.mjs +753 -0
  72. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
  73. package/dist/admin/pages/ReleasesPage.js +405 -0
  74. package/dist/admin/pages/ReleasesPage.js.map +1 -0
  75. package/dist/admin/pages/ReleasesPage.mjs +383 -0
  76. package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
  77. package/dist/admin/pages/ReleasesSettingsPage.js +225 -0
  78. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
  79. package/dist/admin/pages/ReleasesSettingsPage.mjs +223 -0
  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 +473 -0
  90. package/dist/admin/services/release.js.map +1 -0
  91. package/dist/admin/services/release.mjs +456 -0
  92. package/dist/admin/services/release.mjs.map +1 -0
  93. package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
  94. package/dist/admin/src/components/ReleaseListCell.d.ts +1 -1
  95. package/dist/admin/src/components/Widgets.d.ts +2 -0
  96. package/dist/admin/src/constants.d.ts +1 -0
  97. package/dist/admin/src/services/homepage.d.ts +9 -0
  98. package/dist/admin/src/services/release.d.ts +28 -28
  99. package/dist/admin/store/hooks.js +8 -0
  100. package/dist/admin/store/hooks.js.map +1 -0
  101. package/dist/admin/store/hooks.mjs +6 -0
  102. package/dist/admin/store/hooks.mjs.map +1 -0
  103. package/dist/admin/translations/en.json.js +111 -0
  104. package/dist/admin/translations/en.json.js.map +1 -0
  105. package/dist/admin/translations/en.json.mjs +109 -0
  106. package/dist/admin/translations/en.json.mjs.map +1 -0
  107. package/dist/admin/translations/uk.json.js +103 -0
  108. package/dist/admin/translations/uk.json.js.map +1 -0
  109. package/dist/admin/translations/uk.json.mjs +101 -0
  110. package/dist/admin/translations/uk.json.mjs.map +1 -0
  111. package/dist/admin/utils/api.js +8 -0
  112. package/dist/admin/utils/api.js.map +1 -0
  113. package/dist/admin/utils/api.mjs +6 -0
  114. package/dist/admin/utils/api.mjs.map +1 -0
  115. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  116. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  117. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  118. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  119. package/dist/admin/utils/time.js +42 -0
  120. package/dist/admin/utils/time.js.map +1 -0
  121. package/dist/admin/utils/time.mjs +39 -0
  122. package/dist/admin/utils/time.mjs.map +1 -0
  123. package/dist/admin/validation/schemas.js +65 -0
  124. package/dist/admin/validation/schemas.js.map +1 -0
  125. package/dist/admin/validation/schemas.mjs +43 -0
  126. package/dist/admin/validation/schemas.mjs.map +1 -0
  127. package/dist/server/bootstrap.js +68 -0
  128. package/dist/server/bootstrap.js.map +1 -0
  129. package/dist/server/bootstrap.mjs +66 -0
  130. package/dist/server/bootstrap.mjs.map +1 -0
  131. package/dist/server/constants.js +74 -0
  132. package/dist/server/constants.js.map +1 -0
  133. package/dist/server/constants.mjs +69 -0
  134. package/dist/server/constants.mjs.map +1 -0
  135. package/dist/server/content-types/index.js +12 -0
  136. package/dist/server/content-types/index.js.map +1 -0
  137. package/dist/server/content-types/index.mjs +10 -0
  138. package/dist/server/content-types/index.mjs.map +1 -0
  139. package/dist/server/content-types/release/index.js +10 -0
  140. package/dist/server/content-types/release/index.js.map +1 -0
  141. package/dist/server/content-types/release/index.mjs +8 -0
  142. package/dist/server/content-types/release/index.mjs.map +1 -0
  143. package/dist/server/content-types/release/schema.js +58 -0
  144. package/dist/server/content-types/release/schema.js.map +1 -0
  145. package/dist/server/content-types/release/schema.mjs +56 -0
  146. package/dist/server/content-types/release/schema.mjs.map +1 -0
  147. package/dist/server/content-types/release-action/index.js +10 -0
  148. package/dist/server/content-types/release-action/index.js.map +1 -0
  149. package/dist/server/content-types/release-action/index.mjs +8 -0
  150. package/dist/server/content-types/release-action/index.mjs.map +1 -0
  151. package/dist/server/content-types/release-action/schema.js +55 -0
  152. package/dist/server/content-types/release-action/schema.js.map +1 -0
  153. package/dist/server/content-types/release-action/schema.mjs +53 -0
  154. package/dist/server/content-types/release-action/schema.mjs.map +1 -0
  155. package/dist/server/controllers/homepage.js +15 -0
  156. package/dist/server/controllers/homepage.js.map +1 -0
  157. package/dist/server/controllers/homepage.mjs +13 -0
  158. package/dist/server/controllers/homepage.mjs.map +1 -0
  159. package/dist/server/controllers/index.js +16 -0
  160. package/dist/server/controllers/index.js.map +1 -0
  161. package/dist/server/controllers/index.mjs +14 -0
  162. package/dist/server/controllers/index.mjs.map +1 -0
  163. package/dist/server/controllers/release-action.js +150 -0
  164. package/dist/server/controllers/release-action.js.map +1 -0
  165. package/dist/server/controllers/release-action.mjs +148 -0
  166. package/dist/server/controllers/release-action.mjs.map +1 -0
  167. package/dist/server/controllers/release.js +302 -0
  168. package/dist/server/controllers/release.js.map +1 -0
  169. package/dist/server/controllers/release.mjs +300 -0
  170. package/dist/server/controllers/release.mjs.map +1 -0
  171. package/dist/server/controllers/settings.js +37 -0
  172. package/dist/server/controllers/settings.js.map +1 -0
  173. package/dist/server/controllers/settings.mjs +35 -0
  174. package/dist/server/controllers/settings.mjs.map +1 -0
  175. package/dist/server/controllers/validation/release-action.js +34 -0
  176. package/dist/server/controllers/validation/release-action.js.map +1 -0
  177. package/dist/server/controllers/validation/release-action.mjs +30 -0
  178. package/dist/server/controllers/validation/release-action.mjs.map +1 -0
  179. package/dist/server/controllers/validation/release.js +26 -0
  180. package/dist/server/controllers/validation/release.js.map +1 -0
  181. package/dist/server/controllers/validation/release.mjs +22 -0
  182. package/dist/server/controllers/validation/release.mjs.map +1 -0
  183. package/dist/server/controllers/validation/settings.js +32 -0
  184. package/dist/server/controllers/validation/settings.js.map +1 -0
  185. package/dist/server/controllers/validation/settings.mjs +10 -0
  186. package/dist/server/controllers/validation/settings.mjs.map +1 -0
  187. package/dist/server/destroy.js +15 -0
  188. package/dist/server/destroy.js.map +1 -0
  189. package/dist/server/destroy.mjs +13 -0
  190. package/dist/server/destroy.mjs.map +1 -0
  191. package/dist/server/index.js +25 -1984
  192. package/dist/server/index.js.map +1 -1
  193. package/dist/server/index.mjs +24 -1964
  194. package/dist/server/index.mjs.map +1 -1
  195. package/dist/server/middlewares/documents.js +104 -0
  196. package/dist/server/middlewares/documents.js.map +1 -0
  197. package/dist/server/middlewares/documents.mjs +101 -0
  198. package/dist/server/middlewares/documents.mjs.map +1 -0
  199. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
  200. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
  201. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
  202. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
  203. package/dist/server/migrations/index.js +205 -0
  204. package/dist/server/migrations/index.js.map +1 -0
  205. package/dist/server/migrations/index.mjs +198 -0
  206. package/dist/server/migrations/index.mjs.map +1 -0
  207. package/dist/server/register.js +23 -0
  208. package/dist/server/register.js.map +1 -0
  209. package/dist/server/register.mjs +21 -0
  210. package/dist/server/register.mjs.map +1 -0
  211. package/dist/server/routes/homepage.js +25 -0
  212. package/dist/server/routes/homepage.js.map +1 -0
  213. package/dist/server/routes/homepage.mjs +23 -0
  214. package/dist/server/routes/homepage.mjs.map +1 -0
  215. package/dist/server/routes/index.js +16 -0
  216. package/dist/server/routes/index.js.map +1 -0
  217. package/dist/server/routes/index.mjs +14 -0
  218. package/dist/server/routes/index.mjs.map +1 -0
  219. package/dist/server/routes/release-action.js +100 -0
  220. package/dist/server/routes/release-action.js.map +1 -0
  221. package/dist/server/routes/release-action.mjs +98 -0
  222. package/dist/server/routes/release-action.mjs.map +1 -0
  223. package/dist/server/routes/release.js +154 -0
  224. package/dist/server/routes/release.js.map +1 -0
  225. package/dist/server/routes/release.mjs +152 -0
  226. package/dist/server/routes/release.mjs.map +1 -0
  227. package/dist/server/routes/settings.js +46 -0
  228. package/dist/server/routes/settings.js.map +1 -0
  229. package/dist/server/routes/settings.mjs +44 -0
  230. package/dist/server/routes/settings.mjs.map +1 -0
  231. package/dist/server/services/homepage.js +26 -0
  232. package/dist/server/services/homepage.js.map +1 -0
  233. package/dist/server/services/homepage.mjs +24 -0
  234. package/dist/server/services/homepage.mjs.map +1 -0
  235. package/dist/server/services/index.js +20 -0
  236. package/dist/server/services/index.js.map +1 -0
  237. package/dist/server/services/index.mjs +18 -0
  238. package/dist/server/services/index.mjs.map +1 -0
  239. package/dist/server/services/release-action.js +324 -0
  240. package/dist/server/services/release-action.js.map +1 -0
  241. package/dist/server/services/release-action.mjs +322 -0
  242. package/dist/server/services/release-action.mjs.map +1 -0
  243. package/dist/server/services/release.js +324 -0
  244. package/dist/server/services/release.js.map +1 -0
  245. package/dist/server/services/release.mjs +322 -0
  246. package/dist/server/services/release.mjs.map +1 -0
  247. package/dist/server/services/scheduling.js +74 -0
  248. package/dist/server/services/scheduling.js.map +1 -0
  249. package/dist/server/services/scheduling.mjs +72 -0
  250. package/dist/server/services/scheduling.mjs.map +1 -0
  251. package/dist/server/services/settings.js +34 -0
  252. package/dist/server/services/settings.js.map +1 -0
  253. package/dist/server/services/settings.mjs +32 -0
  254. package/dist/server/services/settings.mjs.map +1 -0
  255. package/dist/server/services/validation.js +91 -0
  256. package/dist/server/services/validation.js.map +1 -0
  257. package/dist/server/services/validation.mjs +86 -0
  258. package/dist/server/services/validation.mjs.map +1 -0
  259. package/dist/server/src/controllers/homepage.d.ts +6 -0
  260. package/dist/server/src/controllers/homepage.d.ts.map +1 -0
  261. package/dist/server/src/controllers/index.d.ts +3 -0
  262. package/dist/server/src/controllers/index.d.ts.map +1 -1
  263. package/dist/server/src/destroy.d.ts +1 -1
  264. package/dist/server/src/destroy.d.ts.map +1 -1
  265. package/dist/server/src/index.d.ts +15 -10
  266. package/dist/server/src/index.d.ts.map +1 -1
  267. package/dist/server/src/middlewares/documents.d.ts +1 -1
  268. package/dist/server/src/middlewares/documents.d.ts.map +1 -1
  269. package/dist/server/src/routes/homepage.d.ts +4 -0
  270. package/dist/server/src/routes/homepage.d.ts.map +1 -0
  271. package/dist/server/src/routes/index.d.ts +1 -0
  272. package/dist/server/src/routes/index.d.ts.map +1 -1
  273. package/dist/server/src/services/homepage.d.ts +9 -0
  274. package/dist/server/src/services/homepage.d.ts.map +1 -0
  275. package/dist/server/src/services/index.d.ts +11 -10
  276. package/dist/server/src/services/index.d.ts.map +1 -1
  277. package/dist/server/src/services/release-action.d.ts +3 -7
  278. package/dist/server/src/services/release-action.d.ts.map +1 -1
  279. package/dist/server/src/services/scheduling.d.ts +5 -6
  280. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  281. package/dist/server/src/services/validation.d.ts +1 -1
  282. package/dist/server/src/services/validation.d.ts.map +1 -1
  283. package/dist/server/src/utils/index.d.ts.map +1 -1
  284. package/dist/server/utils/index.js +94 -0
  285. package/dist/server/utils/index.js.map +1 -0
  286. package/dist/server/utils/index.mjs +88 -0
  287. package/dist/server/utils/index.mjs.map +1 -0
  288. package/dist/shared/contracts/homepage.d.ts +11 -0
  289. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  290. package/dist/shared/contracts/release-actions.d.ts +8 -2
  291. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  292. package/dist/shared/contracts/releases.d.ts +0 -1
  293. package/dist/shared/contracts/settings.d.ts +1 -2
  294. package/dist/shared/contracts/settings.d.ts.map +1 -1
  295. package/dist/shared/types.d.ts +1 -1
  296. package/dist/shared/types.d.ts.map +1 -1
  297. package/package.json +23 -21
  298. package/dist/_chunks/App-BKB1esYS.js +0 -1395
  299. package/dist/_chunks/App-BKB1esYS.js.map +0 -1
  300. package/dist/_chunks/App-Cne--1Z8.mjs +0 -1374
  301. package/dist/_chunks/App-Cne--1Z8.mjs.map +0 -1
  302. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js +0 -52
  303. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +0 -1
  304. package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs +0 -52
  305. package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +0 -1
  306. package/dist/_chunks/ReleasesSettingsPage-C1WwGWIH.mjs +0 -178
  307. package/dist/_chunks/ReleasesSettingsPage-C1WwGWIH.mjs.map +0 -1
  308. package/dist/_chunks/ReleasesSettingsPage-kuXIwpWp.js +0 -178
  309. package/dist/_chunks/ReleasesSettingsPage-kuXIwpWp.js.map +0 -1
  310. package/dist/_chunks/en-CmYoEnA7.js +0 -93
  311. package/dist/_chunks/en-CmYoEnA7.js.map +0 -1
  312. package/dist/_chunks/en-D0yVZFqf.mjs +0 -93
  313. package/dist/_chunks/en-D0yVZFqf.mjs.map +0 -1
  314. package/dist/_chunks/index-5Odi61vw.js +0 -1381
  315. package/dist/_chunks/index-5Odi61vw.js.map +0 -1
  316. package/dist/_chunks/index-Cy7qwpaU.mjs +0 -1362
  317. package/dist/_chunks/index-Cy7qwpaU.mjs.map +0 -1
  318. package/dist/_chunks/schemas-BE1LxE9J.js +0 -62
  319. package/dist/_chunks/schemas-BE1LxE9J.js.map +0 -1
  320. package/dist/_chunks/schemas-DdA2ic2U.mjs +0 -44
  321. package/dist/_chunks/schemas-DdA2ic2U.mjs.map +0 -1
@@ -0,0 +1,310 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ require('react');
5
+ var strapiAdmin = require('@strapi/content-manager/strapi-admin');
6
+ var designSystem = require('@strapi/design-system');
7
+ var icons = require('@strapi/icons');
8
+ var qs = require('qs');
9
+ var reactIntl = require('react-intl');
10
+ var reactRouterDom = require('react-router-dom');
11
+ var styledComponents = require('styled-components');
12
+
13
+ const StyledPopoverFlex = styledComponents.styled(designSystem.Flex)`
14
+ width: 100%;
15
+ max-width: 256px;
16
+
17
+ & > * {
18
+ border-bottom: 1px solid ${({ theme })=>theme.colors.neutral150};
19
+ }
20
+
21
+ & > *:last-child {
22
+ border-bottom: none;
23
+ }
24
+ `;
25
+ const ButtonContent = styledComponents.styled(designSystem.Flex)`
26
+ svg {
27
+ fill: currentColor;
28
+ }
29
+ `;
30
+ const CustomStatusButton = ({ children, icon, color })=>{
31
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Trigger, {
32
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
33
+ variant: "ghost",
34
+ endIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.CaretDown, {}),
35
+ children: /*#__PURE__*/ jsxRuntime.jsxs(ButtonContent, {
36
+ color: color,
37
+ gap: 2,
38
+ children: [
39
+ icon,
40
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
41
+ textColor: color,
42
+ variant: "omega",
43
+ fontWeight: "bold",
44
+ children: children
45
+ })
46
+ ]
47
+ })
48
+ })
49
+ });
50
+ };
51
+ const EntryStatusTrigger = ({ action, status, hasErrors, requiredStage, entryStage })=>{
52
+ const { formatMessage } = reactIntl.useIntl();
53
+ if (action === 'publish') {
54
+ if (hasErrors || requiredStage && requiredStage.id !== entryStage?.id) {
55
+ return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
56
+ icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CrossCircle, {}),
57
+ color: "danger600",
58
+ children: formatMessage({
59
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.not-ready',
60
+ defaultMessage: 'Not ready to publish'
61
+ })
62
+ });
63
+ }
64
+ if (status === 'draft') {
65
+ return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
66
+ icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {}),
67
+ color: "success600",
68
+ children: formatMessage({
69
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish',
70
+ defaultMessage: 'Ready to publish'
71
+ })
72
+ });
73
+ }
74
+ if (status === 'modified') {
75
+ return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
76
+ icon: /*#__PURE__*/ jsxRuntime.jsx(icons.ArrowsCounterClockwise, {}),
77
+ color: "alternative600",
78
+ children: formatMessage({
79
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.modified',
80
+ defaultMessage: 'Ready to publish changes'
81
+ })
82
+ });
83
+ }
84
+ return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
85
+ icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {}),
86
+ color: "success600",
87
+ children: formatMessage({
88
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.already-published',
89
+ defaultMessage: 'Already published'
90
+ })
91
+ });
92
+ }
93
+ if (status === 'published') {
94
+ return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
95
+ icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {}),
96
+ color: "success600",
97
+ children: formatMessage({
98
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish',
99
+ defaultMessage: 'Ready to unpublish'
100
+ })
101
+ });
102
+ }
103
+ return /*#__PURE__*/ jsxRuntime.jsx(CustomStatusButton, {
104
+ icon: /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {}),
105
+ color: "success600",
106
+ children: formatMessage({
107
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.already-unpublished',
108
+ defaultMessage: 'Already unpublished'
109
+ })
110
+ });
111
+ };
112
+ const FieldsValidation = ({ hasErrors, errors, kind, contentTypeUid, documentId, locale })=>{
113
+ const { formatMessage } = reactIntl.useIntl();
114
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
115
+ direction: "column",
116
+ gap: 1,
117
+ width: "100%",
118
+ padding: 5,
119
+ children: [
120
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
121
+ gap: 2,
122
+ width: "100%",
123
+ children: [
124
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
125
+ fontWeight: "bold",
126
+ children: formatMessage({
127
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.fields',
128
+ defaultMessage: 'Fields'
129
+ })
130
+ }),
131
+ hasErrors ? /*#__PURE__*/ jsxRuntime.jsx(icons.CrossCircle, {
132
+ fill: "danger600"
133
+ }) : /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {
134
+ fill: "success600"
135
+ })
136
+ ]
137
+ }),
138
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
139
+ width: "100%",
140
+ textColor: "neutral600",
141
+ children: hasErrors ? formatMessage({
142
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.error',
143
+ defaultMessage: '{errors} errors on fields.'
144
+ }, {
145
+ errors: errors ? Object.keys(errors).length : 0
146
+ }) : formatMessage({
147
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.success',
148
+ defaultMessage: 'All fields are filled correctly.'
149
+ })
150
+ }),
151
+ hasErrors && /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
152
+ tag: reactRouterDom.Link,
153
+ to: {
154
+ pathname: `/content-manager/${kind === 'collectionType' ? 'collection-types' : 'single-types'}/${contentTypeUid}/${documentId}`,
155
+ search: locale ? qs.stringify({
156
+ plugins: {
157
+ i18n: {
158
+ locale
159
+ }
160
+ }
161
+ }) : ''
162
+ },
163
+ variant: "secondary",
164
+ fullWidth: true,
165
+ state: {
166
+ forceValidation: true
167
+ },
168
+ children: formatMessage({
169
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.see-errors',
170
+ defaultMessage: 'See errors'
171
+ })
172
+ })
173
+ ]
174
+ });
175
+ };
176
+ const getReviewStageIcon = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage })=>{
177
+ if (!contentTypeHasReviewWorkflow) {
178
+ return /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {
179
+ fill: "neutral200"
180
+ });
181
+ }
182
+ if (requiredStage && requiredStage.id !== entryStage?.id) {
183
+ return /*#__PURE__*/ jsxRuntime.jsx(icons.CrossCircle, {
184
+ fill: "danger600"
185
+ });
186
+ }
187
+ return /*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {
188
+ fill: "success600"
189
+ });
190
+ };
191
+ const getReviewStageMessage = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage, formatMessage })=>{
192
+ if (!contentTypeHasReviewWorkflow) {
193
+ return formatMessage({
194
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-enabled',
195
+ defaultMessage: 'This entry is not associated to any workflow.'
196
+ });
197
+ }
198
+ if (requiredStage && requiredStage.id !== entryStage?.id) {
199
+ return formatMessage({
200
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-ready',
201
+ defaultMessage: 'This entry is not at the required stage for publishing. ({stageName})'
202
+ }, {
203
+ stageName: requiredStage?.name ?? ''
204
+ });
205
+ }
206
+ if (requiredStage && requiredStage.id === entryStage?.id) {
207
+ return formatMessage({
208
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.ready',
209
+ defaultMessage: 'This entry is at the required stage for publishing. ({stageName})'
210
+ }, {
211
+ stageName: requiredStage?.name ?? ''
212
+ });
213
+ }
214
+ return formatMessage({
215
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.stage-not-required',
216
+ defaultMessage: 'No required stage for publication'
217
+ });
218
+ };
219
+ const ReviewStageValidation = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage })=>{
220
+ const { formatMessage } = reactIntl.useIntl();
221
+ const Icon = getReviewStageIcon({
222
+ contentTypeHasReviewWorkflow,
223
+ requiredStage,
224
+ entryStage
225
+ });
226
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
227
+ direction: "column",
228
+ gap: 1,
229
+ width: "100%",
230
+ padding: 5,
231
+ children: [
232
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
233
+ gap: 2,
234
+ width: "100%",
235
+ children: [
236
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
237
+ fontWeight: "bold",
238
+ children: formatMessage({
239
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage',
240
+ defaultMessage: 'Review stage'
241
+ })
242
+ }),
243
+ Icon
244
+ ]
245
+ }),
246
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
247
+ textColor: "neutral600",
248
+ children: getReviewStageMessage({
249
+ contentTypeHasReviewWorkflow,
250
+ requiredStage,
251
+ entryStage,
252
+ formatMessage
253
+ })
254
+ })
255
+ ]
256
+ });
257
+ };
258
+ const EntryValidationPopover = ({ schema, entry, status, action })=>{
259
+ const { validate, isLoading } = strapiAdmin.unstable_useDocument({
260
+ collectionType: schema?.kind ?? '',
261
+ model: schema?.uid ?? ''
262
+ }, {
263
+ // useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request
264
+ skip: true
265
+ });
266
+ // Validation errors
267
+ const errors = isLoading ? null : validate(entry);
268
+ const hasErrors = errors ? Object.keys(errors).length > 0 : false;
269
+ // Entry stage
270
+ const contentTypeHasReviewWorkflow = schema?.hasReviewWorkflow ?? false;
271
+ const requiredStage = schema?.stageRequiredToPublish;
272
+ const entryStage = entry.strapi_stage;
273
+ if (isLoading) {
274
+ return null;
275
+ }
276
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Popover.Root, {
277
+ children: [
278
+ /*#__PURE__*/ jsxRuntime.jsx(EntryStatusTrigger, {
279
+ action: action,
280
+ status: status,
281
+ hasErrors: hasErrors,
282
+ requiredStage: requiredStage,
283
+ entryStage: entryStage
284
+ }),
285
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Content, {
286
+ children: /*#__PURE__*/ jsxRuntime.jsxs(StyledPopoverFlex, {
287
+ direction: "column",
288
+ children: [
289
+ /*#__PURE__*/ jsxRuntime.jsx(FieldsValidation, {
290
+ hasErrors: hasErrors,
291
+ errors: errors,
292
+ contentTypeUid: schema?.uid,
293
+ kind: schema?.kind,
294
+ documentId: entry.documentId,
295
+ locale: entry.locale
296
+ }),
297
+ /*#__PURE__*/ jsxRuntime.jsx(ReviewStageValidation, {
298
+ contentTypeHasReviewWorkflow: contentTypeHasReviewWorkflow,
299
+ requiredStage: requiredStage,
300
+ entryStage: entryStage
301
+ })
302
+ ]
303
+ })
304
+ })
305
+ ]
306
+ });
307
+ };
308
+
309
+ exports.EntryValidationPopover = EntryValidationPopover;
310
+ //# sourceMappingURL=EntryValidationPopover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntryValidationPopover.js","sources":["../../../admin/src/components/EntryValidationPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { FormErrors, FormValues } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport { Button, LinkButton, Flex, Typography, Popover } from '@strapi/design-system';\nimport { CheckCircle, CrossCircle, ArrowsCounterClockwise, CaretDown } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl, MessageDescriptor } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport type {\n ReleaseAction,\n ReleaseActionEntry,\n Stage,\n} from '../../../shared/contracts/release-actions';\nimport type { Struct } from '@strapi/types';\n\nconst StyledPopoverFlex = styled(Flex)`\n width: 100%;\n max-width: 256px;\n\n & > * {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n\n & > *:last-child {\n border-bottom: none;\n }\n`;\n\nconst ButtonContent = styled(Flex)`\n svg {\n fill: currentColor;\n }\n`;\n\nconst CustomStatusButton = ({\n children,\n icon,\n color,\n}: {\n icon: React.ReactElement;\n color: string;\n} & React.PropsWithChildren) => {\n return (\n <Popover.Trigger>\n <Button variant=\"ghost\" endIcon={<CaretDown />}>\n <ButtonContent color={color} gap={2}>\n {icon}\n <Typography textColor={color} variant=\"omega\" fontWeight=\"bold\">\n {children}\n </Typography>\n </ButtonContent>\n </Button>\n </Popover.Trigger>\n );\n};\n\ninterface EntryValidationPopoverProps {\n action: ReleaseAction['type'];\n schema?: Struct.ContentTypeSchema & {\n hasReviewWorkflow: boolean;\n stageRequiredToPublish?: Stage;\n };\n entry: ReleaseActionEntry;\n status: ReleaseAction['status'];\n}\n\ninterface ValidationStatusProps {\n action: ReleaseAction['type'];\n status: ReleaseAction['status'];\n hasErrors: boolean | null;\n requiredStage?: Stage;\n entryStage?: Stage;\n}\n\nconst EntryStatusTrigger = ({\n action,\n status,\n hasErrors,\n requiredStage,\n entryStage,\n}: ValidationStatusProps) => {\n const { formatMessage } = useIntl();\n\n if (action === 'publish') {\n if (hasErrors || (requiredStage && requiredStage.id !== entryStage?.id)) {\n return (\n <CustomStatusButton icon={<CrossCircle />} color=\"danger600\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.not-ready',\n defaultMessage: 'Not ready to publish',\n })}\n </CustomStatusButton>\n );\n }\n\n if (status === 'draft') {\n return (\n <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </CustomStatusButton>\n );\n }\n\n if (status === 'modified') {\n return (\n <CustomStatusButton icon={<ArrowsCounterClockwise />} color=\"alternative600\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n </CustomStatusButton>\n );\n }\n\n return (\n <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.already-published',\n defaultMessage: 'Already published',\n })}\n </CustomStatusButton>\n );\n }\n\n if (status === 'published') {\n return (\n <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish',\n defaultMessage: 'Ready to unpublish',\n })}\n </CustomStatusButton>\n );\n }\n\n return (\n <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.already-unpublished',\n defaultMessage: 'Already unpublished',\n })}\n </CustomStatusButton>\n );\n};\n\ninterface FieldsValidationProps {\n hasErrors: boolean;\n errors: FormErrors<FormValues> | null;\n kind?: string;\n contentTypeUid?: string;\n documentId?: string;\n locale?: string;\n}\n\nconst FieldsValidation = ({\n hasErrors,\n errors,\n kind,\n contentTypeUid,\n documentId,\n locale,\n}: FieldsValidationProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\n <Flex gap={2} width=\"100%\">\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields',\n defaultMessage: 'Fields',\n })}\n </Typography>\n {hasErrors ? <CrossCircle fill=\"danger600\" /> : <CheckCircle fill=\"success600\" />}\n </Flex>\n <Typography width=\"100%\" textColor=\"neutral600\">\n {hasErrors\n ? formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.error',\n defaultMessage: '{errors} errors on fields.',\n },\n { errors: errors ? Object.keys(errors).length : 0 }\n )\n : formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.success',\n defaultMessage: 'All fields are filled correctly.',\n })}\n </Typography>\n {hasErrors && (\n <LinkButton\n tag={Link}\n to={{\n pathname: `/content-manager/${kind === 'collectionType' ? 'collection-types' : 'single-types'}/${contentTypeUid}/${documentId}`,\n search: locale\n ? stringify({\n plugins: {\n i18n: {\n locale,\n },\n },\n })\n : '',\n }}\n variant=\"secondary\"\n fullWidth\n state={{ forceValidation: true }}\n >\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.see-errors',\n defaultMessage: 'See errors',\n })}\n </LinkButton>\n )}\n </Flex>\n );\n};\n\nconst getReviewStageIcon = ({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n}: {\n contentTypeHasReviewWorkflow: boolean;\n requiredStage?: Stage;\n entryStage?: Stage;\n}) => {\n if (!contentTypeHasReviewWorkflow) {\n return <CheckCircle fill=\"neutral200\" />;\n }\n if (requiredStage && requiredStage.id !== entryStage?.id) {\n return <CrossCircle fill=\"danger600\" />;\n }\n return <CheckCircle fill=\"success600\" />;\n};\n\nconst getReviewStageMessage = ({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n formatMessage,\n}: {\n contentTypeHasReviewWorkflow: boolean;\n requiredStage?: Stage;\n entryStage?: Stage;\n formatMessage: (messageDescriptor: MessageDescriptor, values?: Record<string, string>) => string;\n}) => {\n if (!contentTypeHasReviewWorkflow) {\n return formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-enabled',\n defaultMessage: 'This entry is not associated to any workflow.',\n });\n }\n\n if (requiredStage && requiredStage.id !== entryStage?.id) {\n return formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-ready',\n defaultMessage: 'This entry is not at the required stage for publishing. ({stageName})',\n },\n {\n stageName: requiredStage?.name ?? '',\n }\n );\n }\n\n if (requiredStage && requiredStage.id === entryStage?.id) {\n return formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.ready',\n defaultMessage: 'This entry is at the required stage for publishing. ({stageName})',\n },\n {\n stageName: requiredStage?.name ?? '',\n }\n );\n }\n\n return formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.stage-not-required',\n defaultMessage: 'No required stage for publication',\n });\n};\n\nconst ReviewStageValidation = ({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n}: {\n contentTypeHasReviewWorkflow: boolean;\n requiredStage?: Stage;\n entryStage?: Stage;\n}) => {\n const { formatMessage } = useIntl();\n\n const Icon = getReviewStageIcon({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n });\n\n return (\n <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\n <Flex gap={2} width=\"100%\">\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage',\n defaultMessage: 'Review stage',\n })}\n </Typography>\n {Icon}\n </Flex>\n <Typography textColor=\"neutral600\">\n {getReviewStageMessage({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n formatMessage,\n })}\n </Typography>\n </Flex>\n );\n};\n\nexport const EntryValidationPopover = ({\n schema,\n entry,\n status,\n action,\n}: EntryValidationPopoverProps) => {\n const { validate, isLoading } = unstable_useDocument(\n {\n collectionType: schema?.kind ?? '',\n model: schema?.uid ?? '',\n },\n {\n // useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request\n skip: true,\n }\n );\n\n // Validation errors\n const errors = isLoading ? null : validate(entry);\n const hasErrors = errors ? Object.keys(errors).length > 0 : false;\n\n // Entry stage\n const contentTypeHasReviewWorkflow = schema?.hasReviewWorkflow ?? false;\n const requiredStage = schema?.stageRequiredToPublish;\n const entryStage = entry.strapi_stage;\n\n if (isLoading) {\n return null;\n }\n\n return (\n <Popover.Root>\n <EntryStatusTrigger\n action={action}\n status={status}\n hasErrors={hasErrors}\n requiredStage={requiredStage}\n entryStage={entryStage}\n />\n <Popover.Content>\n <StyledPopoverFlex direction=\"column\">\n <FieldsValidation\n hasErrors={hasErrors}\n errors={errors}\n contentTypeUid={schema?.uid}\n kind={schema?.kind}\n documentId={entry.documentId}\n locale={entry.locale}\n />\n <ReviewStageValidation\n contentTypeHasReviewWorkflow={contentTypeHasReviewWorkflow}\n requiredStage={requiredStage}\n entryStage={entryStage}\n />\n </StyledPopoverFlex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n"],"names":["StyledPopoverFlex","styled","Flex","theme","colors","neutral150","ButtonContent","CustomStatusButton","children","icon","color","_jsx","Popover","Trigger","Button","variant","endIcon","CaretDown","_jsxs","gap","Typography","textColor","fontWeight","EntryStatusTrigger","action","status","hasErrors","requiredStage","entryStage","formatMessage","useIntl","id","CrossCircle","defaultMessage","CheckCircle","ArrowsCounterClockwise","FieldsValidation","errors","kind","contentTypeUid","documentId","locale","direction","width","padding","fill","Object","keys","length","LinkButton","tag","Link","to","pathname","search","stringify","plugins","i18n","fullWidth","state","forceValidation","getReviewStageIcon","contentTypeHasReviewWorkflow","getReviewStageMessage","stageName","name","ReviewStageValidation","Icon","EntryValidationPopover","schema","entry","validate","isLoading","unstable_useDocument","collectionType","model","uid","skip","hasReviewWorkflow","stageRequiredToPublish","strapi_stage","Root","Content"],"mappings":"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"}
@@ -0,0 +1,308 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import 'react';
3
+ import { unstable_useDocument } from '@strapi/content-manager/strapi-admin';
4
+ import { Flex, Popover, Typography, LinkButton, Button } from '@strapi/design-system';
5
+ import { CrossCircle, CheckCircle, ArrowsCounterClockwise, CaretDown } from '@strapi/icons';
6
+ import { stringify } from 'qs';
7
+ import { useIntl } from 'react-intl';
8
+ import { Link } from 'react-router-dom';
9
+ import { styled } from 'styled-components';
10
+
11
+ const StyledPopoverFlex = styled(Flex)`
12
+ width: 100%;
13
+ max-width: 256px;
14
+
15
+ & > * {
16
+ border-bottom: 1px solid ${({ theme })=>theme.colors.neutral150};
17
+ }
18
+
19
+ & > *:last-child {
20
+ border-bottom: none;
21
+ }
22
+ `;
23
+ const ButtonContent = styled(Flex)`
24
+ svg {
25
+ fill: currentColor;
26
+ }
27
+ `;
28
+ const CustomStatusButton = ({ children, icon, color })=>{
29
+ return /*#__PURE__*/ jsx(Popover.Trigger, {
30
+ children: /*#__PURE__*/ jsx(Button, {
31
+ variant: "ghost",
32
+ endIcon: /*#__PURE__*/ jsx(CaretDown, {}),
33
+ children: /*#__PURE__*/ jsxs(ButtonContent, {
34
+ color: color,
35
+ gap: 2,
36
+ children: [
37
+ icon,
38
+ /*#__PURE__*/ jsx(Typography, {
39
+ textColor: color,
40
+ variant: "omega",
41
+ fontWeight: "bold",
42
+ children: children
43
+ })
44
+ ]
45
+ })
46
+ })
47
+ });
48
+ };
49
+ const EntryStatusTrigger = ({ action, status, hasErrors, requiredStage, entryStage })=>{
50
+ const { formatMessage } = useIntl();
51
+ if (action === 'publish') {
52
+ if (hasErrors || requiredStage && requiredStage.id !== entryStage?.id) {
53
+ return /*#__PURE__*/ jsx(CustomStatusButton, {
54
+ icon: /*#__PURE__*/ jsx(CrossCircle, {}),
55
+ color: "danger600",
56
+ children: formatMessage({
57
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.not-ready',
58
+ defaultMessage: 'Not ready to publish'
59
+ })
60
+ });
61
+ }
62
+ if (status === 'draft') {
63
+ return /*#__PURE__*/ jsx(CustomStatusButton, {
64
+ icon: /*#__PURE__*/ jsx(CheckCircle, {}),
65
+ color: "success600",
66
+ children: formatMessage({
67
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish',
68
+ defaultMessage: 'Ready to publish'
69
+ })
70
+ });
71
+ }
72
+ if (status === 'modified') {
73
+ return /*#__PURE__*/ jsx(CustomStatusButton, {
74
+ icon: /*#__PURE__*/ jsx(ArrowsCounterClockwise, {}),
75
+ color: "alternative600",
76
+ children: formatMessage({
77
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.modified',
78
+ defaultMessage: 'Ready to publish changes'
79
+ })
80
+ });
81
+ }
82
+ return /*#__PURE__*/ jsx(CustomStatusButton, {
83
+ icon: /*#__PURE__*/ jsx(CheckCircle, {}),
84
+ color: "success600",
85
+ children: formatMessage({
86
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.already-published',
87
+ defaultMessage: 'Already published'
88
+ })
89
+ });
90
+ }
91
+ if (status === 'published') {
92
+ return /*#__PURE__*/ jsx(CustomStatusButton, {
93
+ icon: /*#__PURE__*/ jsx(CheckCircle, {}),
94
+ color: "success600",
95
+ children: formatMessage({
96
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish',
97
+ defaultMessage: 'Ready to unpublish'
98
+ })
99
+ });
100
+ }
101
+ return /*#__PURE__*/ jsx(CustomStatusButton, {
102
+ icon: /*#__PURE__*/ jsx(CheckCircle, {}),
103
+ color: "success600",
104
+ children: formatMessage({
105
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.already-unpublished',
106
+ defaultMessage: 'Already unpublished'
107
+ })
108
+ });
109
+ };
110
+ const FieldsValidation = ({ hasErrors, errors, kind, contentTypeUid, documentId, locale })=>{
111
+ const { formatMessage } = useIntl();
112
+ return /*#__PURE__*/ jsxs(Flex, {
113
+ direction: "column",
114
+ gap: 1,
115
+ width: "100%",
116
+ padding: 5,
117
+ children: [
118
+ /*#__PURE__*/ jsxs(Flex, {
119
+ gap: 2,
120
+ width: "100%",
121
+ children: [
122
+ /*#__PURE__*/ jsx(Typography, {
123
+ fontWeight: "bold",
124
+ children: formatMessage({
125
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.fields',
126
+ defaultMessage: 'Fields'
127
+ })
128
+ }),
129
+ hasErrors ? /*#__PURE__*/ jsx(CrossCircle, {
130
+ fill: "danger600"
131
+ }) : /*#__PURE__*/ jsx(CheckCircle, {
132
+ fill: "success600"
133
+ })
134
+ ]
135
+ }),
136
+ /*#__PURE__*/ jsx(Typography, {
137
+ width: "100%",
138
+ textColor: "neutral600",
139
+ children: hasErrors ? formatMessage({
140
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.error',
141
+ defaultMessage: '{errors} errors on fields.'
142
+ }, {
143
+ errors: errors ? Object.keys(errors).length : 0
144
+ }) : formatMessage({
145
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.success',
146
+ defaultMessage: 'All fields are filled correctly.'
147
+ })
148
+ }),
149
+ hasErrors && /*#__PURE__*/ jsx(LinkButton, {
150
+ tag: Link,
151
+ to: {
152
+ pathname: `/content-manager/${kind === 'collectionType' ? 'collection-types' : 'single-types'}/${contentTypeUid}/${documentId}`,
153
+ search: locale ? stringify({
154
+ plugins: {
155
+ i18n: {
156
+ locale
157
+ }
158
+ }
159
+ }) : ''
160
+ },
161
+ variant: "secondary",
162
+ fullWidth: true,
163
+ state: {
164
+ forceValidation: true
165
+ },
166
+ children: formatMessage({
167
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.see-errors',
168
+ defaultMessage: 'See errors'
169
+ })
170
+ })
171
+ ]
172
+ });
173
+ };
174
+ const getReviewStageIcon = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage })=>{
175
+ if (!contentTypeHasReviewWorkflow) {
176
+ return /*#__PURE__*/ jsx(CheckCircle, {
177
+ fill: "neutral200"
178
+ });
179
+ }
180
+ if (requiredStage && requiredStage.id !== entryStage?.id) {
181
+ return /*#__PURE__*/ jsx(CrossCircle, {
182
+ fill: "danger600"
183
+ });
184
+ }
185
+ return /*#__PURE__*/ jsx(CheckCircle, {
186
+ fill: "success600"
187
+ });
188
+ };
189
+ const getReviewStageMessage = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage, formatMessage })=>{
190
+ if (!contentTypeHasReviewWorkflow) {
191
+ return formatMessage({
192
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-enabled',
193
+ defaultMessage: 'This entry is not associated to any workflow.'
194
+ });
195
+ }
196
+ if (requiredStage && requiredStage.id !== entryStage?.id) {
197
+ return formatMessage({
198
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-ready',
199
+ defaultMessage: 'This entry is not at the required stage for publishing. ({stageName})'
200
+ }, {
201
+ stageName: requiredStage?.name ?? ''
202
+ });
203
+ }
204
+ if (requiredStage && requiredStage.id === entryStage?.id) {
205
+ return formatMessage({
206
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.ready',
207
+ defaultMessage: 'This entry is at the required stage for publishing. ({stageName})'
208
+ }, {
209
+ stageName: requiredStage?.name ?? ''
210
+ });
211
+ }
212
+ return formatMessage({
213
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.stage-not-required',
214
+ defaultMessage: 'No required stage for publication'
215
+ });
216
+ };
217
+ const ReviewStageValidation = ({ contentTypeHasReviewWorkflow, requiredStage, entryStage })=>{
218
+ const { formatMessage } = useIntl();
219
+ const Icon = getReviewStageIcon({
220
+ contentTypeHasReviewWorkflow,
221
+ requiredStage,
222
+ entryStage
223
+ });
224
+ return /*#__PURE__*/ jsxs(Flex, {
225
+ direction: "column",
226
+ gap: 1,
227
+ width: "100%",
228
+ padding: 5,
229
+ children: [
230
+ /*#__PURE__*/ jsxs(Flex, {
231
+ gap: 2,
232
+ width: "100%",
233
+ children: [
234
+ /*#__PURE__*/ jsx(Typography, {
235
+ fontWeight: "bold",
236
+ children: formatMessage({
237
+ id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage',
238
+ defaultMessage: 'Review stage'
239
+ })
240
+ }),
241
+ Icon
242
+ ]
243
+ }),
244
+ /*#__PURE__*/ jsx(Typography, {
245
+ textColor: "neutral600",
246
+ children: getReviewStageMessage({
247
+ contentTypeHasReviewWorkflow,
248
+ requiredStage,
249
+ entryStage,
250
+ formatMessage
251
+ })
252
+ })
253
+ ]
254
+ });
255
+ };
256
+ const EntryValidationPopover = ({ schema, entry, status, action })=>{
257
+ const { validate, isLoading } = unstable_useDocument({
258
+ collectionType: schema?.kind ?? '',
259
+ model: schema?.uid ?? ''
260
+ }, {
261
+ // useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request
262
+ skip: true
263
+ });
264
+ // Validation errors
265
+ const errors = isLoading ? null : validate(entry);
266
+ const hasErrors = errors ? Object.keys(errors).length > 0 : false;
267
+ // Entry stage
268
+ const contentTypeHasReviewWorkflow = schema?.hasReviewWorkflow ?? false;
269
+ const requiredStage = schema?.stageRequiredToPublish;
270
+ const entryStage = entry.strapi_stage;
271
+ if (isLoading) {
272
+ return null;
273
+ }
274
+ return /*#__PURE__*/ jsxs(Popover.Root, {
275
+ children: [
276
+ /*#__PURE__*/ jsx(EntryStatusTrigger, {
277
+ action: action,
278
+ status: status,
279
+ hasErrors: hasErrors,
280
+ requiredStage: requiredStage,
281
+ entryStage: entryStage
282
+ }),
283
+ /*#__PURE__*/ jsx(Popover.Content, {
284
+ children: /*#__PURE__*/ jsxs(StyledPopoverFlex, {
285
+ direction: "column",
286
+ children: [
287
+ /*#__PURE__*/ jsx(FieldsValidation, {
288
+ hasErrors: hasErrors,
289
+ errors: errors,
290
+ contentTypeUid: schema?.uid,
291
+ kind: schema?.kind,
292
+ documentId: entry.documentId,
293
+ locale: entry.locale
294
+ }),
295
+ /*#__PURE__*/ jsx(ReviewStageValidation, {
296
+ contentTypeHasReviewWorkflow: contentTypeHasReviewWorkflow,
297
+ requiredStage: requiredStage,
298
+ entryStage: entryStage
299
+ })
300
+ ]
301
+ })
302
+ })
303
+ ]
304
+ });
305
+ };
306
+
307
+ export { EntryValidationPopover };
308
+ //# sourceMappingURL=EntryValidationPopover.mjs.map