@strapi/admin 4.20.1 → 4.20.3

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 (229) hide show
  1. package/dist/_chunks/{AdminSeatInfo-FYllM9Wr.js → AdminSeatInfo-EWsFyN7c.js} +3 -3
  2. package/dist/_chunks/{AdminSeatInfo-FYllM9Wr.js.map → AdminSeatInfo-EWsFyN7c.js.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-jxPuC7sd.mjs → AdminSeatInfo-U0-bpiCR.mjs} +3 -3
  4. package/dist/_chunks/{AdminSeatInfo-jxPuC7sd.mjs.map → AdminSeatInfo-U0-bpiCR.mjs.map} +1 -1
  5. package/dist/_chunks/{AuthenticatedApp-KbXbG60H.mjs → AuthenticatedApp-6PK_F-W8.mjs} +21 -21
  6. package/dist/_chunks/{AuthenticatedApp-KbXbG60H.mjs.map → AuthenticatedApp-6PK_F-W8.mjs.map} +1 -1
  7. package/dist/_chunks/{AuthenticatedApp-yPEMtCNB.js → AuthenticatedApp-a--RfdbN.js} +21 -21
  8. package/dist/_chunks/{AuthenticatedApp-yPEMtCNB.js.map → AuthenticatedApp-a--RfdbN.js.map} +1 -1
  9. package/dist/_chunks/{CreateActionEE-QgiUGwZe.mjs → CreateActionEE-9SoJa00L.mjs} +2 -2
  10. package/dist/_chunks/{CreateActionEE-QgiUGwZe.mjs.map → CreateActionEE-9SoJa00L.mjs.map} +1 -1
  11. package/dist/_chunks/{CreateActionEE-vQMfF4tL.js → CreateActionEE-NXWTgSn0.js} +2 -2
  12. package/dist/_chunks/{CreateActionEE-vQMfF4tL.js.map → CreateActionEE-NXWTgSn0.js.map} +1 -1
  13. package/dist/_chunks/{CreatePage-CZmh0ryM.mjs → CreatePage-6U5VWi2k.mjs} +8 -8
  14. package/dist/_chunks/{CreatePage-CZmh0ryM.mjs.map → CreatePage-6U5VWi2k.mjs.map} +1 -1
  15. package/dist/_chunks/{CreatePage-WBwBU4qA.mjs → CreatePage-N8B_PcOh.mjs} +6 -6
  16. package/dist/_chunks/{CreatePage-WBwBU4qA.mjs.map → CreatePage-N8B_PcOh.mjs.map} +1 -1
  17. package/dist/_chunks/{CreatePage-a9C9ijzW.js → CreatePage-RTxfJ84y.js} +8 -8
  18. package/dist/_chunks/{CreatePage-a9C9ijzW.js.map → CreatePage-RTxfJ84y.js.map} +1 -1
  19. package/dist/_chunks/{CreatePage-ubvG-TO4.js → CreatePage-e8F7_PnG.js} +3 -3
  20. package/dist/_chunks/{CreatePage-ubvG-TO4.js.map → CreatePage-e8F7_PnG.js.map} +1 -1
  21. package/dist/_chunks/{CreatePage-zotBOFnE.js → CreatePage-u4vlZK5m.js} +6 -6
  22. package/dist/_chunks/{CreatePage-zotBOFnE.js.map → CreatePage-u4vlZK5m.js.map} +1 -1
  23. package/dist/_chunks/{CreatePage-bTc_jTC_.mjs → CreatePage-y_NlYL1v.mjs} +3 -3
  24. package/dist/_chunks/{CreatePage-bTc_jTC_.mjs.map → CreatePage-y_NlYL1v.mjs.map} +1 -1
  25. package/dist/_chunks/{CreateView-fWvg33IM.mjs → CreateView-4TaabJAu.mjs} +6 -6
  26. package/dist/_chunks/{CreateView-fWvg33IM.mjs.map → CreateView-4TaabJAu.mjs.map} +1 -1
  27. package/dist/_chunks/{CreateView-5YRPBxNm.js → CreateView-4VwQICNN.js} +6 -6
  28. package/dist/_chunks/{CreateView-5YRPBxNm.js.map → CreateView-4VwQICNN.js.map} +1 -1
  29. package/dist/_chunks/{CreateView-dxLwgfdk.js → CreateView-TlFNPkfa.js} +6 -6
  30. package/dist/_chunks/{CreateView-dxLwgfdk.js.map → CreateView-TlFNPkfa.js.map} +1 -1
  31. package/dist/_chunks/{CreateView-DG2Xi_RG.mjs → CreateView-Xy3CIe-W.mjs} +6 -6
  32. package/dist/_chunks/{CreateView-DG2Xi_RG.mjs.map → CreateView-Xy3CIe-W.mjs.map} +1 -1
  33. package/dist/_chunks/{EditPage-ZamBKJBm.js → EditPage-Btg8CMW6.js} +9 -9
  34. package/dist/_chunks/{EditPage-ZamBKJBm.js.map → EditPage-Btg8CMW6.js.map} +1 -1
  35. package/dist/_chunks/{EditPage-eZBoqRe8.mjs → EditPage-V2BAPKdS.mjs} +6 -6
  36. package/dist/_chunks/{EditPage-eZBoqRe8.mjs.map → EditPage-V2BAPKdS.mjs.map} +1 -1
  37. package/dist/_chunks/{EditPage-VyQhkl1U.mjs → EditPage-VedCfTQ4.mjs} +4 -4
  38. package/dist/_chunks/{EditPage-VyQhkl1U.mjs.map → EditPage-VedCfTQ4.mjs.map} +1 -1
  39. package/dist/_chunks/{EditPage-bquHSnU-.mjs → EditPage-fwjKIxrj.mjs} +6 -6
  40. package/dist/_chunks/{EditPage-bquHSnU-.mjs.map → EditPage-fwjKIxrj.mjs.map} +1 -1
  41. package/dist/_chunks/{EditPage-zBNog_Do.js → EditPage-pw9v3o51.js} +6 -6
  42. package/dist/_chunks/{EditPage-zBNog_Do.js.map → EditPage-pw9v3o51.js.map} +1 -1
  43. package/dist/_chunks/{EditPage-ts9lW8Jp.js → EditPage-tcR0qWPU.js} +4 -4
  44. package/dist/_chunks/{EditPage-ts9lW8Jp.js.map → EditPage-tcR0qWPU.js.map} +1 -1
  45. package/dist/_chunks/{EditPage-ZYqGLNGU.js → EditPage-td1NUrjL.js} +6 -6
  46. package/dist/_chunks/{EditPage-ZYqGLNGU.js.map → EditPage-td1NUrjL.js.map} +1 -1
  47. package/dist/_chunks/{EditPage-v9qAJHhL.mjs → EditPage-w30nWUTV.mjs} +9 -9
  48. package/dist/_chunks/{EditPage-v9qAJHhL.mjs.map → EditPage-w30nWUTV.mjs.map} +1 -1
  49. package/dist/_chunks/{EditView-H9TXdZxo.mjs → EditView-6NyyYtJ9.mjs} +4 -4
  50. package/dist/_chunks/{EditView-H9TXdZxo.mjs.map → EditView-6NyyYtJ9.mjs.map} +1 -1
  51. package/dist/_chunks/{EditView-RTA0igao.js → EditView-w1qhZqmE.js} +4 -4
  52. package/dist/_chunks/{EditView-RTA0igao.js.map → EditView-w1qhZqmE.js.map} +1 -1
  53. package/dist/_chunks/{EditViewPage-M0xVcnNp.mjs → EditViewPage-JRAZ-tDi.mjs} +4 -4
  54. package/dist/_chunks/{EditViewPage-M0xVcnNp.mjs.map → EditViewPage-JRAZ-tDi.mjs.map} +1 -1
  55. package/dist/_chunks/{EditViewPage-1FpxFWQ-.js → EditViewPage-mz8UeVY9.js} +4 -4
  56. package/dist/_chunks/{EditViewPage-1FpxFWQ-.js.map → EditViewPage-mz8UeVY9.js.map} +1 -1
  57. package/dist/_chunks/{EventsTable--um8UljY.mjs → EventsTable-0iuKZa4P.mjs} +25 -13
  58. package/dist/_chunks/EventsTable-0iuKZa4P.mjs.map +1 -0
  59. package/dist/_chunks/{EventsTable-mrhO0K1Q.js → EventsTable-OWYW5HQM.js} +24 -12
  60. package/dist/_chunks/EventsTable-OWYW5HQM.js.map +1 -0
  61. package/dist/_chunks/{HomePage-rVmtVStB.mjs → HomePage-4IkbnZFB.mjs} +5 -5
  62. package/dist/_chunks/{HomePage-rVmtVStB.mjs.map → HomePage-4IkbnZFB.mjs.map} +1 -1
  63. package/dist/_chunks/{HomePage-qtTyGTFw.mjs → HomePage-ShAkZj3n.mjs} +6 -6
  64. package/dist/_chunks/{HomePage-qtTyGTFw.mjs.map → HomePage-ShAkZj3n.mjs.map} +1 -1
  65. package/dist/_chunks/{HomePage-HmF7GGfM.js → HomePage-bDf12GSD.js} +6 -6
  66. package/dist/_chunks/{HomePage-HmF7GGfM.js.map → HomePage-bDf12GSD.js.map} +1 -1
  67. package/dist/_chunks/{HomePage-7Ge6tK7b.js → HomePage-mBRslgWS.js} +5 -5
  68. package/dist/_chunks/{HomePage-7Ge6tK7b.js.map → HomePage-mBRslgWS.js.map} +1 -1
  69. package/dist/_chunks/{InformationBoxEE-0hRrbMIL.mjs → InformationBoxEE-f7rvVGS6.mjs} +3 -3
  70. package/dist/_chunks/{InformationBoxEE-0hRrbMIL.mjs.map → InformationBoxEE-f7rvVGS6.mjs.map} +1 -1
  71. package/dist/_chunks/{InformationBoxEE-4etf9EMS.js → InformationBoxEE-gRxMBHVj.js} +3 -3
  72. package/dist/_chunks/{InformationBoxEE-4etf9EMS.js.map → InformationBoxEE-gRxMBHVj.js.map} +1 -1
  73. package/dist/_chunks/{InstalledPluginsPage--dfQ96ij.mjs → InstalledPluginsPage-5JgxesKb.mjs} +3 -3
  74. package/dist/_chunks/{InstalledPluginsPage--dfQ96ij.mjs.map → InstalledPluginsPage-5JgxesKb.mjs.map} +1 -1
  75. package/dist/_chunks/{InstalledPluginsPage-p94azL6s.js → InstalledPluginsPage-S_DWNrod.js} +3 -3
  76. package/dist/_chunks/{InstalledPluginsPage-p94azL6s.js.map → InstalledPluginsPage-S_DWNrod.js.map} +1 -1
  77. package/dist/_chunks/{Layout-v8FJBzTa.mjs → Layout-GOfaAv2c.mjs} +2 -2
  78. package/dist/_chunks/{Layout-v8FJBzTa.mjs.map → Layout-GOfaAv2c.mjs.map} +1 -1
  79. package/dist/_chunks/{Layout-bevQq1Q7.js → Layout-hmI9kFn6.js} +2 -2
  80. package/dist/_chunks/{Layout-bevQq1Q7.js.map → Layout-hmI9kFn6.js.map} +1 -1
  81. package/dist/_chunks/{ListPage--BFNFixg.js → ListPage-3zkD6Ng1.js} +4 -4
  82. package/dist/_chunks/{ListPage--BFNFixg.js.map → ListPage-3zkD6Ng1.js.map} +1 -1
  83. package/dist/_chunks/{ListPage-pV5BXOz4.mjs → ListPage-5czXFp0v.mjs} +4 -4
  84. package/dist/_chunks/{ListPage-pV5BXOz4.mjs.map → ListPage-5czXFp0v.mjs.map} +1 -1
  85. package/dist/_chunks/{ListPage-3zXBK2Cg.js → ListPage-9FfyGQ-9.js} +3 -3
  86. package/dist/_chunks/{ListPage-3zXBK2Cg.js.map → ListPage-9FfyGQ-9.js.map} +1 -1
  87. package/dist/_chunks/{ListPage-2o3BsCCK.js → ListPage-FQtPg9Rf.js} +8 -8
  88. package/dist/_chunks/{ListPage-2o3BsCCK.js.map → ListPage-FQtPg9Rf.js.map} +1 -1
  89. package/dist/_chunks/{ListPage-IBRCTTxF.js → ListPage-F_Od45bU.js} +2 -2
  90. package/dist/_chunks/{ListPage-IBRCTTxF.js.map → ListPage-F_Od45bU.js.map} +1 -1
  91. package/dist/_chunks/{ListPage-bEzkONf2.js → ListPage-LuRxY18k.js} +7 -7
  92. package/dist/_chunks/{ListPage-bEzkONf2.js.map → ListPage-LuRxY18k.js.map} +1 -1
  93. package/dist/_chunks/{ListPage-kL4w2DqG.js → ListPage-Lutw4XaH.js} +6 -6
  94. package/dist/_chunks/{ListPage-kL4w2DqG.js.map → ListPage-Lutw4XaH.js.map} +1 -1
  95. package/dist/_chunks/{ListPage-f9WPMzD_.mjs → ListPage-QlgoDauY.mjs} +8 -8
  96. package/dist/_chunks/{ListPage-f9WPMzD_.mjs.map → ListPage-QlgoDauY.mjs.map} +1 -1
  97. package/dist/_chunks/{ListPage-FcoGG60Q.mjs → ListPage-S0glHbDh.mjs} +7 -7
  98. package/dist/_chunks/{ListPage-FcoGG60Q.mjs.map → ListPage-S0glHbDh.mjs.map} +1 -1
  99. package/dist/_chunks/{ListPage-3pk58RvL.mjs → ListPage-d46r_k1l.mjs} +2 -2
  100. package/dist/_chunks/{ListPage-3pk58RvL.mjs.map → ListPage-d46r_k1l.mjs.map} +1 -1
  101. package/dist/_chunks/{ListPage-Ktqb_Fnm.mjs → ListPage-kx5DbEVo.mjs} +3 -3
  102. package/dist/_chunks/{ListPage-Ktqb_Fnm.mjs.map → ListPage-kx5DbEVo.mjs.map} +1 -1
  103. package/dist/_chunks/{ListPage-4MVat-6x.mjs → ListPage-l5Oupfdj.mjs} +6 -6
  104. package/dist/_chunks/{ListPage-4MVat-6x.mjs.map → ListPage-l5Oupfdj.mjs.map} +1 -1
  105. package/dist/_chunks/{ListView-NluyrGcC.js → ListView-1MwFwPub.js} +3 -3
  106. package/dist/_chunks/{ListView-NluyrGcC.js.map → ListView-1MwFwPub.js.map} +1 -1
  107. package/dist/_chunks/{ListView-A1nKrQn4.js → ListView-NJFMS2CM.js} +3 -3
  108. package/dist/_chunks/{ListView-A1nKrQn4.js.map → ListView-NJFMS2CM.js.map} +1 -1
  109. package/dist/_chunks/{ListView-ykCnucRL.mjs → ListView-Q1k1R-o6.mjs} +3 -3
  110. package/dist/_chunks/{ListView-ykCnucRL.mjs.map → ListView-Q1k1R-o6.mjs.map} +1 -1
  111. package/dist/_chunks/{ListView-rLjOwHmg.mjs → ListView-j6T-iIOQ.mjs} +3 -3
  112. package/dist/_chunks/{ListView-rLjOwHmg.mjs.map → ListView-j6T-iIOQ.mjs.map} +1 -1
  113. package/dist/_chunks/{Login-7WAjQzlh.js → Login-DxxmzT3M.js} +2 -2
  114. package/dist/_chunks/{Login-7WAjQzlh.js.map → Login-DxxmzT3M.js.map} +1 -1
  115. package/dist/_chunks/{Login-LkMgFwj7.mjs → Login-Ou6zPFQ3.mjs} +2 -2
  116. package/dist/_chunks/{Login-LkMgFwj7.mjs.map → Login-Ou6zPFQ3.mjs.map} +1 -1
  117. package/dist/_chunks/{MagicLinkEE-CzANDg8L.mjs → MagicLinkEE-EVSo9YYE.mjs} +4 -4
  118. package/dist/_chunks/{MagicLinkEE-CzANDg8L.mjs.map → MagicLinkEE-EVSo9YYE.mjs.map} +1 -1
  119. package/dist/_chunks/{MagicLinkEE-iLZGq6sV.js → MagicLinkEE-MrZUZjT4.js} +4 -4
  120. package/dist/_chunks/{MagicLinkEE-iLZGq6sV.js.map → MagicLinkEE-MrZUZjT4.js.map} +1 -1
  121. package/dist/_chunks/{MarketplacePage-0PF5qCum.mjs → MarketplacePage--QAa2FwA.mjs} +3 -3
  122. package/dist/_chunks/{MarketplacePage-0PF5qCum.mjs.map → MarketplacePage--QAa2FwA.mjs.map} +1 -1
  123. package/dist/_chunks/{MarketplacePage-6w_qC2IL.js → MarketplacePage-9msmxUw5.js} +3 -3
  124. package/dist/_chunks/{MarketplacePage-6w_qC2IL.js.map → MarketplacePage-9msmxUw5.js.map} +1 -1
  125. package/dist/_chunks/{Permissions-02K1nkv5.mjs → Permissions-4d75OFG9.mjs} +2 -2
  126. package/dist/_chunks/{Permissions-02K1nkv5.mjs.map → Permissions-4d75OFG9.mjs.map} +1 -1
  127. package/dist/_chunks/{Permissions-CSvtoBMk.js → Permissions-u7VfX-61.js} +2 -2
  128. package/dist/_chunks/{Permissions-CSvtoBMk.js.map → Permissions-u7VfX-61.js.map} +1 -1
  129. package/dist/_chunks/{ProfilePage-lLKkzUCW.mjs → ProfilePage-CRUmheJU.mjs} +3 -3
  130. package/dist/_chunks/{ProfilePage-lLKkzUCW.mjs.map → ProfilePage-CRUmheJU.mjs.map} +1 -1
  131. package/dist/_chunks/{ProfilePage-fBmlvTVt.js → ProfilePage-WsY1ZF3r.js} +3 -3
  132. package/dist/_chunks/{ProfilePage-fBmlvTVt.js.map → ProfilePage-WsY1ZF3r.js.map} +1 -1
  133. package/dist/_chunks/{ReviewWorkflowsColumn-FblPzVJS.js → ReviewWorkflowsColumn-0nifWOdt.js} +2 -2
  134. package/dist/_chunks/{ReviewWorkflowsColumn-FblPzVJS.js.map → ReviewWorkflowsColumn-0nifWOdt.js.map} +1 -1
  135. package/dist/_chunks/{ReviewWorkflowsColumn-0SrDLeVT.mjs → ReviewWorkflowsColumn-iDp2Cmwt.mjs} +2 -2
  136. package/dist/_chunks/{ReviewWorkflowsColumn-0SrDLeVT.mjs.map → ReviewWorkflowsColumn-iDp2Cmwt.mjs.map} +1 -1
  137. package/dist/_chunks/{SelectRoles-A7KkrB4L.mjs → SelectRoles-SbcYTXyH.mjs} +3 -3
  138. package/dist/_chunks/{SelectRoles-A7KkrB4L.mjs.map → SelectRoles-SbcYTXyH.mjs.map} +1 -1
  139. package/dist/_chunks/{SelectRoles--Hkx-duw.js → SelectRoles-y1CfsVNh.js} +3 -3
  140. package/dist/_chunks/{SelectRoles--Hkx-duw.js.map → SelectRoles-y1CfsVNh.js.map} +1 -1
  141. package/dist/_chunks/{SettingsPage-7Rs7LOuF.js → SettingsPage-4cCdMGFB.js} +21 -21
  142. package/dist/_chunks/{SettingsPage-7Rs7LOuF.js.map → SettingsPage-4cCdMGFB.js.map} +1 -1
  143. package/dist/_chunks/{SettingsPage-vOgSvtVD.mjs → SettingsPage-Sxvi46jM.mjs} +21 -21
  144. package/dist/_chunks/{SettingsPage-vOgSvtVD.mjs.map → SettingsPage-Sxvi46jM.mjs.map} +1 -1
  145. package/dist/_chunks/{SingleSignOnPage-0BBoDuiC.mjs → SingleSignOnPage-KTESCDLx.mjs} +3 -3
  146. package/dist/_chunks/{SingleSignOnPage-0BBoDuiC.mjs.map → SingleSignOnPage-KTESCDLx.mjs.map} +1 -1
  147. package/dist/_chunks/{SingleSignOnPage-tQgIX1-Y.js → SingleSignOnPage-xKKQxAew.js} +3 -3
  148. package/dist/_chunks/{SingleSignOnPage-tQgIX1-Y.js.map → SingleSignOnPage-xKKQxAew.js.map} +1 -1
  149. package/dist/_chunks/{TokenTypeSelect-VTcmGJ3T.js → TokenTypeSelect-JtmQcMM-.js} +2 -2
  150. package/dist/_chunks/{TokenTypeSelect-VTcmGJ3T.js.map → TokenTypeSelect-JtmQcMM-.js.map} +1 -1
  151. package/dist/_chunks/{TokenTypeSelect-f0dPl6bF.mjs → TokenTypeSelect-rhU7WCp1.mjs} +2 -2
  152. package/dist/_chunks/{TokenTypeSelect-f0dPl6bF.mjs.map → TokenTypeSelect-rhU7WCp1.mjs.map} +1 -1
  153. package/dist/_chunks/{apiTokens-jiAtcOPK.mjs → apiTokens-RA-9g946.mjs} +2 -2
  154. package/dist/_chunks/{apiTokens-jiAtcOPK.mjs.map → apiTokens-RA-9g946.mjs.map} +1 -1
  155. package/dist/_chunks/{apiTokens-lNhK6Eyr.js → apiTokens-czMkLtFv.js} +2 -2
  156. package/dist/_chunks/{apiTokens-lNhK6Eyr.js.map → apiTokens-czMkLtFv.js.map} +1 -1
  157. package/dist/_chunks/{constants-jQrPR8R5.mjs → constants-1OrCvfdr.mjs} +2 -2
  158. package/dist/_chunks/{constants-jQrPR8R5.mjs.map → constants-1OrCvfdr.mjs.map} +1 -1
  159. package/dist/_chunks/{constants-_KHV_ADp.js → constants-FDaT15Rv.js} +2 -2
  160. package/dist/_chunks/{constants-_KHV_ADp.js.map → constants-FDaT15Rv.js.map} +1 -1
  161. package/dist/_chunks/{constants-Z-tu-qfL.js → constants-aNmBOR-O.js} +2 -2
  162. package/dist/_chunks/{constants-Z-tu-qfL.js.map → constants-aNmBOR-O.js.map} +1 -1
  163. package/dist/_chunks/{constants-zrvjnprT.mjs → constants-dGqHZzud.mjs} +4 -4
  164. package/dist/_chunks/{constants-zrvjnprT.mjs.map → constants-dGqHZzud.mjs.map} +1 -1
  165. package/dist/_chunks/{constants-2_a_PrR3.js → constants-gzLUZFiz.js} +4 -4
  166. package/dist/_chunks/{constants-2_a_PrR3.js.map → constants-gzLUZFiz.js.map} +1 -1
  167. package/dist/_chunks/{constants-VeXFoE6h.js → constants-m0zrefZN.js} +6 -6
  168. package/dist/_chunks/{constants-VeXFoE6h.js.map → constants-m0zrefZN.js.map} +1 -1
  169. package/dist/_chunks/{constants-Nzx-HYzd.mjs → constants-vlwtkKQa.mjs} +2 -2
  170. package/dist/_chunks/{constants-Nzx-HYzd.mjs.map → constants-vlwtkKQa.mjs.map} +1 -1
  171. package/dist/_chunks/{constants-q8ASX-Zh.mjs → constants-wDN3eCQN.mjs} +6 -6
  172. package/dist/_chunks/{constants-q8ASX-Zh.mjs.map → constants-wDN3eCQN.mjs.map} +1 -1
  173. package/dist/_chunks/{fr-xODy5_BZ.mjs → fr-I-0ckcEU.mjs} +3 -3
  174. package/dist/_chunks/{fr-xODy5_BZ.mjs.map → fr-I-0ckcEU.mjs.map} +1 -1
  175. package/dist/_chunks/{fr-_o4WT-TZ.js → fr-RVVsyT5B.js} +3 -3
  176. package/dist/_chunks/{fr-_o4WT-TZ.js.map → fr-RVVsyT5B.js.map} +1 -1
  177. package/dist/_chunks/{index-Cgd3dGa5.js → index-AgQyNwFk.js} +16 -13
  178. package/dist/_chunks/index-AgQyNwFk.js.map +1 -0
  179. package/dist/_chunks/{index-Sz0bqxDe.mjs → index-UeIeOkVZ.mjs} +16 -13
  180. package/dist/_chunks/index-UeIeOkVZ.mjs.map +1 -0
  181. package/dist/_chunks/{reviewWorkflows-kl8pmnBb.mjs → reviewWorkflows-RY37G83E.mjs} +2 -2
  182. package/dist/_chunks/{reviewWorkflows-kl8pmnBb.mjs.map → reviewWorkflows-RY37G83E.mjs.map} +1 -1
  183. package/dist/_chunks/{reviewWorkflows-AuX6nF1p.js → reviewWorkflows-VdOzw5if.js} +2 -2
  184. package/dist/_chunks/{reviewWorkflows-AuX6nF1p.js.map → reviewWorkflows-VdOzw5if.js.map} +1 -1
  185. package/dist/_chunks/{transferTokens-ORIU_wuV.js → transferTokens-1b-A4yIX.js} +2 -2
  186. package/dist/_chunks/{transferTokens-ORIU_wuV.js.map → transferTokens-1b-A4yIX.js.map} +1 -1
  187. package/dist/_chunks/{transferTokens-yy1TkqsE.mjs → transferTokens-8v08GvLp.mjs} +2 -2
  188. package/dist/_chunks/{transferTokens-yy1TkqsE.mjs.map → transferTokens-8v08GvLp.mjs.map} +1 -1
  189. package/dist/_chunks/{useAdminRoles-k-KvGhpX.js → useAdminRoles-PXeAUDP-.js} +2 -2
  190. package/dist/_chunks/{useAdminRoles-k-KvGhpX.js.map → useAdminRoles-PXeAUDP-.js.map} +1 -1
  191. package/dist/_chunks/{useAdminRoles-EpihNi47.mjs → useAdminRoles-j8v3rdvI.mjs} +2 -2
  192. package/dist/_chunks/{useAdminRoles-EpihNi47.mjs.map → useAdminRoles-j8v3rdvI.mjs.map} +1 -1
  193. package/dist/_chunks/{useContentTypes-iT3IuYCm.mjs → useContentTypes-AZufz4KC.mjs} +2 -2
  194. package/dist/_chunks/{useContentTypes-iT3IuYCm.mjs.map → useContentTypes-AZufz4KC.mjs.map} +1 -1
  195. package/dist/_chunks/{useContentTypes-bL0JHjqL.js → useContentTypes-MdWFm7m6.js} +2 -2
  196. package/dist/_chunks/{useContentTypes-bL0JHjqL.js.map → useContentTypes-MdWFm7m6.js.map} +1 -1
  197. package/dist/_chunks/{useLicenseLimitNotification-5L1bK71I.js → useLicenseLimitNotification-CFV9kcoJ.js} +2 -2
  198. package/dist/_chunks/{useLicenseLimitNotification-5L1bK71I.js.map → useLicenseLimitNotification-CFV9kcoJ.js.map} +1 -1
  199. package/dist/_chunks/{useLicenseLimitNotification-qV5-YqpL.mjs → useLicenseLimitNotification-Z-o2oocb.mjs} +2 -2
  200. package/dist/_chunks/{useLicenseLimitNotification-qV5-YqpL.mjs.map → useLicenseLimitNotification-Z-o2oocb.mjs.map} +1 -1
  201. package/dist/_chunks/{useReviewWorkflows-ILp3ZD_M.js → useReviewWorkflows-OYMhKLHI.js} +2 -2
  202. package/dist/_chunks/{useReviewWorkflows-ILp3ZD_M.js.map → useReviewWorkflows-OYMhKLHI.js.map} +1 -1
  203. package/dist/_chunks/{useReviewWorkflows-W4sCUqUI.mjs → useReviewWorkflows-arh_PPRE.mjs} +2 -2
  204. package/dist/_chunks/{useReviewWorkflows-W4sCUqUI.mjs.map → useReviewWorkflows-arh_PPRE.mjs.map} +1 -1
  205. package/dist/_chunks/{useWebhooks-6gjatBnz.mjs → useWebhooks-hKQKAFbS.mjs} +2 -2
  206. package/dist/_chunks/{useWebhooks-6gjatBnz.mjs.map → useWebhooks-hKQKAFbS.mjs.map} +1 -1
  207. package/dist/_chunks/{useWebhooks-g-u-eEUU.js → useWebhooks-zLYIHzzh.js} +2 -2
  208. package/dist/_chunks/{useWebhooks-g-u-eEUU.js.map → useWebhooks-zLYIHzzh.js.map} +1 -1
  209. package/dist/_chunks/{validateWorkflow-EtA_LzEo.mjs → validateWorkflow-iFAs-skx.mjs} +2 -2
  210. package/dist/_chunks/{validateWorkflow-EtA_LzEo.mjs.map → validateWorkflow-iFAs-skx.mjs.map} +1 -1
  211. package/dist/_chunks/{validateWorkflow-d781ZBtw.js → validateWorkflow-lHulfYaQ.js} +2 -2
  212. package/dist/_chunks/{validateWorkflow-d781ZBtw.js.map → validateWorkflow-lHulfYaQ.js.map} +1 -1
  213. package/dist/admin/index.js +1 -1
  214. package/dist/admin/index.mjs +1 -1
  215. package/dist/admin/src/content-manager/utils/fields.d.ts +1 -0
  216. package/dist/ee/server/index.js +63 -18
  217. package/dist/ee/server/index.js.map +1 -1
  218. package/dist/ee/server/index.mjs +64 -19
  219. package/dist/ee/server/index.mjs.map +1 -1
  220. package/dist/server/index.js +1 -0
  221. package/dist/server/index.js.map +1 -1
  222. package/dist/server/index.mjs +1 -0
  223. package/dist/server/index.mjs.map +1 -1
  224. package/dist/server/src/bootstrap.d.ts.map +1 -1
  225. package/package.json +13 -13
  226. package/dist/_chunks/EventsTable--um8UljY.mjs.map +0 -1
  227. package/dist/_chunks/EventsTable-mrhO0K1Q.js.map +0 -1
  228. package/dist/_chunks/index-Cgd3dGa5.js.map +0 -1
  229. package/dist/_chunks/index-Sz0bqxDe.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"EditPage-ZYqGLNGU.js","sources":["../../admin/src/pages/Settings/pages/Webhooks/components/Events.tsx","../../admin/src/pages/Settings/pages/Webhooks/components/EventsTable.tsx","../../admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.tsx","../../admin/src/pages/Settings/pages/Webhooks/components/TriggerContainer.tsx","../../admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.tsx","../../admin/src/pages/Settings/pages/Webhooks/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport {\n BaseCheckbox,\n Checkbox,\n FieldLabel,\n Flex,\n Loader,\n RawTable as Table,\n RawTbody as Tbody,\n RawTd as Td,\n RawTh as Th,\n RawThead as Thead,\n RawTr as Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useFormikContext, FieldInputProps } from 'formik';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useContentTypes } from '../../../../../hooks/useContentTypes';\n\n/* -------------------------------------------------------------------------------------------------\n * EventsRoot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface WebhookEventContextValue {\n isDraftAndPublish: boolean;\n}\n\nconst [WebhookEventProvider, useWebhookEvent] =\n createContext<WebhookEventContextValue>('WebhookEvent');\n\ninterface EventsRootProps {\n children: React.ReactNode;\n}\n\nconst EventsRoot = ({ children }: EventsRootProps) => {\n const { formatMessage } = useIntl();\n const { collectionTypes, isLoading } = useContentTypes();\n\n const isDraftAndPublish = React.useMemo(\n () => collectionTypes.some((ct) => ct.options?.draftAndPublish === true),\n [collectionTypes]\n );\n\n const label = formatMessage({\n id: 'Settings.webhooks.form.events',\n defaultMessage: 'Events',\n });\n\n return (\n <WebhookEventProvider isDraftAndPublish={isDraftAndPublish}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FieldLabel aria-hidden>{label}</FieldLabel>\n {isLoading && (\n <Loader>\n {formatMessage({\n id: 'Settings.webhooks.events.isLoading',\n defaultMessage: 'Events loading',\n })}\n </Loader>\n )}\n <StyledTable aria-label={label}>{children}</StyledTable>\n </Flex>\n </WebhookEventProvider>\n );\n};\n\n// TODO check whether we want to move alternating background colour tables to the design system\nconst StyledTable = styled(Table)`\n tbody tr:nth-child(odd) {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n\n thead th span {\n color: ${({ theme }) => theme.colors.neutral500};\n }\n\n td,\n th {\n padding-block-start: ${({ theme }) => theme.spaces[3]};\n padding-block-end: ${({ theme }) => theme.spaces[3]};\n width: 10%;\n vertical-align: middle;\n text-align: center;\n }\n\n tbody tr td:first-child {\n /**\n * Add padding to the start of the first column to avoid the checkbox appearing\n * too close to the edge of the table\n */\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EventsHeaders\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EventsHeadersProps {\n getHeaders?: typeof getCEHeaders;\n}\n\nconst getCEHeaders = (isDraftAndPublish: boolean): MessageDescriptor[] => {\n const headers = [\n { id: 'Settings.webhooks.events.create', defaultMessage: 'Create' },\n { id: 'Settings.webhooks.events.update', defaultMessage: 'Update' },\n { id: 'app.utils.delete', defaultMessage: 'Delete' },\n ];\n\n if (isDraftAndPublish) {\n headers.push({ id: 'app.utils.publish', defaultMessage: 'Publish' });\n headers.push({ id: 'app.utils.unpublish', defaultMessage: 'Unpublish' });\n }\n\n return headers;\n};\n\nconst EventsHeaders = ({ getHeaders = getCEHeaders }: EventsHeadersProps) => {\n const { isDraftAndPublish } = useWebhookEvent('Headers');\n\n const { formatMessage } = useIntl();\n const headers = getHeaders(isDraftAndPublish);\n\n return (\n <Thead>\n <Tr>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'Settings.webhooks.event.select',\n defaultMessage: 'Select event',\n })}\n </VisuallyHidden>\n </Th>\n {headers.map((header) => {\n if (['app.utils.publish', 'app.utils.unpublish'].includes(header?.id ?? '')) {\n return (\n <Th\n key={header.id}\n title={formatMessage({\n id: 'Settings.webhooks.event.publish-tooltip',\n defaultMessage: 'This event only exists for content with draft & publish enabled',\n })}\n >\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage(header)}\n </Typography>\n </Th>\n );\n }\n\n return (\n <Th key={header.id}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage(header)}\n </Typography>\n </Th>\n );\n })}\n </Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EventsBody\n * -----------------------------------------------------------------------------------------------*/\ninterface FormikContextValue {\n events: string[];\n}\n\ninterface EventsBodyProps {\n providedEvents?: Record<string, FormikContextValue['events']>;\n}\n\nconst EventsBody = ({ providedEvents }: EventsBodyProps) => {\n const { isDraftAndPublish } = useWebhookEvent('Body');\n\n const events = providedEvents || getCEEvents(isDraftAndPublish);\n const { values, handleChange: onChange } = useFormikContext<FormikContextValue>();\n\n const inputName = 'events';\n const inputValue = values.events;\n const disabledEvents: string[] = [];\n\n const formattedValue = inputValue.reduce<Record<string, string[]>>((acc, curr) => {\n const key = curr.split('.')[0];\n\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(curr);\n\n return acc;\n }, {});\n\n const handleSelect: React.ChangeEventHandler<HTMLInputElement> = ({\n target: { name, value },\n }) => {\n const set = new Set(inputValue);\n\n if (value) {\n set.add(name);\n } else {\n set.delete(name);\n }\n onChange({ target: { name: inputName, value: Array.from(set) } });\n };\n\n const handleSelectAll: React.ChangeEventHandler<HTMLInputElement> = ({\n target: { name, value },\n }) => {\n const set = new Set(inputValue);\n\n if (value) {\n events[name].forEach((event) => {\n if (!disabledEvents.includes(event)) {\n set.add(event);\n }\n });\n } else {\n events[name].forEach((event) => set.delete(event));\n }\n onChange({ target: { name: inputName, value: Array.from(set) } });\n };\n\n return (\n <Tbody>\n {Object.entries(events).map(([event, value]) => {\n return (\n <EventsRow\n disabledEvents={disabledEvents}\n key={event}\n name={event}\n events={value}\n inputValue={formattedValue[event]}\n handleSelect={handleSelect}\n handleSelectAll={handleSelectAll}\n />\n );\n })}\n </Tbody>\n );\n};\n\nconst getCEEvents = (\n isDraftAndPublish: boolean\n): Required<Pick<EventsBodyProps, 'providedEvents'>>['providedEvents'] => {\n const entryEvents: FormikContextValue['events'] = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n ];\n\n if (isDraftAndPublish) {\n entryEvents.push('entry.publish', 'entry.unpublish');\n }\n\n return {\n entry: entryEvents,\n media: ['media.create', 'media.update', 'media.delete'],\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EventsRow\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EventsRowProps {\n disabledEvents?: string[];\n events?: string[];\n inputValue?: string[];\n handleSelect: FieldInputProps<string>['onChange'];\n handleSelectAll: FieldInputProps<string>['onChange'];\n name: string;\n}\n\nconst EventsRow = ({\n disabledEvents = [],\n name,\n events = [],\n inputValue = [],\n handleSelect,\n handleSelectAll,\n}: EventsRowProps) => {\n const { formatMessage } = useIntl();\n const enabledCheckboxes = events.filter((event) => !disabledEvents.includes(event));\n\n const hasSomeCheckboxSelected = inputValue.length > 0;\n const areAllCheckboxesSelected = inputValue.length === enabledCheckboxes.length;\n\n const onChangeAll: React.ChangeEventHandler<HTMLInputElement> = ({ target: { name } }) => {\n const valueToSet = !areAllCheckboxesSelected;\n\n handleSelectAll({\n target: { name, value: valueToSet },\n });\n };\n\n const targetColumns = 5;\n\n return (\n <Tr>\n <Td>\n <Checkbox\n indeterminate={hasSomeCheckboxSelected && !areAllCheckboxesSelected}\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n name={name}\n onChange={onChangeAll}\n value={areAllCheckboxesSelected}\n >\n {removeHyphensAndTitleCase(name)}\n </Checkbox>\n </Td>\n\n {events.map((event) => {\n return (\n <Td key={event}>\n <BaseCheckbox\n disabled={disabledEvents.includes(event)}\n aria-label={event}\n name={event}\n value={inputValue.includes(event)}\n onValueChange={(value) => handleSelect({ target: { name: event, value } })}\n />\n </Td>\n );\n })}\n {events.length < targetColumns && <Td colSpan={targetColumns - events.length} />}\n </Tr>\n );\n};\n\n/**\n * Converts a string to title case and removes hyphens.\n */\nconst removeHyphensAndTitleCase = (str: string): string =>\n str\n .replace(/-/g, ' ')\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n\nconst Events = { Root: EventsRoot, Headers: EventsHeaders, Body: EventsBody, Row: EventsRow };\n\nexport { Events };\nexport type { EventsRowProps, EventsHeadersProps, EventsRootProps, EventsBodyProps };\n","import { Events } from './Events';\n\nconst EventTableCE = () => {\n return (\n <Events.Root>\n <Events.Headers />\n <Events.Body />\n </Events.Root>\n );\n};\n\nexport { EventTableCE };\n","import * as React from 'react';\n\nimport {\n Box,\n FieldLabel,\n Flex,\n Grid,\n GridItem,\n TextButton,\n TextInput,\n ComboboxOption,\n CreatableCombobox,\n ComboboxProps,\n} from '@strapi/design-system';\nimport { RemoveRoundedButton } from '@strapi/helper-plugin';\nimport { Plus } from '@strapi/icons';\nimport { Field, FieldArray, FieldInputProps, useFormikContext } from 'formik';\nimport { useIntl } from 'react-intl';\n\n/* -------------------------------------------------------------------------------------------------\n * HeadersInput\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormikContext {\n headers: Array<{ key: HTTPHeaders; value: string }>;\n}\n\nconst HeadersInput = () => {\n const { formatMessage } = useIntl();\n const { values, errors } = useFormikContext<FormikContext>();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FieldLabel>\n {formatMessage({\n id: 'Settings.webhooks.form.headers',\n defaultMessage: 'Headers',\n })}\n </FieldLabel>\n <Box padding={8} background=\"neutral100\" hasRadius>\n <FieldArray\n validateOnChange={false}\n name=\"headers\"\n render={({ push, remove }) => (\n <Grid gap={4}>\n {values.headers.map((header, index) => {\n const formikError = errors.headers?.[index];\n\n const comboboxError = typeof formikError === 'object' ? formikError.key : undefined;\n const textInputError =\n typeof formikError === 'object' ? formikError.value : undefined;\n\n return (\n <React.Fragment key={`${index}.${header.key}`}>\n <GridItem col={6}>\n <Field\n as={HeaderCombobox}\n name={`headers.${index}.key`}\n aria-label={`row ${index + 1} key`}\n label={formatMessage({\n id: 'Settings.webhooks.key',\n defaultMessage: 'Key',\n })}\n error={comboboxError}\n />\n </GridItem>\n <GridItem col={6}>\n <Flex alignItems=\"flex-end\">\n <Box style={{ flex: 1 }}>\n <Field\n as={TextInput}\n name={`headers.${index}.value`}\n aria-label={`row ${index + 1} value`}\n label={formatMessage({\n id: 'Settings.webhooks.value',\n defaultMessage: 'Value',\n })}\n error={textInputError}\n />\n </Box>\n <Flex\n paddingLeft={2}\n style={{ alignSelf: 'center' }}\n paddingTop={textInputError ? 0 : 5}\n >\n <RemoveRoundedButton\n disabled={values.headers.length === 1}\n onClick={() => remove(index)}\n label={formatMessage(\n {\n id: 'Settings.webhooks.headers.remove',\n defaultMessage: 'Remove header row {number}',\n },\n { number: index + 1 }\n )}\n />\n </Flex>\n </Flex>\n </GridItem>\n </React.Fragment>\n );\n })}\n <GridItem col={12}>\n <TextButton\n type=\"button\"\n onClick={() => {\n push({ key: '', value: '' });\n }}\n startIcon={<Plus />}\n >\n {formatMessage({\n id: 'Settings.webhooks.create.header',\n defaultMessage: 'Create new header',\n })}\n </TextButton>\n </GridItem>\n </Grid>\n )}\n />\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCombobox\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderComboboxProps\n extends FieldInputProps<string>,\n Required<Pick<ComboboxProps, 'label' | 'error'>> {}\n\nconst HeaderCombobox = ({ name, onChange, value, ...restProps }: HeaderComboboxProps) => {\n const {\n values: { headers },\n } = useFormikContext<FormikContext>();\n const [options, setOptions] = React.useState<HTTPHeaders[]>([...HTTP_HEADERS]);\n\n React.useEffect(() => {\n const headerOptions = HTTP_HEADERS.filter(\n (key) => !headers?.some((header) => header.key !== value && header.key === key)\n );\n\n setOptions(headerOptions);\n }, [headers, value]);\n\n const handleChange: ComboboxProps['onChange'] = (value) => {\n onChange({ target: { name, value } });\n };\n\n const handleCreateOption = (value: string) => {\n setOptions((prev) => [...prev, value as HTTPHeaders]);\n\n handleChange(value);\n };\n\n return (\n <CreatableCombobox\n {...restProps}\n onClear={() => handleChange('')}\n onChange={handleChange}\n onCreateOption={handleCreateOption}\n placeholder=\"\"\n value={value}\n >\n {options.map((key) => (\n <ComboboxOption value={key} key={key}>\n {key}\n </ComboboxOption>\n ))}\n </CreatableCombobox>\n );\n};\n\nconst HTTP_HEADERS = [\n 'A-IM',\n 'Accept',\n 'Accept-Charset',\n 'Accept-Encoding',\n 'Accept-Language',\n 'Accept-Datetime',\n 'Access-Control-Request-Method',\n 'Access-Control-Request-Headers',\n 'Authorization',\n 'Cache-Control',\n 'Connection',\n 'Content-Length',\n 'Content-Type',\n 'Cookie',\n 'Date',\n 'Expect',\n 'Forwarded',\n 'From',\n 'Host',\n 'If-Match',\n 'If-Modified-Since',\n 'If-None-Match',\n 'If-Range',\n 'If-Unmodified-Since',\n 'Max-Forwards',\n 'Origin',\n 'Pragma',\n 'Proxy-Authorization',\n 'Range',\n 'Referer',\n 'TE',\n 'User-Agent',\n 'Upgrade',\n 'Via',\n 'Warning',\n] as const;\n\ntype HTTPHeaders = (typeof HTTP_HEADERS)[number];\n\nexport { HeadersInput };\n","import { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Check, Cross, Loader } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme, css } from 'styled-components';\n\n/* -------------------------------------------------------------------------------------------------\n * TriggerContainer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TriggerContainerProps extends Pick<StatusProps, 'isPending'> {\n onCancel: () => void;\n response?: {\n statusCode: number;\n message?: string;\n };\n}\n\nconst TriggerContainer = ({ isPending, onCancel, response }: TriggerContainerProps) => {\n const { statusCode, message } = response ?? {};\n const { formatMessage } = useIntl();\n\n return (\n <Box background=\"neutral0\" padding={5} shadow=\"filterShadow\" hasRadius>\n <Grid gap={4} style={{ alignItems: 'center' }}>\n <GridItem col={3}>\n <Typography>\n {formatMessage({\n id: 'Settings.webhooks.trigger.test',\n defaultMessage: 'Test-trigger',\n })}\n </Typography>\n </GridItem>\n <GridItem col={3}>\n <Status isPending={isPending} statusCode={statusCode} />\n </GridItem>\n <GridItem col={6}>\n {!isPending ? (\n <Message statusCode={statusCode} message={message} />\n ) : (\n <Flex justifyContent=\"flex-end\">\n <button onClick={onCancel} type=\"button\">\n <Flex gap={2} alignItems=\"center\">\n <Typography textColor=\"neutral400\">\n {formatMessage({\n id: 'Settings.webhooks.trigger.cancel',\n defaultMessage: 'cancel',\n })}\n </Typography>\n <Icon as={Cross} color=\"neutral400\" />\n </Flex>\n </button>\n </Flex>\n )}\n </GridItem>\n </Grid>\n </Box>\n );\n};\n\nconst Icon = styled.svg<{ color?: keyof DefaultTheme['colors'] }>(\n ({ theme, color }) => `\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n\n\n ${\n color\n ? css`\n path {\n fill: ${theme.colors[color]};\n }\n `\n : ''\n }\n`\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Status\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StatusProps {\n isPending: boolean;\n statusCode?: number;\n}\n\nconst Status = ({ isPending, statusCode }: StatusProps) => {\n const { formatMessage } = useIntl();\n\n if (isPending || !statusCode) {\n return (\n <Flex gap={2} alignItems=\"center\">\n <Icon as={Loader} />\n <Typography>\n {formatMessage({ id: 'Settings.webhooks.trigger.pending', defaultMessage: 'pending' })}\n </Typography>\n </Flex>\n );\n }\n\n if (statusCode >= 200 && statusCode < 300) {\n return (\n <Flex gap={2} alignItems=\"center\">\n <Icon as={Check} color=\"success700\" />\n <Typography>\n {formatMessage({ id: 'Settings.webhooks.trigger.success', defaultMessage: 'success' })}\n </Typography>\n </Flex>\n );\n }\n\n if (statusCode >= 300) {\n return (\n <Flex gap={2} alignItems=\"center\">\n <Icon as={Cross} color=\"danger700\" />\n <Typography>\n {formatMessage({ id: 'Settings.error', defaultMessage: 'error' })} {statusCode}\n </Typography>\n </Flex>\n );\n }\n\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Message\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MessageProps {\n statusCode?: number;\n message?: string;\n}\n\nconst Message = ({ statusCode, message }: MessageProps) => {\n const { formatMessage } = useIntl();\n\n if (!statusCode) {\n return null;\n }\n\n if (statusCode >= 200 && statusCode < 300) {\n return (\n <Flex justifyContent=\"flex-end\">\n <Typography textColor=\"neutral600\" ellipsis>\n {formatMessage({\n id: 'Settings.webhooks.trigger.success.label',\n defaultMessage: 'Trigger succeeded',\n })}\n </Typography>\n </Flex>\n );\n }\n\n if (statusCode >= 300) {\n return (\n <Flex justifyContent=\"flex-end\">\n <Flex maxWidth={pxToRem(250)} justifyContent=\"flex-end\" title={message}>\n <Typography ellipsis textColor=\"neutral600\">\n {message}\n </Typography>\n </Flex>\n </Flex>\n );\n }\n\n return null;\n};\n\nexport { TriggerContainer };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n TextInput,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form } from '@strapi/helper-plugin';\nimport { ArrowLeft, Check, Play as Publish } from '@strapi/icons';\nimport { Webhook } from '@strapi/types';\nimport { Field, FormikHelpers, FormikProvider, useFormik } from 'formik';\nimport { IntlShape, useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { TriggerWebhook } from '../../../../../../../shared/contracts/webhooks';\nimport { useEnterprise } from '../../../../../hooks/useEnterprise';\n\nimport { EventTableCE } from './EventsTable';\nimport { HeadersInput } from './HeadersInput';\nimport { TriggerContainer } from './TriggerContainer';\n\ninterface WebhookFormValues {\n name: Webhook['name'];\n url: Webhook['url'];\n headers: Array<{ key: string; value: string }>;\n events: Webhook['events'];\n}\n\ninterface WebhookFormProps {\n data?: Webhook;\n handleSubmit: (\n values: WebhookFormValues,\n formik: FormikHelpers<WebhookFormValues>\n ) => Promise<void>;\n isCreating: boolean;\n isTriggering: boolean;\n triggerWebhook: () => void;\n triggerResponse?: TriggerWebhook.Response['data'];\n}\n\nconst WebhookForm = ({\n handleSubmit,\n triggerWebhook,\n isCreating,\n isTriggering,\n triggerResponse,\n data,\n}: WebhookFormProps) => {\n const { formatMessage } = useIntl();\n const [showTriggerResponse, setShowTriggerResponse] = React.useState(false);\n const EventTable = useEnterprise(\n EventTableCE,\n async () =>\n (\n await import(\n '../../../../../../../ee/admin/src/pages/SettingsPage/pages/Webhooks/components/EventsTable'\n )\n ).EventsTableEE\n );\n\n /**\n * Map the headers into a form that can be used within the formik form\n */\n const mapHeaders = (headers: Webhook['headers']) => {\n if (!Object.keys(headers).length) {\n return [{ key: '', value: '' }];\n }\n\n return Object.entries(headers).map(([key, value]) => ({ key, value }));\n };\n\n const formik = useFormik({\n initialValues: {\n name: data?.name || '',\n url: data?.url || '',\n headers: mapHeaders(data?.headers || {}),\n events: data?.events || [],\n },\n async onSubmit(values, formik) {\n await handleSubmit(values, formik);\n\n formik.resetForm({ values });\n },\n validationSchema: makeWebhookValidationSchema({ formatMessage }),\n validateOnChange: false,\n validateOnBlur: false,\n });\n\n // block rendering until the EE component is fully loaded\n if (!EventTable) {\n return null;\n }\n\n return (\n <FormikProvider value={formik}>\n <Form>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n onClick={() => {\n triggerWebhook();\n setShowTriggerResponse(true);\n }}\n variant=\"tertiary\"\n startIcon={<Publish />}\n disabled={isCreating || isTriggering}\n size=\"L\"\n >\n {formatMessage({\n id: 'Settings.webhooks.trigger',\n defaultMessage: 'Trigger',\n })}\n </Button>\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"L\"\n disabled={!formik.dirty}\n loading={formik.isSubmitting}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={\n isCreating\n ? formatMessage({\n id: 'Settings.webhooks.create',\n defaultMessage: 'Create a webhook',\n })\n : data?.name\n }\n navigationAction={\n // @ts-expect-error – as components props are not inferred correctly.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/webhooks\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n {showTriggerResponse && (\n <TriggerContainer\n isPending={isTriggering}\n response={triggerResponse}\n onCancel={() => setShowTriggerResponse(false)}\n />\n )}\n <Box background=\"neutral0\" padding={8} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Grid gap={6}>\n <GridItem col={6}>\n <Field\n as={TextInput}\n name=\"name\"\n error={formik.errors.name}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n required\n />\n </GridItem>\n <GridItem col={12}>\n <Field\n as={TextInput}\n name=\"url\"\n error={formik.errors.url}\n label={formatMessage({\n id: 'Settings.roles.form.input.url',\n defaultMessage: 'Url',\n })}\n required\n />\n </GridItem>\n </Grid>\n <HeadersInput />\n <EventTable />\n </Flex>\n </Box>\n </Flex>\n </ContentLayout>\n </Form>\n </FormikProvider>\n );\n};\n\nconst NAME_REGEX = /(^$)|(^[A-Za-z][_0-9A-Za-z ]*$)/;\nconst URL_REGEX = /(^$)|((https?:\\/\\/.*)(d*)\\/?(.*))/;\n\nconst makeWebhookValidationSchema = ({ formatMessage }: Pick<IntlShape, 'formatMessage'>) =>\n yup.object().shape({\n name: yup\n .string()\n .required(\n formatMessage({\n id: 'Settings.webhooks.validation.name.required',\n defaultMessage: 'Name is required',\n })\n )\n .matches(\n NAME_REGEX,\n formatMessage({\n id: 'Settings.webhooks.validation.name.regex',\n defaultMessage:\n 'The name must start with a letter and only contain letters, numbers, spaces and underscores',\n })\n ),\n url: yup\n .string()\n .required(\n formatMessage({\n id: 'Settings.webhooks.validation.url.required',\n defaultMessage: 'Url is required',\n })\n )\n .matches(\n URL_REGEX,\n formatMessage({\n id: 'Settings.webhooks.validation.url.regex',\n defaultMessage: 'The value must be a valid Url',\n })\n ),\n headers: yup.lazy((array) => {\n const baseSchema = yup.array();\n\n if (array.length === 1) {\n const { key, value } = array[0];\n\n if (!key && !value) {\n return baseSchema;\n }\n }\n\n return baseSchema.of(\n yup.object().shape({\n key: yup.string().required(\n formatMessage({\n id: 'Settings.webhooks.validation.key',\n defaultMessage: 'Key is required',\n })\n ),\n value: yup.string().required(\n formatMessage({\n id: 'Settings.webhooks.validation.value',\n defaultMessage: 'Value is required',\n })\n ),\n })\n );\n }),\n events: yup.array(),\n });\n\nexport { WebhookForm };\nexport type { WebhookFormValues, WebhookFormProps };\n","import * as React from 'react';\n\nimport { Main } from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAPIErrorHandler,\n useNotification,\n} from '@strapi/helper-plugin';\nimport { Webhook } from '@strapi/types';\nimport { FormikHelpers } from 'formik';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { CreateWebhook, TriggerWebhook } from '../../../../../../shared/contracts/webhooks';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useContentTypes } from '../../../../hooks/useContentTypes';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { WebhookForm, WebhookFormValues } from './components/WebhookForm';\nimport { useWebhooks } from './hooks/useWebhooks';\n\n/* -------------------------------------------------------------------------------------------------\n * EditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst cleanData = (\n data: WebhookFormValues\n): Omit<CreateWebhook.Request['body'], 'id' | 'isEnabled'> => ({\n ...data,\n headers: data.headers.reduce<Webhook['headers']>((acc, { key, value }) => {\n if (key !== '') {\n acc[key] = value;\n }\n\n return acc;\n }, {}),\n});\n\nconst EditPage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/webhooks/:id');\n const id = match?.params.id;\n const isCreating = id === 'create';\n\n const { replace } = useHistory();\n const toggleNotification = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { isLoading: isLoadingForModels } = useContentTypes();\n const [isTriggering, setIsTriggering] = React.useState(false);\n const [triggerResponse, setTriggerResponse] = React.useState<TriggerWebhook.Response['data']>();\n\n const { isLoading, webhooks, error, createWebhook, updateWebhook, triggerWebhook } = useWebhooks(\n { id: id! },\n {\n skip: isCreating,\n }\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n }, [error, toggleNotification, formatAPIError]);\n\n const handleTriggerWebhook = async () => {\n try {\n setIsTriggering(true);\n\n const res = await triggerWebhook(id!);\n\n if ('error' in res) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setTriggerResponse(res.data);\n } catch {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n } finally {\n setIsTriggering(false);\n }\n };\n\n const handleSubmit = async (\n data: WebhookFormValues,\n formik: FormikHelpers<WebhookFormValues>\n ) => {\n try {\n if (isCreating) {\n const res = await createWebhook(cleanData(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 toggleNotification({\n type: 'success',\n message: { id: 'Settings.webhooks.created' },\n });\n\n replace(`/settings/webhooks/${res.data.id}`);\n } else {\n const res = await updateWebhook({ id: id!, ...cleanData(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 toggleNotification({\n type: 'success',\n message: { id: 'notification.form.success.fields' },\n });\n }\n } catch {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n if (isLoading || isLoadingForModels) {\n return <LoadingIndicatorPage />;\n }\n\n const [webhook] = webhooks ?? [];\n\n return (\n <Main>\n <SettingsPageTitle name=\"Webhooks\" />\n <WebhookForm\n data={webhook}\n handleSubmit={handleSubmit}\n triggerWebhook={handleTriggerWebhook}\n isCreating={isCreating}\n isTriggering={isTriggering}\n triggerResponse={triggerResponse}\n />\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.webhooks.update}>\n <EditPage />\n </CheckPagePermissions>\n );\n};\n\nexport { ProtectedEditPage, EditPage };\n"],"names":["createContext","useIntl","useContentTypes","React","jsx","jsxs","Flex","FieldLabel","Loader","styled","Table","Thead","Tr","Th","VisuallyHidden","Typography","useFormikContext","Tbody","name","Td","Checkbox","BaseCheckbox","Box","FieldArray","Grid","index","GridItem","Field","TextInput","RemoveRoundedButton","TextButton","Plus","value","CreatableCombobox","ComboboxOption","Cross","css","Check","pxToRem","useEnterprise","formik","useFormik","FormikProvider","Form","HeaderLayout","Button","Publish","Link","NavLink","ArrowLeft","ContentLayout","yup","useRouteMatch","useHistory","useNotification","useAPIErrorHandler","useWebhooks","isBaseQueryError","LoadingIndicatorPage","Main","SettingsPageTitle","useTypedSelector","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
1
+ {"version":3,"file":"EditPage-td1NUrjL.js","sources":["../../admin/src/pages/Settings/pages/Webhooks/components/Events.tsx","../../admin/src/pages/Settings/pages/Webhooks/components/EventsTable.tsx","../../admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.tsx","../../admin/src/pages/Settings/pages/Webhooks/components/TriggerContainer.tsx","../../admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.tsx","../../admin/src/pages/Settings/pages/Webhooks/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport {\n BaseCheckbox,\n Checkbox,\n FieldLabel,\n Flex,\n Loader,\n RawTable as Table,\n RawTbody as Tbody,\n RawTd as Td,\n RawTh as Th,\n RawThead as Thead,\n RawTr as Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useFormikContext, FieldInputProps } from 'formik';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useContentTypes } from '../../../../../hooks/useContentTypes';\n\n/* -------------------------------------------------------------------------------------------------\n * EventsRoot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface WebhookEventContextValue {\n isDraftAndPublish: boolean;\n}\n\nconst [WebhookEventProvider, useWebhookEvent] =\n createContext<WebhookEventContextValue>('WebhookEvent');\n\ninterface EventsRootProps {\n children: React.ReactNode;\n}\n\nconst EventsRoot = ({ children }: EventsRootProps) => {\n const { formatMessage } = useIntl();\n const { collectionTypes, isLoading } = useContentTypes();\n\n const isDraftAndPublish = React.useMemo(\n () => collectionTypes.some((ct) => ct.options?.draftAndPublish === true),\n [collectionTypes]\n );\n\n const label = formatMessage({\n id: 'Settings.webhooks.form.events',\n defaultMessage: 'Events',\n });\n\n return (\n <WebhookEventProvider isDraftAndPublish={isDraftAndPublish}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FieldLabel aria-hidden>{label}</FieldLabel>\n {isLoading && (\n <Loader>\n {formatMessage({\n id: 'Settings.webhooks.events.isLoading',\n defaultMessage: 'Events loading',\n })}\n </Loader>\n )}\n <StyledTable aria-label={label}>{children}</StyledTable>\n </Flex>\n </WebhookEventProvider>\n );\n};\n\n// TODO check whether we want to move alternating background colour tables to the design system\nconst StyledTable = styled(Table)`\n tbody tr:nth-child(odd) {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n\n thead th span {\n color: ${({ theme }) => theme.colors.neutral500};\n }\n\n td,\n th {\n padding-block-start: ${({ theme }) => theme.spaces[3]};\n padding-block-end: ${({ theme }) => theme.spaces[3]};\n width: 10%;\n vertical-align: middle;\n text-align: center;\n }\n\n tbody tr td:first-child {\n /**\n * Add padding to the start of the first column to avoid the checkbox appearing\n * too close to the edge of the table\n */\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EventsHeaders\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EventsHeadersProps {\n getHeaders?: typeof getCEHeaders;\n}\n\nconst getCEHeaders = (isDraftAndPublish: boolean): MessageDescriptor[] => {\n const headers = [\n { id: 'Settings.webhooks.events.create', defaultMessage: 'Create' },\n { id: 'Settings.webhooks.events.update', defaultMessage: 'Update' },\n { id: 'app.utils.delete', defaultMessage: 'Delete' },\n ];\n\n if (isDraftAndPublish) {\n headers.push({ id: 'app.utils.publish', defaultMessage: 'Publish' });\n headers.push({ id: 'app.utils.unpublish', defaultMessage: 'Unpublish' });\n }\n\n return headers;\n};\n\nconst EventsHeaders = ({ getHeaders = getCEHeaders }: EventsHeadersProps) => {\n const { isDraftAndPublish } = useWebhookEvent('Headers');\n\n const { formatMessage } = useIntl();\n const headers = getHeaders(isDraftAndPublish);\n\n return (\n <Thead>\n <Tr>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'Settings.webhooks.event.select',\n defaultMessage: 'Select event',\n })}\n </VisuallyHidden>\n </Th>\n {headers.map((header) => {\n if (['app.utils.publish', 'app.utils.unpublish'].includes(header?.id ?? '')) {\n return (\n <Th\n key={header.id}\n title={formatMessage({\n id: 'Settings.webhooks.event.publish-tooltip',\n defaultMessage: 'This event only exists for content with draft & publish enabled',\n })}\n >\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage(header)}\n </Typography>\n </Th>\n );\n }\n\n return (\n <Th key={header.id}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage(header)}\n </Typography>\n </Th>\n );\n })}\n </Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EventsBody\n * -----------------------------------------------------------------------------------------------*/\ninterface FormikContextValue {\n events: string[];\n}\n\ninterface EventsBodyProps {\n providedEvents?: Record<string, FormikContextValue['events']>;\n}\n\nconst EventsBody = ({ providedEvents }: EventsBodyProps) => {\n const { isDraftAndPublish } = useWebhookEvent('Body');\n\n const events = providedEvents || getCEEvents(isDraftAndPublish);\n const { values, handleChange: onChange } = useFormikContext<FormikContextValue>();\n\n const inputName = 'events';\n const inputValue = values.events;\n const disabledEvents: string[] = [];\n\n const formattedValue = inputValue.reduce<Record<string, string[]>>((acc, curr) => {\n const key = curr.split('.')[0];\n\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(curr);\n\n return acc;\n }, {});\n\n const handleSelect: React.ChangeEventHandler<HTMLInputElement> = ({\n target: { name, value },\n }) => {\n const set = new Set(inputValue);\n\n if (value) {\n set.add(name);\n } else {\n set.delete(name);\n }\n onChange({ target: { name: inputName, value: Array.from(set) } });\n };\n\n const handleSelectAll: React.ChangeEventHandler<HTMLInputElement> = ({\n target: { name, value },\n }) => {\n const set = new Set(inputValue);\n\n if (value) {\n events[name].forEach((event) => {\n if (!disabledEvents.includes(event)) {\n set.add(event);\n }\n });\n } else {\n events[name].forEach((event) => set.delete(event));\n }\n onChange({ target: { name: inputName, value: Array.from(set) } });\n };\n\n return (\n <Tbody>\n {Object.entries(events).map(([event, value]) => {\n return (\n <EventsRow\n disabledEvents={disabledEvents}\n key={event}\n name={event}\n events={value}\n inputValue={formattedValue[event]}\n handleSelect={handleSelect}\n handleSelectAll={handleSelectAll}\n />\n );\n })}\n </Tbody>\n );\n};\n\nconst getCEEvents = (\n isDraftAndPublish: boolean\n): Required<Pick<EventsBodyProps, 'providedEvents'>>['providedEvents'] => {\n const entryEvents: FormikContextValue['events'] = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n ];\n\n if (isDraftAndPublish) {\n entryEvents.push('entry.publish', 'entry.unpublish');\n }\n\n return {\n entry: entryEvents,\n media: ['media.create', 'media.update', 'media.delete'],\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EventsRow\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EventsRowProps {\n disabledEvents?: string[];\n events?: string[];\n inputValue?: string[];\n handleSelect: FieldInputProps<string>['onChange'];\n handleSelectAll: FieldInputProps<string>['onChange'];\n name: string;\n}\n\nconst EventsRow = ({\n disabledEvents = [],\n name,\n events = [],\n inputValue = [],\n handleSelect,\n handleSelectAll,\n}: EventsRowProps) => {\n const { formatMessage } = useIntl();\n const enabledCheckboxes = events.filter((event) => !disabledEvents.includes(event));\n\n const hasSomeCheckboxSelected = inputValue.length > 0;\n const areAllCheckboxesSelected = inputValue.length === enabledCheckboxes.length;\n\n const onChangeAll: React.ChangeEventHandler<HTMLInputElement> = ({ target: { name } }) => {\n const valueToSet = !areAllCheckboxesSelected;\n\n handleSelectAll({\n target: { name, value: valueToSet },\n });\n };\n\n const targetColumns = 5;\n\n return (\n <Tr>\n <Td>\n <Checkbox\n indeterminate={hasSomeCheckboxSelected && !areAllCheckboxesSelected}\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n name={name}\n onChange={onChangeAll}\n value={areAllCheckboxesSelected}\n >\n {removeHyphensAndTitleCase(name)}\n </Checkbox>\n </Td>\n\n {events.map((event) => {\n return (\n <Td key={event}>\n <BaseCheckbox\n disabled={disabledEvents.includes(event)}\n aria-label={event}\n name={event}\n value={inputValue.includes(event)}\n onValueChange={(value) => handleSelect({ target: { name: event, value } })}\n />\n </Td>\n );\n })}\n {events.length < targetColumns && <Td colSpan={targetColumns - events.length} />}\n </Tr>\n );\n};\n\n/**\n * Converts a string to title case and removes hyphens.\n */\nconst removeHyphensAndTitleCase = (str: string): string =>\n str\n .replace(/-/g, ' ')\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n\nconst Events = { Root: EventsRoot, Headers: EventsHeaders, Body: EventsBody, Row: EventsRow };\n\nexport { Events };\nexport type { EventsRowProps, EventsHeadersProps, EventsRootProps, EventsBodyProps };\n","import { Events } from './Events';\n\nconst EventTableCE = () => {\n return (\n <Events.Root>\n <Events.Headers />\n <Events.Body />\n </Events.Root>\n );\n};\n\nexport { EventTableCE };\n","import * as React from 'react';\n\nimport {\n Box,\n FieldLabel,\n Flex,\n Grid,\n GridItem,\n TextButton,\n TextInput,\n ComboboxOption,\n CreatableCombobox,\n ComboboxProps,\n} from '@strapi/design-system';\nimport { RemoveRoundedButton } from '@strapi/helper-plugin';\nimport { Plus } from '@strapi/icons';\nimport { Field, FieldArray, FieldInputProps, useFormikContext } from 'formik';\nimport { useIntl } from 'react-intl';\n\n/* -------------------------------------------------------------------------------------------------\n * HeadersInput\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormikContext {\n headers: Array<{ key: HTTPHeaders; value: string }>;\n}\n\nconst HeadersInput = () => {\n const { formatMessage } = useIntl();\n const { values, errors } = useFormikContext<FormikContext>();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FieldLabel>\n {formatMessage({\n id: 'Settings.webhooks.form.headers',\n defaultMessage: 'Headers',\n })}\n </FieldLabel>\n <Box padding={8} background=\"neutral100\" hasRadius>\n <FieldArray\n validateOnChange={false}\n name=\"headers\"\n render={({ push, remove }) => (\n <Grid gap={4}>\n {values.headers.map((header, index) => {\n const formikError = errors.headers?.[index];\n\n const comboboxError = typeof formikError === 'object' ? formikError.key : undefined;\n const textInputError =\n typeof formikError === 'object' ? formikError.value : undefined;\n\n return (\n <React.Fragment key={`${index}.${header.key}`}>\n <GridItem col={6}>\n <Field\n as={HeaderCombobox}\n name={`headers.${index}.key`}\n aria-label={`row ${index + 1} key`}\n label={formatMessage({\n id: 'Settings.webhooks.key',\n defaultMessage: 'Key',\n })}\n error={comboboxError}\n />\n </GridItem>\n <GridItem col={6}>\n <Flex alignItems=\"flex-end\">\n <Box style={{ flex: 1 }}>\n <Field\n as={TextInput}\n name={`headers.${index}.value`}\n aria-label={`row ${index + 1} value`}\n label={formatMessage({\n id: 'Settings.webhooks.value',\n defaultMessage: 'Value',\n })}\n error={textInputError}\n />\n </Box>\n <Flex\n paddingLeft={2}\n style={{ alignSelf: 'center' }}\n paddingTop={textInputError ? 0 : 5}\n >\n <RemoveRoundedButton\n disabled={values.headers.length === 1}\n onClick={() => remove(index)}\n label={formatMessage(\n {\n id: 'Settings.webhooks.headers.remove',\n defaultMessage: 'Remove header row {number}',\n },\n { number: index + 1 }\n )}\n />\n </Flex>\n </Flex>\n </GridItem>\n </React.Fragment>\n );\n })}\n <GridItem col={12}>\n <TextButton\n type=\"button\"\n onClick={() => {\n push({ key: '', value: '' });\n }}\n startIcon={<Plus />}\n >\n {formatMessage({\n id: 'Settings.webhooks.create.header',\n defaultMessage: 'Create new header',\n })}\n </TextButton>\n </GridItem>\n </Grid>\n )}\n />\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCombobox\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderComboboxProps\n extends FieldInputProps<string>,\n Required<Pick<ComboboxProps, 'label' | 'error'>> {}\n\nconst HeaderCombobox = ({ name, onChange, value, ...restProps }: HeaderComboboxProps) => {\n const {\n values: { headers },\n } = useFormikContext<FormikContext>();\n const [options, setOptions] = React.useState<HTTPHeaders[]>([...HTTP_HEADERS]);\n\n React.useEffect(() => {\n const headerOptions = HTTP_HEADERS.filter(\n (key) => !headers?.some((header) => header.key !== value && header.key === key)\n );\n\n setOptions(headerOptions);\n }, [headers, value]);\n\n const handleChange: ComboboxProps['onChange'] = (value) => {\n onChange({ target: { name, value } });\n };\n\n const handleCreateOption = (value: string) => {\n setOptions((prev) => [...prev, value as HTTPHeaders]);\n\n handleChange(value);\n };\n\n return (\n <CreatableCombobox\n {...restProps}\n onClear={() => handleChange('')}\n onChange={handleChange}\n onCreateOption={handleCreateOption}\n placeholder=\"\"\n value={value}\n >\n {options.map((key) => (\n <ComboboxOption value={key} key={key}>\n {key}\n </ComboboxOption>\n ))}\n </CreatableCombobox>\n );\n};\n\nconst HTTP_HEADERS = [\n 'A-IM',\n 'Accept',\n 'Accept-Charset',\n 'Accept-Encoding',\n 'Accept-Language',\n 'Accept-Datetime',\n 'Access-Control-Request-Method',\n 'Access-Control-Request-Headers',\n 'Authorization',\n 'Cache-Control',\n 'Connection',\n 'Content-Length',\n 'Content-Type',\n 'Cookie',\n 'Date',\n 'Expect',\n 'Forwarded',\n 'From',\n 'Host',\n 'If-Match',\n 'If-Modified-Since',\n 'If-None-Match',\n 'If-Range',\n 'If-Unmodified-Since',\n 'Max-Forwards',\n 'Origin',\n 'Pragma',\n 'Proxy-Authorization',\n 'Range',\n 'Referer',\n 'TE',\n 'User-Agent',\n 'Upgrade',\n 'Via',\n 'Warning',\n] as const;\n\ntype HTTPHeaders = (typeof HTTP_HEADERS)[number];\n\nexport { HeadersInput };\n","import { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Check, Cross, Loader } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme, css } from 'styled-components';\n\n/* -------------------------------------------------------------------------------------------------\n * TriggerContainer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TriggerContainerProps extends Pick<StatusProps, 'isPending'> {\n onCancel: () => void;\n response?: {\n statusCode: number;\n message?: string;\n };\n}\n\nconst TriggerContainer = ({ isPending, onCancel, response }: TriggerContainerProps) => {\n const { statusCode, message } = response ?? {};\n const { formatMessage } = useIntl();\n\n return (\n <Box background=\"neutral0\" padding={5} shadow=\"filterShadow\" hasRadius>\n <Grid gap={4} style={{ alignItems: 'center' }}>\n <GridItem col={3}>\n <Typography>\n {formatMessage({\n id: 'Settings.webhooks.trigger.test',\n defaultMessage: 'Test-trigger',\n })}\n </Typography>\n </GridItem>\n <GridItem col={3}>\n <Status isPending={isPending} statusCode={statusCode} />\n </GridItem>\n <GridItem col={6}>\n {!isPending ? (\n <Message statusCode={statusCode} message={message} />\n ) : (\n <Flex justifyContent=\"flex-end\">\n <button onClick={onCancel} type=\"button\">\n <Flex gap={2} alignItems=\"center\">\n <Typography textColor=\"neutral400\">\n {formatMessage({\n id: 'Settings.webhooks.trigger.cancel',\n defaultMessage: 'cancel',\n })}\n </Typography>\n <Icon as={Cross} color=\"neutral400\" />\n </Flex>\n </button>\n </Flex>\n )}\n </GridItem>\n </Grid>\n </Box>\n );\n};\n\nconst Icon = styled.svg<{ color?: keyof DefaultTheme['colors'] }>(\n ({ theme, color }) => `\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n\n\n ${\n color\n ? css`\n path {\n fill: ${theme.colors[color]};\n }\n `\n : ''\n }\n`\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Status\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StatusProps {\n isPending: boolean;\n statusCode?: number;\n}\n\nconst Status = ({ isPending, statusCode }: StatusProps) => {\n const { formatMessage } = useIntl();\n\n if (isPending || !statusCode) {\n return (\n <Flex gap={2} alignItems=\"center\">\n <Icon as={Loader} />\n <Typography>\n {formatMessage({ id: 'Settings.webhooks.trigger.pending', defaultMessage: 'pending' })}\n </Typography>\n </Flex>\n );\n }\n\n if (statusCode >= 200 && statusCode < 300) {\n return (\n <Flex gap={2} alignItems=\"center\">\n <Icon as={Check} color=\"success700\" />\n <Typography>\n {formatMessage({ id: 'Settings.webhooks.trigger.success', defaultMessage: 'success' })}\n </Typography>\n </Flex>\n );\n }\n\n if (statusCode >= 300) {\n return (\n <Flex gap={2} alignItems=\"center\">\n <Icon as={Cross} color=\"danger700\" />\n <Typography>\n {formatMessage({ id: 'Settings.error', defaultMessage: 'error' })} {statusCode}\n </Typography>\n </Flex>\n );\n }\n\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Message\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MessageProps {\n statusCode?: number;\n message?: string;\n}\n\nconst Message = ({ statusCode, message }: MessageProps) => {\n const { formatMessage } = useIntl();\n\n if (!statusCode) {\n return null;\n }\n\n if (statusCode >= 200 && statusCode < 300) {\n return (\n <Flex justifyContent=\"flex-end\">\n <Typography textColor=\"neutral600\" ellipsis>\n {formatMessage({\n id: 'Settings.webhooks.trigger.success.label',\n defaultMessage: 'Trigger succeeded',\n })}\n </Typography>\n </Flex>\n );\n }\n\n if (statusCode >= 300) {\n return (\n <Flex justifyContent=\"flex-end\">\n <Flex maxWidth={pxToRem(250)} justifyContent=\"flex-end\" title={message}>\n <Typography ellipsis textColor=\"neutral600\">\n {message}\n </Typography>\n </Flex>\n </Flex>\n );\n }\n\n return null;\n};\n\nexport { TriggerContainer };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n TextInput,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport { Form } from '@strapi/helper-plugin';\nimport { ArrowLeft, Check, Play as Publish } from '@strapi/icons';\nimport { Webhook } from '@strapi/types';\nimport { Field, FormikHelpers, FormikProvider, useFormik } from 'formik';\nimport { IntlShape, useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { TriggerWebhook } from '../../../../../../../shared/contracts/webhooks';\nimport { useEnterprise } from '../../../../../hooks/useEnterprise';\n\nimport { EventTableCE } from './EventsTable';\nimport { HeadersInput } from './HeadersInput';\nimport { TriggerContainer } from './TriggerContainer';\n\ninterface WebhookFormValues {\n name: Webhook['name'];\n url: Webhook['url'];\n headers: Array<{ key: string; value: string }>;\n events: Webhook['events'];\n}\n\ninterface WebhookFormProps {\n data?: Webhook;\n handleSubmit: (\n values: WebhookFormValues,\n formik: FormikHelpers<WebhookFormValues>\n ) => Promise<void>;\n isCreating: boolean;\n isTriggering: boolean;\n triggerWebhook: () => void;\n triggerResponse?: TriggerWebhook.Response['data'];\n}\n\nconst WebhookForm = ({\n handleSubmit,\n triggerWebhook,\n isCreating,\n isTriggering,\n triggerResponse,\n data,\n}: WebhookFormProps) => {\n const { formatMessage } = useIntl();\n const [showTriggerResponse, setShowTriggerResponse] = React.useState(false);\n const EventTable = useEnterprise(\n EventTableCE,\n async () =>\n (\n await import(\n '../../../../../../../ee/admin/src/pages/SettingsPage/pages/Webhooks/components/EventsTable'\n )\n ).EventsTableEE\n );\n\n /**\n * Map the headers into a form that can be used within the formik form\n */\n const mapHeaders = (headers: Webhook['headers']) => {\n if (!Object.keys(headers).length) {\n return [{ key: '', value: '' }];\n }\n\n return Object.entries(headers).map(([key, value]) => ({ key, value }));\n };\n\n const formik = useFormik({\n initialValues: {\n name: data?.name || '',\n url: data?.url || '',\n headers: mapHeaders(data?.headers || {}),\n events: data?.events || [],\n },\n async onSubmit(values, formik) {\n await handleSubmit(values, formik);\n\n formik.resetForm({ values });\n },\n validationSchema: makeWebhookValidationSchema({ formatMessage }),\n validateOnChange: false,\n validateOnBlur: false,\n });\n\n // block rendering until the EE component is fully loaded\n if (!EventTable) {\n return null;\n }\n\n return (\n <FormikProvider value={formik}>\n <Form>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n onClick={() => {\n triggerWebhook();\n setShowTriggerResponse(true);\n }}\n variant=\"tertiary\"\n startIcon={<Publish />}\n disabled={isCreating || isTriggering}\n size=\"L\"\n >\n {formatMessage({\n id: 'Settings.webhooks.trigger',\n defaultMessage: 'Trigger',\n })}\n </Button>\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"L\"\n disabled={!formik.dirty}\n loading={formik.isSubmitting}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={\n isCreating\n ? formatMessage({\n id: 'Settings.webhooks.create',\n defaultMessage: 'Create a webhook',\n })\n : data?.name\n }\n navigationAction={\n // @ts-expect-error – as components props are not inferred correctly.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/webhooks\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n {showTriggerResponse && (\n <TriggerContainer\n isPending={isTriggering}\n response={triggerResponse}\n onCancel={() => setShowTriggerResponse(false)}\n />\n )}\n <Box background=\"neutral0\" padding={8} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Grid gap={6}>\n <GridItem col={6}>\n <Field\n as={TextInput}\n name=\"name\"\n error={formik.errors.name}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n required\n />\n </GridItem>\n <GridItem col={12}>\n <Field\n as={TextInput}\n name=\"url\"\n error={formik.errors.url}\n label={formatMessage({\n id: 'Settings.roles.form.input.url',\n defaultMessage: 'Url',\n })}\n required\n />\n </GridItem>\n </Grid>\n <HeadersInput />\n <EventTable />\n </Flex>\n </Box>\n </Flex>\n </ContentLayout>\n </Form>\n </FormikProvider>\n );\n};\n\nconst NAME_REGEX = /(^$)|(^[A-Za-z][_0-9A-Za-z ]*$)/;\nconst URL_REGEX = /(^$)|((https?:\\/\\/.*)(d*)\\/?(.*))/;\n\nconst makeWebhookValidationSchema = ({ formatMessage }: Pick<IntlShape, 'formatMessage'>) =>\n yup.object().shape({\n name: yup\n .string()\n .required(\n formatMessage({\n id: 'Settings.webhooks.validation.name.required',\n defaultMessage: 'Name is required',\n })\n )\n .matches(\n NAME_REGEX,\n formatMessage({\n id: 'Settings.webhooks.validation.name.regex',\n defaultMessage:\n 'The name must start with a letter and only contain letters, numbers, spaces and underscores',\n })\n ),\n url: yup\n .string()\n .required(\n formatMessage({\n id: 'Settings.webhooks.validation.url.required',\n defaultMessage: 'Url is required',\n })\n )\n .matches(\n URL_REGEX,\n formatMessage({\n id: 'Settings.webhooks.validation.url.regex',\n defaultMessage: 'The value must be a valid Url',\n })\n ),\n headers: yup.lazy((array) => {\n const baseSchema = yup.array();\n\n if (array.length === 1) {\n const { key, value } = array[0];\n\n if (!key && !value) {\n return baseSchema;\n }\n }\n\n return baseSchema.of(\n yup.object().shape({\n key: yup.string().required(\n formatMessage({\n id: 'Settings.webhooks.validation.key',\n defaultMessage: 'Key is required',\n })\n ),\n value: yup.string().required(\n formatMessage({\n id: 'Settings.webhooks.validation.value',\n defaultMessage: 'Value is required',\n })\n ),\n })\n );\n }),\n events: yup.array(),\n });\n\nexport { WebhookForm };\nexport type { WebhookFormValues, WebhookFormProps };\n","import * as React from 'react';\n\nimport { Main } from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAPIErrorHandler,\n useNotification,\n} from '@strapi/helper-plugin';\nimport { Webhook } from '@strapi/types';\nimport { FormikHelpers } from 'formik';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { CreateWebhook, TriggerWebhook } from '../../../../../../shared/contracts/webhooks';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useContentTypes } from '../../../../hooks/useContentTypes';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { WebhookForm, WebhookFormValues } from './components/WebhookForm';\nimport { useWebhooks } from './hooks/useWebhooks';\n\n/* -------------------------------------------------------------------------------------------------\n * EditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst cleanData = (\n data: WebhookFormValues\n): Omit<CreateWebhook.Request['body'], 'id' | 'isEnabled'> => ({\n ...data,\n headers: data.headers.reduce<Webhook['headers']>((acc, { key, value }) => {\n if (key !== '') {\n acc[key] = value;\n }\n\n return acc;\n }, {}),\n});\n\nconst EditPage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/webhooks/:id');\n const id = match?.params.id;\n const isCreating = id === 'create';\n\n const { replace } = useHistory();\n const toggleNotification = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { isLoading: isLoadingForModels } = useContentTypes();\n const [isTriggering, setIsTriggering] = React.useState(false);\n const [triggerResponse, setTriggerResponse] = React.useState<TriggerWebhook.Response['data']>();\n\n const { isLoading, webhooks, error, createWebhook, updateWebhook, triggerWebhook } = useWebhooks(\n { id: id! },\n {\n skip: isCreating,\n }\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n }, [error, toggleNotification, formatAPIError]);\n\n const handleTriggerWebhook = async () => {\n try {\n setIsTriggering(true);\n\n const res = await triggerWebhook(id!);\n\n if ('error' in res) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setTriggerResponse(res.data);\n } catch {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n } finally {\n setIsTriggering(false);\n }\n };\n\n const handleSubmit = async (\n data: WebhookFormValues,\n formik: FormikHelpers<WebhookFormValues>\n ) => {\n try {\n if (isCreating) {\n const res = await createWebhook(cleanData(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 toggleNotification({\n type: 'success',\n message: { id: 'Settings.webhooks.created' },\n });\n\n replace(`/settings/webhooks/${res.data.id}`);\n } else {\n const res = await updateWebhook({ id: id!, ...cleanData(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 toggleNotification({\n type: 'success',\n message: { id: 'notification.form.success.fields' },\n });\n }\n } catch {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n if (isLoading || isLoadingForModels) {\n return <LoadingIndicatorPage />;\n }\n\n const [webhook] = webhooks ?? [];\n\n return (\n <Main>\n <SettingsPageTitle name=\"Webhooks\" />\n <WebhookForm\n data={webhook}\n handleSubmit={handleSubmit}\n triggerWebhook={handleTriggerWebhook}\n isCreating={isCreating}\n isTriggering={isTriggering}\n triggerResponse={triggerResponse}\n />\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.webhooks.update}>\n <EditPage />\n </CheckPagePermissions>\n );\n};\n\nexport { ProtectedEditPage, EditPage };\n"],"names":["createContext","useIntl","useContentTypes","React","jsx","jsxs","Flex","FieldLabel","Loader","styled","Table","Thead","Tr","Th","VisuallyHidden","Typography","useFormikContext","Tbody","name","Td","Checkbox","BaseCheckbox","Box","FieldArray","Grid","index","GridItem","Field","TextInput","RemoveRoundedButton","TextButton","Plus","value","CreatableCombobox","ComboboxOption","Cross","css","Check","pxToRem","useEnterprise","formik","useFormik","FormikProvider","Form","HeaderLayout","Button","Publish","Link","NavLink","ArrowLeft","ContentLayout","yup","useRouteMatch","useHistory","useNotification","useAPIErrorHandler","useWebhooks","isBaseQueryError","LoadingIndicatorPage","Main","SettingsPageTitle","useTypedSelector","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
@@ -7,16 +7,16 @@ import { useFormik, FormikProvider, Form } from "formik";
7
7
  import { useIntl } from "react-intl";
8
8
  import { useSelector, useDispatch } from "react-redux";
9
9
  import { useParams } from "react-router-dom";
10
- import { u as useAdminRoles } from "./useAdminRoles-EpihNi47.mjs";
11
- import { u as useContentTypes } from "./useContentTypes-iT3IuYCm.mjs";
12
- import { j as selectServerState, a as selectIsWorkflowDirty, b as selectCurrentWorkflow, k as selectHasDeletedServerStages, c as selectRoles, s as selectIsLoading, v as validateWorkflow, u as useInjectReducer, l as setWorkflow, d as setWorkflows, e as setContentTypes, f as setRoles, g as setIsLoading, r as resetWorkflow, W as WorkflowAttributes, S as Stages, i as reducer } from "./validateWorkflow-EtA_LzEo.mjs";
13
- import { s as selectAdminPermissions } from "./AuthenticatedApp-KbXbG60H.mjs";
14
- import { m as useLicenseLimits, x as isBaseQueryError } from "./index-Sz0bqxDe.mjs";
15
- import { e as useUpdateWorkflowMutation } from "./reviewWorkflows-kl8pmnBb.mjs";
16
- import { D as DragLayerRendered, H as Header, B as Back, R as Root } from "./Layout-v8FJBzTa.mjs";
10
+ import { u as useAdminRoles } from "./useAdminRoles-j8v3rdvI.mjs";
11
+ import { u as useContentTypes } from "./useContentTypes-AZufz4KC.mjs";
12
+ import { j as selectServerState, a as selectIsWorkflowDirty, b as selectCurrentWorkflow, k as selectHasDeletedServerStages, c as selectRoles, s as selectIsLoading, v as validateWorkflow, u as useInjectReducer, l as setWorkflow, d as setWorkflows, e as setContentTypes, f as setRoles, g as setIsLoading, r as resetWorkflow, W as WorkflowAttributes, S as Stages, i as reducer } from "./validateWorkflow-iFAs-skx.mjs";
13
+ import { s as selectAdminPermissions } from "./AuthenticatedApp-6PK_F-W8.mjs";
14
+ import { m as useLicenseLimits, x as isBaseQueryError } from "./index-UeIeOkVZ.mjs";
15
+ import { e as useUpdateWorkflowMutation } from "./reviewWorkflows-RY37G83E.mjs";
16
+ import { D as DragLayerRendered, H as Header, B as Back, R as Root } from "./Layout-GOfaAv2c.mjs";
17
17
  import { L as LimitsModal } from "./LimitsModal-slvRtty7.mjs";
18
18
  import { C as CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME, a as CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME, R as REDUX_NAMESPACE } from "./constants-8sAt6dKz.mjs";
19
- import { u as useReviewWorkflows } from "./useReviewWorkflows-W4sCUqUI.mjs";
19
+ import { u as useReviewWorkflows } from "./useReviewWorkflows-arh_PPRE.mjs";
20
20
  import "styled-components";
21
21
  import "prop-types";
22
22
  import "@strapi/design-system/v2";
@@ -368,4 +368,4 @@ const ReviewWorkflowsEditPage = () => {
368
368
  export {
369
369
  ReviewWorkflowsEditPage
370
370
  };
371
- //# sourceMappingURL=EditPage-v9qAJHhL.mjs.map
371
+ //# sourceMappingURL=EditPage-w30nWUTV.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditPage-v9qAJHhL.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification, useRBAC } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useParams } 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 { selectAdminPermissions } from '../../../../../../../admin/src/selectors';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { Stage } from '../../../../../../../shared/contracts/review-workflows';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\nimport { useUpdateWorkflowMutation } from '../../../../services/reviewWorkflows';\n\nimport {\n resetWorkflow,\n setIsLoading,\n setWorkflow,\n setContentTypes,\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_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectHasDeletedServerStages,\n selectIsLoading,\n selectRoles,\n selectServerState,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsEditPage = () => {\n const { workflowId } = useParams<{ workflowId: string }>();\n const permissions = useSelector(selectAdminPermissions);\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const { isLoading: isLoadingWorkflow, meta, workflows } = useReviewWorkflows();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const serverState = useSelector(selectServerState);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const hasDeletedServerStages = useSelector(selectHasDeletedServerStages);\n const roles = useSelector(selectRoles);\n const isLoading = useSelector(selectIsLoading);\n const {\n allowedActions: { canDelete, canUpdate },\n } = useRBAC(permissions.settings?.['review-workflows']);\n const [savePrompts, setSavePrompts] = React.useState<{\n hasDeletedServerStages?: boolean;\n hasReassignedContentTypes?: boolean;\n }>({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles(undefined);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [saving, setSaving] = React.useState(false);\n\n const workflow = workflows?.find((workflow) => workflow.id === parseInt(workflowId, 10));\n const contentTypesFromOtherWorkflows = workflows\n ?.filter((workflow) => workflow.id !== parseInt(workflowId, 10))\n .flatMap((workflow) => workflow.contentTypes);\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\n const [updateWorkflow] = useUpdateWorkflowMutation();\n\n const submitForm = async () => {\n // reset the error messages\n setInitialErrors(undefined);\n setSaving(true);\n\n try {\n const res = await updateWorkflow({\n id: workflowId!,\n data: {\n ...currentWorkflow,\n\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: currentWorkflow.stages?.map((stage) => {\n let hasUpdatedPermissions = true;\n const serverStage = serverState.workflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n if (serverStage) {\n hasUpdatedPermissions =\n serverStage.permissions?.length !== stage.permissions?.length ||\n !serverStage.permissions?.every(\n (serverPermission) =>\n !!stage.permissions?.find(\n (permission) => permission.role === serverPermission.role\n )\n );\n }\n\n return {\n ...stage,\n permissions: hasUpdatedPermissions ? stage.permissions : undefined,\n } satisfies Stage;\n }),\n },\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: { id: 'notification.success.saved', defaultMessage: 'Saved' },\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n } finally {\n setSaving(false);\n }\n\n setSavePrompts({});\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 if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\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 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 (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\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 if (!isLoadingWorkflow && workflow && workflows) {\n dispatch(setWorkflow({ workflow }));\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(isLoadingWorkflow || isLoadingContentTypes || isLoadingRoles));\n\n // reset the state to the initial state to avoid flashes if a user\n // navigates from an edit-view to a create-view\n return () => {\n dispatch(resetWorkflow());\n };\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingWorkflow,\n isLoadingRoles,\n serverRoles,\n singleTypes,\n workflow,\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\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow.stages,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta,\n numberOfWorkflows,\n stagesPerWorkflow,\n ]);\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 // TODO: redirect back to list-view if workflow is not found?\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n canUpdate && (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Boolean(Object.keys(savePrompts).length > 0) && saving}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n )\n }\n subtitle={\n !isLoading &&\n formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow.stages?.length }\n )\n }\n title={currentWorkflow.name || ''}\n />\n\n <Layout.Root>\n {isLoading ? (\n <Flex justifyContent=\"center\">\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n </Flex>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate}\n stages={formik.values?.stages}\n />\n </Flex>\n )}\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.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\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.edit.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.edit.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.edit.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.edit.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":["workflow","serverStage","Layout.DragLayerRendered","Layout.Header","Layout.Back","Layout.Root"],"mappings":"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"}
1
+ {"version":3,"file":"EditPage-w30nWUTV.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification, useRBAC } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useParams } 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 { selectAdminPermissions } from '../../../../../../../admin/src/selectors';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { Stage } from '../../../../../../../shared/contracts/review-workflows';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\nimport { useUpdateWorkflowMutation } from '../../../../services/reviewWorkflows';\n\nimport {\n resetWorkflow,\n setIsLoading,\n setWorkflow,\n setContentTypes,\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_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectHasDeletedServerStages,\n selectIsLoading,\n selectRoles,\n selectServerState,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsEditPage = () => {\n const { workflowId } = useParams<{ workflowId: string }>();\n const permissions = useSelector(selectAdminPermissions);\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const { isLoading: isLoadingWorkflow, meta, workflows } = useReviewWorkflows();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const serverState = useSelector(selectServerState);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const hasDeletedServerStages = useSelector(selectHasDeletedServerStages);\n const roles = useSelector(selectRoles);\n const isLoading = useSelector(selectIsLoading);\n const {\n allowedActions: { canDelete, canUpdate },\n } = useRBAC(permissions.settings?.['review-workflows']);\n const [savePrompts, setSavePrompts] = React.useState<{\n hasDeletedServerStages?: boolean;\n hasReassignedContentTypes?: boolean;\n }>({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles(undefined);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [saving, setSaving] = React.useState(false);\n\n const workflow = workflows?.find((workflow) => workflow.id === parseInt(workflowId, 10));\n const contentTypesFromOtherWorkflows = workflows\n ?.filter((workflow) => workflow.id !== parseInt(workflowId, 10))\n .flatMap((workflow) => workflow.contentTypes);\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\n const [updateWorkflow] = useUpdateWorkflowMutation();\n\n const submitForm = async () => {\n // reset the error messages\n setInitialErrors(undefined);\n setSaving(true);\n\n try {\n const res = await updateWorkflow({\n id: workflowId!,\n data: {\n ...currentWorkflow,\n\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: currentWorkflow.stages?.map((stage) => {\n let hasUpdatedPermissions = true;\n const serverStage = serverState.workflow?.stages?.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n if (serverStage) {\n hasUpdatedPermissions =\n serverStage.permissions?.length !== stage.permissions?.length ||\n !serverStage.permissions?.every(\n (serverPermission) =>\n !!stage.permissions?.find(\n (permission) => permission.role === serverPermission.role\n )\n );\n }\n\n return {\n ...stage,\n permissions: hasUpdatedPermissions ? stage.permissions : undefined,\n } satisfies Stage;\n }),\n },\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: { id: 'notification.success.saved', defaultMessage: 'Saved' },\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n } finally {\n setSaving(false);\n }\n\n setSavePrompts({});\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 if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\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 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 (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\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 if (!isLoadingWorkflow && workflow && workflows) {\n dispatch(setWorkflow({ workflow }));\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(isLoadingWorkflow || isLoadingContentTypes || isLoadingRoles));\n\n // reset the state to the initial state to avoid flashes if a user\n // navigates from an edit-view to a create-view\n return () => {\n dispatch(resetWorkflow());\n };\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingWorkflow,\n isLoadingRoles,\n serverRoles,\n singleTypes,\n workflow,\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\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (meta && numberOfWorkflows && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length > parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow.stages,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta,\n numberOfWorkflows,\n stagesPerWorkflow,\n ]);\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 // TODO: redirect back to list-view if workflow is not found?\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n canUpdate && (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Boolean(Object.keys(savePrompts).length > 0) && saving}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n )\n }\n subtitle={\n !isLoading &&\n formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow.stages?.length }\n )\n }\n title={currentWorkflow.name || ''}\n />\n\n <Layout.Root>\n {isLoading ? (\n <Flex justifyContent=\"center\">\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n </Flex>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate}\n stages={formik.values?.stages}\n />\n </Flex>\n )}\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.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\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.edit.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.edit.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.edit.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.edit.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":["workflow","serverStage","Layout.DragLayerRendered","Layout.Header","Layout.Back","Layout.Root"],"mappings":"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"}
@@ -7,10 +7,10 @@ import { Formik } from "formik";
7
7
  import { useIntl } from "react-intl";
8
8
  import { useHistory, useLocation, useRouteMatch } from "react-router-dom";
9
9
  import * as yup from "yup";
10
- import { j as useTypedSelector, x as isBaseQueryError } from "./index-Sz0bqxDe.mjs";
11
- import { u as useGetTransferTokenQuery, a as useCreateTransferTokenMutation, b as useUpdateTransferTokenMutation } from "./transferTokens-yy1TkqsE.mjs";
10
+ import { j as useTypedSelector, x as isBaseQueryError } from "./index-UeIeOkVZ.mjs";
11
+ import { u as useGetTransferTokenQuery, a as useCreateTransferTokenMutation, b as useUpdateTransferTokenMutation } from "./transferTokens-8v08GvLp.mjs";
12
12
  import { T as TRANSFER_TOKEN_TYPE } from "./constants-fJt30IoY.mjs";
13
- import { F as FormHead, c as TokenBox, T as TokenName, a as TokenDescription, L as LifeSpanInput, b as TokenTypeSelect } from "./TokenTypeSelect-f0dPl6bF.mjs";
13
+ import { F as FormHead, c as TokenBox, T as TokenName, a as TokenDescription, L as LifeSpanInput, b as TokenTypeSelect } from "./TokenTypeSelect-rhU7WCp1.mjs";
14
14
  import "react-dom/client";
15
15
  import "invariant";
16
16
  import "lodash/isFunction";
@@ -408,4 +408,4 @@ export {
408
408
  LoadingView,
409
409
  ProtectedEditView
410
410
  };
411
- //# sourceMappingURL=EditView-H9TXdZxo.mjs.map
411
+ //# sourceMappingURL=EditView-6NyyYtJ9.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditView-H9TXdZxo.mjs","sources":["../../admin/src/pages/Settings/pages/TransferTokens/EditView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useGuidedTour,\n useNotification,\n useOverlayBlocker,\n useRBAC,\n useTracking,\n translatedErrors,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikErrors, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useHistory, useLocation, useRouteMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateTransferTokenMutation,\n useGetTransferTokenQuery,\n useUpdateTransferTokenMutation,\n} from '../../../../services/transferTokens';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { TRANSFER_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { FormHead } from '../../components/Tokens/FormHead';\nimport { LifeSpanInput } from '../../components/Tokens/LifeSpanInput';\nimport { TokenBox } from '../../components/Tokens/TokenBox';\nimport { TokenDescription } from '../../components/Tokens/TokenDescription';\nimport { TokenName } from '../../components/Tokens/TokenName';\nimport { TokenTypeSelect } from '../../components/Tokens/TokenTypeSelect';\n\nimport type {\n TransferToken,\n SanitizedTransferToken,\n} from '../../../../../../shared/contracts/transfer';\n\nconst schema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required),\n permissions: yup.string().required(translatedErrors.required),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * EditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const toggleNotification = useNotification();\n const history = useHistory();\n const { state: locationState } = useLocation<{ transferToken: TransferToken }>();\n const [transferToken, setTransferToken] = React.useState<\n TransferToken | SanitizedTransferToken | null\n >(\n locationState && 'accessKey' in locationState.transferToken\n ? {\n ...locationState.transferToken,\n }\n : null\n );\n const { trackUsage } = useTracking();\n const { setCurrentStep } = useGuidedTour();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens']\n );\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions);\n const match = useRouteMatch<{ id: string }>('/settings/transfer-tokens/:id');\n\n const id = match?.params?.id;\n const isCreating = id === 'create';\n\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error } = useGetTransferTokenQuery(id!, {\n skip: isCreating || transferToken !== null || !id,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setTransferToken(data);\n }\n }, [data]);\n\n const [createToken] = useCreateTransferTokenMutation();\n const [updateToken] = useUpdateTransferTokenMutation();\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n // @ts-expect-error context assertation\n lockApp();\n\n const permissions = body.permissions.split('-');\n\n const isPermissionsTransferPermission = (\n permission: string[]\n ): permission is Array<'push' | 'pull'> => {\n if (permission.length === 1) {\n return permission[0] === 'push' || permission[0] === 'pull';\n }\n\n return permission[0] === 'push' && permission[1] === 'pull';\n };\n\n // this type-guard is necessary to satisfy the type for `permissions` in the request body,\n // because String.split returns stringp[]\n if (isPermissionsTransferPermission(permissions)) {\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n permissions,\n });\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 setTransferToken(res.data);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.transfertokencreated',\n defaultMessage: 'Transfer Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: transferToken?.permissions,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n\n history.push(`/settings/transfer-tokens/${res.data.id}`, { transferToken: res.data });\n setCurrentStep('transferTokens.success');\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n permissions,\n });\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 setTransferToken(res.data);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.transfertokenedited',\n defaultMessage: 'Transfer Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: transferToken?.permissions,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n },\n });\n } finally {\n // @ts-expect-error context assertation\n unlockApp();\n }\n }\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const isLoading = !isCreating && !transferToken;\n\n if (isLoading) {\n return <LoadingView />;\n }\n\n return (\n <Main>\n <SettingsPageTitle name=\"Transfer Tokens\" />\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={\n {\n name: transferToken?.name || '',\n description: transferToken?.description || '',\n lifespan: transferToken?.lifespan ?? null,\n /**\n * We need to cast the permissions to satisfy the type for `permissions`\n * in the request body incase we don't have a transferToken and instead\n * use an empty string.\n */\n permissions: (transferToken?.permissions.join('-') ?? '') as FormValues['permissions'],\n } satisfies FormValues\n }\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values }) => {\n return (\n <Form>\n <FormHead\n backUrl=\"/settings/transfer-tokens\"\n title={{\n id: 'Settings.transferTokens.createPage.title',\n defaultMessage: 'TokenCreate Transfer Token',\n }}\n token={transferToken}\n setToken={setTransferToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/transfer/tokens/\"\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {transferToken &&\n Boolean(transferToken?.name) &&\n 'accessKey' in transferToken && (\n <TokenBox token={transferToken.accessKey} tokenType={TRANSFER_TOKEN_TYPE} />\n )}\n <FormTransferTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n transferToken={transferToken}\n />\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens'].read\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <EditView />\n </CheckPagePermissions>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FormTransferTokenContainer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormValues extends Pick<TransferToken, 'description' | 'name' | 'lifespan'> {\n permissions: Extract<TransferToken['permissions'][number], string>;\n}\n\ninterface FormTransferTokenContainerProps {\n errors: FormikErrors<FormValues>;\n onChange: ({ target: { name, value } }: { target: { name: string; value: string } }) => void;\n canEditInputs: boolean;\n values: FormValues;\n isCreating: boolean;\n transferToken: Partial<TransferToken> | null;\n}\n\nconst FormTransferTokenContainer = ({\n errors = {},\n onChange,\n canEditInputs,\n isCreating,\n values,\n transferToken = {},\n}: FormTransferTokenContainerProps) => {\n const { formatMessage } = useIntl();\n\n const typeOptions = [\n {\n value: 'push',\n label: {\n id: 'Settings.transferTokens.types.push',\n defaultMessage: 'Push',\n },\n },\n {\n value: 'pull',\n label: {\n id: 'Settings.transferTokens.types.pull',\n defaultMessage: 'Pull',\n },\n },\n {\n value: 'push-pull',\n label: {\n id: 'Settings.transferTokens.types.push-pull',\n defaultMessage: 'Full Access',\n },\n },\n ];\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem key=\"name\" col={6} xs={12}>\n <TokenName\n error={errors['name']}\n value={values['name']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"description\" col={6} xs={12}>\n <TokenDescription\n error={errors['description']}\n value={values['description']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"lifespan\" col={6} xs={12}>\n <LifeSpanInput\n isCreating={isCreating}\n error={errors['lifespan']}\n value={values['lifespan']}\n onChange={onChange}\n token={transferToken}\n />\n </GridItem>\n <GridItem key=\"permissions\" col={6} xs={12}>\n <TokenTypeSelect\n name=\"permissions\"\n value={values['permissions']}\n error={errors['permissions']}\n label={{\n id: 'Settings.tokens.form.type',\n defaultMessage: 'Token type',\n }}\n // @ts-expect-error – DS Select passes number | string, will be fixed in V2\n onChange={(value: string) => {\n onChange({ target: { name: 'permissions', value } });\n }}\n options={typeOptions}\n canEditInputs={canEditInputs}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingView\n * -----------------------------------------------------------------------------------------------*/\ninterface LoadingViewProps {\n transferTokenName?: string;\n}\n\nexport const LoadingView = ({ transferTokenName }: LoadingViewProps) => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main aria-busy=\"true\">\n <SettingsPageTitle name=\"Transfer Tokens\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={\n transferTokenName ||\n formatMessage({\n id: 'Settings.transferTokens.createPage.title',\n defaultMessage: 'Create Transfer Token',\n })\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n};\n\nexport { EditView, ProtectedEditView };\n"],"names":["permissions"],"mappings":"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"}
1
+ {"version":3,"file":"EditView-6NyyYtJ9.mjs","sources":["../../admin/src/pages/Settings/pages/TransferTokens/EditView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useGuidedTour,\n useNotification,\n useOverlayBlocker,\n useRBAC,\n useTracking,\n translatedErrors,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikErrors, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useHistory, useLocation, useRouteMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateTransferTokenMutation,\n useGetTransferTokenQuery,\n useUpdateTransferTokenMutation,\n} from '../../../../services/transferTokens';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { TRANSFER_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { FormHead } from '../../components/Tokens/FormHead';\nimport { LifeSpanInput } from '../../components/Tokens/LifeSpanInput';\nimport { TokenBox } from '../../components/Tokens/TokenBox';\nimport { TokenDescription } from '../../components/Tokens/TokenDescription';\nimport { TokenName } from '../../components/Tokens/TokenName';\nimport { TokenTypeSelect } from '../../components/Tokens/TokenTypeSelect';\n\nimport type {\n TransferToken,\n SanitizedTransferToken,\n} from '../../../../../../shared/contracts/transfer';\n\nconst schema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required),\n permissions: yup.string().required(translatedErrors.required),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * EditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const toggleNotification = useNotification();\n const history = useHistory();\n const { state: locationState } = useLocation<{ transferToken: TransferToken }>();\n const [transferToken, setTransferToken] = React.useState<\n TransferToken | SanitizedTransferToken | null\n >(\n locationState && 'accessKey' in locationState.transferToken\n ? {\n ...locationState.transferToken,\n }\n : null\n );\n const { trackUsage } = useTracking();\n const { setCurrentStep } = useGuidedTour();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens']\n );\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions);\n const match = useRouteMatch<{ id: string }>('/settings/transfer-tokens/:id');\n\n const id = match?.params?.id;\n const isCreating = id === 'create';\n\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error } = useGetTransferTokenQuery(id!, {\n skip: isCreating || transferToken !== null || !id,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setTransferToken(data);\n }\n }, [data]);\n\n const [createToken] = useCreateTransferTokenMutation();\n const [updateToken] = useUpdateTransferTokenMutation();\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n // @ts-expect-error context assertation\n lockApp();\n\n const permissions = body.permissions.split('-');\n\n const isPermissionsTransferPermission = (\n permission: string[]\n ): permission is Array<'push' | 'pull'> => {\n if (permission.length === 1) {\n return permission[0] === 'push' || permission[0] === 'pull';\n }\n\n return permission[0] === 'push' && permission[1] === 'pull';\n };\n\n // this type-guard is necessary to satisfy the type for `permissions` in the request body,\n // because String.split returns stringp[]\n if (isPermissionsTransferPermission(permissions)) {\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n permissions,\n });\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 setTransferToken(res.data);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.transfertokencreated',\n defaultMessage: 'Transfer Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: transferToken?.permissions,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n\n history.push(`/settings/transfer-tokens/${res.data.id}`, { transferToken: res.data });\n setCurrentStep('transferTokens.success');\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n permissions,\n });\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 setTransferToken(res.data);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.transfertokenedited',\n defaultMessage: 'Transfer Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: transferToken?.permissions,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n },\n });\n } finally {\n // @ts-expect-error context assertation\n unlockApp();\n }\n }\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const isLoading = !isCreating && !transferToken;\n\n if (isLoading) {\n return <LoadingView />;\n }\n\n return (\n <Main>\n <SettingsPageTitle name=\"Transfer Tokens\" />\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={\n {\n name: transferToken?.name || '',\n description: transferToken?.description || '',\n lifespan: transferToken?.lifespan ?? null,\n /**\n * We need to cast the permissions to satisfy the type for `permissions`\n * in the request body incase we don't have a transferToken and instead\n * use an empty string.\n */\n permissions: (transferToken?.permissions.join('-') ?? '') as FormValues['permissions'],\n } satisfies FormValues\n }\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values }) => {\n return (\n <Form>\n <FormHead\n backUrl=\"/settings/transfer-tokens\"\n title={{\n id: 'Settings.transferTokens.createPage.title',\n defaultMessage: 'TokenCreate Transfer Token',\n }}\n token={transferToken}\n setToken={setTransferToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/transfer/tokens/\"\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {transferToken &&\n Boolean(transferToken?.name) &&\n 'accessKey' in transferToken && (\n <TokenBox token={transferToken.accessKey} tokenType={TRANSFER_TOKEN_TYPE} />\n )}\n <FormTransferTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n transferToken={transferToken}\n />\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens'].read\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <EditView />\n </CheckPagePermissions>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FormTransferTokenContainer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormValues extends Pick<TransferToken, 'description' | 'name' | 'lifespan'> {\n permissions: Extract<TransferToken['permissions'][number], string>;\n}\n\ninterface FormTransferTokenContainerProps {\n errors: FormikErrors<FormValues>;\n onChange: ({ target: { name, value } }: { target: { name: string; value: string } }) => void;\n canEditInputs: boolean;\n values: FormValues;\n isCreating: boolean;\n transferToken: Partial<TransferToken> | null;\n}\n\nconst FormTransferTokenContainer = ({\n errors = {},\n onChange,\n canEditInputs,\n isCreating,\n values,\n transferToken = {},\n}: FormTransferTokenContainerProps) => {\n const { formatMessage } = useIntl();\n\n const typeOptions = [\n {\n value: 'push',\n label: {\n id: 'Settings.transferTokens.types.push',\n defaultMessage: 'Push',\n },\n },\n {\n value: 'pull',\n label: {\n id: 'Settings.transferTokens.types.pull',\n defaultMessage: 'Pull',\n },\n },\n {\n value: 'push-pull',\n label: {\n id: 'Settings.transferTokens.types.push-pull',\n defaultMessage: 'Full Access',\n },\n },\n ];\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem key=\"name\" col={6} xs={12}>\n <TokenName\n error={errors['name']}\n value={values['name']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"description\" col={6} xs={12}>\n <TokenDescription\n error={errors['description']}\n value={values['description']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"lifespan\" col={6} xs={12}>\n <LifeSpanInput\n isCreating={isCreating}\n error={errors['lifespan']}\n value={values['lifespan']}\n onChange={onChange}\n token={transferToken}\n />\n </GridItem>\n <GridItem key=\"permissions\" col={6} xs={12}>\n <TokenTypeSelect\n name=\"permissions\"\n value={values['permissions']}\n error={errors['permissions']}\n label={{\n id: 'Settings.tokens.form.type',\n defaultMessage: 'Token type',\n }}\n // @ts-expect-error – DS Select passes number | string, will be fixed in V2\n onChange={(value: string) => {\n onChange({ target: { name: 'permissions', value } });\n }}\n options={typeOptions}\n canEditInputs={canEditInputs}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingView\n * -----------------------------------------------------------------------------------------------*/\ninterface LoadingViewProps {\n transferTokenName?: string;\n}\n\nexport const LoadingView = ({ transferTokenName }: LoadingViewProps) => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main aria-busy=\"true\">\n <SettingsPageTitle name=\"Transfer Tokens\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={\n transferTokenName ||\n formatMessage({\n id: 'Settings.transferTokens.createPage.title',\n defaultMessage: 'Create Transfer Token',\n })\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n};\n\nexport { EditView, ProtectedEditView };\n"],"names":["permissions"],"mappings":"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"}
@@ -9,10 +9,10 @@ const formik = require("formik");
9
9
  const reactIntl = require("react-intl");
10
10
  const reactRouterDom = require("react-router-dom");
11
11
  const yup = require("yup");
12
- const index = require("./index-Cgd3dGa5.js");
13
- const transferTokens = require("./transferTokens-ORIU_wuV.js");
12
+ const index = require("./index-AgQyNwFk.js");
13
+ const transferTokens = require("./transferTokens-1b-A4yIX.js");
14
14
  const constants = require("./constants-RMqZXSqh.js");
15
- const TokenTypeSelect = require("./TokenTypeSelect-VTcmGJ3T.js");
15
+ const TokenTypeSelect = require("./TokenTypeSelect-JtmQcMM-.js");
16
16
  require("react-dom/client");
17
17
  require("invariant");
18
18
  require("lodash/isFunction");
@@ -428,4 +428,4 @@ const LoadingView = ({ transferTokenName }) => {
428
428
  exports.EditView = EditView;
429
429
  exports.LoadingView = LoadingView;
430
430
  exports.ProtectedEditView = ProtectedEditView;
431
- //# sourceMappingURL=EditView-RTA0igao.js.map
431
+ //# sourceMappingURL=EditView-w1qhZqmE.js.map