@strapi/admin 4.19.0 → 4.19.1

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 (224) hide show
  1. package/dist/_chunks/{AdminSeatInfo-qX2sM70P.js → AdminSeatInfo-3pW16BUI.js} +4 -4
  2. package/dist/_chunks/{AdminSeatInfo-qX2sM70P.js.map → AdminSeatInfo-3pW16BUI.js.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-RawgDWj-.mjs → AdminSeatInfo-4jaGP5uF.mjs} +4 -4
  4. package/dist/_chunks/{AdminSeatInfo-RawgDWj-.mjs.map → AdminSeatInfo-4jaGP5uF.mjs.map} +1 -1
  5. package/dist/_chunks/{AuthenticatedApp-NOp7zFwi.mjs → AuthenticatedApp-OOcwZ20K.mjs} +21 -21
  6. package/dist/_chunks/{AuthenticatedApp-NOp7zFwi.mjs.map → AuthenticatedApp-OOcwZ20K.mjs.map} +1 -1
  7. package/dist/_chunks/{AuthenticatedApp-Vz4hNfIH.js → AuthenticatedApp-_KGmPDjE.js} +21 -21
  8. package/dist/_chunks/{AuthenticatedApp-Vz4hNfIH.js.map → AuthenticatedApp-_KGmPDjE.js.map} +1 -1
  9. package/dist/_chunks/{CreateActionEE-75bc0oef.js → CreateActionEE-64QW6bR-.js} +3 -3
  10. package/dist/_chunks/{CreateActionEE-75bc0oef.js.map → CreateActionEE-64QW6bR-.js.map} +1 -1
  11. package/dist/_chunks/{CreateActionEE-wZ329zt5.mjs → CreateActionEE-rrM1YiMQ.mjs} +3 -3
  12. package/dist/_chunks/{CreateActionEE-wZ329zt5.mjs.map → CreateActionEE-rrM1YiMQ.mjs.map} +1 -1
  13. package/dist/_chunks/{CreatePage-v5EbopPP.js → CreatePage-3qIqLFap.js} +9 -9
  14. package/dist/_chunks/{CreatePage-v5EbopPP.js.map → CreatePage-3qIqLFap.js.map} +1 -1
  15. package/dist/_chunks/{CreatePage-mkf7nRXj.js → CreatePage-DxDlEWAb.js} +6 -6
  16. package/dist/_chunks/{CreatePage-mkf7nRXj.js.map → CreatePage-DxDlEWAb.js.map} +1 -1
  17. package/dist/_chunks/{CreatePage-XDNrGyIA.mjs → CreatePage-P2b0bih-.mjs} +6 -6
  18. package/dist/_chunks/{CreatePage-XDNrGyIA.mjs.map → CreatePage-P2b0bih-.mjs.map} +1 -1
  19. package/dist/_chunks/{CreatePage-beMm-uZ-.mjs → CreatePage-QouT1Un0.mjs} +3 -3
  20. package/dist/_chunks/{CreatePage-beMm-uZ-.mjs.map → CreatePage-QouT1Un0.mjs.map} +1 -1
  21. package/dist/_chunks/{CreatePage-BgcO3AqI.js → CreatePage-mpdYi-qx.js} +3 -3
  22. package/dist/_chunks/{CreatePage-BgcO3AqI.js.map → CreatePage-mpdYi-qx.js.map} +1 -1
  23. package/dist/_chunks/{CreatePage-QH1DLZW_.mjs → CreatePage-zr0KxeR0.mjs} +9 -9
  24. package/dist/_chunks/{CreatePage-QH1DLZW_.mjs.map → CreatePage-zr0KxeR0.mjs.map} +1 -1
  25. package/dist/_chunks/{CreateView-Ixck31v9.mjs → CreateView-d6LuxjaY.mjs} +6 -6
  26. package/dist/_chunks/{CreateView-Ixck31v9.mjs.map → CreateView-d6LuxjaY.mjs.map} +1 -1
  27. package/dist/_chunks/{CreateView-eUzBn2dW.js → CreateView-l7nt52UO.js} +6 -6
  28. package/dist/_chunks/{CreateView-eUzBn2dW.js.map → CreateView-l7nt52UO.js.map} +1 -1
  29. package/dist/_chunks/{CreateView-Vu-6BJ7s.mjs → CreateView-qosv6y7y.mjs} +6 -6
  30. package/dist/_chunks/{CreateView-Vu-6BJ7s.mjs.map → CreateView-qosv6y7y.mjs.map} +1 -1
  31. package/dist/_chunks/{CreateView-zBya6KTw.js → CreateView-xzbb4nEi.js} +6 -6
  32. package/dist/_chunks/{CreateView-zBya6KTw.js.map → CreateView-xzbb4nEi.js.map} +1 -1
  33. package/dist/_chunks/{EditPage-HXrULs9d.mjs → EditPage-C9sLNQH8.mjs} +12 -8
  34. package/dist/_chunks/EditPage-C9sLNQH8.mjs.map +1 -0
  35. package/dist/_chunks/{EditPage-J6Rf9oKf.mjs → EditPage-HRiJwAZB.mjs} +4 -4
  36. package/dist/_chunks/{EditPage-J6Rf9oKf.mjs.map → EditPage-HRiJwAZB.mjs.map} +1 -1
  37. package/dist/_chunks/{EditPage-ztZL8xrI.mjs → EditPage-L2y_PJ4r.mjs} +10 -10
  38. package/dist/_chunks/{EditPage-ztZL8xrI.mjs.map → EditPage-L2y_PJ4r.mjs.map} +1 -1
  39. package/dist/_chunks/{EditPage-GDphIluA.js → EditPage-bZlMjB6A.js} +4 -4
  40. package/dist/_chunks/{EditPage-GDphIluA.js.map → EditPage-bZlMjB6A.js.map} +1 -1
  41. package/dist/_chunks/{EditPage-getxBx6Z.js → EditPage-ddwlh5ln.js} +10 -10
  42. package/dist/_chunks/{EditPage-getxBx6Z.js.map → EditPage-ddwlh5ln.js.map} +1 -1
  43. package/dist/_chunks/{EditPage-lWoNefEi.mjs → EditPage-mCH3IDT4.mjs} +6 -6
  44. package/dist/_chunks/{EditPage-lWoNefEi.mjs.map → EditPage-mCH3IDT4.mjs.map} +1 -1
  45. package/dist/_chunks/{EditPage-buPVDS8T.js → EditPage-pDaXcwr2.js} +12 -9
  46. package/dist/_chunks/EditPage-pDaXcwr2.js.map +1 -0
  47. package/dist/_chunks/{EditPage-ZjUUKii7.js → EditPage-w4dwqlZh.js} +6 -6
  48. package/dist/_chunks/{EditPage-ZjUUKii7.js.map → EditPage-w4dwqlZh.js.map} +1 -1
  49. package/dist/_chunks/{EditView-GLiFYAUa.js → EditView-ItMzYqdS.js} +4 -4
  50. package/dist/_chunks/{EditView-GLiFYAUa.js.map → EditView-ItMzYqdS.js.map} +1 -1
  51. package/dist/_chunks/{EditView-gst3Q76D.mjs → EditView-cWBJXUz7.mjs} +4 -4
  52. package/dist/_chunks/{EditView-gst3Q76D.mjs.map → EditView-cWBJXUz7.mjs.map} +1 -1
  53. package/dist/_chunks/{EditViewPage-MPKkl8pj.js → EditViewPage-LcgWsiF-.js} +4 -4
  54. package/dist/_chunks/{EditViewPage-MPKkl8pj.js.map → EditViewPage-LcgWsiF-.js.map} +1 -1
  55. package/dist/_chunks/{EditViewPage-fv2kuIzu.mjs → EditViewPage-n1MMkiJv.mjs} +4 -4
  56. package/dist/_chunks/{EditViewPage-fv2kuIzu.mjs.map → EditViewPage-n1MMkiJv.mjs.map} +1 -1
  57. package/dist/_chunks/{EventsTable-CV7xm5zl.js → EventsTable-CfFE47U7.js} +6 -6
  58. package/dist/_chunks/{EventsTable-CV7xm5zl.js.map → EventsTable-CfFE47U7.js.map} +1 -1
  59. package/dist/_chunks/{EventsTable-vZK_CTQU.mjs → EventsTable-KCZ9Pb4n.mjs} +6 -6
  60. package/dist/_chunks/{EventsTable-vZK_CTQU.mjs.map → EventsTable-KCZ9Pb4n.mjs.map} +1 -1
  61. package/dist/_chunks/{HomePage-J8ZfepOZ.mjs → HomePage-GUFRYUDo.mjs} +5 -5
  62. package/dist/_chunks/{HomePage-J8ZfepOZ.mjs.map → HomePage-GUFRYUDo.mjs.map} +1 -1
  63. package/dist/_chunks/{HomePage-xgawLbxm.mjs → HomePage-aKSRvReY.mjs} +7 -7
  64. package/dist/_chunks/{HomePage-xgawLbxm.mjs.map → HomePage-aKSRvReY.mjs.map} +1 -1
  65. package/dist/_chunks/{HomePage-xJWXSyMe.js → HomePage-cqeSxd_O.js} +5 -5
  66. package/dist/_chunks/{HomePage-xJWXSyMe.js.map → HomePage-cqeSxd_O.js.map} +1 -1
  67. package/dist/_chunks/{HomePage-18iuexeb.js → HomePage-kPtIRyQz.js} +7 -7
  68. package/dist/_chunks/{HomePage-18iuexeb.js.map → HomePage-kPtIRyQz.js.map} +1 -1
  69. package/dist/_chunks/{InformationBoxEE-rU-_LUTN.mjs → InformationBoxEE-IPW31ejf.mjs} +4 -4
  70. package/dist/_chunks/{InformationBoxEE-rU-_LUTN.mjs.map → InformationBoxEE-IPW31ejf.mjs.map} +1 -1
  71. package/dist/_chunks/{InformationBoxEE-J_ms6Ox-.js → InformationBoxEE-mYmnrztj.js} +4 -4
  72. package/dist/_chunks/{InformationBoxEE-J_ms6Ox-.js.map → InformationBoxEE-mYmnrztj.js.map} +1 -1
  73. package/dist/_chunks/{InstalledPluginsPage-7WqMzI5n.mjs → InstalledPluginsPage-2cTbV33R.mjs} +3 -3
  74. package/dist/_chunks/{InstalledPluginsPage-7WqMzI5n.mjs.map → InstalledPluginsPage-2cTbV33R.mjs.map} +1 -1
  75. package/dist/_chunks/{InstalledPluginsPage-x83hq0Ar.js → InstalledPluginsPage-cUAheVLh.js} +3 -3
  76. package/dist/_chunks/{InstalledPluginsPage-x83hq0Ar.js.map → InstalledPluginsPage-cUAheVLh.js.map} +1 -1
  77. package/dist/_chunks/{Layout-zWj_kIbj.js → Layout-6dPmxIO4.js} +2 -2
  78. package/dist/_chunks/{Layout-zWj_kIbj.js.map → Layout-6dPmxIO4.js.map} +1 -1
  79. package/dist/_chunks/{Layout-PTbeYyQq.mjs → Layout-eB0Hstae.mjs} +2 -2
  80. package/dist/_chunks/{Layout-PTbeYyQq.mjs.map → Layout-eB0Hstae.mjs.map} +1 -1
  81. package/dist/_chunks/{ListPage-tVXsHAt1.mjs → ListPage-8u5VLpym.mjs} +8 -8
  82. package/dist/_chunks/{ListPage-tVXsHAt1.mjs.map → ListPage-8u5VLpym.mjs.map} +1 -1
  83. package/dist/_chunks/{ListPage-rQztZoE3.mjs → ListPage-E6L7u2g3.mjs} +3 -3
  84. package/dist/_chunks/{ListPage-rQztZoE3.mjs.map → ListPage-E6L7u2g3.mjs.map} +1 -1
  85. package/dist/_chunks/{ListPage-x3LRX4sC.js → ListPage-HXbAJz5v.js} +8 -8
  86. package/dist/_chunks/{ListPage-x3LRX4sC.js.map → ListPage-HXbAJz5v.js.map} +1 -1
  87. package/dist/_chunks/{ListPage-imJlOUis.mjs → ListPage-KeKJ2tNP.mjs} +4 -4
  88. package/dist/_chunks/{ListPage-imJlOUis.mjs.map → ListPage-KeKJ2tNP.mjs.map} +1 -1
  89. package/dist/_chunks/{ListPage-Ykm_JxVX.mjs → ListPage-Ns-5NDDI.mjs} +8 -8
  90. package/dist/_chunks/{ListPage-Ykm_JxVX.mjs.map → ListPage-Ns-5NDDI.mjs.map} +1 -1
  91. package/dist/_chunks/{ListPage-yZj3Yt5r.js → ListPage-P_t84wt3.js} +7 -7
  92. package/dist/_chunks/{ListPage-yZj3Yt5r.js.map → ListPage-P_t84wt3.js.map} +1 -1
  93. package/dist/_chunks/{ListPage-5APd7aTc.js → ListPage-R8H7Ngrl.js} +8 -8
  94. package/dist/_chunks/{ListPage-5APd7aTc.js.map → ListPage-R8H7Ngrl.js.map} +1 -1
  95. package/dist/_chunks/{ListPage-WQ27QMWQ.js → ListPage-YBXiLY6m.js} +3 -3
  96. package/dist/_chunks/{ListPage-WQ27QMWQ.js.map → ListPage-YBXiLY6m.js.map} +1 -1
  97. package/dist/_chunks/{ListPage-E1x-qrkF.js → ListPage-gKDK8dXO.js} +4 -4
  98. package/dist/_chunks/{ListPage-E1x-qrkF.js.map → ListPage-gKDK8dXO.js.map} +1 -1
  99. package/dist/_chunks/{ListPage-NSFhbGAZ.mjs → ListPage-lAqdYOW4.mjs} +7 -7
  100. package/dist/_chunks/{ListPage-NSFhbGAZ.mjs.map → ListPage-lAqdYOW4.mjs.map} +1 -1
  101. package/dist/_chunks/{ListPage-_R5YJkq6.mjs → ListPage-rv-tiMI5.mjs} +2 -2
  102. package/dist/_chunks/{ListPage-_R5YJkq6.mjs.map → ListPage-rv-tiMI5.mjs.map} +1 -1
  103. package/dist/_chunks/{ListPage-lG6n0cR5.js → ListPage-w4_W3DGA.js} +2 -2
  104. package/dist/_chunks/{ListPage-lG6n0cR5.js.map → ListPage-w4_W3DGA.js.map} +1 -1
  105. package/dist/_chunks/{ListView-X-jykpTn.js → ListView-3xV18_1L.js} +3 -3
  106. package/dist/_chunks/{ListView-X-jykpTn.js.map → ListView-3xV18_1L.js.map} +1 -1
  107. package/dist/_chunks/{ListView-C4_qI4I-.mjs → ListView-J6uIF3bq.mjs} +3 -3
  108. package/dist/_chunks/{ListView-C4_qI4I-.mjs.map → ListView-J6uIF3bq.mjs.map} +1 -1
  109. package/dist/_chunks/{ListView-3J54TIVz.js → ListView-LSSr9m14.js} +3 -3
  110. package/dist/_chunks/{ListView-3J54TIVz.js.map → ListView-LSSr9m14.js.map} +1 -1
  111. package/dist/_chunks/{ListView-2m4WvFKV.mjs → ListView-U0M-KcCy.mjs} +3 -3
  112. package/dist/_chunks/{ListView-2m4WvFKV.mjs.map → ListView-U0M-KcCy.mjs.map} +1 -1
  113. package/dist/_chunks/{Login-_3hyJ-yA.js → Login-Vr4FnBhc.js} +2 -2
  114. package/dist/_chunks/{Login-_3hyJ-yA.js.map → Login-Vr4FnBhc.js.map} +1 -1
  115. package/dist/_chunks/{Login-j7BE_1eG.mjs → Login-nkiZWDmW.mjs} +2 -2
  116. package/dist/_chunks/{Login-j7BE_1eG.mjs.map → Login-nkiZWDmW.mjs.map} +1 -1
  117. package/dist/_chunks/{MagicLinkEE-Mw3_4xMD.mjs → MagicLinkEE-spIe8hzG.mjs} +4 -4
  118. package/dist/_chunks/{MagicLinkEE-Mw3_4xMD.mjs.map → MagicLinkEE-spIe8hzG.mjs.map} +1 -1
  119. package/dist/_chunks/{MagicLinkEE-RBmakdh1.js → MagicLinkEE-xrfDA1kO.js} +4 -4
  120. package/dist/_chunks/{MagicLinkEE-RBmakdh1.js.map → MagicLinkEE-xrfDA1kO.js.map} +1 -1
  121. package/dist/_chunks/{MarketplacePage--qZW1C_M.js → MarketplacePage-b_VNcY-F.js} +3 -3
  122. package/dist/_chunks/{MarketplacePage--qZW1C_M.js.map → MarketplacePage-b_VNcY-F.js.map} +1 -1
  123. package/dist/_chunks/{MarketplacePage-d_pQoh5h.mjs → MarketplacePage-s3q3AP3I.mjs} +3 -3
  124. package/dist/_chunks/{MarketplacePage-d_pQoh5h.mjs.map → MarketplacePage-s3q3AP3I.mjs.map} +1 -1
  125. package/dist/_chunks/{Permissions-YjqLnqwc.mjs → Permissions-peMqKbT5.mjs} +2 -2
  126. package/dist/_chunks/{Permissions-YjqLnqwc.mjs.map → Permissions-peMqKbT5.mjs.map} +1 -1
  127. package/dist/_chunks/{Permissions-5Idi1hGl.js → Permissions-wIZL6N1O.js} +2 -2
  128. package/dist/_chunks/{Permissions-5Idi1hGl.js.map → Permissions-wIZL6N1O.js.map} +1 -1
  129. package/dist/_chunks/{ProfilePage-Sv3HPL8I.js → ProfilePage-3plHfNlq.js} +3 -3
  130. package/dist/_chunks/{ProfilePage-Sv3HPL8I.js.map → ProfilePage-3plHfNlq.js.map} +1 -1
  131. package/dist/_chunks/{ProfilePage-HEWNqKF6.mjs → ProfilePage-qL4I2aww.mjs} +3 -3
  132. package/dist/_chunks/{ProfilePage-HEWNqKF6.mjs.map → ProfilePage-qL4I2aww.mjs.map} +1 -1
  133. package/dist/_chunks/{ReviewWorkflowsColumn-nO_l9SSd.mjs → ReviewWorkflowsColumn-kbK7yRnx.mjs} +2 -2
  134. package/dist/_chunks/{ReviewWorkflowsColumn-nO_l9SSd.mjs.map → ReviewWorkflowsColumn-kbK7yRnx.mjs.map} +1 -1
  135. package/dist/_chunks/{ReviewWorkflowsColumn-Rs6ZsFMn.js → ReviewWorkflowsColumn-z1r1fj49.js} +2 -2
  136. package/dist/_chunks/{ReviewWorkflowsColumn-Rs6ZsFMn.js.map → ReviewWorkflowsColumn-z1r1fj49.js.map} +1 -1
  137. package/dist/_chunks/{SelectRoles-kY2cQn9t.mjs → SelectRoles-KSuBIUs4.mjs} +3 -3
  138. package/dist/_chunks/{SelectRoles-kY2cQn9t.mjs.map → SelectRoles-KSuBIUs4.mjs.map} +1 -1
  139. package/dist/_chunks/{SelectRoles-KatT_FIg.js → SelectRoles-waaq1SaU.js} +3 -3
  140. package/dist/_chunks/{SelectRoles-KatT_FIg.js.map → SelectRoles-waaq1SaU.js.map} +1 -1
  141. package/dist/_chunks/{SettingsPage-p9I4yN8G.mjs → SettingsPage-GEaBCr73.mjs} +21 -21
  142. package/dist/_chunks/{SettingsPage-p9I4yN8G.mjs.map → SettingsPage-GEaBCr73.mjs.map} +1 -1
  143. package/dist/_chunks/{SettingsPage-ZgiejZbl.js → SettingsPage-sqyzPjHX.js} +21 -21
  144. package/dist/_chunks/{SettingsPage-ZgiejZbl.js.map → SettingsPage-sqyzPjHX.js.map} +1 -1
  145. package/dist/_chunks/{SingleSignOnPage-hPJ-ktE8.mjs → SingleSignOnPage-6cFnvgGj.mjs} +3 -3
  146. package/dist/_chunks/{SingleSignOnPage-hPJ-ktE8.mjs.map → SingleSignOnPage-6cFnvgGj.mjs.map} +1 -1
  147. package/dist/_chunks/{SingleSignOnPage-uwvm37vG.js → SingleSignOnPage-QWPRjbyo.js} +3 -3
  148. package/dist/_chunks/{SingleSignOnPage-uwvm37vG.js.map → SingleSignOnPage-QWPRjbyo.js.map} +1 -1
  149. package/dist/_chunks/{TokenTypeSelect-Zug5LBS9.mjs → TokenTypeSelect-MUt0C4cT.mjs} +2 -2
  150. package/dist/_chunks/{TokenTypeSelect-Zug5LBS9.mjs.map → TokenTypeSelect-MUt0C4cT.mjs.map} +1 -1
  151. package/dist/_chunks/{TokenTypeSelect-g1CejzJb.js → TokenTypeSelect-lClyXQM0.js} +2 -2
  152. package/dist/_chunks/{TokenTypeSelect-g1CejzJb.js.map → TokenTypeSelect-lClyXQM0.js.map} +1 -1
  153. package/dist/_chunks/{apiTokens-mO11QotK.js → apiTokens-2wCnOsPU.js} +2 -2
  154. package/dist/_chunks/{apiTokens-mO11QotK.js.map → apiTokens-2wCnOsPU.js.map} +1 -1
  155. package/dist/_chunks/{apiTokens-3JqiL0FP.mjs → apiTokens-lRmTpFea.mjs} +2 -2
  156. package/dist/_chunks/{apiTokens-3JqiL0FP.mjs.map → apiTokens-lRmTpFea.mjs.map} +1 -1
  157. package/dist/_chunks/{constants-oLogFPZi.mjs → constants-25OlUs9A.mjs} +4 -4
  158. package/dist/_chunks/{constants-oLogFPZi.mjs.map → constants-25OlUs9A.mjs.map} +1 -1
  159. package/dist/_chunks/{constants-cgzxEZpW.js → constants-2xhze4EW.js} +6 -6
  160. package/dist/_chunks/{constants-cgzxEZpW.js.map → constants-2xhze4EW.js.map} +1 -1
  161. package/dist/_chunks/{constants-GJB9U_2a.js → constants-5YB6pnhW.js} +4 -4
  162. package/dist/_chunks/{constants-GJB9U_2a.js.map → constants-5YB6pnhW.js.map} +1 -1
  163. package/dist/_chunks/{constants-HNN5YvZM.mjs → constants-8erDzi8j.mjs} +6 -6
  164. package/dist/_chunks/{constants-HNN5YvZM.mjs.map → constants-8erDzi8j.mjs.map} +1 -1
  165. package/dist/_chunks/{constants-SQ2dZAhr.js → constants-Nt1Jcadb.js} +2 -2
  166. package/dist/_chunks/{constants-SQ2dZAhr.js.map → constants-Nt1Jcadb.js.map} +1 -1
  167. package/dist/_chunks/{constants-ZQGaS2zq.mjs → constants-dj1-_FX7.mjs} +2 -2
  168. package/dist/_chunks/{constants-ZQGaS2zq.mjs.map → constants-dj1-_FX7.mjs.map} +1 -1
  169. package/dist/_chunks/{constants-oJsAomZe.js → constants-eKDRAcnv.js} +2 -2
  170. package/dist/_chunks/{constants-oJsAomZe.js.map → constants-eKDRAcnv.js.map} +1 -1
  171. package/dist/_chunks/{constants-EWIwy2Lb.mjs → constants-jpi45NLl.mjs} +2 -2
  172. package/dist/_chunks/{constants-EWIwy2Lb.mjs.map → constants-jpi45NLl.mjs.map} +1 -1
  173. package/dist/_chunks/{en-NIBEogzH.mjs → en-ZBAy2GQ0.mjs} +7 -1
  174. package/dist/_chunks/{en-NIBEogzH.mjs.map → en-ZBAy2GQ0.mjs.map} +1 -1
  175. package/dist/_chunks/{en-JwrMNR-h.js → en-l5S8Gv-y.js} +7 -1
  176. package/dist/_chunks/{en-JwrMNR-h.js.map → en-l5S8Gv-y.js.map} +1 -1
  177. package/dist/_chunks/{index-3OoQJD2O.js → index-8XZny-tn.js} +112 -16
  178. package/dist/_chunks/index-8XZny-tn.js.map +1 -0
  179. package/dist/_chunks/{index-LblG7sy4.mjs → index-rZLvYBJ8.mjs} +113 -17
  180. package/dist/_chunks/index-rZLvYBJ8.mjs.map +1 -0
  181. package/dist/_chunks/{reviewWorkflows-Q34tLlgw.js → reviewWorkflows-NXiAT8fg.js} +2 -2
  182. package/dist/_chunks/{reviewWorkflows-Q34tLlgw.js.map → reviewWorkflows-NXiAT8fg.js.map} +1 -1
  183. package/dist/_chunks/{reviewWorkflows-VsENEtCZ.mjs → reviewWorkflows-a518rXfQ.mjs} +2 -2
  184. package/dist/_chunks/{reviewWorkflows-VsENEtCZ.mjs.map → reviewWorkflows-a518rXfQ.mjs.map} +1 -1
  185. package/dist/_chunks/{transferTokens-cNXBS34Y.js → transferTokens-TjHZT61v.js} +2 -2
  186. package/dist/_chunks/{transferTokens-cNXBS34Y.js.map → transferTokens-TjHZT61v.js.map} +1 -1
  187. package/dist/_chunks/{transferTokens-liO4cxgc.mjs → transferTokens-XhbjvTBj.mjs} +2 -2
  188. package/dist/_chunks/{transferTokens-liO4cxgc.mjs.map → transferTokens-XhbjvTBj.mjs.map} +1 -1
  189. package/dist/_chunks/{useAdminRoles-3IgPJu3y.js → useAdminRoles-FebQ4QqO.js} +2 -2
  190. package/dist/_chunks/{useAdminRoles-3IgPJu3y.js.map → useAdminRoles-FebQ4QqO.js.map} +1 -1
  191. package/dist/_chunks/{useAdminRoles-vkrNCJ0G.mjs → useAdminRoles-nvYCMtmU.mjs} +2 -2
  192. package/dist/_chunks/{useAdminRoles-vkrNCJ0G.mjs.map → useAdminRoles-nvYCMtmU.mjs.map} +1 -1
  193. package/dist/_chunks/{useContentTypes-yBTP01dT.js → useContentTypes-HdkToX3x.js} +2 -2
  194. package/dist/_chunks/{useContentTypes-yBTP01dT.js.map → useContentTypes-HdkToX3x.js.map} +1 -1
  195. package/dist/_chunks/{useContentTypes-hyaDV7vW.mjs → useContentTypes-g-0ozsjU.mjs} +2 -2
  196. package/dist/_chunks/{useContentTypes-hyaDV7vW.mjs.map → useContentTypes-g-0ozsjU.mjs.map} +1 -1
  197. package/dist/_chunks/{useLicenseLimitNotification-V_EIX5NN.js → useLicenseLimitNotification-HQ51kIXk.js} +2 -2
  198. package/dist/_chunks/{useLicenseLimitNotification-V_EIX5NN.js.map → useLicenseLimitNotification-HQ51kIXk.js.map} +1 -1
  199. package/dist/_chunks/{useLicenseLimitNotification-IGSEKF_A.mjs → useLicenseLimitNotification-I4aO56qe.mjs} +2 -2
  200. package/dist/_chunks/{useLicenseLimitNotification-IGSEKF_A.mjs.map → useLicenseLimitNotification-I4aO56qe.mjs.map} +1 -1
  201. package/dist/_chunks/{useLicenseLimits-Du8knwsR.js → useLicenseLimits-nV_z3fWn.js} +2 -2
  202. package/dist/_chunks/{useLicenseLimits-Du8knwsR.js.map → useLicenseLimits-nV_z3fWn.js.map} +1 -1
  203. package/dist/_chunks/{useLicenseLimits-gAX0JFIu.mjs → useLicenseLimits-rGYOb9DE.mjs} +2 -2
  204. package/dist/_chunks/{useLicenseLimits-gAX0JFIu.mjs.map → useLicenseLimits-rGYOb9DE.mjs.map} +1 -1
  205. package/dist/_chunks/{useReviewWorkflows-_5iMJ_bQ.mjs → useReviewWorkflows-IqmWutoK.mjs} +2 -2
  206. package/dist/_chunks/{useReviewWorkflows-_5iMJ_bQ.mjs.map → useReviewWorkflows-IqmWutoK.mjs.map} +1 -1
  207. package/dist/_chunks/{useReviewWorkflows-8dwtECQ8.js → useReviewWorkflows-gsPEvEHC.js} +2 -2
  208. package/dist/_chunks/{useReviewWorkflows-8dwtECQ8.js.map → useReviewWorkflows-gsPEvEHC.js.map} +1 -1
  209. package/dist/_chunks/{useWebhooks-WLn3OtSg.js → useWebhooks-L5crY_WV.js} +2 -2
  210. package/dist/_chunks/{useWebhooks-WLn3OtSg.js.map → useWebhooks-L5crY_WV.js.map} +1 -1
  211. package/dist/_chunks/{useWebhooks-1cD-Wjh6.mjs → useWebhooks-y9tdiVKX.mjs} +2 -2
  212. package/dist/_chunks/{useWebhooks-1cD-Wjh6.mjs.map → useWebhooks-y9tdiVKX.mjs.map} +1 -1
  213. package/dist/_chunks/{validateWorkflow-_OqTLm6C.js → validateWorkflow-ihdm5BiR.js} +2 -2
  214. package/dist/_chunks/{validateWorkflow-_OqTLm6C.js.map → validateWorkflow-ihdm5BiR.js.map} +1 -1
  215. package/dist/_chunks/{validateWorkflow-aPtygwAZ.mjs → validateWorkflow-wBPkMeR1.mjs} +2 -2
  216. package/dist/_chunks/{validateWorkflow-aPtygwAZ.mjs.map → validateWorkflow-wBPkMeR1.mjs.map} +1 -1
  217. package/dist/admin/index.js +1 -1
  218. package/dist/admin/index.mjs +1 -1
  219. package/dist/admin/src/content-manager/pages/ListView/components/AutoCloneFailureModal.d.ts +12 -0
  220. package/package.json +13 -13
  221. package/dist/_chunks/EditPage-HXrULs9d.mjs.map +0 -1
  222. package/dist/_chunks/EditPage-buPVDS8T.js.map +0 -1
  223. package/dist/_chunks/index-3OoQJD2O.js.map +0 -1
  224. package/dist/_chunks/index-LblG7sy4.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"validateWorkflow-aPtygwAZ.mjs","sources":["../../admin/src/hooks/useInjectReducer.ts","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/actions.ts","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage.tsx","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/reducer.ts","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/selectors.ts","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Stage.tsx","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Stages.tsx","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes.tsx","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/utils/validateWorkflow.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { Reducer } from '@reduxjs/toolkit';\n\nimport { useTypedStore } from '../core/store/hooks';\n\n/**\n * Inject a new reducer into the global redux-store.\n *\n * @export\n * @param {string} namespace - Store namespace of the injected reducer\n * @param {Function} reducer - Reducer function\n * @return void\n */\n\nexport function useInjectReducer(namespace: string, reducer: Reducer) {\n const store = useTypedStore();\n\n useEffect(() => {\n store.injectReducer(namespace, reducer);\n }, [store, namespace, reducer]);\n}\n","import { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\n\nimport { Stage, Workflow } from '../../../../../../../shared/contracts/review-workflows';\nimport { Permission, SanitizedAdminRole } from '../../../../../../../shared/contracts/shared';\n\nimport {\n ACTION_ADD_STAGE,\n ACTION_CLONE_STAGE,\n ACTION_DELETE_STAGE,\n ACTION_RESET_WORKFLOW,\n ACTION_SET_CONTENT_TYPES,\n ACTION_SET_IS_LOADING,\n ACTION_SET_ROLES,\n ACTION_SET_WORKFLOW,\n ACTION_SET_WORKFLOWS,\n ACTION_UPDATE_STAGE,\n ACTION_UPDATE_STAGES,\n ACTION_UPDATE_STAGE_POSITION,\n ACTION_UPDATE_WORKFLOW,\n} from './constants';\n\nexport function cloneStage(id: number) {\n return {\n type: ACTION_CLONE_STAGE,\n payload: { id },\n };\n}\n\nexport function setWorkflow({ workflow }: { workflow: Workflow | null }) {\n return {\n type: ACTION_SET_WORKFLOW,\n payload: workflow,\n };\n}\n\nexport function setWorkflows({ workflows }: { workflows: Workflow[] }) {\n return {\n type: ACTION_SET_WORKFLOWS,\n payload: workflows,\n };\n}\n\nexport function deleteStage(stageId: number) {\n return {\n type: ACTION_DELETE_STAGE,\n payload: {\n stageId,\n },\n };\n}\n\nexport function addStage(stage: Partial<Stage>) {\n return {\n type: ACTION_ADD_STAGE,\n payload: stage,\n };\n}\n\nexport interface PartialStage extends Omit<Stage, 'permissions'> {\n permissions?: Partial<Permission>[];\n}\n\nexport function updateStage(stageId: number, payload: Partial<PartialStage>) {\n return {\n type: ACTION_UPDATE_STAGE,\n payload: {\n stageId,\n ...payload,\n },\n };\n}\n\nexport function updateStages(payload: Partial<PartialStage>) {\n return {\n type: ACTION_UPDATE_STAGES,\n payload,\n };\n}\n\nexport function updateStagePosition(oldIndex: number, newIndex: number) {\n return {\n type: ACTION_UPDATE_STAGE_POSITION,\n payload: {\n newIndex,\n oldIndex,\n },\n };\n}\n\nexport function updateWorkflow(payload: Partial<Workflow>) {\n return {\n type: ACTION_UPDATE_WORKFLOW,\n payload,\n };\n}\n\nexport function resetWorkflow() {\n return {\n type: ACTION_RESET_WORKFLOW,\n };\n}\n\nexport function setContentTypes(payload: {\n collectionTypes?: Contracts.ContentTypes.ContentType[];\n singleTypes?: Contracts.ContentTypes.ContentType[];\n}) {\n return {\n type: ACTION_SET_CONTENT_TYPES,\n payload,\n };\n}\n\nexport function setRoles(payload?: (SanitizedAdminRole & { usersCount?: number | undefined })[]) {\n return {\n type: ACTION_SET_ROLES,\n payload,\n };\n}\n\nexport function setIsLoading(isLoading: boolean) {\n return {\n type: ACTION_SET_IS_LOADING,\n payload: isLoading,\n };\n}\n","import React from 'react';\n\nimport { Box, ButtonProps, Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst StyledAddIcon = styled(PlusCircle)`\n > circle {\n fill: ${({ theme }) => theme.colors.neutral150};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst StyledButton = styled(Box)`\n border-radius: 26px;\n\n svg {\n height: ${({ theme }) => theme.spaces[6]};\n width: ${({ theme }) => theme.spaces[6]};\n\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n\n &:hover {\n color: ${({ theme }) => theme.colors.primary600} !important;\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600} !important;\n }\n\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n\n &:active {\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n`;\n\nexport const AddStage = ({ children, ...props }: ButtonProps) => {\n return (\n <StyledButton\n as=\"button\"\n background=\"neutral0\"\n border=\"neutral150\"\n paddingBottom={3}\n paddingLeft={4}\n paddingRight={4}\n paddingTop={3}\n shadow=\"filterShadow\"\n {...props}\n >\n <Flex gap={2}>\n <StyledAddIcon aria-hidden />\n\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral500\">\n {children}\n </Typography>\n </Flex>\n </StyledButton>\n );\n};\n\nAddStage.propTypes = {\n children: PropTypes.node.isRequired,\n};\n","import { Schema } from '@strapi/types';\nimport { createDraft, produce } from 'immer';\n\nimport {\n Stage,\n StagePermission,\n Workflow,\n} from '../../../../../../../shared/contracts/review-workflows';\nimport { AdminRole } from '../../../../../../../shared/contracts/shared';\n\nimport {\n ACTION_ADD_STAGE,\n ACTION_CLONE_STAGE,\n ACTION_DELETE_STAGE,\n ACTION_RESET_WORKFLOW,\n ACTION_SET_CONTENT_TYPES,\n ACTION_SET_IS_LOADING,\n ACTION_SET_ROLES,\n ACTION_SET_WORKFLOW,\n ACTION_SET_WORKFLOWS,\n ACTION_UPDATE_STAGE,\n ACTION_UPDATE_STAGES,\n ACTION_UPDATE_STAGE_POSITION,\n ACTION_UPDATE_WORKFLOW,\n STAGE_COLOR_DEFAULT,\n} from './constants';\n\nexport type CurrentWorkflow = Partial<\n Pick<Workflow, 'name' | 'contentTypes' | 'stages' | 'id'> & {\n permissions?: StagePermission[];\n }\n>;\n\nexport type PartialWorkflow = Omit<CurrentWorkflow, 'stages'> & { stages?: Partial<Stage>[] };\n\nexport interface ServerState {\n contentTypes?: {\n collectionTypes: Schema.CollectionType[];\n singleTypes: Schema.SingleType[];\n };\n roles?: AdminRole[];\n workflow?: PartialWorkflow | null;\n workflows?: Workflow[];\n}\n\n// This isn't something we should do.\n// TODO: Revamp the way we are handling this temp key for delete or create\nexport type StageWithTempKey = Stage & { __temp_key__?: number };\nexport interface ClientState {\n currentWorkflow: {\n data: Partial<Omit<CurrentWorkflow, 'stages'> & { stages: StageWithTempKey[] }>;\n };\n isLoading?: boolean;\n}\n\nexport type State = {\n serverState: ServerState;\n clientState: ClientState;\n};\n\nexport const initialState: State = {\n serverState: {\n contentTypes: {\n collectionTypes: [],\n singleTypes: [],\n },\n roles: [],\n workflow: null,\n workflows: [],\n },\n clientState: {\n currentWorkflow: {\n data: {\n name: '',\n contentTypes: [],\n stages: [],\n permissions: undefined,\n },\n },\n isLoading: true,\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function reducer(state: State = initialState, action: { type: string; payload?: any }) {\n return produce(state, (draft) => {\n const { payload } = action;\n\n switch (action.type) {\n case ACTION_SET_CONTENT_TYPES: {\n draft.serverState.contentTypes = payload;\n break;\n }\n\n case ACTION_SET_IS_LOADING: {\n draft.clientState.isLoading = payload;\n break;\n }\n\n case ACTION_SET_ROLES: {\n draft.serverState.roles = payload;\n break;\n }\n\n case ACTION_SET_WORKFLOW: {\n const workflow: Workflow = payload;\n\n if (workflow) {\n draft.serverState.workflow = workflow;\n draft.clientState.currentWorkflow.data = {\n ...workflow,\n stages: workflow.stages.map((stage) => ({\n ...stage,\n // A safety net in case a stage does not have a color assigned;\n // this should not happen\n color: stage?.color ?? STAGE_COLOR_DEFAULT,\n })),\n };\n }\n break;\n }\n\n case ACTION_SET_WORKFLOWS: {\n draft.serverState.workflows = payload;\n break;\n }\n\n case ACTION_RESET_WORKFLOW: {\n draft.clientState = initialState.clientState;\n draft.serverState = createDraft(initialState.serverState);\n break;\n }\n\n case ACTION_DELETE_STAGE: {\n const { stageId } = payload;\n const { currentWorkflow } = state.clientState;\n\n draft.clientState.currentWorkflow.data.stages = currentWorkflow.data.stages?.filter(\n (stage) => (stage?.id ?? stage.__temp_key__) !== stageId\n );\n\n break;\n }\n\n case ACTION_ADD_STAGE: {\n const { currentWorkflow } = state.clientState;\n\n if (!currentWorkflow.data) {\n draft.clientState.currentWorkflow.data = {\n stages: [],\n };\n }\n\n const newTempKey = getMaxTempKey(draft.clientState.currentWorkflow.data.stages);\n\n draft.clientState.currentWorkflow.data.stages?.push({\n ...payload,\n color: payload?.color ?? STAGE_COLOR_DEFAULT,\n __temp_key__: newTempKey,\n });\n\n break;\n }\n\n case ACTION_CLONE_STAGE: {\n const { currentWorkflow } = state.clientState;\n const { id } = payload;\n\n const sourceStageIndex = currentWorkflow.data.stages?.findIndex(\n (stage) => (stage?.id ?? stage?.__temp_key__) === id\n );\n\n if (sourceStageIndex !== undefined && sourceStageIndex !== -1) {\n const sourceStage = currentWorkflow.data.stages?.[sourceStageIndex];\n\n draft.clientState.currentWorkflow.data.stages?.splice(sourceStageIndex + 1, 0, {\n ...sourceStage,\n // @ts-expect-error - We are handling temporary (unsaved) duplicated stages with temporary keys and undefined ids. It should be revamp imo\n id: undefined,\n __temp_key__: getMaxTempKey(draft.clientState.currentWorkflow.data.stages),\n });\n }\n\n break;\n }\n\n case ACTION_UPDATE_STAGE: {\n const { currentWorkflow } = state.clientState;\n const { stageId, ...modified } = payload;\n\n draft.clientState.currentWorkflow.data.stages = currentWorkflow.data.stages?.map((stage) =>\n (stage.id ?? stage.__temp_key__) === stageId\n ? {\n ...stage,\n ...modified,\n }\n : stage\n );\n\n break;\n }\n\n case ACTION_UPDATE_STAGES: {\n const { currentWorkflow } = state.clientState;\n\n draft.clientState.currentWorkflow.data.stages = currentWorkflow.data.stages?.map(\n (stage) => ({\n ...stage,\n ...payload,\n })\n );\n\n break;\n }\n\n case ACTION_UPDATE_STAGE_POSITION: {\n const {\n currentWorkflow: {\n data: { stages },\n },\n } = state.clientState;\n const { newIndex, oldIndex } = payload;\n\n if (stages && newIndex >= 0 && newIndex < stages.length) {\n const stage = stages[oldIndex];\n const newStages = [...stages];\n\n newStages.splice(oldIndex, 1);\n newStages.splice(newIndex, 0, stage);\n\n draft.clientState.currentWorkflow.data.stages = newStages;\n }\n\n break;\n }\n\n case ACTION_UPDATE_WORKFLOW: {\n draft.clientState.currentWorkflow.data = {\n ...draft.clientState.currentWorkflow.data,\n ...payload,\n };\n\n break;\n }\n\n default:\n break;\n }\n });\n}\n\nconst getMaxTempKey = (stages: StageWithTempKey[] = []): number => {\n const ids = stages.map((stage) => Number(stage.id ?? stage.__temp_key__));\n\n /**\n * If there are no ids it will return 0 as the max value\n * because the max value is -1.\n */\n return Math.max(...ids, -1) + 1;\n};\n","import { createSelector } from '@reduxjs/toolkit';\nimport isEqual from 'lodash/isEqual';\n\nimport { RootState } from '../../../../../../../admin/src/core/store/configure';\nimport { Stage } from '../../../../../../../shared/contracts/review-workflows';\n\nimport { REDUX_NAMESPACE } from './constants';\nimport { State, initialState } from './reducer';\n\ninterface Store extends RootState {\n [REDUX_NAMESPACE]: State;\n}\n\nexport const selectNamespace = (state: Store) => state[REDUX_NAMESPACE] ?? initialState;\n\nexport const selectContentTypes = createSelector(\n selectNamespace,\n ({ serverState: { contentTypes } }) => contentTypes\n);\n\nexport const selectRoles = createSelector(selectNamespace, ({ serverState: { roles } }) => roles);\n\nexport const selectCurrentWorkflow = createSelector(\n selectNamespace,\n ({ clientState: { currentWorkflow } }) => currentWorkflow.data\n);\n\nexport const selectWorkflows = createSelector(\n selectNamespace,\n ({ serverState: { workflows } }) => workflows\n);\n\nexport const selectIsWorkflowDirty = createSelector(\n selectNamespace,\n ({ serverState, clientState: { currentWorkflow } }) =>\n !isEqual(serverState.workflow, currentWorkflow.data)\n);\n\nexport const selectHasDeletedServerStages = createSelector(\n selectNamespace,\n ({ serverState, clientState: { currentWorkflow } }) =>\n !(serverState.workflow?.stages ?? []).every(\n (stage: Partial<Stage>) => !!currentWorkflow.data.stages?.find(({ id }) => id === stage.id)\n )\n);\n\nexport const selectIsLoading = createSelector(\n selectNamespace,\n ({ clientState: { isLoading } }) => isLoading\n);\n\nexport const selectServerState = createSelector(selectNamespace, ({ serverState }) => serverState);\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Flex,\n Grid,\n GridItem,\n IconButton,\n MultiSelect,\n MultiSelectGroup,\n MultiSelectOption,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Menu, MenuItem } from '@strapi/design-system/v2';\nimport {\n ConfirmDialog,\n useNotification,\n NotAllowedInput,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Duplicate, Drag, More } from '@strapi/icons';\nimport { useField } from 'formik';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { useDragAndDrop } from '../../../../../../../../admin/src/content-manager/hooks/useDragAndDrop';\nimport { composeRefs } from '../../../../../../../../admin/src/content-manager/utils/refs';\nimport { StagePermission } from '../../../../../../../../shared/contracts/review-workflows';\nimport {\n cloneStage,\n deleteStage,\n updateStage,\n updateStagePosition,\n updateStages,\n} from '../actions';\nimport { DRAG_DROP_TYPES } from '../constants';\nimport { selectRoles } from '../selectors';\nimport { getAvailableStageColors, getStageColorByHex } from '../utils/colors';\n\nconst NestedOption = styled(MultiSelectOption)`\n padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\n// Grow the size of the permission Select\nconst PermissionWrapper = styled(Flex)`\n > * {\n flex-grow: 1;\n }\n`;\n\nconst DeleteMenuItem = styled(MenuItem)`\n color: ${({ theme }) => theme.colors.danger600};\n`;\n\n// Removing the font-size from the child-span aligns the\n// more icon vertically\nconst ContextMenuTrigger = styled(Menu.Trigger)`\n :hover,\n :focus {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n > span {\n font-size: 0;\n }\n`;\n\n// As soon as either `as` or `forwardedAs` is set, the component\n// resets some styles and e.g. the `hasBorder` prop no longer works,\n// which is why this bit of CSS has been added manually ¯\\_(ツ)_/¯\nconst DragIconButton = styled(IconButton)`\n align-items: center;\n border-radius: ${({ theme }) => theme.borderRadius};\n display: flex;\n justify-content: center;\n\n :hover,\n :focus {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n svg {\n height: auto;\n width: ${({ theme }) => theme.spaces[3]}};\n }\n`;\n\nconst AVAILABLE_COLORS = getAvailableStageColors();\n\nconst StageDropPreview = () => {\n return (\n <Box\n background=\"primary100\"\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n display=\"block\"\n hasRadius\n padding={6}\n shadow=\"tableShadow\"\n />\n );\n};\n\nexport type StageProps = {\n id: number;\n index: number;\n canDelete: boolean;\n canReorder: boolean;\n canUpdate: boolean;\n isOpen: boolean;\n stagesCount: number;\n};\n\nexport const Stage = ({\n id,\n index,\n canDelete,\n canReorder,\n canUpdate,\n isOpen: isOpenDefault = false,\n stagesCount,\n}: StageProps) => {\n const getItemPos = (index: number) => `${index + 1} of ${stagesCount}`;\n\n const handleGrabStage = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.grab-item',\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: nameField.value,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropStage = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.drop-item',\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: nameField.value,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleCancelDragStage = () => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.cancel-item',\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: nameField.value,\n }\n )\n );\n };\n\n const handleMoveStage = (newIndex: number, oldIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.reorder',\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: nameField.value,\n position: getItemPos(newIndex),\n }\n )\n );\n\n dispatch(updateStagePosition(oldIndex, newIndex));\n };\n\n const handleApplyPermissionsToAllStages = () => {\n setIsApplyAllConfirmationOpen(true);\n };\n\n const [liveText, setLiveText] = React.useState(null);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const [isOpen, setIsOpen] = React.useState(isOpenDefault);\n const [isApplyAllConfirmationOpen, setIsApplyAllConfirmationOpen] = React.useState(false);\n const [nameField, nameMeta, nameHelper] = useField(`stages.${index}.name`);\n const [colorField, colorMeta, colorHelper] = useField(`stages.${index}.color`);\n const [permissionsField, permissionsMeta, permissionsHelper] = useField<\n Partial<StagePermission>[]\n >(`stages.${index}.permissions`);\n const roles = useSelector(selectRoles);\n const [{ handlerId, isDragging, handleKeyDown }, stageRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(canReorder, {\n index,\n item: {\n index,\n name: nameField.value,\n },\n onGrabItem: handleGrabStage,\n onDropItem: handleDropStage,\n onMoveItem: handleMoveStage,\n onCancel: handleCancelDragStage,\n type: DRAG_DROP_TYPES.STAGE,\n });\n\n const composedRef = composeRefs(stageRef, dropRef);\n\n const colorOptions = AVAILABLE_COLORS.map(({ hex, name }) => ({\n value: hex,\n label: formatMessage(\n {\n id: 'Settings.review-workflows.stage.color.name',\n defaultMessage: '{name}',\n },\n { name }\n ),\n color: hex,\n }));\n\n const { themeColorName } = getStageColorByHex(colorField.value) ?? {};\n\n const filteredRoles = roles\n // Super admins always have permissions to do everything and therefore\n // there is no point for this role to show up in the role combobox\n ?.filter((role) => role.code !== 'strapi-super-admin');\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n return (\n <Box ref={(ref) => composedRef(ref!)}>\n {liveText && <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>}\n\n {isDragging ? (\n <StageDropPreview />\n ) : (\n <Accordion\n size=\"S\"\n variant=\"primary\"\n onToggle={() => {\n setIsOpen(!isOpen);\n\n if (!isOpen) {\n trackUsage('willEditStage');\n }\n }}\n expanded={isOpen}\n shadow=\"tableShadow\"\n error={nameMeta.error ?? colorMeta?.error ?? permissionsMeta?.error}\n hasErrorMessage={false}\n >\n <AccordionToggle\n title={nameField.value}\n togglePosition=\"left\"\n action={\n (canDelete || canUpdate) && (\n <Flex>\n <Menu.Root>\n <ContextMenuTrigger size=\"S\" endIcon={null} paddingLeft={2} paddingRight={2}>\n <More aria-hidden focusable={false} />\n <VisuallyHidden as=\"span\">\n {formatMessage({\n id: '[tbdb].components.DynamicZone.more-actions',\n defaultMessage: 'More actions',\n })}\n </VisuallyHidden>\n </ContextMenuTrigger>\n {/* z-index needs to be as big as the one defined for the wrapper in Stages, otherwise the menu\n * disappears behind the accordion\n */}\n <Menu.Content popoverPlacement=\"bottom-end\" zIndex={2}>\n <Menu.SubRoot>\n {canUpdate && (\n <MenuItem onClick={() => dispatch(cloneStage(id))}>\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Duplicate stage',\n })}\n </MenuItem>\n )}\n\n {canDelete && (\n <DeleteMenuItem onClick={() => dispatch(deleteStage(id))}>\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Delete',\n })}\n </DeleteMenuItem>\n )}\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n\n {canUpdate && (\n <DragIconButton\n background=\"transparent\"\n // @ts-expect-error - forwardedAs needs to be defined as string in the IconButton props\n forwardedAs=\"div\"\n hasRadius\n role=\"button\"\n noBorder\n tabIndex={0}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.drag',\n defaultMessage: 'Drag',\n })}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </DragIconButton>\n )}\n </Flex>\n )\n }\n />\n <AccordionContent padding={6} background=\"neutral0\" hasRadius>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n {...nameField}\n id={nameField.name}\n disabled={!canUpdate}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.name.label',\n defaultMessage: 'Stage name',\n })}\n error={nameMeta.error ?? false}\n onChange={(event) => {\n nameHelper.setValue(event.target.value);\n dispatch(updateStage(id, { name: event.target.value }));\n }}\n required\n />\n </GridItem>\n\n <GridItem col={6}>\n <SingleSelect\n disabled={!canUpdate}\n error={colorMeta?.error ?? false}\n id={colorField.name}\n required\n label={formatMessage({\n id: 'content-manager.reviewWorkflows.stage.color',\n defaultMessage: 'Color',\n })}\n onChange={(value) => {\n colorHelper.setValue(value);\n dispatch(updateStage(id, { color: String(value) }));\n }}\n value={colorField.value.toUpperCase()}\n startIcon={\n <Flex\n as=\"span\"\n height={2}\n background={colorField.value}\n // @ts-expect-error - transparent doesn't exist in theme.colors\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : 'transparent'}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n >\n {colorOptions.map(({ value, label, color }) => {\n const { themeColorName } = getStageColorByHex(color) || {};\n\n return (\n <SingleSelectOption\n value={value}\n key={value}\n startIcon={\n <Flex\n as=\"span\"\n height={2}\n background={color}\n // @ts-expect-error - transparent doesn't exist in theme.colors\n borderColor={\n themeColorName === 'neutral0' ? 'neutral150' : 'transparent'\n }\n hasRadius\n shrink={0}\n width={2}\n />\n }\n >\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </GridItem>\n\n <GridItem col={6}>\n {filteredRoles?.length === 0 ? (\n <NotAllowedInput\n description={{\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }}\n intlLabel={{\n id: 'Settings.review-workflows.stage.permissions.label',\n defaultMessage: 'Roles that can change this stage',\n }}\n name={permissionsField.name}\n />\n ) : (\n <Flex alignItems=\"flex-end\" gap={3}>\n <PermissionWrapper grow={1}>\n <MultiSelect\n {...permissionsField}\n disabled={!canUpdate}\n error={permissionsMeta.error ?? false}\n id={permissionsField.name}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.label',\n defaultMessage: 'Roles that can change this stage',\n })}\n onChange={(values) => {\n // Because the select components expects strings for values, but\n // the yup schema validates we are sending full permission objects to the API,\n // we must coerce the string value back to an object\n const permissions = values.map((value) => ({\n role: parseInt(value, 10),\n action: 'admin::review-workflows.stage.transition',\n }));\n\n permissionsHelper.setValue(permissions);\n dispatch(updateStage(id, { permissions }));\n }}\n placeholder={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.placeholder',\n defaultMessage: 'Select a role',\n })}\n required\n // The Select component expects strings for values\n value={(permissionsField.value ?? []).map(\n (permission) => `${permission.role}`\n )}\n withTags\n >\n <MultiSelectGroup\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.allRoles.label',\n defaultMessage: 'All roles',\n })}\n values={filteredRoles?.map((r) => `${r.id}`)}\n >\n {filteredRoles?.map((role) => {\n return (\n <NestedOption key={role.id} value={`${role.id}`}>\n {role.name}\n </NestedOption>\n );\n })}\n </MultiSelectGroup>\n </MultiSelect>\n </PermissionWrapper>\n\n <IconButton\n disabled={!canUpdate}\n icon={<Duplicate />}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.apply.label',\n defaultMessage: 'Apply to all stages',\n })}\n size=\"L\"\n variant=\"secondary\"\n onClick={() => handleApplyPermissionsToAllStages()}\n />\n </Flex>\n )}\n </GridItem>\n </Grid>\n </AccordionContent>\n </Accordion>\n )}\n\n <ConfirmDialog.Root\n iconRightButton={null}\n isOpen={isApplyAllConfirmationOpen}\n onToggleDialog={() => setIsApplyAllConfirmationOpen(false)}\n onConfirm={() => {\n dispatch(updateStages({ permissions: permissionsField.value }));\n setIsApplyAllConfirmationOpen(false);\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'Settings.review-workflows.page.edit.confirm.stages.permissions.copy.success',\n defaultMessage: 'Applied roles to all other stages of the workflow',\n }),\n });\n }}\n variantRightButton=\"default\"\n >\n <ConfirmDialog.Body>\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.edit.confirm.stages.permissions.copy',\n defaultMessage:\n 'Roles that can change that stage will be applied to all the other stages.',\n })}\n </Typography>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n </Box>\n );\n};\n","import React from 'react';\n\nimport { Box, Flex } from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { Stage as StageType } from '../../../../../../../../shared/contracts/review-workflows';\nimport { addStage } from '../actions';\n\nimport { AddStage } from './AddStage';\nimport { Stage } from './Stage';\n\nconst Background = styled(Box)`\n transform: translateX(-50%);\n`;\n\nexport type StagesProps = {\n canDelete?: boolean;\n canUpdate?: boolean;\n stages?: StageType[];\n};\n\nexport const Stages = ({ canDelete = true, canUpdate = true, stages = [] }: StagesProps) => {\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const { trackUsage } = useTracking();\n\n return (\n <Flex direction=\"column\" gap={6} width=\"100%\">\n <Box position=\"relative\" width=\"100%\">\n <Background\n background=\"neutral200\"\n height=\"100%\"\n left=\"50%\"\n position=\"absolute\"\n top=\"0\"\n width={2}\n zIndex={1}\n />\n\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={6}\n zIndex={2}\n position=\"relative\"\n as=\"ol\"\n >\n {stages.map((stage, index) => {\n // @ts-expect-error - temp key should be fixed in order to use another value\n const id = Number(stage?.id ?? stage.__temp_key__);\n\n return (\n <Box key={`stage-${id}`} as=\"li\">\n <Stage\n id={id}\n index={index}\n isOpen={!stage.id}\n canDelete={stages.length > 1 && canDelete}\n canReorder={stages.length > 1}\n canUpdate={canUpdate}\n stagesCount={stages.length}\n />\n </Box>\n );\n })}\n </Flex>\n </Box>\n\n {canUpdate && (\n <AddStage\n type=\"button\"\n onClick={() => {\n dispatch(addStage({ name: '' }));\n trackUsage('willCreateStage');\n }}\n >\n {formatMessage({\n id: 'Settings.review-workflows.stage.add',\n defaultMessage: 'Add new stage',\n })}\n </AddStage>\n )}\n </Flex>\n );\n};\n","import * as React from 'react';\n\nimport {\n Grid,\n GridItem,\n MultiSelect,\n MultiSelectGroup,\n MultiSelectOption,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { useCollator } from '@strapi/helper-plugin';\nimport { useField } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { updateWorkflow } from '../actions';\nimport { selectContentTypes, selectCurrentWorkflow, selectWorkflows } from '../selectors';\n\nconst NestedOption = styled(MultiSelectOption)`\n padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\nconst ContentTypeTakeNotice = styled(Typography)`\n font-style: italic;\n`;\n\nexport type WorkflowAttributesProps = {\n canUpdate?: boolean;\n};\n\nexport const WorkflowAttributes = ({ canUpdate = true }: WorkflowAttributesProps) => {\n const { formatMessage, locale } = useIntl();\n const dispatch = useDispatch();\n const contentTypes = useSelector(selectContentTypes);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const workflows = useSelector(selectWorkflows);\n const [nameField, nameMeta, nameHelper] = useField('name');\n const [contentTypesField, contentTypesMeta, contentTypesHelper] = useField('contentTypes');\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n return (\n <Grid background=\"neutral0\" hasRadius gap={4} padding={6} shadow=\"tableShadow\">\n <GridItem col={6}>\n <TextInput\n {...nameField}\n id={nameField.name}\n disabled={!canUpdate}\n label={formatMessage({\n id: 'Settings.review-workflows.workflow.name.label',\n defaultMessage: 'Workflow Name',\n })}\n error={nameMeta.error ?? false}\n onChange={(event) => {\n dispatch(updateWorkflow({ name: event.target.value }));\n nameHelper.setValue(event.target.value);\n }}\n required\n />\n </GridItem>\n\n {contentTypes && (\n <GridItem col={6}>\n <MultiSelect\n {...contentTypesField}\n customizeContent={(value) =>\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.displayValue',\n defaultMessage:\n '{count} {count, plural, one {content type} other {content types}} selected',\n },\n { count: value?.length }\n )\n }\n disabled={!canUpdate}\n error={contentTypesMeta.error ?? false}\n id={contentTypesField.name}\n label={formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.label',\n defaultMessage: 'Associated to',\n })}\n onChange={(values) => {\n dispatch(updateWorkflow({ contentTypes: values }));\n contentTypesHelper.setValue(values);\n }}\n placeholder={formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.placeholder',\n defaultMessage: 'Select',\n })}\n >\n {[\n ...(contentTypes.collectionTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.collectionTypes.label',\n defaultMessage: 'Collection Types',\n }),\n children: [...contentTypes.collectionTypes]\n .sort((a, b) => formatter.compare(a.info.displayName, b.info.displayName))\n .map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n })),\n },\n ]\n : []),\n\n ...(contentTypes.singleTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.singleTypes.label',\n defaultMessage: 'Single Types',\n }),\n children: [...contentTypes.singleTypes].map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n })),\n },\n ]\n : []),\n ].map((opt) => {\n if ('children' in opt) {\n return (\n <MultiSelectGroup\n key={opt.label}\n label={opt.label}\n values={opt.children.map((child) => child.value.toString())}\n >\n {opt.children.map((child) => {\n const { name: assignedWorkflowName } =\n workflows?.find(\n (workflow) =>\n ((currentWorkflow && workflow.id !== currentWorkflow.id) ||\n !currentWorkflow) &&\n workflow.contentTypes.includes(child.value)\n ) ?? {};\n\n return (\n <NestedOption key={child.value} value={child.value}>\n <Typography>\n {\n // @ts-expect-error - formatMessage options doesn't expect to be a React component but that's what we need actually for the <i> and <em> components\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.assigned.notice',\n defaultMessage:\n '{label} {name, select, undefined {} other {<i>(assigned to <em>{name}</em> workflow)</i>}}',\n },\n {\n label: child.label,\n name: assignedWorkflowName,\n em: (...children) => (\n <Typography as=\"em\" fontWeight=\"bold\">\n {children}\n </Typography>\n ),\n i: (...children) => (\n <ContentTypeTakeNotice>{children}</ContentTypeTakeNotice>\n ),\n }\n )\n }\n </Typography>\n </NestedOption>\n );\n })}\n </MultiSelectGroup>\n );\n }\n })}\n </MultiSelect>\n </GridItem>\n )}\n </Grid>\n );\n};\n","import set from 'lodash/set';\nimport { IntlFormatters } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { Stage } from '../../../../../../../../shared/contracts/review-workflows';\nimport { PartialWorkflow } from '../reducer';\n\nexport async function validateWorkflow({\n values,\n formatMessage,\n}: { values: PartialWorkflow } & Pick<IntlFormatters, 'formatMessage'>) {\n const schema = yup.object({\n contentTypes: yup.array().of(yup.string()),\n name: yup\n .string()\n .max(\n 255,\n formatMessage({\n id: 'Settings.review-workflows.validation.name.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n )\n .required(),\n\n stages: yup\n .array()\n .of(\n yup.object().shape({\n name: yup\n .string()\n .required(\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.name',\n defaultMessage: 'Name is required',\n })\n )\n .max(\n 255,\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n )\n .test(\n 'unique-name',\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.duplicate',\n defaultMessage: 'Stage name must be unique',\n }),\n function (stageName) {\n const {\n options: { context },\n } = this;\n\n return (\n context?.stages.filter((stage: Stage) => stage.name === stageName).length === 1\n );\n }\n ),\n color: yup\n .string()\n .required(\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.color',\n defaultMessage: 'Color is required',\n })\n )\n .matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),\n\n permissions: yup\n .array(\n yup.object({\n role: yup\n .number()\n .strict()\n .typeError(\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.permissions.role.number',\n defaultMessage: 'Role must be of type number',\n })\n )\n .required(),\n action: yup.string().required({\n id: 'Settings.review-workflows.validation.stage.permissions.action.required',\n defaultMessage: 'Action is a required argument',\n }),\n })\n )\n .strict(),\n })\n )\n .min(1),\n });\n\n try {\n await schema.validate(values, { abortEarly: false, context: values });\n\n return true;\n } catch (error) {\n const errors = {};\n\n if (error instanceof yup.ValidationError) {\n error.inner.forEach((error) => {\n if (error.path) set(errors, error.path, error.message);\n });\n }\n\n return errors;\n }\n}\n"],"names":["reducer","NestedOption","index","themeColorName","error"],"mappings":"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"}
1
+ {"version":3,"file":"validateWorkflow-wBPkMeR1.mjs","sources":["../../admin/src/hooks/useInjectReducer.ts","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/actions.ts","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage.tsx","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/reducer.ts","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/selectors.ts","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Stage.tsx","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Stages.tsx","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes.tsx","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/utils/validateWorkflow.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { Reducer } from '@reduxjs/toolkit';\n\nimport { useTypedStore } from '../core/store/hooks';\n\n/**\n * Inject a new reducer into the global redux-store.\n *\n * @export\n * @param {string} namespace - Store namespace of the injected reducer\n * @param {Function} reducer - Reducer function\n * @return void\n */\n\nexport function useInjectReducer(namespace: string, reducer: Reducer) {\n const store = useTypedStore();\n\n useEffect(() => {\n store.injectReducer(namespace, reducer);\n }, [store, namespace, reducer]);\n}\n","import { Contracts } from '@strapi/plugin-content-manager/_internal/shared';\n\nimport { Stage, Workflow } from '../../../../../../../shared/contracts/review-workflows';\nimport { Permission, SanitizedAdminRole } from '../../../../../../../shared/contracts/shared';\n\nimport {\n ACTION_ADD_STAGE,\n ACTION_CLONE_STAGE,\n ACTION_DELETE_STAGE,\n ACTION_RESET_WORKFLOW,\n ACTION_SET_CONTENT_TYPES,\n ACTION_SET_IS_LOADING,\n ACTION_SET_ROLES,\n ACTION_SET_WORKFLOW,\n ACTION_SET_WORKFLOWS,\n ACTION_UPDATE_STAGE,\n ACTION_UPDATE_STAGES,\n ACTION_UPDATE_STAGE_POSITION,\n ACTION_UPDATE_WORKFLOW,\n} from './constants';\n\nexport function cloneStage(id: number) {\n return {\n type: ACTION_CLONE_STAGE,\n payload: { id },\n };\n}\n\nexport function setWorkflow({ workflow }: { workflow: Workflow | null }) {\n return {\n type: ACTION_SET_WORKFLOW,\n payload: workflow,\n };\n}\n\nexport function setWorkflows({ workflows }: { workflows: Workflow[] }) {\n return {\n type: ACTION_SET_WORKFLOWS,\n payload: workflows,\n };\n}\n\nexport function deleteStage(stageId: number) {\n return {\n type: ACTION_DELETE_STAGE,\n payload: {\n stageId,\n },\n };\n}\n\nexport function addStage(stage: Partial<Stage>) {\n return {\n type: ACTION_ADD_STAGE,\n payload: stage,\n };\n}\n\nexport interface PartialStage extends Omit<Stage, 'permissions'> {\n permissions?: Partial<Permission>[];\n}\n\nexport function updateStage(stageId: number, payload: Partial<PartialStage>) {\n return {\n type: ACTION_UPDATE_STAGE,\n payload: {\n stageId,\n ...payload,\n },\n };\n}\n\nexport function updateStages(payload: Partial<PartialStage>) {\n return {\n type: ACTION_UPDATE_STAGES,\n payload,\n };\n}\n\nexport function updateStagePosition(oldIndex: number, newIndex: number) {\n return {\n type: ACTION_UPDATE_STAGE_POSITION,\n payload: {\n newIndex,\n oldIndex,\n },\n };\n}\n\nexport function updateWorkflow(payload: Partial<Workflow>) {\n return {\n type: ACTION_UPDATE_WORKFLOW,\n payload,\n };\n}\n\nexport function resetWorkflow() {\n return {\n type: ACTION_RESET_WORKFLOW,\n };\n}\n\nexport function setContentTypes(payload: {\n collectionTypes?: Contracts.ContentTypes.ContentType[];\n singleTypes?: Contracts.ContentTypes.ContentType[];\n}) {\n return {\n type: ACTION_SET_CONTENT_TYPES,\n payload,\n };\n}\n\nexport function setRoles(payload?: (SanitizedAdminRole & { usersCount?: number | undefined })[]) {\n return {\n type: ACTION_SET_ROLES,\n payload,\n };\n}\n\nexport function setIsLoading(isLoading: boolean) {\n return {\n type: ACTION_SET_IS_LOADING,\n payload: isLoading,\n };\n}\n","import React from 'react';\n\nimport { Box, ButtonProps, Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst StyledAddIcon = styled(PlusCircle)`\n > circle {\n fill: ${({ theme }) => theme.colors.neutral150};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst StyledButton = styled(Box)`\n border-radius: 26px;\n\n svg {\n height: ${({ theme }) => theme.spaces[6]};\n width: ${({ theme }) => theme.spaces[6]};\n\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n\n &:hover {\n color: ${({ theme }) => theme.colors.primary600} !important;\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600} !important;\n }\n\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n\n &:active {\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n`;\n\nexport const AddStage = ({ children, ...props }: ButtonProps) => {\n return (\n <StyledButton\n as=\"button\"\n background=\"neutral0\"\n border=\"neutral150\"\n paddingBottom={3}\n paddingLeft={4}\n paddingRight={4}\n paddingTop={3}\n shadow=\"filterShadow\"\n {...props}\n >\n <Flex gap={2}>\n <StyledAddIcon aria-hidden />\n\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral500\">\n {children}\n </Typography>\n </Flex>\n </StyledButton>\n );\n};\n\nAddStage.propTypes = {\n children: PropTypes.node.isRequired,\n};\n","import { Schema } from '@strapi/types';\nimport { createDraft, produce } from 'immer';\n\nimport {\n Stage,\n StagePermission,\n Workflow,\n} from '../../../../../../../shared/contracts/review-workflows';\nimport { AdminRole } from '../../../../../../../shared/contracts/shared';\n\nimport {\n ACTION_ADD_STAGE,\n ACTION_CLONE_STAGE,\n ACTION_DELETE_STAGE,\n ACTION_RESET_WORKFLOW,\n ACTION_SET_CONTENT_TYPES,\n ACTION_SET_IS_LOADING,\n ACTION_SET_ROLES,\n ACTION_SET_WORKFLOW,\n ACTION_SET_WORKFLOWS,\n ACTION_UPDATE_STAGE,\n ACTION_UPDATE_STAGES,\n ACTION_UPDATE_STAGE_POSITION,\n ACTION_UPDATE_WORKFLOW,\n STAGE_COLOR_DEFAULT,\n} from './constants';\n\nexport type CurrentWorkflow = Partial<\n Pick<Workflow, 'name' | 'contentTypes' | 'stages' | 'id'> & {\n permissions?: StagePermission[];\n }\n>;\n\nexport type PartialWorkflow = Omit<CurrentWorkflow, 'stages'> & { stages?: Partial<Stage>[] };\n\nexport interface ServerState {\n contentTypes?: {\n collectionTypes: Schema.CollectionType[];\n singleTypes: Schema.SingleType[];\n };\n roles?: AdminRole[];\n workflow?: PartialWorkflow | null;\n workflows?: Workflow[];\n}\n\n// This isn't something we should do.\n// TODO: Revamp the way we are handling this temp key for delete or create\nexport type StageWithTempKey = Stage & { __temp_key__?: number };\nexport interface ClientState {\n currentWorkflow: {\n data: Partial<Omit<CurrentWorkflow, 'stages'> & { stages: StageWithTempKey[] }>;\n };\n isLoading?: boolean;\n}\n\nexport type State = {\n serverState: ServerState;\n clientState: ClientState;\n};\n\nexport const initialState: State = {\n serverState: {\n contentTypes: {\n collectionTypes: [],\n singleTypes: [],\n },\n roles: [],\n workflow: null,\n workflows: [],\n },\n clientState: {\n currentWorkflow: {\n data: {\n name: '',\n contentTypes: [],\n stages: [],\n permissions: undefined,\n },\n },\n isLoading: true,\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function reducer(state: State = initialState, action: { type: string; payload?: any }) {\n return produce(state, (draft) => {\n const { payload } = action;\n\n switch (action.type) {\n case ACTION_SET_CONTENT_TYPES: {\n draft.serverState.contentTypes = payload;\n break;\n }\n\n case ACTION_SET_IS_LOADING: {\n draft.clientState.isLoading = payload;\n break;\n }\n\n case ACTION_SET_ROLES: {\n draft.serverState.roles = payload;\n break;\n }\n\n case ACTION_SET_WORKFLOW: {\n const workflow: Workflow = payload;\n\n if (workflow) {\n draft.serverState.workflow = workflow;\n draft.clientState.currentWorkflow.data = {\n ...workflow,\n stages: workflow.stages.map((stage) => ({\n ...stage,\n // A safety net in case a stage does not have a color assigned;\n // this should not happen\n color: stage?.color ?? STAGE_COLOR_DEFAULT,\n })),\n };\n }\n break;\n }\n\n case ACTION_SET_WORKFLOWS: {\n draft.serverState.workflows = payload;\n break;\n }\n\n case ACTION_RESET_WORKFLOW: {\n draft.clientState = initialState.clientState;\n draft.serverState = createDraft(initialState.serverState);\n break;\n }\n\n case ACTION_DELETE_STAGE: {\n const { stageId } = payload;\n const { currentWorkflow } = state.clientState;\n\n draft.clientState.currentWorkflow.data.stages = currentWorkflow.data.stages?.filter(\n (stage) => (stage?.id ?? stage.__temp_key__) !== stageId\n );\n\n break;\n }\n\n case ACTION_ADD_STAGE: {\n const { currentWorkflow } = state.clientState;\n\n if (!currentWorkflow.data) {\n draft.clientState.currentWorkflow.data = {\n stages: [],\n };\n }\n\n const newTempKey = getMaxTempKey(draft.clientState.currentWorkflow.data.stages);\n\n draft.clientState.currentWorkflow.data.stages?.push({\n ...payload,\n color: payload?.color ?? STAGE_COLOR_DEFAULT,\n __temp_key__: newTempKey,\n });\n\n break;\n }\n\n case ACTION_CLONE_STAGE: {\n const { currentWorkflow } = state.clientState;\n const { id } = payload;\n\n const sourceStageIndex = currentWorkflow.data.stages?.findIndex(\n (stage) => (stage?.id ?? stage?.__temp_key__) === id\n );\n\n if (sourceStageIndex !== undefined && sourceStageIndex !== -1) {\n const sourceStage = currentWorkflow.data.stages?.[sourceStageIndex];\n\n draft.clientState.currentWorkflow.data.stages?.splice(sourceStageIndex + 1, 0, {\n ...sourceStage,\n // @ts-expect-error - We are handling temporary (unsaved) duplicated stages with temporary keys and undefined ids. It should be revamp imo\n id: undefined,\n __temp_key__: getMaxTempKey(draft.clientState.currentWorkflow.data.stages),\n });\n }\n\n break;\n }\n\n case ACTION_UPDATE_STAGE: {\n const { currentWorkflow } = state.clientState;\n const { stageId, ...modified } = payload;\n\n draft.clientState.currentWorkflow.data.stages = currentWorkflow.data.stages?.map((stage) =>\n (stage.id ?? stage.__temp_key__) === stageId\n ? {\n ...stage,\n ...modified,\n }\n : stage\n );\n\n break;\n }\n\n case ACTION_UPDATE_STAGES: {\n const { currentWorkflow } = state.clientState;\n\n draft.clientState.currentWorkflow.data.stages = currentWorkflow.data.stages?.map(\n (stage) => ({\n ...stage,\n ...payload,\n })\n );\n\n break;\n }\n\n case ACTION_UPDATE_STAGE_POSITION: {\n const {\n currentWorkflow: {\n data: { stages },\n },\n } = state.clientState;\n const { newIndex, oldIndex } = payload;\n\n if (stages && newIndex >= 0 && newIndex < stages.length) {\n const stage = stages[oldIndex];\n const newStages = [...stages];\n\n newStages.splice(oldIndex, 1);\n newStages.splice(newIndex, 0, stage);\n\n draft.clientState.currentWorkflow.data.stages = newStages;\n }\n\n break;\n }\n\n case ACTION_UPDATE_WORKFLOW: {\n draft.clientState.currentWorkflow.data = {\n ...draft.clientState.currentWorkflow.data,\n ...payload,\n };\n\n break;\n }\n\n default:\n break;\n }\n });\n}\n\nconst getMaxTempKey = (stages: StageWithTempKey[] = []): number => {\n const ids = stages.map((stage) => Number(stage.id ?? stage.__temp_key__));\n\n /**\n * If there are no ids it will return 0 as the max value\n * because the max value is -1.\n */\n return Math.max(...ids, -1) + 1;\n};\n","import { createSelector } from '@reduxjs/toolkit';\nimport isEqual from 'lodash/isEqual';\n\nimport { RootState } from '../../../../../../../admin/src/core/store/configure';\nimport { Stage } from '../../../../../../../shared/contracts/review-workflows';\n\nimport { REDUX_NAMESPACE } from './constants';\nimport { State, initialState } from './reducer';\n\ninterface Store extends RootState {\n [REDUX_NAMESPACE]: State;\n}\n\nexport const selectNamespace = (state: Store) => state[REDUX_NAMESPACE] ?? initialState;\n\nexport const selectContentTypes = createSelector(\n selectNamespace,\n ({ serverState: { contentTypes } }) => contentTypes\n);\n\nexport const selectRoles = createSelector(selectNamespace, ({ serverState: { roles } }) => roles);\n\nexport const selectCurrentWorkflow = createSelector(\n selectNamespace,\n ({ clientState: { currentWorkflow } }) => currentWorkflow.data\n);\n\nexport const selectWorkflows = createSelector(\n selectNamespace,\n ({ serverState: { workflows } }) => workflows\n);\n\nexport const selectIsWorkflowDirty = createSelector(\n selectNamespace,\n ({ serverState, clientState: { currentWorkflow } }) =>\n !isEqual(serverState.workflow, currentWorkflow.data)\n);\n\nexport const selectHasDeletedServerStages = createSelector(\n selectNamespace,\n ({ serverState, clientState: { currentWorkflow } }) =>\n !(serverState.workflow?.stages ?? []).every(\n (stage: Partial<Stage>) => !!currentWorkflow.data.stages?.find(({ id }) => id === stage.id)\n )\n);\n\nexport const selectIsLoading = createSelector(\n selectNamespace,\n ({ clientState: { isLoading } }) => isLoading\n);\n\nexport const selectServerState = createSelector(selectNamespace, ({ serverState }) => serverState);\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Flex,\n Grid,\n GridItem,\n IconButton,\n MultiSelect,\n MultiSelectGroup,\n MultiSelectOption,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Menu, MenuItem } from '@strapi/design-system/v2';\nimport {\n ConfirmDialog,\n useNotification,\n NotAllowedInput,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Duplicate, Drag, More } from '@strapi/icons';\nimport { useField } from 'formik';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { useDragAndDrop } from '../../../../../../../../admin/src/content-manager/hooks/useDragAndDrop';\nimport { composeRefs } from '../../../../../../../../admin/src/content-manager/utils/refs';\nimport { StagePermission } from '../../../../../../../../shared/contracts/review-workflows';\nimport {\n cloneStage,\n deleteStage,\n updateStage,\n updateStagePosition,\n updateStages,\n} from '../actions';\nimport { DRAG_DROP_TYPES } from '../constants';\nimport { selectRoles } from '../selectors';\nimport { getAvailableStageColors, getStageColorByHex } from '../utils/colors';\n\nconst NestedOption = styled(MultiSelectOption)`\n padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\n// Grow the size of the permission Select\nconst PermissionWrapper = styled(Flex)`\n > * {\n flex-grow: 1;\n }\n`;\n\nconst DeleteMenuItem = styled(MenuItem)`\n color: ${({ theme }) => theme.colors.danger600};\n`;\n\n// Removing the font-size from the child-span aligns the\n// more icon vertically\nconst ContextMenuTrigger = styled(Menu.Trigger)`\n :hover,\n :focus {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n > span {\n font-size: 0;\n }\n`;\n\n// As soon as either `as` or `forwardedAs` is set, the component\n// resets some styles and e.g. the `hasBorder` prop no longer works,\n// which is why this bit of CSS has been added manually ¯\\_(ツ)_/¯\nconst DragIconButton = styled(IconButton)`\n align-items: center;\n border-radius: ${({ theme }) => theme.borderRadius};\n display: flex;\n justify-content: center;\n\n :hover,\n :focus {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n svg {\n height: auto;\n width: ${({ theme }) => theme.spaces[3]}};\n }\n`;\n\nconst AVAILABLE_COLORS = getAvailableStageColors();\n\nconst StageDropPreview = () => {\n return (\n <Box\n background=\"primary100\"\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n display=\"block\"\n hasRadius\n padding={6}\n shadow=\"tableShadow\"\n />\n );\n};\n\nexport type StageProps = {\n id: number;\n index: number;\n canDelete: boolean;\n canReorder: boolean;\n canUpdate: boolean;\n isOpen: boolean;\n stagesCount: number;\n};\n\nexport const Stage = ({\n id,\n index,\n canDelete,\n canReorder,\n canUpdate,\n isOpen: isOpenDefault = false,\n stagesCount,\n}: StageProps) => {\n const getItemPos = (index: number) => `${index + 1} of ${stagesCount}`;\n\n const handleGrabStage = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.grab-item',\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: nameField.value,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropStage = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.drop-item',\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: nameField.value,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleCancelDragStage = () => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.cancel-item',\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: nameField.value,\n }\n )\n );\n };\n\n const handleMoveStage = (newIndex: number, oldIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: 'dnd.reorder',\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: nameField.value,\n position: getItemPos(newIndex),\n }\n )\n );\n\n dispatch(updateStagePosition(oldIndex, newIndex));\n };\n\n const handleApplyPermissionsToAllStages = () => {\n setIsApplyAllConfirmationOpen(true);\n };\n\n const [liveText, setLiveText] = React.useState(null);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const [isOpen, setIsOpen] = React.useState(isOpenDefault);\n const [isApplyAllConfirmationOpen, setIsApplyAllConfirmationOpen] = React.useState(false);\n const [nameField, nameMeta, nameHelper] = useField(`stages.${index}.name`);\n const [colorField, colorMeta, colorHelper] = useField(`stages.${index}.color`);\n const [permissionsField, permissionsMeta, permissionsHelper] = useField<\n Partial<StagePermission>[]\n >(`stages.${index}.permissions`);\n const roles = useSelector(selectRoles);\n const [{ handlerId, isDragging, handleKeyDown }, stageRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(canReorder, {\n index,\n item: {\n index,\n name: nameField.value,\n },\n onGrabItem: handleGrabStage,\n onDropItem: handleDropStage,\n onMoveItem: handleMoveStage,\n onCancel: handleCancelDragStage,\n type: DRAG_DROP_TYPES.STAGE,\n });\n\n const composedRef = composeRefs(stageRef, dropRef);\n\n const colorOptions = AVAILABLE_COLORS.map(({ hex, name }) => ({\n value: hex,\n label: formatMessage(\n {\n id: 'Settings.review-workflows.stage.color.name',\n defaultMessage: '{name}',\n },\n { name }\n ),\n color: hex,\n }));\n\n const { themeColorName } = getStageColorByHex(colorField.value) ?? {};\n\n const filteredRoles = roles\n // Super admins always have permissions to do everything and therefore\n // there is no point for this role to show up in the role combobox\n ?.filter((role) => role.code !== 'strapi-super-admin');\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n return (\n <Box ref={(ref) => composedRef(ref!)}>\n {liveText && <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>}\n\n {isDragging ? (\n <StageDropPreview />\n ) : (\n <Accordion\n size=\"S\"\n variant=\"primary\"\n onToggle={() => {\n setIsOpen(!isOpen);\n\n if (!isOpen) {\n trackUsage('willEditStage');\n }\n }}\n expanded={isOpen}\n shadow=\"tableShadow\"\n error={nameMeta.error ?? colorMeta?.error ?? permissionsMeta?.error}\n hasErrorMessage={false}\n >\n <AccordionToggle\n title={nameField.value}\n togglePosition=\"left\"\n action={\n (canDelete || canUpdate) && (\n <Flex>\n <Menu.Root>\n <ContextMenuTrigger size=\"S\" endIcon={null} paddingLeft={2} paddingRight={2}>\n <More aria-hidden focusable={false} />\n <VisuallyHidden as=\"span\">\n {formatMessage({\n id: '[tbdb].components.DynamicZone.more-actions',\n defaultMessage: 'More actions',\n })}\n </VisuallyHidden>\n </ContextMenuTrigger>\n {/* z-index needs to be as big as the one defined for the wrapper in Stages, otherwise the menu\n * disappears behind the accordion\n */}\n <Menu.Content popoverPlacement=\"bottom-end\" zIndex={2}>\n <Menu.SubRoot>\n {canUpdate && (\n <MenuItem onClick={() => dispatch(cloneStage(id))}>\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Duplicate stage',\n })}\n </MenuItem>\n )}\n\n {canDelete && (\n <DeleteMenuItem onClick={() => dispatch(deleteStage(id))}>\n {formatMessage({\n id: 'Settings.review-workflows.stage.delete',\n defaultMessage: 'Delete',\n })}\n </DeleteMenuItem>\n )}\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n\n {canUpdate && (\n <DragIconButton\n background=\"transparent\"\n // @ts-expect-error - forwardedAs needs to be defined as string in the IconButton props\n forwardedAs=\"div\"\n hasRadius\n role=\"button\"\n noBorder\n tabIndex={0}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.drag',\n defaultMessage: 'Drag',\n })}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </DragIconButton>\n )}\n </Flex>\n )\n }\n />\n <AccordionContent padding={6} background=\"neutral0\" hasRadius>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n {...nameField}\n id={nameField.name}\n disabled={!canUpdate}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.name.label',\n defaultMessage: 'Stage name',\n })}\n error={nameMeta.error ?? false}\n onChange={(event) => {\n nameHelper.setValue(event.target.value);\n dispatch(updateStage(id, { name: event.target.value }));\n }}\n required\n />\n </GridItem>\n\n <GridItem col={6}>\n <SingleSelect\n disabled={!canUpdate}\n error={colorMeta?.error ?? false}\n id={colorField.name}\n required\n label={formatMessage({\n id: 'content-manager.reviewWorkflows.stage.color',\n defaultMessage: 'Color',\n })}\n onChange={(value) => {\n colorHelper.setValue(value);\n dispatch(updateStage(id, { color: String(value) }));\n }}\n value={colorField.value.toUpperCase()}\n startIcon={\n <Flex\n as=\"span\"\n height={2}\n background={colorField.value}\n // @ts-expect-error - transparent doesn't exist in theme.colors\n borderColor={themeColorName === 'neutral0' ? 'neutral150' : 'transparent'}\n hasRadius\n shrink={0}\n width={2}\n />\n }\n >\n {colorOptions.map(({ value, label, color }) => {\n const { themeColorName } = getStageColorByHex(color) || {};\n\n return (\n <SingleSelectOption\n value={value}\n key={value}\n startIcon={\n <Flex\n as=\"span\"\n height={2}\n background={color}\n // @ts-expect-error - transparent doesn't exist in theme.colors\n borderColor={\n themeColorName === 'neutral0' ? 'neutral150' : 'transparent'\n }\n hasRadius\n shrink={0}\n width={2}\n />\n }\n >\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </GridItem>\n\n <GridItem col={6}>\n {filteredRoles?.length === 0 ? (\n <NotAllowedInput\n description={{\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }}\n intlLabel={{\n id: 'Settings.review-workflows.stage.permissions.label',\n defaultMessage: 'Roles that can change this stage',\n }}\n name={permissionsField.name}\n />\n ) : (\n <Flex alignItems=\"flex-end\" gap={3}>\n <PermissionWrapper grow={1}>\n <MultiSelect\n {...permissionsField}\n disabled={!canUpdate}\n error={permissionsMeta.error ?? false}\n id={permissionsField.name}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.label',\n defaultMessage: 'Roles that can change this stage',\n })}\n onChange={(values) => {\n // Because the select components expects strings for values, but\n // the yup schema validates we are sending full permission objects to the API,\n // we must coerce the string value back to an object\n const permissions = values.map((value) => ({\n role: parseInt(value, 10),\n action: 'admin::review-workflows.stage.transition',\n }));\n\n permissionsHelper.setValue(permissions);\n dispatch(updateStage(id, { permissions }));\n }}\n placeholder={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.placeholder',\n defaultMessage: 'Select a role',\n })}\n required\n // The Select component expects strings for values\n value={(permissionsField.value ?? []).map(\n (permission) => `${permission.role}`\n )}\n withTags\n >\n <MultiSelectGroup\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.allRoles.label',\n defaultMessage: 'All roles',\n })}\n values={filteredRoles?.map((r) => `${r.id}`)}\n >\n {filteredRoles?.map((role) => {\n return (\n <NestedOption key={role.id} value={`${role.id}`}>\n {role.name}\n </NestedOption>\n );\n })}\n </MultiSelectGroup>\n </MultiSelect>\n </PermissionWrapper>\n\n <IconButton\n disabled={!canUpdate}\n icon={<Duplicate />}\n label={formatMessage({\n id: 'Settings.review-workflows.stage.permissions.apply.label',\n defaultMessage: 'Apply to all stages',\n })}\n size=\"L\"\n variant=\"secondary\"\n onClick={() => handleApplyPermissionsToAllStages()}\n />\n </Flex>\n )}\n </GridItem>\n </Grid>\n </AccordionContent>\n </Accordion>\n )}\n\n <ConfirmDialog.Root\n iconRightButton={null}\n isOpen={isApplyAllConfirmationOpen}\n onToggleDialog={() => setIsApplyAllConfirmationOpen(false)}\n onConfirm={() => {\n dispatch(updateStages({ permissions: permissionsField.value }));\n setIsApplyAllConfirmationOpen(false);\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'Settings.review-workflows.page.edit.confirm.stages.permissions.copy.success',\n defaultMessage: 'Applied roles to all other stages of the workflow',\n }),\n });\n }}\n variantRightButton=\"default\"\n >\n <ConfirmDialog.Body>\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.edit.confirm.stages.permissions.copy',\n defaultMessage:\n 'Roles that can change that stage will be applied to all the other stages.',\n })}\n </Typography>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n </Box>\n );\n};\n","import React from 'react';\n\nimport { Box, Flex } from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { Stage as StageType } from '../../../../../../../../shared/contracts/review-workflows';\nimport { addStage } from '../actions';\n\nimport { AddStage } from './AddStage';\nimport { Stage } from './Stage';\n\nconst Background = styled(Box)`\n transform: translateX(-50%);\n`;\n\nexport type StagesProps = {\n canDelete?: boolean;\n canUpdate?: boolean;\n stages?: StageType[];\n};\n\nexport const Stages = ({ canDelete = true, canUpdate = true, stages = [] }: StagesProps) => {\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const { trackUsage } = useTracking();\n\n return (\n <Flex direction=\"column\" gap={6} width=\"100%\">\n <Box position=\"relative\" width=\"100%\">\n <Background\n background=\"neutral200\"\n height=\"100%\"\n left=\"50%\"\n position=\"absolute\"\n top=\"0\"\n width={2}\n zIndex={1}\n />\n\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={6}\n zIndex={2}\n position=\"relative\"\n as=\"ol\"\n >\n {stages.map((stage, index) => {\n // @ts-expect-error - temp key should be fixed in order to use another value\n const id = Number(stage?.id ?? stage.__temp_key__);\n\n return (\n <Box key={`stage-${id}`} as=\"li\">\n <Stage\n id={id}\n index={index}\n isOpen={!stage.id}\n canDelete={stages.length > 1 && canDelete}\n canReorder={stages.length > 1}\n canUpdate={canUpdate}\n stagesCount={stages.length}\n />\n </Box>\n );\n })}\n </Flex>\n </Box>\n\n {canUpdate && (\n <AddStage\n type=\"button\"\n onClick={() => {\n dispatch(addStage({ name: '' }));\n trackUsage('willCreateStage');\n }}\n >\n {formatMessage({\n id: 'Settings.review-workflows.stage.add',\n defaultMessage: 'Add new stage',\n })}\n </AddStage>\n )}\n </Flex>\n );\n};\n","import * as React from 'react';\n\nimport {\n Grid,\n GridItem,\n MultiSelect,\n MultiSelectGroup,\n MultiSelectOption,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { useCollator } from '@strapi/helper-plugin';\nimport { useField } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { updateWorkflow } from '../actions';\nimport { selectContentTypes, selectCurrentWorkflow, selectWorkflows } from '../selectors';\n\nconst NestedOption = styled(MultiSelectOption)`\n padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\nconst ContentTypeTakeNotice = styled(Typography)`\n font-style: italic;\n`;\n\nexport type WorkflowAttributesProps = {\n canUpdate?: boolean;\n};\n\nexport const WorkflowAttributes = ({ canUpdate = true }: WorkflowAttributesProps) => {\n const { formatMessage, locale } = useIntl();\n const dispatch = useDispatch();\n const contentTypes = useSelector(selectContentTypes);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const workflows = useSelector(selectWorkflows);\n const [nameField, nameMeta, nameHelper] = useField('name');\n const [contentTypesField, contentTypesMeta, contentTypesHelper] = useField('contentTypes');\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n return (\n <Grid background=\"neutral0\" hasRadius gap={4} padding={6} shadow=\"tableShadow\">\n <GridItem col={6}>\n <TextInput\n {...nameField}\n id={nameField.name}\n disabled={!canUpdate}\n label={formatMessage({\n id: 'Settings.review-workflows.workflow.name.label',\n defaultMessage: 'Workflow Name',\n })}\n error={nameMeta.error ?? false}\n onChange={(event) => {\n dispatch(updateWorkflow({ name: event.target.value }));\n nameHelper.setValue(event.target.value);\n }}\n required\n />\n </GridItem>\n\n {contentTypes && (\n <GridItem col={6}>\n <MultiSelect\n {...contentTypesField}\n customizeContent={(value) =>\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.displayValue',\n defaultMessage:\n '{count} {count, plural, one {content type} other {content types}} selected',\n },\n { count: value?.length }\n )\n }\n disabled={!canUpdate}\n error={contentTypesMeta.error ?? false}\n id={contentTypesField.name}\n label={formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.label',\n defaultMessage: 'Associated to',\n })}\n onChange={(values) => {\n dispatch(updateWorkflow({ contentTypes: values }));\n contentTypesHelper.setValue(values);\n }}\n placeholder={formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.placeholder',\n defaultMessage: 'Select',\n })}\n >\n {[\n ...(contentTypes.collectionTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.collectionTypes.label',\n defaultMessage: 'Collection Types',\n }),\n children: [...contentTypes.collectionTypes]\n .sort((a, b) => formatter.compare(a.info.displayName, b.info.displayName))\n .map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n })),\n },\n ]\n : []),\n\n ...(contentTypes.singleTypes.length > 0\n ? [\n {\n label: formatMessage({\n id: 'Settings.review-workflows.workflow.contentTypes.singleTypes.label',\n defaultMessage: 'Single Types',\n }),\n children: [...contentTypes.singleTypes].map((contentType) => ({\n label: contentType.info.displayName,\n value: contentType.uid,\n })),\n },\n ]\n : []),\n ].map((opt) => {\n if ('children' in opt) {\n return (\n <MultiSelectGroup\n key={opt.label}\n label={opt.label}\n values={opt.children.map((child) => child.value.toString())}\n >\n {opt.children.map((child) => {\n const { name: assignedWorkflowName } =\n workflows?.find(\n (workflow) =>\n ((currentWorkflow && workflow.id !== currentWorkflow.id) ||\n !currentWorkflow) &&\n workflow.contentTypes.includes(child.value)\n ) ?? {};\n\n return (\n <NestedOption key={child.value} value={child.value}>\n <Typography>\n {\n // @ts-expect-error - formatMessage options doesn't expect to be a React component but that's what we need actually for the <i> and <em> components\n formatMessage(\n {\n id: 'Settings.review-workflows.workflow.contentTypes.assigned.notice',\n defaultMessage:\n '{label} {name, select, undefined {} other {<i>(assigned to <em>{name}</em> workflow)</i>}}',\n },\n {\n label: child.label,\n name: assignedWorkflowName,\n em: (...children) => (\n <Typography as=\"em\" fontWeight=\"bold\">\n {children}\n </Typography>\n ),\n i: (...children) => (\n <ContentTypeTakeNotice>{children}</ContentTypeTakeNotice>\n ),\n }\n )\n }\n </Typography>\n </NestedOption>\n );\n })}\n </MultiSelectGroup>\n );\n }\n })}\n </MultiSelect>\n </GridItem>\n )}\n </Grid>\n );\n};\n","import set from 'lodash/set';\nimport { IntlFormatters } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { Stage } from '../../../../../../../../shared/contracts/review-workflows';\nimport { PartialWorkflow } from '../reducer';\n\nexport async function validateWorkflow({\n values,\n formatMessage,\n}: { values: PartialWorkflow } & Pick<IntlFormatters, 'formatMessage'>) {\n const schema = yup.object({\n contentTypes: yup.array().of(yup.string()),\n name: yup\n .string()\n .max(\n 255,\n formatMessage({\n id: 'Settings.review-workflows.validation.name.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n )\n .required(),\n\n stages: yup\n .array()\n .of(\n yup.object().shape({\n name: yup\n .string()\n .required(\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.name',\n defaultMessage: 'Name is required',\n })\n )\n .max(\n 255,\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.max-length',\n defaultMessage: 'Name can not be longer than 255 characters',\n })\n )\n .test(\n 'unique-name',\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.duplicate',\n defaultMessage: 'Stage name must be unique',\n }),\n function (stageName) {\n const {\n options: { context },\n } = this;\n\n return (\n context?.stages.filter((stage: Stage) => stage.name === stageName).length === 1\n );\n }\n ),\n color: yup\n .string()\n .required(\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.color',\n defaultMessage: 'Color is required',\n })\n )\n .matches(/^#(?:[0-9a-fA-F]{3}){1,2}$/i),\n\n permissions: yup\n .array(\n yup.object({\n role: yup\n .number()\n .strict()\n .typeError(\n formatMessage({\n id: 'Settings.review-workflows.validation.stage.permissions.role.number',\n defaultMessage: 'Role must be of type number',\n })\n )\n .required(),\n action: yup.string().required({\n id: 'Settings.review-workflows.validation.stage.permissions.action.required',\n defaultMessage: 'Action is a required argument',\n }),\n })\n )\n .strict(),\n })\n )\n .min(1),\n });\n\n try {\n await schema.validate(values, { abortEarly: false, context: values });\n\n return true;\n } catch (error) {\n const errors = {};\n\n if (error instanceof yup.ValidationError) {\n error.inner.forEach((error) => {\n if (error.path) set(errors, error.path, error.message);\n });\n }\n\n return errors;\n }\n}\n"],"names":["reducer","NestedOption","index","themeColorName","error"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const index = require("../_chunks/index-3OoQJD2O.js");
3
+ const index = require("../_chunks/index-8XZny-tn.js");
4
4
  require("react/jsx-runtime");
5
5
  require("@strapi/helper-plugin");
6
6
  require("react-dom/client");
@@ -1,4 +1,4 @@
1
- import { Z, _, Y } from "../_chunks/index-LblG7sy4.mjs";
1
+ import { Z, _, Y } from "../_chunks/index-rZLvYBJ8.mjs";
2
2
  import "react/jsx-runtime";
3
3
  import "@strapi/helper-plugin";
4
4
  import "react-dom/client";
@@ -0,0 +1,12 @@
1
+ import type { Entity } from '@strapi/types';
2
+ type Reason = 'relation' | 'unique';
3
+ type ProhibitedCloningField = [string[], Reason];
4
+ interface AutoCloneFailureModalProps {
5
+ onClose: () => void;
6
+ entryId: Entity.ID | null;
7
+ prohibitedFields: ProhibitedCloningField[];
8
+ pluginQueryParams: string;
9
+ }
10
+ declare const AutoCloneFailureModal: ({ onClose, entryId, prohibitedFields, pluginQueryParams, }: AutoCloneFailureModalProps) => import("react/jsx-runtime").JSX.Element | null;
11
+ export { AutoCloneFailureModal };
12
+ export type { ProhibitedCloningField };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/admin",
3
- "version": "4.19.0",
3
+ "version": "4.19.1",
4
4
  "description": "Strapi Admin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -73,13 +73,13 @@
73
73
  "@radix-ui/react-toolbar": "1.0.4",
74
74
  "@reduxjs/toolkit": "1.9.7",
75
75
  "@strapi/design-system": "1.14.1",
76
- "@strapi/helper-plugin": "4.19.0",
76
+ "@strapi/helper-plugin": "4.19.1",
77
77
  "@strapi/icons": "1.14.1",
78
- "@strapi/permissions": "4.19.0",
79
- "@strapi/provider-audit-logs-local": "4.19.0",
80
- "@strapi/types": "4.19.0",
81
- "@strapi/typescript-utils": "4.19.0",
82
- "@strapi/utils": "4.19.0",
78
+ "@strapi/permissions": "4.19.1",
79
+ "@strapi/provider-audit-logs-local": "4.19.1",
80
+ "@strapi/types": "4.19.1",
81
+ "@strapi/typescript-utils": "4.19.1",
82
+ "@strapi/utils": "4.19.1",
83
83
  "@vitejs/plugin-react-swc": "3.5.0",
84
84
  "axios": "1.6.0",
85
85
  "bcryptjs": "2.4.3",
@@ -169,11 +169,11 @@
169
169
  "yup": "0.32.9"
170
170
  },
171
171
  "devDependencies": {
172
- "@strapi/admin-test-utils": "4.19.0",
173
- "@strapi/data-transfer": "4.19.0",
174
- "@strapi/pack-up": "4.19.0",
175
- "@strapi/plugin-content-manager": "4.19.0",
176
- "@strapi/strapi": "4.19.0",
172
+ "@strapi/admin-test-utils": "4.19.1",
173
+ "@strapi/data-transfer": "4.19.1",
174
+ "@strapi/pack-up": "4.19.1",
175
+ "@strapi/plugin-content-manager": "4.19.1",
176
+ "@strapi/strapi": "4.19.1",
177
177
  "@testing-library/dom": "9.2.0",
178
178
  "@testing-library/react": "14.0.0",
179
179
  "@testing-library/user-event": "14.4.3",
@@ -222,5 +222,5 @@
222
222
  }
223
223
  }
224
224
  },
225
- "gitHead": "beec78649142fec14b075aa3658c515ea2fa9257"
225
+ "gitHead": "34f7e875cdbeee1f75a46ab733b7943eb518f47e"
226
226
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditPage-HXrULs9d.mjs","sources":["../../admin/src/pages/Settings/pages/Users/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n Form,\n GenericInput,\n LoadingIndicatorPage,\n SettingsPageTitle,\n translatedErrors,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useNotification,\n useOverlayBlocker,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Redirect, useHistory, useLocation, useRouteMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Update } from '../../../../../../shared/contracts/user';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { useAdminUsers, useUpdateUserMutation } from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { getFullName } from '../../../../utils/getFullName';\n\nimport { MagicLinkCE } from './components/MagicLinkCE';\nimport { SelectRoles } from './components/SelectRoles';\nimport { COMMON_USER_SCHEMA } from './utils/validation';\n\nimport type { FormLayout } from '../../../../types/form';\n\nconst EDIT_VALIDATION_SCHEMA = yup.object().shape({\n ...COMMON_USER_SCHEMA,\n isActive: yup.bool(),\n roles: yup.array().min(1, translatedErrors.required).required(translatedErrors.required),\n});\n\nconst fieldsToPick = ['email', 'firstname', 'lastname', 'username', 'isActive', 'roles'] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditPage = () => {\n const { formatMessage } = useIntl();\n const match = useRouteMatch<{ id: string }>('/settings/users/:id');\n const id = match?.params?.id ?? '';\n const { push } = useHistory();\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const MagicLink = useEnterprise(\n MagicLinkCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE'\n )\n ).MagicLinkEE\n );\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const permissions = useTypedSelector(selectAdminPermissions);\n\n const {\n isLoading: isLoadingRBAC,\n allowedActions: { canUpdate },\n } = useRBAC({\n read: permissions.settings?.users.read ?? [],\n update: permissions.settings?.users.update ?? [],\n });\n\n const [updateUser] = useUpdateUserMutation();\n\n useFocusWhenNavigate();\n\n const {\n data,\n error,\n isLoading: isLoadingAdminUsers,\n } = useAdminUsers(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [user] = data?.users ?? [];\n\n React.useEffect(() => {\n if (error) {\n // Redirect the use to the homepage if is not allowed to read\n if (error.name === 'UnauthorizedError') {\n toggleNotification({\n type: 'info',\n message: {\n id: 'notification.permission.not-allowed-read',\n defaultMessage: 'You are not allowed to see this document',\n },\n });\n\n push('/');\n } else {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: formatAPIError(error) },\n });\n }\n }\n }, [error, formatAPIError, push, toggleNotification]);\n\n const isLoading = isLoadingAdminUsers || !MagicLink || isLoadingRBAC;\n\n if (isLoading) {\n return (\n <Main aria-busy=\"true\">\n <SettingsPageTitle name=\"Users\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={formatMessage({\n id: 'app.containers.Users.EditPage.header.label-loading',\n defaultMessage: 'Edit user',\n })}\n navigationAction={\n <Link\n as={NavLink}\n startIcon={<ArrowLeft />}\n // @ts-expect-error – as component props are not inferred correctly.\n to=\"/settings/users?pageSize=10&page=1&sort=firstname\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n }\n\n type InitialData = Pick<Update.Request['body'], (typeof fieldsToPick)[number]> & {\n confirmPassword: string;\n password: string;\n };\n\n const initialData = {\n ...pick(user, fieldsToPick),\n roles: user.roles.map(({ id }) => id),\n password: '',\n confirmPassword: '',\n } satisfies InitialData;\n\n /**\n * TODO: Convert this to react-query.\n */\n const handleSubmit = async (body: InitialData, actions: FormikHelpers<InitialData>) => {\n lockApp?.();\n\n const res = await updateUser({\n id,\n ...omit(body, 'confirmPassword'),\n });\n\n if ('error' in res && isBaseQueryError(res.error)) {\n if (res.error.name === 'ValidationError') {\n actions.setErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n } else {\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n\n actions.setValues({\n ...pick(body, fieldsToPick),\n password: '',\n confirmPassword: '',\n });\n }\n\n unlockApp?.();\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Users\" />\n <Formik\n onSubmit={handleSubmit}\n initialValues={initialData}\n validateOnChange={false}\n validationSchema={EDIT_VALIDATION_SCHEMA}\n >\n {({ errors, values, handleChange, isSubmitting, dirty }) => {\n return (\n <Form>\n <HeaderLayout\n primaryAction={\n <Button\n disabled={isSubmitting || !canUpdate ? true : !dirty}\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n size=\"L\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={formatMessage(\n {\n id: 'app.containers.Users.EditPage.header.label',\n defaultMessage: 'Edit {name}',\n },\n {\n name:\n initialData.username ||\n getFullName(initialData?.firstname ?? '', initialData.lastname),\n }\n )}\n navigationAction={\n <Link\n as={NavLink}\n startIcon={<ArrowLeft />}\n // @ts-expect-error – as component props are not inferred correctly.\n to=\"/settings/users?pageSize=10&page=1&sort=firstname\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n {user?.registrationToken && (\n <Box paddingBottom={6}>\n <MagicLink registrationToken={user.registrationToken} />\n </Box>\n )}\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'app.components.Users.ModalCreateBody.block-title.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n {LAYOUT.map((row) =>\n row.map((input) => {\n return (\n <GridItem key={input.name} {...input.size}>\n <GenericInput\n {...input}\n disabled={!canUpdate}\n // TODO: remove this coercion.\n error={errors[input.name as keyof typeof errors] as string}\n onChange={handleChange}\n value={values[input.name as keyof typeof values]}\n />\n </GridItem>\n );\n })\n )}\n </Grid>\n </Flex>\n </Box>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.roles',\n defaultMessage: \"User's role\",\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem col={6} xs={12}>\n <SelectRoles\n disabled={!canUpdate}\n error={errors.roles as string}\n onChange={handleChange}\n value={values.roles}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage LAYOUT\n * -----------------------------------------------------------------------------------------------*/\n\nconst LAYOUT = [\n [\n {\n intlLabel: {\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n },\n name: 'firstname',\n placeholder: {\n id: 'Auth.form.firstname.placeholder',\n defaultMessage: 'e.g. Kai',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n required: true,\n },\n {\n intlLabel: {\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n },\n name: 'lastname',\n placeholder: {\n id: 'Auth.form.lastname.placeholder',\n defaultMessage: 'e.g. Doe',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n [\n {\n intlLabel: {\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n },\n name: 'email',\n placeholder: {\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'e.g. kai.doe@strapi.io',\n },\n type: 'email',\n size: {\n col: 6,\n xs: 12,\n },\n required: true,\n },\n {\n intlLabel: {\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n },\n name: 'username',\n placeholder: {\n id: 'Auth.form.username.placeholder',\n defaultMessage: 'e.g. Kai_Doe',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n [\n {\n intlLabel: {\n id: 'global.password',\n defaultMessage: 'Password',\n },\n name: 'password',\n type: 'password',\n size: {\n col: 6,\n xs: 12,\n },\n autoComplete: 'new-password',\n },\n {\n intlLabel: {\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Password confirmation',\n },\n name: 'confirmPassword',\n type: 'password',\n size: {\n col: 6,\n xs: 12,\n },\n autoComplete: 'new-password',\n },\n ],\n [\n {\n intlLabel: {\n id: 'Auth.form.active.label',\n defaultMessage: 'Active',\n },\n name: 'isActive',\n type: 'bool',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n] satisfies FormLayout[][];\n\nconst ProtectedEditPage = () => {\n const toggleNotification = useNotification();\n const permissions = useTypedSelector(selectAdminPermissions);\n\n const {\n isLoading,\n allowedActions: { canRead, canUpdate },\n } = useRBAC({\n read: permissions.settings?.users.read ?? [],\n update: permissions.settings?.users.update ?? [],\n });\n const { state } = useLocation<{ from: string }>();\n const from = state?.from ?? '/';\n\n React.useEffect(() => {\n if (!isLoading) {\n if (!canRead && !canUpdate) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'notification.permission.not-allowed-read',\n defaultMessage: 'You are not allowed to see this document',\n },\n });\n }\n }\n }, [isLoading, canRead, canUpdate, toggleNotification]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!canRead && !canUpdate) {\n return <Redirect to={from} />;\n }\n\n return <EditPage />;\n};\n\nexport { EditPage, ProtectedEditPage };\n"],"names":["id"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditPage-buPVDS8T.js","sources":["../../admin/src/pages/Settings/pages/Users/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n Form,\n GenericInput,\n LoadingIndicatorPage,\n SettingsPageTitle,\n translatedErrors,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useNotification,\n useOverlayBlocker,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Redirect, useHistory, useLocation, useRouteMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Update } from '../../../../../../shared/contracts/user';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { useAdminUsers, useUpdateUserMutation } from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { getFullName } from '../../../../utils/getFullName';\n\nimport { MagicLinkCE } from './components/MagicLinkCE';\nimport { SelectRoles } from './components/SelectRoles';\nimport { COMMON_USER_SCHEMA } from './utils/validation';\n\nimport type { FormLayout } from '../../../../types/form';\n\nconst EDIT_VALIDATION_SCHEMA = yup.object().shape({\n ...COMMON_USER_SCHEMA,\n isActive: yup.bool(),\n roles: yup.array().min(1, translatedErrors.required).required(translatedErrors.required),\n});\n\nconst fieldsToPick = ['email', 'firstname', 'lastname', 'username', 'isActive', 'roles'] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditPage = () => {\n const { formatMessage } = useIntl();\n const match = useRouteMatch<{ id: string }>('/settings/users/:id');\n const id = match?.params?.id ?? '';\n const { push } = useHistory();\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const MagicLink = useEnterprise(\n MagicLinkCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE'\n )\n ).MagicLinkEE\n );\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const permissions = useTypedSelector(selectAdminPermissions);\n\n const {\n isLoading: isLoadingRBAC,\n allowedActions: { canUpdate },\n } = useRBAC({\n read: permissions.settings?.users.read ?? [],\n update: permissions.settings?.users.update ?? [],\n });\n\n const [updateUser] = useUpdateUserMutation();\n\n useFocusWhenNavigate();\n\n const {\n data,\n error,\n isLoading: isLoadingAdminUsers,\n } = useAdminUsers(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [user] = data?.users ?? [];\n\n React.useEffect(() => {\n if (error) {\n // Redirect the use to the homepage if is not allowed to read\n if (error.name === 'UnauthorizedError') {\n toggleNotification({\n type: 'info',\n message: {\n id: 'notification.permission.not-allowed-read',\n defaultMessage: 'You are not allowed to see this document',\n },\n });\n\n push('/');\n } else {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: formatAPIError(error) },\n });\n }\n }\n }, [error, formatAPIError, push, toggleNotification]);\n\n const isLoading = isLoadingAdminUsers || !MagicLink || isLoadingRBAC;\n\n if (isLoading) {\n return (\n <Main aria-busy=\"true\">\n <SettingsPageTitle name=\"Users\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={formatMessage({\n id: 'app.containers.Users.EditPage.header.label-loading',\n defaultMessage: 'Edit user',\n })}\n navigationAction={\n <Link\n as={NavLink}\n startIcon={<ArrowLeft />}\n // @ts-expect-error – as component props are not inferred correctly.\n to=\"/settings/users?pageSize=10&page=1&sort=firstname\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n }\n\n type InitialData = Pick<Update.Request['body'], (typeof fieldsToPick)[number]> & {\n confirmPassword: string;\n password: string;\n };\n\n const initialData = {\n ...pick(user, fieldsToPick),\n roles: user.roles.map(({ id }) => id),\n password: '',\n confirmPassword: '',\n } satisfies InitialData;\n\n /**\n * TODO: Convert this to react-query.\n */\n const handleSubmit = async (body: InitialData, actions: FormikHelpers<InitialData>) => {\n lockApp?.();\n\n const res = await updateUser({\n id,\n ...omit(body, 'confirmPassword'),\n });\n\n if ('error' in res && isBaseQueryError(res.error)) {\n if (res.error.name === 'ValidationError') {\n actions.setErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n } else {\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n\n actions.setValues({\n ...pick(body, fieldsToPick),\n password: '',\n confirmPassword: '',\n });\n }\n\n unlockApp?.();\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Users\" />\n <Formik\n onSubmit={handleSubmit}\n initialValues={initialData}\n validateOnChange={false}\n validationSchema={EDIT_VALIDATION_SCHEMA}\n >\n {({ errors, values, handleChange, isSubmitting, dirty }) => {\n return (\n <Form>\n <HeaderLayout\n primaryAction={\n <Button\n disabled={isSubmitting || !canUpdate ? true : !dirty}\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n size=\"L\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={formatMessage(\n {\n id: 'app.containers.Users.EditPage.header.label',\n defaultMessage: 'Edit {name}',\n },\n {\n name:\n initialData.username ||\n getFullName(initialData?.firstname ?? '', initialData.lastname),\n }\n )}\n navigationAction={\n <Link\n as={NavLink}\n startIcon={<ArrowLeft />}\n // @ts-expect-error – as component props are not inferred correctly.\n to=\"/settings/users?pageSize=10&page=1&sort=firstname\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n {user?.registrationToken && (\n <Box paddingBottom={6}>\n <MagicLink registrationToken={user.registrationToken} />\n </Box>\n )}\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'app.components.Users.ModalCreateBody.block-title.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n {LAYOUT.map((row) =>\n row.map((input) => {\n return (\n <GridItem key={input.name} {...input.size}>\n <GenericInput\n {...input}\n disabled={!canUpdate}\n // TODO: remove this coercion.\n error={errors[input.name as keyof typeof errors] as string}\n onChange={handleChange}\n value={values[input.name as keyof typeof values]}\n />\n </GridItem>\n );\n })\n )}\n </Grid>\n </Flex>\n </Box>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.roles',\n defaultMessage: \"User's role\",\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem col={6} xs={12}>\n <SelectRoles\n disabled={!canUpdate}\n error={errors.roles as string}\n onChange={handleChange}\n value={values.roles}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage LAYOUT\n * -----------------------------------------------------------------------------------------------*/\n\nconst LAYOUT = [\n [\n {\n intlLabel: {\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n },\n name: 'firstname',\n placeholder: {\n id: 'Auth.form.firstname.placeholder',\n defaultMessage: 'e.g. Kai',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n required: true,\n },\n {\n intlLabel: {\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n },\n name: 'lastname',\n placeholder: {\n id: 'Auth.form.lastname.placeholder',\n defaultMessage: 'e.g. Doe',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n [\n {\n intlLabel: {\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n },\n name: 'email',\n placeholder: {\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'e.g. kai.doe@strapi.io',\n },\n type: 'email',\n size: {\n col: 6,\n xs: 12,\n },\n required: true,\n },\n {\n intlLabel: {\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n },\n name: 'username',\n placeholder: {\n id: 'Auth.form.username.placeholder',\n defaultMessage: 'e.g. Kai_Doe',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n [\n {\n intlLabel: {\n id: 'global.password',\n defaultMessage: 'Password',\n },\n name: 'password',\n type: 'password',\n size: {\n col: 6,\n xs: 12,\n },\n autoComplete: 'new-password',\n },\n {\n intlLabel: {\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Password confirmation',\n },\n name: 'confirmPassword',\n type: 'password',\n size: {\n col: 6,\n xs: 12,\n },\n autoComplete: 'new-password',\n },\n ],\n [\n {\n intlLabel: {\n id: 'Auth.form.active.label',\n defaultMessage: 'Active',\n },\n name: 'isActive',\n type: 'bool',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n] satisfies FormLayout[][];\n\nconst ProtectedEditPage = () => {\n const toggleNotification = useNotification();\n const permissions = useTypedSelector(selectAdminPermissions);\n\n const {\n isLoading,\n allowedActions: { canRead, canUpdate },\n } = useRBAC({\n read: permissions.settings?.users.read ?? [],\n update: permissions.settings?.users.update ?? [],\n });\n const { state } = useLocation<{ from: string }>();\n const from = state?.from ?? '/';\n\n React.useEffect(() => {\n if (!isLoading) {\n if (!canRead && !canUpdate) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'notification.permission.not-allowed-read',\n defaultMessage: 'You are not allowed to see this document',\n },\n });\n }\n }\n }, [isLoading, canRead, canUpdate, toggleNotification]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!canRead && !canUpdate) {\n return <Redirect to={from} />;\n }\n\n return <EditPage />;\n};\n\nexport { EditPage, ProtectedEditPage };\n"],"names":["yup","COMMON_USER_SCHEMA","translatedErrors","useIntl","useRouteMatch","useHistory","useNotification","useOverlayBlocker","useEnterprise","MagicLinkCE","useAPIErrorHandler","useTypedSelector","selectAdminPermissions","useRBAC","useUpdateUserMutation","useFocusWhenNavigate","useAdminUsers","React","jsxs","Main","jsx","SettingsPageTitle","HeaderLayout","Button","Check","Link","NavLink","ArrowLeft","ContentLayout","LoadingIndicatorPage","pick","id","omit","isBaseQueryError","Formik","Form","getFullName","Box","Flex","Typography","Grid","GridItem","GenericInput","SelectRoles","useLocation","Redirect"],"mappings":"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"}