@strapi/admin 4.23.2 → 4.24.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 (227) hide show
  1. package/dist/_chunks/{AdminSeatInfo-KE_VtoNB.mjs → AdminSeatInfo-cKbM8kvI.mjs} +3 -3
  2. package/dist/_chunks/{AdminSeatInfo-KE_VtoNB.mjs.map → AdminSeatInfo-cKbM8kvI.mjs.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-_N4B3WC3.js → AdminSeatInfo-pyBx72br.js} +3 -3
  4. package/dist/_chunks/{AdminSeatInfo-_N4B3WC3.js.map → AdminSeatInfo-pyBx72br.js.map} +1 -1
  5. package/dist/_chunks/{AuthenticatedApp-5iqvfpEB.js → AuthenticatedApp-9kONd5LP.js} +20 -20
  6. package/dist/_chunks/{AuthenticatedApp-5iqvfpEB.js.map → AuthenticatedApp-9kONd5LP.js.map} +1 -1
  7. package/dist/_chunks/{AuthenticatedApp-vmfce77h.mjs → AuthenticatedApp-sMEn0FIG.mjs} +20 -20
  8. package/dist/_chunks/{AuthenticatedApp-vmfce77h.mjs.map → AuthenticatedApp-sMEn0FIG.mjs.map} +1 -1
  9. package/dist/_chunks/{CreateActionEE-7JEGMRic.mjs → CreateActionEE-JWg218Mx.mjs} +2 -2
  10. package/dist/_chunks/{CreateActionEE-7JEGMRic.mjs.map → CreateActionEE-JWg218Mx.mjs.map} +1 -1
  11. package/dist/_chunks/{CreateActionEE-mIpb-93c.js → CreateActionEE-llgsP6GG.js} +2 -2
  12. package/dist/_chunks/{CreateActionEE-mIpb-93c.js.map → CreateActionEE-llgsP6GG.js.map} +1 -1
  13. package/dist/_chunks/{CreatePage-B9fTRFQD.mjs → CreatePage-1qK_lewD.mjs} +8 -8
  14. package/dist/_chunks/{CreatePage-B9fTRFQD.mjs.map → CreatePage-1qK_lewD.mjs.map} +1 -1
  15. package/dist/_chunks/{CreatePage-WE1XPqXl.mjs → CreatePage-2CvZuw2s.mjs} +6 -6
  16. package/dist/_chunks/{CreatePage-WE1XPqXl.mjs.map → CreatePage-2CvZuw2s.mjs.map} +1 -1
  17. package/dist/_chunks/{CreatePage-v2Y9UAtK.js → CreatePage-4TuZ5JvH.js} +8 -8
  18. package/dist/_chunks/{CreatePage-v2Y9UAtK.js.map → CreatePage-4TuZ5JvH.js.map} +1 -1
  19. package/dist/_chunks/{CreatePage-Fwj_klqr.mjs → CreatePage-9s1f9eRV.mjs} +3 -3
  20. package/dist/_chunks/{CreatePage-Fwj_klqr.mjs.map → CreatePage-9s1f9eRV.mjs.map} +1 -1
  21. package/dist/_chunks/{CreatePage-UAzUcwFG.js → CreatePage-N4sMG7CZ.js} +6 -6
  22. package/dist/_chunks/{CreatePage-UAzUcwFG.js.map → CreatePage-N4sMG7CZ.js.map} +1 -1
  23. package/dist/_chunks/{CreatePage-3VGDAvDI.js → CreatePage-pRSqvram.js} +3 -3
  24. package/dist/_chunks/{CreatePage-3VGDAvDI.js.map → CreatePage-pRSqvram.js.map} +1 -1
  25. package/dist/_chunks/{CreateView-F47zLXsj.js → CreateView-Av3Oi80N.js} +6 -6
  26. package/dist/_chunks/{CreateView-F47zLXsj.js.map → CreateView-Av3Oi80N.js.map} +1 -1
  27. package/dist/_chunks/{CreateView-P6fz1kPz.mjs → CreateView-JSnWP1nr.mjs} +6 -6
  28. package/dist/_chunks/{CreateView-P6fz1kPz.mjs.map → CreateView-JSnWP1nr.mjs.map} +1 -1
  29. package/dist/_chunks/{CreateView-Swv3a219.js → CreateView-KYcik-3y.js} +6 -6
  30. package/dist/_chunks/{CreateView-Swv3a219.js.map → CreateView-KYcik-3y.js.map} +1 -1
  31. package/dist/_chunks/{CreateView-_AGvjtyE.mjs → CreateView-Q1D43XPT.mjs} +6 -6
  32. package/dist/_chunks/{CreateView-_AGvjtyE.mjs.map → CreateView-Q1D43XPT.mjs.map} +1 -1
  33. package/dist/_chunks/{EditPage-QdsABeT4.mjs → EditPage-1oQB_ybR.mjs} +4 -4
  34. package/dist/_chunks/{EditPage-QdsABeT4.mjs.map → EditPage-1oQB_ybR.mjs.map} +1 -1
  35. package/dist/_chunks/{EditPage-QqLSWhpo.mjs → EditPage-1zzhTAkb.mjs} +6 -6
  36. package/dist/_chunks/{EditPage-QqLSWhpo.mjs.map → EditPage-1zzhTAkb.mjs.map} +1 -1
  37. package/dist/_chunks/{EditPage-tebN0rBw.js → EditPage-F6ENQ_7v.js} +4 -4
  38. package/dist/_chunks/{EditPage-tebN0rBw.js.map → EditPage-F6ENQ_7v.js.map} +1 -1
  39. package/dist/_chunks/{EditPage-QMwmJ5JQ.js → EditPage-SpK2YHJ9.js} +6 -6
  40. package/dist/_chunks/{EditPage-QMwmJ5JQ.js.map → EditPage-SpK2YHJ9.js.map} +1 -1
  41. package/dist/_chunks/{EditPage-YW6ma93C.js → EditPage-hc2BwI4v.js} +9 -9
  42. package/dist/_chunks/{EditPage-YW6ma93C.js.map → EditPage-hc2BwI4v.js.map} +1 -1
  43. package/dist/_chunks/{EditPage-RcHXdjjr.js → EditPage-obOSpUc6.js} +6 -6
  44. package/dist/_chunks/{EditPage-RcHXdjjr.js.map → EditPage-obOSpUc6.js.map} +1 -1
  45. package/dist/_chunks/{EditPage-crYemO-y.mjs → EditPage-qSnWDV7_.mjs} +9 -9
  46. package/dist/_chunks/{EditPage-crYemO-y.mjs.map → EditPage-qSnWDV7_.mjs.map} +1 -1
  47. package/dist/_chunks/{EditPage-CJuVCx-g.mjs → EditPage-wIAsRhCK.mjs} +6 -6
  48. package/dist/_chunks/{EditPage-CJuVCx-g.mjs.map → EditPage-wIAsRhCK.mjs.map} +1 -1
  49. package/dist/_chunks/{EditView-klIosVnD.js → EditView-YplxCh76.js} +4 -4
  50. package/dist/_chunks/{EditView-klIosVnD.js.map → EditView-YplxCh76.js.map} +1 -1
  51. package/dist/_chunks/{EditView-fs8peSWa.mjs → EditView-zrXj5T-c.mjs} +4 -4
  52. package/dist/_chunks/{EditView-fs8peSWa.mjs.map → EditView-zrXj5T-c.mjs.map} +1 -1
  53. package/dist/_chunks/{EditViewPage-zJ_Q-t3A.js → EditViewPage-HC95kNgd.js} +4 -4
  54. package/dist/_chunks/{EditViewPage-zJ_Q-t3A.js.map → EditViewPage-HC95kNgd.js.map} +1 -1
  55. package/dist/_chunks/{EditViewPage-LHbHpdhM.mjs → EditViewPage-awuXoCRr.mjs} +4 -4
  56. package/dist/_chunks/{EditViewPage-LHbHpdhM.mjs.map → EditViewPage-awuXoCRr.mjs.map} +1 -1
  57. package/dist/_chunks/{EventsTable-NdiLAu5P.mjs → EventsTable-4vNRxK-S.mjs} +6 -6
  58. package/dist/_chunks/{EventsTable-NdiLAu5P.mjs.map → EventsTable-4vNRxK-S.mjs.map} +1 -1
  59. package/dist/_chunks/{EventsTable-_eXpftgI.js → EventsTable-_LhZe7re.js} +6 -6
  60. package/dist/_chunks/{EventsTable-_eXpftgI.js.map → EventsTable-_LhZe7re.js.map} +1 -1
  61. package/dist/_chunks/{HomePage-bT5s6lrT.js → HomePage-YJFJpQMu.js} +5 -5
  62. package/dist/_chunks/{HomePage-bT5s6lrT.js.map → HomePage-YJFJpQMu.js.map} +1 -1
  63. package/dist/_chunks/{HomePage-v8rVPJuj.mjs → HomePage-fMxSIEsd.mjs} +5 -5
  64. package/dist/_chunks/{HomePage-v8rVPJuj.mjs.map → HomePage-fMxSIEsd.mjs.map} +1 -1
  65. package/dist/_chunks/{HomePage-dmpKU8y6.js → HomePage-tbMtKZ5S.js} +6 -6
  66. package/dist/_chunks/{HomePage-dmpKU8y6.js.map → HomePage-tbMtKZ5S.js.map} +1 -1
  67. package/dist/_chunks/{HomePage-ae_uMcU_.mjs → HomePage-uz2pWbR8.mjs} +6 -6
  68. package/dist/_chunks/{HomePage-ae_uMcU_.mjs.map → HomePage-uz2pWbR8.mjs.map} +1 -1
  69. package/dist/_chunks/{InformationBoxEE-2wP_l6oW.js → InformationBoxEE-FTugJx5y.js} +3 -3
  70. package/dist/_chunks/{InformationBoxEE-2wP_l6oW.js.map → InformationBoxEE-FTugJx5y.js.map} +1 -1
  71. package/dist/_chunks/{InformationBoxEE-hVvfbwoY.mjs → InformationBoxEE-iERsuegv.mjs} +3 -3
  72. package/dist/_chunks/{InformationBoxEE-hVvfbwoY.mjs.map → InformationBoxEE-iERsuegv.mjs.map} +1 -1
  73. package/dist/_chunks/{InstalledPluginsPage-PzvhpnDs.mjs → InstalledPluginsPage-fHk7YMKM.mjs} +3 -3
  74. package/dist/_chunks/{InstalledPluginsPage-PzvhpnDs.mjs.map → InstalledPluginsPage-fHk7YMKM.mjs.map} +1 -1
  75. package/dist/_chunks/{InstalledPluginsPage-zkyXx3cn.js → InstalledPluginsPage-yQJCBWcd.js} +3 -3
  76. package/dist/_chunks/{InstalledPluginsPage-zkyXx3cn.js.map → InstalledPluginsPage-yQJCBWcd.js.map} +1 -1
  77. package/dist/_chunks/{Layout-zOLboQ37.js → Layout-1AJukXSa.js} +2 -2
  78. package/dist/_chunks/{Layout-zOLboQ37.js.map → Layout-1AJukXSa.js.map} +1 -1
  79. package/dist/_chunks/{Layout-GDP_UEmJ.mjs → Layout-L5IGgYl9.mjs} +2 -2
  80. package/dist/_chunks/{Layout-GDP_UEmJ.mjs.map → Layout-L5IGgYl9.mjs.map} +1 -1
  81. package/dist/_chunks/{ListPage-M_r9C4z3.js → ListPage--ku74hPe.js} +3 -3
  82. package/dist/_chunks/{ListPage-M_r9C4z3.js.map → ListPage--ku74hPe.js.map} +1 -1
  83. package/dist/_chunks/{ListPage-3VDUY4C1.mjs → ListPage-Asr3_NSR.mjs} +4 -4
  84. package/dist/_chunks/{ListPage-3VDUY4C1.mjs.map → ListPage-Asr3_NSR.mjs.map} +1 -1
  85. package/dist/_chunks/{ListPage-LOBwNC1N.js → ListPage-HIeUaGJt.js} +4 -4
  86. package/dist/_chunks/{ListPage-LOBwNC1N.js.map → ListPage-HIeUaGJt.js.map} +1 -1
  87. package/dist/_chunks/{ListPage-OPz3B8l5.js → ListPage-PplJ33CZ.js} +2 -2
  88. package/dist/_chunks/{ListPage-OPz3B8l5.js.map → ListPage-PplJ33CZ.js.map} +1 -1
  89. package/dist/_chunks/{ListPage-jOJ4qcbr.js → ListPage-QtaoNrK6.js} +8 -8
  90. package/dist/_chunks/{ListPage-jOJ4qcbr.js.map → ListPage-QtaoNrK6.js.map} +1 -1
  91. package/dist/_chunks/{ListPage-5IXM7EKz.js → ListPage-R_vY34Z8.js} +7 -7
  92. package/dist/_chunks/{ListPage-5IXM7EKz.js.map → ListPage-R_vY34Z8.js.map} +1 -1
  93. package/dist/_chunks/{ListPage-uec0MRL3.mjs → ListPage-dJ5LoxEG.mjs} +8 -8
  94. package/dist/_chunks/{ListPage-uec0MRL3.mjs.map → ListPage-dJ5LoxEG.mjs.map} +1 -1
  95. package/dist/_chunks/{ListPage-C3I2VPio.mjs → ListPage-dSxW7zGR.mjs} +2 -2
  96. package/dist/_chunks/{ListPage-C3I2VPio.mjs.map → ListPage-dSxW7zGR.mjs.map} +1 -1
  97. package/dist/_chunks/{ListPage-HWlQFt6f.mjs → ListPage-gH7NTmzw.mjs} +6 -6
  98. package/dist/_chunks/{ListPage-HWlQFt6f.mjs.map → ListPage-gH7NTmzw.mjs.map} +1 -1
  99. package/dist/_chunks/{ListPage-vj24qm0W.mjs → ListPage-jukX-rcq.mjs} +3 -3
  100. package/dist/_chunks/{ListPage-vj24qm0W.mjs.map → ListPage-jukX-rcq.mjs.map} +1 -1
  101. package/dist/_chunks/{ListPage-lesQnsFC.mjs → ListPage-u7Dy3pFw.mjs} +7 -7
  102. package/dist/_chunks/{ListPage-lesQnsFC.mjs.map → ListPage-u7Dy3pFw.mjs.map} +1 -1
  103. package/dist/_chunks/{ListPage-oG1kX39K.js → ListPage-wCETa9bA.js} +6 -6
  104. package/dist/_chunks/{ListPage-oG1kX39K.js.map → ListPage-wCETa9bA.js.map} +1 -1
  105. package/dist/_chunks/{ListView-rDSJ43rJ.js → ListView--oYSWTMj.js} +3 -3
  106. package/dist/_chunks/{ListView-rDSJ43rJ.js.map → ListView--oYSWTMj.js.map} +1 -1
  107. package/dist/_chunks/{ListView-MyQBf2Na.mjs → ListView-8acfdhwB.mjs} +3 -3
  108. package/dist/_chunks/{ListView-MyQBf2Na.mjs.map → ListView-8acfdhwB.mjs.map} +1 -1
  109. package/dist/_chunks/{ListView-B_kb1j7E.mjs → ListView-_WGm0UfE.mjs} +3 -3
  110. package/dist/_chunks/{ListView-B_kb1j7E.mjs.map → ListView-_WGm0UfE.mjs.map} +1 -1
  111. package/dist/_chunks/{ListView-EeouOQe0.js → ListView-a8tgfYZR.js} +3 -3
  112. package/dist/_chunks/{ListView-EeouOQe0.js.map → ListView-a8tgfYZR.js.map} +1 -1
  113. package/dist/_chunks/{Login-z_eNw0aq.mjs → Login-H7Cb-b9u.mjs} +2 -2
  114. package/dist/_chunks/{Login-z_eNw0aq.mjs.map → Login-H7Cb-b9u.mjs.map} +1 -1
  115. package/dist/_chunks/{Login-d8Rmxx42.js → Login-JJSG3Q17.js} +2 -2
  116. package/dist/_chunks/{Login-d8Rmxx42.js.map → Login-JJSG3Q17.js.map} +1 -1
  117. package/dist/_chunks/{MagicLinkEE-Ssk2HIon.js → MagicLinkEE-QrxWwK3J.js} +4 -4
  118. package/dist/_chunks/{MagicLinkEE-Ssk2HIon.js.map → MagicLinkEE-QrxWwK3J.js.map} +1 -1
  119. package/dist/_chunks/{MagicLinkEE-nY_rrjIW.mjs → MagicLinkEE-h2AfSkky.mjs} +4 -4
  120. package/dist/_chunks/{MagicLinkEE-nY_rrjIW.mjs.map → MagicLinkEE-h2AfSkky.mjs.map} +1 -1
  121. package/dist/_chunks/{MarketplacePage-MRoV6BFT.js → MarketplacePage-HXV33aGR.js} +3 -3
  122. package/dist/_chunks/{MarketplacePage-MRoV6BFT.js.map → MarketplacePage-HXV33aGR.js.map} +1 -1
  123. package/dist/_chunks/{MarketplacePage-tdY7a3GU.mjs → MarketplacePage-Mv65CBzK.mjs} +3 -3
  124. package/dist/_chunks/{MarketplacePage-tdY7a3GU.mjs.map → MarketplacePage-Mv65CBzK.mjs.map} +1 -1
  125. package/dist/_chunks/{Permissions-qCTg4lLb.js → Permissions-U7Gfxm78.js} +2 -2
  126. package/dist/_chunks/{Permissions-qCTg4lLb.js.map → Permissions-U7Gfxm78.js.map} +1 -1
  127. package/dist/_chunks/{Permissions-AuRXi3wh.mjs → Permissions-o5FsqSEN.mjs} +2 -2
  128. package/dist/_chunks/{Permissions-AuRXi3wh.mjs.map → Permissions-o5FsqSEN.mjs.map} +1 -1
  129. package/dist/_chunks/{ProfilePage-8PidGS-E.js → ProfilePage-HNl8o56h.js} +3 -3
  130. package/dist/_chunks/{ProfilePage-8PidGS-E.js.map → ProfilePage-HNl8o56h.js.map} +1 -1
  131. package/dist/_chunks/{ProfilePage-tk8O3bWD.mjs → ProfilePage-yu1ayyHY.mjs} +3 -3
  132. package/dist/_chunks/{ProfilePage-tk8O3bWD.mjs.map → ProfilePage-yu1ayyHY.mjs.map} +1 -1
  133. package/dist/_chunks/{ReviewWorkflowsColumn-dGM2dqb1.mjs → ReviewWorkflowsColumn-HWKasziL.mjs} +2 -2
  134. package/dist/_chunks/{ReviewWorkflowsColumn-dGM2dqb1.mjs.map → ReviewWorkflowsColumn-HWKasziL.mjs.map} +1 -1
  135. package/dist/_chunks/{ReviewWorkflowsColumn-HL8eutH9.js → ReviewWorkflowsColumn-eNxSowxH.js} +2 -2
  136. package/dist/_chunks/{ReviewWorkflowsColumn-HL8eutH9.js.map → ReviewWorkflowsColumn-eNxSowxH.js.map} +1 -1
  137. package/dist/_chunks/{SelectRoles-99G5SAc9.js → SelectRoles-fcY2TRKH.js} +3 -3
  138. package/dist/_chunks/{SelectRoles-99G5SAc9.js.map → SelectRoles-fcY2TRKH.js.map} +1 -1
  139. package/dist/_chunks/{SelectRoles-b30BNfVs.mjs → SelectRoles-lGIENydS.mjs} +3 -3
  140. package/dist/_chunks/{SelectRoles-b30BNfVs.mjs.map → SelectRoles-lGIENydS.mjs.map} +1 -1
  141. package/dist/_chunks/{SettingsPage-GC4mHMpW.mjs → SettingsPage-AdHfj5GW.mjs} +21 -21
  142. package/dist/_chunks/{SettingsPage-GC4mHMpW.mjs.map → SettingsPage-AdHfj5GW.mjs.map} +1 -1
  143. package/dist/_chunks/{SettingsPage-Q_XpXq3B.js → SettingsPage-mAb9sKT9.js} +21 -21
  144. package/dist/_chunks/{SettingsPage-Q_XpXq3B.js.map → SettingsPage-mAb9sKT9.js.map} +1 -1
  145. package/dist/_chunks/{SingleSignOnPage-LNJdNfp1.js → SingleSignOnPage-m31WC3pK.js} +3 -3
  146. package/dist/_chunks/{SingleSignOnPage-LNJdNfp1.js.map → SingleSignOnPage-m31WC3pK.js.map} +1 -1
  147. package/dist/_chunks/{SingleSignOnPage-be7C1V4v.mjs → SingleSignOnPage-xe2YbAsv.mjs} +3 -3
  148. package/dist/_chunks/{SingleSignOnPage-be7C1V4v.mjs.map → SingleSignOnPage-xe2YbAsv.mjs.map} +1 -1
  149. package/dist/_chunks/{TokenTypeSelect-jRkkuSep.mjs → TokenTypeSelect-VqdmzXA_.mjs} +2 -2
  150. package/dist/_chunks/{TokenTypeSelect-jRkkuSep.mjs.map → TokenTypeSelect-VqdmzXA_.mjs.map} +1 -1
  151. package/dist/_chunks/{TokenTypeSelect-b36zu2Sc.js → TokenTypeSelect-X2ULS8wc.js} +2 -2
  152. package/dist/_chunks/{TokenTypeSelect-b36zu2Sc.js.map → TokenTypeSelect-X2ULS8wc.js.map} +1 -1
  153. package/dist/_chunks/{apiTokens-ooREfQj_.js → apiTokens-82n35OFR.js} +2 -2
  154. package/dist/_chunks/{apiTokens-ooREfQj_.js.map → apiTokens-82n35OFR.js.map} +1 -1
  155. package/dist/_chunks/{apiTokens-LPnUJfhZ.mjs → apiTokens-GZPZS8MW.mjs} +2 -2
  156. package/dist/_chunks/{apiTokens-LPnUJfhZ.mjs.map → apiTokens-GZPZS8MW.mjs.map} +1 -1
  157. package/dist/_chunks/{constants-h-tVBP8K.js → constants-3wB1UhYD.js} +2 -2
  158. package/dist/_chunks/{constants-h-tVBP8K.js.map → constants-3wB1UhYD.js.map} +1 -1
  159. package/dist/_chunks/{constants-HcTY-6W4.mjs → constants-4SP3TBnI.mjs} +6 -6
  160. package/dist/_chunks/{constants-HcTY-6W4.mjs.map → constants-4SP3TBnI.mjs.map} +1 -1
  161. package/dist/_chunks/{constants-1EiuW4az.mjs → constants-4rk-q6TX.mjs} +2 -2
  162. package/dist/_chunks/{constants-1EiuW4az.mjs.map → constants-4rk-q6TX.mjs.map} +1 -1
  163. package/dist/_chunks/{constants-klmN6vjK.mjs → constants-LwQ2Ofil.mjs} +2 -2
  164. package/dist/_chunks/{constants-klmN6vjK.mjs.map → constants-LwQ2Ofil.mjs.map} +1 -1
  165. package/dist/_chunks/{constants-MaMXOtT-.js → constants-X171CMX-.js} +6 -6
  166. package/dist/_chunks/{constants-MaMXOtT-.js.map → constants-X171CMX-.js.map} +1 -1
  167. package/dist/_chunks/{constants-Ko6IZrV6.js → constants-n2SnaxpT.js} +2 -2
  168. package/dist/_chunks/{constants-Ko6IZrV6.js.map → constants-n2SnaxpT.js.map} +1 -1
  169. package/dist/_chunks/{constants-JCyh3omW.mjs → constants-rwBV5bIU.mjs} +4 -4
  170. package/dist/_chunks/{constants-JCyh3omW.mjs.map → constants-rwBV5bIU.mjs.map} +1 -1
  171. package/dist/_chunks/{constants-RmtQyXhk.js → constants-ycjYcL0v.js} +4 -4
  172. package/dist/_chunks/{constants-RmtQyXhk.js.map → constants-ycjYcL0v.js.map} +1 -1
  173. package/dist/_chunks/{index-4aVfWqGT.js → index-WJOOvkDD.js} +40 -59
  174. package/dist/_chunks/index-WJOOvkDD.js.map +1 -0
  175. package/dist/_chunks/{index-vvwcWElx.mjs → index-jPSc5477.mjs} +40 -59
  176. package/dist/_chunks/index-jPSc5477.mjs.map +1 -0
  177. package/dist/_chunks/{reviewWorkflows-uKwkUDxU.mjs → reviewWorkflows-gLpmSc-P.mjs} +2 -2
  178. package/dist/_chunks/{reviewWorkflows-uKwkUDxU.mjs.map → reviewWorkflows-gLpmSc-P.mjs.map} +1 -1
  179. package/dist/_chunks/{reviewWorkflows-f9R-pYlb.js → reviewWorkflows-ksEl2Csi.js} +2 -2
  180. package/dist/_chunks/{reviewWorkflows-f9R-pYlb.js.map → reviewWorkflows-ksEl2Csi.js.map} +1 -1
  181. package/dist/_chunks/{transferTokens-Q0fQ9Iky.mjs → transferTokens-fYJp5ok3.mjs} +2 -2
  182. package/dist/_chunks/{transferTokens-Q0fQ9Iky.mjs.map → transferTokens-fYJp5ok3.mjs.map} +1 -1
  183. package/dist/_chunks/{transferTokens-kLqS9bew.js → transferTokens-suC3-N9k.js} +2 -2
  184. package/dist/_chunks/{transferTokens-kLqS9bew.js.map → transferTokens-suC3-N9k.js.map} +1 -1
  185. package/dist/_chunks/{useAdminRoles-_CkSt1Vb.mjs → useAdminRoles-S0VLTy6d.mjs} +2 -2
  186. package/dist/_chunks/{useAdminRoles-_CkSt1Vb.mjs.map → useAdminRoles-S0VLTy6d.mjs.map} +1 -1
  187. package/dist/_chunks/{useAdminRoles-YetuCm8K.js → useAdminRoles-rzx-BOWF.js} +2 -2
  188. package/dist/_chunks/{useAdminRoles-YetuCm8K.js.map → useAdminRoles-rzx-BOWF.js.map} +1 -1
  189. package/dist/_chunks/{useContentTypes-97fT5wA5.mjs → useContentTypes-9lPhF1tf.mjs} +2 -2
  190. package/dist/_chunks/{useContentTypes-97fT5wA5.mjs.map → useContentTypes-9lPhF1tf.mjs.map} +1 -1
  191. package/dist/_chunks/{useContentTypes-RYf0eavc.js → useContentTypes-CGkh8E2r.js} +2 -2
  192. package/dist/_chunks/{useContentTypes-RYf0eavc.js.map → useContentTypes-CGkh8E2r.js.map} +1 -1
  193. package/dist/_chunks/{useLicenseLimitNotification-n4mloill.mjs → useLicenseLimitNotification-4XtO7tSc.mjs} +2 -2
  194. package/dist/_chunks/{useLicenseLimitNotification-n4mloill.mjs.map → useLicenseLimitNotification-4XtO7tSc.mjs.map} +1 -1
  195. package/dist/_chunks/{useLicenseLimitNotification-lapWByuI.js → useLicenseLimitNotification-pFWrPKCC.js} +2 -2
  196. package/dist/_chunks/{useLicenseLimitNotification-lapWByuI.js.map → useLicenseLimitNotification-pFWrPKCC.js.map} +1 -1
  197. package/dist/_chunks/{useReviewWorkflows-FBHsre8X.mjs → useReviewWorkflows-uyrpgZeG.mjs} +2 -2
  198. package/dist/_chunks/{useReviewWorkflows-FBHsre8X.mjs.map → useReviewWorkflows-uyrpgZeG.mjs.map} +1 -1
  199. package/dist/_chunks/{useReviewWorkflows-5OJDAwb-.js → useReviewWorkflows-vGqBbIF4.js} +2 -2
  200. package/dist/_chunks/{useReviewWorkflows-5OJDAwb-.js.map → useReviewWorkflows-vGqBbIF4.js.map} +1 -1
  201. package/dist/_chunks/{useWebhooks-1XhDgO40.mjs → useWebhooks-Lb4ugXPu.mjs} +2 -2
  202. package/dist/_chunks/{useWebhooks-1XhDgO40.mjs.map → useWebhooks-Lb4ugXPu.mjs.map} +1 -1
  203. package/dist/_chunks/{useWebhooks-Yedq1BSI.js → useWebhooks-WKx90f9K.js} +2 -2
  204. package/dist/_chunks/{useWebhooks-Yedq1BSI.js.map → useWebhooks-WKx90f9K.js.map} +1 -1
  205. package/dist/_chunks/{validateWorkflow-MJBumqKr.mjs → validateWorkflow-ZCzTSTMU.mjs} +2 -2
  206. package/dist/_chunks/{validateWorkflow-MJBumqKr.mjs.map → validateWorkflow-ZCzTSTMU.mjs.map} +1 -1
  207. package/dist/_chunks/{validateWorkflow-0dV45eYu.js → validateWorkflow-cjgWciUT.js} +2 -2
  208. package/dist/_chunks/{validateWorkflow-0dV45eYu.js.map → validateWorkflow-cjgWciUT.js.map} +1 -1
  209. package/dist/admin/index.js +1 -1
  210. package/dist/admin/index.mjs +1 -1
  211. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/PublishAction.d.ts +3 -5
  212. package/dist/ee/server/index.js +5 -10
  213. package/dist/ee/server/index.js.map +1 -1
  214. package/dist/ee/server/index.mjs +5 -10
  215. package/dist/ee/server/index.mjs.map +1 -1
  216. package/dist/server/index.js +34 -35
  217. package/dist/server/index.js.map +1 -1
  218. package/dist/server/index.mjs +34 -35
  219. package/dist/server/index.mjs.map +1 -1
  220. package/dist/server/src/services/index.d.ts +7 -2
  221. package/dist/server/src/services/index.d.ts.map +1 -1
  222. package/dist/server/src/services/metrics.d.ts +8 -6
  223. package/dist/server/src/services/metrics.d.ts.map +1 -1
  224. package/package.json +12 -12
  225. package/strapi-server.js +1 -0
  226. package/dist/_chunks/index-4aVfWqGT.js.map +0 -1
  227. package/dist/_chunks/index-vvwcWElx.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePage-B9fTRFQD.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../admin/src/hooks/useInjectReducer';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\n\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\n setRoles,\n setWorkflows,\n} from './actions';\nimport * as Layout from './components/Layout';\nimport { LimitsModal } from './components/LimitsModal';\nimport { Stages } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsCreatePage = () => {\n const { formatMessage } = useIntl();\n const { push } = useHistory();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows, createWorkflow } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles();\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [savePrompts, setSavePrompts] = React.useState<{ hasReassignedContentTypes?: boolean }>({});\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n const contentTypesFromOtherWorkflows = workflows?.flatMap((workflow) => workflow.contentTypes);\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const res = await createWorkflow({\n // @ts-expect-error – currentWorkflow will have already been validated by formik before it gets here.\n data: currentWorkflow,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setInitialErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n\n push(`/settings/review-workflows/${res.data.id}`);\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'Settings.review-workflows.create.page.notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes?.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n\n if (meta && numberOfWorkflows && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow && workflows) {\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n currentWorkflow.stages &&\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [isLicenseLoading, isLoadingWorkflow, limits, currentWorkflow.stages, stagesPerWorkflow]);\n\n React.useEffect(() => {\n if (!isLoading && roles?.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n return (\n <>\n <Layout.DragLayerRendered />\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows?.filter((contentType) =>\n currentWorkflow.contentTypes?.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root isOpen={showLimitModal === 'stage'} onClose={() => setShowLimitModal(null)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n"],"names":["Layout.DragLayerRendered","Layout.Header","Layout.Back","Layout.Root"],"mappings":"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"}
1
+ {"version":3,"file":"CreatePage-1qK_lewD.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../admin/src/hooks/useInjectReducer';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\n\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\n setRoles,\n setWorkflows,\n} from './actions';\nimport * as Layout from './components/Layout';\nimport { LimitsModal } from './components/LimitsModal';\nimport { Stages } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsCreatePage = () => {\n const { formatMessage } = useIntl();\n const { push } = useHistory();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows, createWorkflow } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles();\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [savePrompts, setSavePrompts] = React.useState<{ hasReassignedContentTypes?: boolean }>({});\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n const contentTypesFromOtherWorkflows = workflows?.flatMap((workflow) => workflow.contentTypes);\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const res = await createWorkflow({\n // @ts-expect-error – currentWorkflow will have already been validated by formik before it gets here.\n data: currentWorkflow,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setInitialErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n\n push(`/settings/review-workflows/${res.data.id}`);\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'Settings.review-workflows.create.page.notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes?.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n\n if (meta && numberOfWorkflows && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow && workflows) {\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n currentWorkflow.stages &&\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [isLicenseLoading, isLoadingWorkflow, limits, currentWorkflow.stages, stagesPerWorkflow]);\n\n React.useEffect(() => {\n if (!isLoading && roles?.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n return (\n <>\n <Layout.DragLayerRendered />\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows?.filter((contentType) =>\n currentWorkflow.contentTypes?.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root isOpen={showLimitModal === 'stage'} onClose={() => setShowLimitModal(null)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n"],"names":["Layout.DragLayerRendered","Layout.Header","Layout.Back","Layout.Root"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { CheckPagePermissions } from "@strapi/helper-plugin";
3
- import { j as useTypedSelector } from "./index-vvwcWElx.mjs";
4
- import { s as selectAdminPermissions } from "./AuthenticatedApp-vmfce77h.mjs";
5
- import { E as EditPage } from "./EditPage-QqLSWhpo.mjs";
3
+ import { j as useTypedSelector } from "./index-jPSc5477.mjs";
4
+ import { s as selectAdminPermissions } from "./AuthenticatedApp-sMEn0FIG.mjs";
5
+ import { E as EditPage } from "./EditPage-1zzhTAkb.mjs";
6
6
  import "react-dom/client";
7
7
  import "@strapi/design-system";
8
8
  import "invariant";
@@ -74,8 +74,8 @@ import "lodash/isArray";
74
74
  import "date-fns/parseISO";
75
75
  import "semver/functions/lt";
76
76
  import "semver/functions/valid";
77
- import "./useContentTypes-97fT5wA5.mjs";
78
- import "./useWebhooks-1XhDgO40.mjs";
77
+ import "./useContentTypes-9lPhF1tf.mjs";
78
+ import "./useWebhooks-Lb4ugXPu.mjs";
79
79
  const ProtectedCreatePage = () => {
80
80
  const permissions = useTypedSelector(selectAdminPermissions);
81
81
  return /* @__PURE__ */ jsx(CheckPagePermissions, { permissions: permissions.settings?.webhooks.create, children: /* @__PURE__ */ jsx(EditPage, {}) });
@@ -84,4 +84,4 @@ export {
84
84
  EditPage as CreatePage,
85
85
  ProtectedCreatePage
86
86
  };
87
- //# sourceMappingURL=CreatePage-WE1XPqXl.mjs.map
87
+ //# sourceMappingURL=CreatePage-2CvZuw2s.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePage-WE1XPqXl.mjs","sources":["../../admin/src/pages/Settings/pages/Webhooks/CreatePage.tsx"],"sourcesContent":["import { CheckPagePermissions } from '@strapi/helper-plugin';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { EditPage } from './EditPage';\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.webhooks.create}>\n <EditPage />\n </CheckPagePermissions>\n );\n};\n\nexport { ProtectedCreatePage, EditPage as CreatePage };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,sBAAsB,MAAM;AAC1B,QAAA,cAAc,iBAAiB,sBAAsB;AAGzD,SAAA,oBAAC,wBAAqB,aAAa,YAAY,UAAU,SAAS,QAChE,UAAC,oBAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;"}
1
+ {"version":3,"file":"CreatePage-2CvZuw2s.mjs","sources":["../../admin/src/pages/Settings/pages/Webhooks/CreatePage.tsx"],"sourcesContent":["import { CheckPagePermissions } from '@strapi/helper-plugin';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { EditPage } from './EditPage';\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.webhooks.create}>\n <EditPage />\n </CheckPagePermissions>\n );\n};\n\nexport { ProtectedCreatePage, EditPage as CreatePage };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,sBAAsB,MAAM;AAC1B,QAAA,cAAc,iBAAiB,sBAAsB;AAGzD,SAAA,oBAAC,wBAAqB,aAAa,YAAY,UAAU,SAAS,QAChE,UAAC,oBAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;"}
@@ -9,14 +9,14 @@ const formik = require("formik");
9
9
  const reactIntl = require("react-intl");
10
10
  const reactRedux = require("react-redux");
11
11
  const reactRouterDom = require("react-router-dom");
12
- const useAdminRoles = require("./useAdminRoles-YetuCm8K.js");
13
- const useContentTypes = require("./useContentTypes-RYf0eavc.js");
14
- const validateWorkflow = require("./validateWorkflow-0dV45eYu.js");
15
- const index = require("./index-4aVfWqGT.js");
16
- const Layout = require("./Layout-zOLboQ37.js");
12
+ const useAdminRoles = require("./useAdminRoles-rzx-BOWF.js");
13
+ const useContentTypes = require("./useContentTypes-CGkh8E2r.js");
14
+ const validateWorkflow = require("./validateWorkflow-cjgWciUT.js");
15
+ const index = require("./index-WJOOvkDD.js");
16
+ const Layout = require("./Layout-1AJukXSa.js");
17
17
  const LimitsModal = require("./LimitsModal-gq7jwfap.js");
18
18
  const constants = require("./constants-L1I-Y-RJ.js");
19
- const useReviewWorkflows = require("./useReviewWorkflows-5OJDAwb-.js");
19
+ const useReviewWorkflows = require("./useReviewWorkflows-vGqBbIF4.js");
20
20
  require("styled-components");
21
21
  require("prop-types");
22
22
  require("@strapi/design-system/v2");
@@ -80,7 +80,7 @@ require("lodash/uniqBy");
80
80
  require("lodash/unset");
81
81
  require("lodash/isArray");
82
82
  require("date-fns/parseISO");
83
- require("./reviewWorkflows-f9R-pYlb.js");
83
+ require("./reviewWorkflows-ksEl2Csi.js");
84
84
  function _interopNamespace(e) {
85
85
  if (e && e.__esModule)
86
86
  return e;
@@ -331,4 +331,4 @@ const ReviewWorkflowsCreatePage = () => {
331
331
  ] });
332
332
  };
333
333
  exports.ReviewWorkflowsCreatePage = ReviewWorkflowsCreatePage;
334
- //# sourceMappingURL=CreatePage-v2Y9UAtK.js.map
334
+ //# sourceMappingURL=CreatePage-4TuZ5JvH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePage-v2Y9UAtK.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../admin/src/hooks/useInjectReducer';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\n\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\n setRoles,\n setWorkflows,\n} from './actions';\nimport * as Layout from './components/Layout';\nimport { LimitsModal } from './components/LimitsModal';\nimport { Stages } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsCreatePage = () => {\n const { formatMessage } = useIntl();\n const { push } = useHistory();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows, createWorkflow } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles();\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [savePrompts, setSavePrompts] = React.useState<{ hasReassignedContentTypes?: boolean }>({});\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n const contentTypesFromOtherWorkflows = workflows?.flatMap((workflow) => workflow.contentTypes);\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const res = await createWorkflow({\n // @ts-expect-error – currentWorkflow will have already been validated by formik before it gets here.\n data: currentWorkflow,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setInitialErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n\n push(`/settings/review-workflows/${res.data.id}`);\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'Settings.review-workflows.create.page.notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes?.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n\n if (meta && numberOfWorkflows && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow && workflows) {\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n currentWorkflow.stages &&\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [isLicenseLoading, isLoadingWorkflow, limits, currentWorkflow.stages, stagesPerWorkflow]);\n\n React.useEffect(() => {\n if (!isLoading && roles?.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n return (\n <>\n <Layout.DragLayerRendered />\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows?.filter((contentType) =>\n currentWorkflow.contentTypes?.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root isOpen={showLimitModal === 'stage'} onClose={() => setShowLimitModal(null)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n"],"names":["useIntl","useHistory","useAPIErrorHandler","useDispatch","useNotification","useContentTypes","useReviewWorkflows","useAdminRoles","useSelector","selectIsLoading","selectIsWorkflowDirty","selectCurrentWorkflow","selectRoles","React","useLicenseLimits","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","isBaseQueryError","formik","useFormik","validateWorkflow","useInjectReducer","REDUX_NAMESPACE","reducer","resetWorkflow","setWorkflows","setContentTypes","setRoles","setIsLoading","addStage","jsxs","Fragment","jsx","Layout.DragLayerRendered","FormikProvider","Form","Layout.Header","Layout.Back","Button","Check","Layout.Root","Flex","Loader","WorkflowAttributes","Stages","ConfirmDialog","Typography","LimitsModal"],"mappings":"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"}
1
+ {"version":3,"file":"CreatePage-4TuZ5JvH.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../admin/src/hooks/useInjectReducer';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\n\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\n setRoles,\n setWorkflows,\n} from './actions';\nimport * as Layout from './components/Layout';\nimport { LimitsModal } from './components/LimitsModal';\nimport { Stages } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsCreatePage = () => {\n const { formatMessage } = useIntl();\n const { push } = useHistory();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows, createWorkflow } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles();\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [savePrompts, setSavePrompts] = React.useState<{ hasReassignedContentTypes?: boolean }>({});\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n const contentTypesFromOtherWorkflows = workflows?.flatMap((workflow) => workflow.contentTypes);\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const res = await createWorkflow({\n // @ts-expect-error – currentWorkflow will have already been validated by formik before it gets here.\n data: currentWorkflow,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setInitialErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n\n push(`/settings/review-workflows/${res.data.id}`);\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'Settings.review-workflows.create.page.notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes?.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n\n if (meta && numberOfWorkflows && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow && workflows) {\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n currentWorkflow.stages &&\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [isLicenseLoading, isLoadingWorkflow, limits, currentWorkflow.stages, stagesPerWorkflow]);\n\n React.useEffect(() => {\n if (!isLoading && roles?.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n return (\n <>\n <Layout.DragLayerRendered />\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows?.filter((contentType) =>\n currentWorkflow.contentTypes?.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root isOpen={showLimitModal === 'stage'} onClose={() => setShowLimitModal(null)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n"],"names":["useIntl","useHistory","useAPIErrorHandler","useDispatch","useNotification","useContentTypes","useReviewWorkflows","useAdminRoles","useSelector","selectIsLoading","selectIsWorkflowDirty","selectCurrentWorkflow","selectRoles","React","useLicenseLimits","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","isBaseQueryError","formik","useFormik","validateWorkflow","useInjectReducer","REDUX_NAMESPACE","reducer","resetWorkflow","setWorkflows","setContentTypes","setRoles","setIsLoading","addStage","jsxs","Fragment","jsx","Layout.DragLayerRendered","FormikProvider","Form","Layout.Header","Layout.Back","Button","Check","Layout.Root","Flex","Loader","WorkflowAttributes","Stages","ConfirmDialog","Typography","LimitsModal"],"mappings":"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"}
@@ -10,8 +10,8 @@ import { useIntl } from "react-intl";
10
10
  import { useRouteMatch, useHistory, NavLink } from "react-router-dom";
11
11
  import styled from "styled-components";
12
12
  import * as yup from "yup";
13
- import { j as useTypedSelector, A as useGetRolePermissionLayoutQuery, B as useGetRolePermissionsQuery, D as useCreateRoleMutation, E as useUpdateRolePermissionsMutation, x as isBaseQueryError } from "./index-vvwcWElx.mjs";
14
- import { P as Permissions } from "./Permissions-AuRXi3wh.mjs";
13
+ import { j as useTypedSelector, A as useGetRolePermissionLayoutQuery, B as useGetRolePermissionsQuery, D as useCreateRoleMutation, E as useUpdateRolePermissionsMutation, x as isBaseQueryError } from "./index-jPSc5477.mjs";
14
+ import { P as Permissions } from "./Permissions-o5FsqSEN.mjs";
15
15
  import "react-dom/client";
16
16
  import "invariant";
17
17
  import "lodash/isFunction";
@@ -303,4 +303,4 @@ export {
303
303
  CreatePage,
304
304
  ProtectedCreatePage
305
305
  };
306
- //# sourceMappingURL=CreatePage-Fwj_klqr.mjs.map
306
+ //# sourceMappingURL=CreatePage-9s1f9eRV.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePage-Fwj_klqr.mjs","sources":["../../admin/src/pages/Settings/pages/Roles/CreatePage.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 Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useNotification,\n useOverlayBlocker,\n useTracking,\n translatedErrors,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const { replace } = useHistory();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const id = match?.params.id ?? null;\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { data: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n // @ts-expect-error – fixed in V5\n lockApp();\n\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n\n replace(`/settings/roles/${res.data.id}`);\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n } finally {\n // @ts-expect-error – fixed in V5\n unlockApp();\n }\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // @ts-expect-error – the props from the component passed as `as` are not correctly inferred.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole && permissionsLayout ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <CreatePage />\n </CheckPagePermissions>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CreatePage-9s1f9eRV.mjs","sources":["../../admin/src/pages/Settings/pages/Roles/CreatePage.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 Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useNotification,\n useOverlayBlocker,\n useTracking,\n translatedErrors,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const { replace } = useHistory();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const id = match?.params.id ?? null;\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { data: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n // @ts-expect-error – fixed in V5\n lockApp();\n\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n\n replace(`/settings/roles/${res.data.id}`);\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n } finally {\n // @ts-expect-error – fixed in V5\n unlockApp();\n }\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // @ts-expect-error – the props from the component passed as `as` are not correctly inferred.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole && permissionsLayout ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <CreatePage />\n </CheckPagePermissions>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":[],"mappings":"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"}
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const helperPlugin = require("@strapi/helper-plugin");
5
- const index = require("./index-4aVfWqGT.js");
6
- const AuthenticatedApp = require("./AuthenticatedApp-5iqvfpEB.js");
7
- const EditPage = require("./EditPage-QMwmJ5JQ.js");
5
+ const index = require("./index-WJOOvkDD.js");
6
+ const AuthenticatedApp = require("./AuthenticatedApp-9kONd5LP.js");
7
+ const EditPage = require("./EditPage-SpK2YHJ9.js");
8
8
  require("react-dom/client");
9
9
  require("@strapi/design-system");
10
10
  require("invariant");
@@ -76,12 +76,12 @@ require("lodash/isArray");
76
76
  require("date-fns/parseISO");
77
77
  require("semver/functions/lt");
78
78
  require("semver/functions/valid");
79
- require("./useContentTypes-RYf0eavc.js");
80
- require("./useWebhooks-Yedq1BSI.js");
79
+ require("./useContentTypes-CGkh8E2r.js");
80
+ require("./useWebhooks-WKx90f9K.js");
81
81
  const ProtectedCreatePage = () => {
82
82
  const permissions = index.useTypedSelector(AuthenticatedApp.selectAdminPermissions);
83
83
  return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: permissions.settings?.webhooks.create, children: /* @__PURE__ */ jsxRuntime.jsx(EditPage.EditPage, {}) });
84
84
  };
85
85
  exports.CreatePage = EditPage.EditPage;
86
86
  exports.ProtectedCreatePage = ProtectedCreatePage;
87
- //# sourceMappingURL=CreatePage-UAzUcwFG.js.map
87
+ //# sourceMappingURL=CreatePage-N4sMG7CZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePage-UAzUcwFG.js","sources":["../../admin/src/pages/Settings/pages/Webhooks/CreatePage.tsx"],"sourcesContent":["import { CheckPagePermissions } from '@strapi/helper-plugin';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { EditPage } from './EditPage';\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.webhooks.create}>\n <EditPage />\n </CheckPagePermissions>\n );\n};\n\nexport { ProtectedCreatePage, EditPage as CreatePage };\n"],"names":["useTypedSelector","selectAdminPermissions","jsx","CheckPagePermissions","EditPage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,sBAAsB,MAAM;AAC1B,QAAA,cAAcA,uBAAiBC,iBAAAA,sBAAsB;AAGzD,SAAAC,2BAAA,IAACC,qCAAqB,aAAa,YAAY,UAAU,SAAS,QAChE,UAACD,2BAAA,IAAAE,SAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;;;"}
1
+ {"version":3,"file":"CreatePage-N4sMG7CZ.js","sources":["../../admin/src/pages/Settings/pages/Webhooks/CreatePage.tsx"],"sourcesContent":["import { CheckPagePermissions } from '@strapi/helper-plugin';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { EditPage } from './EditPage';\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.webhooks.create}>\n <EditPage />\n </CheckPagePermissions>\n );\n};\n\nexport { ProtectedCreatePage, EditPage as CreatePage };\n"],"names":["useTypedSelector","selectAdminPermissions","jsx","CheckPagePermissions","EditPage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,sBAAsB,MAAM;AAC1B,QAAA,cAAcA,uBAAiBC,iBAAAA,sBAAsB;AAGzD,SAAAC,2BAAA,IAACC,qCAAqB,aAAa,YAAY,UAAU,SAAS,QAChE,UAACD,2BAAA,IAAAE,SAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;;;"}
@@ -12,8 +12,8 @@ const reactIntl = require("react-intl");
12
12
  const reactRouterDom = require("react-router-dom");
13
13
  const styled = require("styled-components");
14
14
  const yup = require("yup");
15
- const index = require("./index-4aVfWqGT.js");
16
- const Permissions = require("./Permissions-qCTg4lLb.js");
15
+ const index = require("./index-WJOOvkDD.js");
16
+ const Permissions = require("./Permissions-U7Gfxm78.js");
17
17
  require("react-dom/client");
18
18
  require("invariant");
19
19
  require("lodash/isFunction");
@@ -325,4 +325,4 @@ const ProtectedCreatePage = () => {
325
325
  };
326
326
  exports.CreatePage = CreatePage;
327
327
  exports.ProtectedCreatePage = ProtectedCreatePage;
328
- //# sourceMappingURL=CreatePage-3VGDAvDI.js.map
328
+ //# sourceMappingURL=CreatePage-pRSqvram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePage-3VGDAvDI.js","sources":["../../admin/src/pages/Settings/pages/Roles/CreatePage.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 Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useNotification,\n useOverlayBlocker,\n useTracking,\n translatedErrors,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const { replace } = useHistory();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const id = match?.params.id ?? null;\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { data: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n // @ts-expect-error – fixed in V5\n lockApp();\n\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n\n replace(`/settings/roles/${res.data.id}`);\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n } finally {\n // @ts-expect-error – fixed in V5\n unlockApp();\n }\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // @ts-expect-error – the props from the component passed as `as` are not correctly inferred.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole && permissionsLayout ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <CreatePage />\n </CheckPagePermissions>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["yup","translatedErrors","useRouteMatch","useNotification","useOverlayBlocker","useIntl","useHistory","React","useTracking","useAPIErrorHandler","useGetRolePermissionLayoutQuery","useGetRolePermissionsQuery","useCreateRoleMutation","useUpdateRolePermissionsMutation","formik","isBaseQueryError","Main","jsx","SettingsPageTitle","Formik","format","Form","jsxs","Fragment","HeaderLayout","Flex","Button","Link","NavLink","ArrowLeft","ContentLayout","Box","Typography","Grid","GridItem","TextInput","Textarea","Permissions","LoadingIndicatorPage","styled","useTypedSelector","CheckPagePermissions"],"mappings":"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"}
1
+ {"version":3,"file":"CreatePage-pRSqvram.js","sources":["../../admin/src/pages/Settings/pages/Roles/CreatePage.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 Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useNotification,\n useOverlayBlocker,\n useTracking,\n translatedErrors,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const { replace } = useHistory();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const id = match?.params.id ?? null;\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { data: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n // @ts-expect-error – fixed in V5\n lockApp();\n\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n\n replace(`/settings/roles/${res.data.id}`);\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n } finally {\n // @ts-expect-error – fixed in V5\n unlockApp();\n }\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // @ts-expect-error – the props from the component passed as `as` are not correctly inferred.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole && permissionsLayout ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <CreatePage />\n </CheckPagePermissions>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["yup","translatedErrors","useRouteMatch","useNotification","useOverlayBlocker","useIntl","useHistory","React","useTracking","useAPIErrorHandler","useGetRolePermissionLayoutQuery","useGetRolePermissionsQuery","useCreateRoleMutation","useUpdateRolePermissionsMutation","formik","isBaseQueryError","Main","jsx","SettingsPageTitle","Formik","format","Form","jsxs","Fragment","HeaderLayout","Flex","Button","Link","NavLink","ArrowLeft","ContentLayout","Box","Typography","Grid","GridItem","TextInput","Textarea","Permissions","LoadingIndicatorPage","styled","useTypedSelector","CheckPagePermissions"],"mappings":"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"}
@@ -3,12 +3,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const helperPlugin = require("@strapi/helper-plugin");
5
5
  const reactRedux = require("react-redux");
6
- const AuthenticatedApp = require("./AuthenticatedApp-5iqvfpEB.js");
7
- const EditViewPage = require("./EditViewPage-zJ_Q-t3A.js");
6
+ const AuthenticatedApp = require("./AuthenticatedApp-9kONd5LP.js");
7
+ const EditViewPage = require("./EditViewPage-HC95kNgd.js");
8
8
  require("react");
9
9
  require("semver/functions/lt");
10
10
  require("semver/functions/valid");
11
- require("./index-4aVfWqGT.js");
11
+ require("./index-WJOOvkDD.js");
12
12
  require("react-dom/client");
13
13
  require("@strapi/design-system");
14
14
  require("invariant");
@@ -76,9 +76,9 @@ require("lodash/uniqBy");
76
76
  require("lodash/unset");
77
77
  require("lodash/isArray");
78
78
  require("date-fns/parseISO");
79
- require("./apiTokens-ooREfQj_.js");
79
+ require("./apiTokens-82n35OFR.js");
80
80
  require("./constants-RMqZXSqh.js");
81
- require("./TokenTypeSelect-b36zu2Sc.js");
81
+ require("./TokenTypeSelect-X2ULS8wc.js");
82
82
  require("date-fns");
83
83
  require("date-fns/locale");
84
84
  require("lodash/map");
@@ -90,4 +90,4 @@ const ProtectedCreateView = () => {
90
90
  return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: permissions.settings?.["api-tokens"].create, children: /* @__PURE__ */ jsxRuntime.jsx(EditViewPage.EditView, {}) });
91
91
  };
92
92
  exports.ProtectedCreateView = ProtectedCreateView;
93
- //# sourceMappingURL=CreateView-F47zLXsj.js.map
93
+ //# sourceMappingURL=CreateView-Av3Oi80N.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateView-F47zLXsj.js","sources":["../../admin/src/pages/Settings/pages/ApiTokens/CreateView.tsx"],"sourcesContent":["import { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { EditView } from './EditView/EditViewPage';\n\nexport const ProtectedCreateView = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.['api-tokens'].create}>\n <EditView />\n </CheckPagePermissions>\n );\n};\n"],"names":["useSelector","selectAdminPermissions","jsx","CheckPagePermissions","EditView"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOO,MAAM,sBAAsB,MAAM;AACjC,QAAA,cAAcA,uBAAYC,iBAAAA,sBAAsB;AAGpD,SAAAC,2BAAA,IAACC,aAAqB,sBAAA,EAAA,aAAa,YAAY,WAAW,YAAY,EAAE,QACtE,UAACD,2BAAA,IAAAE,aAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;;"}
1
+ {"version":3,"file":"CreateView-Av3Oi80N.js","sources":["../../admin/src/pages/Settings/pages/ApiTokens/CreateView.tsx"],"sourcesContent":["import { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { EditView } from './EditView/EditViewPage';\n\nexport const ProtectedCreateView = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.['api-tokens'].create}>\n <EditView />\n </CheckPagePermissions>\n );\n};\n"],"names":["useSelector","selectAdminPermissions","jsx","CheckPagePermissions","EditView"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOO,MAAM,sBAAsB,MAAM;AACjC,QAAA,cAAcA,uBAAYC,iBAAAA,sBAAsB;AAGpD,SAAAC,2BAAA,IAACC,aAAqB,sBAAA,EAAA,aAAa,YAAY,WAAW,YAAY,EAAE,QACtE,UAACD,2BAAA,IAAAE,aAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;;"}