@strapi/admin 5.0.0-alpha.0 → 5.0.0-alpha.2

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 (361) hide show
  1. package/dist/_chunks/{AdminSeatInfo-YaA1q_2d.js → AdminSeatInfo-JtsYpBbO.js} +3 -3
  2. package/dist/_chunks/{AdminSeatInfo-YaA1q_2d.js.map → AdminSeatInfo-JtsYpBbO.js.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-l78lfIiY.mjs → AdminSeatInfo-ZZsKxX-S.mjs} +3 -3
  4. package/dist/_chunks/{AdminSeatInfo-l78lfIiY.mjs.map → AdminSeatInfo-ZZsKxX-S.mjs.map} +1 -1
  5. package/dist/_chunks/{ApplicationInfoPage-Zn5JU2zd.mjs → ApplicationInfoPage-NhhWzHF1.mjs} +7 -8
  6. package/dist/_chunks/ApplicationInfoPage-NhhWzHF1.mjs.map +1 -0
  7. package/dist/_chunks/{ApplicationInfoPage-PHLA1Ysy.js → ApplicationInfoPage-xj1SCaSR.js} +5 -6
  8. package/dist/_chunks/ApplicationInfoPage-xj1SCaSR.js.map +1 -0
  9. package/dist/_chunks/{AuthResponse-1aYRF7_3.mjs → AuthResponse-jIqWZLMh.mjs} +2 -2
  10. package/dist/_chunks/{AuthResponse-1aYRF7_3.mjs.map → AuthResponse-jIqWZLMh.mjs.map} +1 -1
  11. package/dist/_chunks/{AuthResponse-7NG3smr6.js → AuthResponse-maUe9KWA.js} +2 -2
  12. package/dist/_chunks/{AuthResponse-7NG3smr6.js.map → AuthResponse-maUe9KWA.js.map} +1 -1
  13. package/dist/_chunks/{AuthenticatedLayout-a7KNOdln.mjs → AuthenticatedLayout-Ffy6uoNF.mjs} +22 -15
  14. package/dist/_chunks/{AuthenticatedLayout-a7KNOdln.mjs.map → AuthenticatedLayout-Ffy6uoNF.mjs.map} +1 -1
  15. package/dist/_chunks/{AuthenticatedLayout-5r4rzKeb.js → AuthenticatedLayout-kxORHKAl.js} +22 -15
  16. package/dist/_chunks/{AuthenticatedLayout-5r4rzKeb.js.map → AuthenticatedLayout-kxORHKAl.js.map} +1 -1
  17. package/dist/_chunks/{ComponentConfigurationPage-R3qV_iCR.js → ComponentConfigurationPage-JMCc1P7r.js} +3 -3
  18. package/dist/_chunks/{ComponentConfigurationPage-R3qV_iCR.js.map → ComponentConfigurationPage-JMCc1P7r.js.map} +1 -1
  19. package/dist/_chunks/{ComponentConfigurationPage-pb8HhFAg.mjs → ComponentConfigurationPage-oiBCHXQO.mjs} +3 -3
  20. package/dist/_chunks/{ComponentConfigurationPage-pb8HhFAg.mjs.map → ComponentConfigurationPage-oiBCHXQO.mjs.map} +1 -1
  21. package/dist/_chunks/{CreateActionEE-a2zWCIpQ.js → CreateActionEE-ThopeFZP.js} +2 -2
  22. package/dist/_chunks/{CreateActionEE-a2zWCIpQ.js.map → CreateActionEE-ThopeFZP.js.map} +1 -1
  23. package/dist/_chunks/{CreateActionEE-hb4Pr-SD.mjs → CreateActionEE-VMKfXSGW.mjs} +2 -2
  24. package/dist/_chunks/{CreateActionEE-hb4Pr-SD.mjs.map → CreateActionEE-VMKfXSGW.mjs.map} +1 -1
  25. package/dist/_chunks/{CreatePage-Bil0egZ1.mjs → CreatePage-6AeIanOF.mjs} +7 -7
  26. package/dist/_chunks/{CreatePage-Bil0egZ1.mjs.map → CreatePage-6AeIanOF.mjs.map} +1 -1
  27. package/dist/_chunks/{CreatePage-h5L6QP47.mjs → CreatePage-Gh5xb10f.mjs} +3 -3
  28. package/dist/_chunks/{CreatePage-h5L6QP47.mjs.map → CreatePage-Gh5xb10f.mjs.map} +1 -1
  29. package/dist/_chunks/{CreatePage-MAI6XyNg.js → CreatePage-JIHfFWS7.js} +3 -3
  30. package/dist/_chunks/{CreatePage-MAI6XyNg.js.map → CreatePage-JIHfFWS7.js.map} +1 -1
  31. package/dist/_chunks/{CreatePage-nl6zKkKT.js → CreatePage-WWKaoNH7.js} +7 -7
  32. package/dist/_chunks/{CreatePage-nl6zKkKT.js.map → CreatePage-WWKaoNH7.js.map} +1 -1
  33. package/dist/_chunks/{CreatePage-UC4uBFUR.mjs → CreatePage-hxFhldpL.mjs} +3 -3
  34. package/dist/_chunks/{CreatePage-UC4uBFUR.mjs.map → CreatePage-hxFhldpL.mjs.map} +1 -1
  35. package/dist/_chunks/{CreatePage-NSKUL8l4.js → CreatePage-yjmy0z57.js} +3 -3
  36. package/dist/_chunks/{CreatePage-NSKUL8l4.js.map → CreatePage-yjmy0z57.js.map} +1 -1
  37. package/dist/_chunks/{CreateView-kc0iM0LS.js → CreateView-J48m0lSL.js} +3 -3
  38. package/dist/_chunks/{CreateView-kc0iM0LS.js.map → CreateView-J48m0lSL.js.map} +1 -1
  39. package/dist/_chunks/{CreateView-3DMhoCPN.js → CreateView-Vqd1PVrJ.js} +3 -3
  40. package/dist/_chunks/{CreateView-3DMhoCPN.js.map → CreateView-Vqd1PVrJ.js.map} +1 -1
  41. package/dist/_chunks/{CreateView-RVrFxAFt.mjs → CreateView-oBp0NzJx.mjs} +3 -3
  42. package/dist/_chunks/{CreateView-RVrFxAFt.mjs.map → CreateView-oBp0NzJx.mjs.map} +1 -1
  43. package/dist/_chunks/{CreateView-DuSt3AcE.mjs → CreateView-qzpeDBvR.mjs} +3 -3
  44. package/dist/_chunks/{CreateView-DuSt3AcE.mjs.map → CreateView-qzpeDBvR.mjs.map} +1 -1
  45. package/dist/_chunks/{EditConfigurationPage-y_TvxjZM.mjs → EditConfigurationPage-MAUfMzG6.mjs} +3 -3
  46. package/dist/_chunks/{EditConfigurationPage-y_TvxjZM.mjs.map → EditConfigurationPage-MAUfMzG6.mjs.map} +1 -1
  47. package/dist/_chunks/{EditConfigurationPage-OpEZOvAG.js → EditConfigurationPage-PKHUVKGD.js} +3 -3
  48. package/dist/_chunks/{EditConfigurationPage-OpEZOvAG.js.map → EditConfigurationPage-PKHUVKGD.js.map} +1 -1
  49. package/dist/_chunks/{EditPage-9aK8IFXY.js → EditPage-7bVupT7n.js} +8 -8
  50. package/dist/_chunks/{EditPage-9aK8IFXY.js.map → EditPage-7bVupT7n.js.map} +1 -1
  51. package/dist/_chunks/{EditPage-VoRR5DCQ.mjs → EditPage-DQUZsl8H.mjs} +9 -10
  52. package/dist/_chunks/EditPage-DQUZsl8H.mjs.map +1 -0
  53. package/dist/_chunks/{EditPage-PpBP7TBo.js → EditPage-Hxt5uBXk.js} +4 -4
  54. package/dist/_chunks/{EditPage-PpBP7TBo.js.map → EditPage-Hxt5uBXk.js.map} +1 -1
  55. package/dist/_chunks/{EditPage-fDVAYmuS.mjs → EditPage-Izmz7bdh.mjs} +8 -8
  56. package/dist/_chunks/{EditPage-fDVAYmuS.mjs.map → EditPage-Izmz7bdh.mjs.map} +1 -1
  57. package/dist/_chunks/{EditPage-A6olBfVm.js → EditPage-QA0-S3kV.js} +7 -8
  58. package/dist/_chunks/EditPage-QA0-S3kV.js.map +1 -0
  59. package/dist/_chunks/{EditPage-_swY0Hy-.mjs → EditPage-THSaM4-0.mjs} +4 -4
  60. package/dist/_chunks/{EditPage-_swY0Hy-.mjs.map → EditPage-THSaM4-0.mjs.map} +1 -1
  61. package/dist/_chunks/{EditPage-QoDSqYYq.js → EditPage-vUQIn3OJ.js} +5 -5
  62. package/dist/_chunks/{EditPage-QoDSqYYq.js.map → EditPage-vUQIn3OJ.js.map} +1 -1
  63. package/dist/_chunks/{EditPage-wfPrhkA7.mjs → EditPage-zpnfFOjc.mjs} +5 -5
  64. package/dist/_chunks/{EditPage-wfPrhkA7.mjs.map → EditPage-zpnfFOjc.mjs.map} +1 -1
  65. package/dist/_chunks/{EditView-C_ynfmtW.js → EditView-63ynF0vf.js} +5 -6
  66. package/dist/_chunks/EditView-63ynF0vf.js.map +1 -0
  67. package/dist/_chunks/{EditView-EuUw_2zc.mjs → EditView-cfOpTlAi.mjs} +7 -8
  68. package/dist/_chunks/EditView-cfOpTlAi.mjs.map +1 -0
  69. package/dist/_chunks/{EditViewPage-Z_e1dpbU.js → EditViewPage--SujdXIG.js} +5 -6
  70. package/dist/_chunks/EditViewPage--SujdXIG.js.map +1 -0
  71. package/dist/_chunks/{EditViewPage-xYzUSAwS.mjs → EditViewPage-JFzIJClS.mjs} +4 -5
  72. package/dist/_chunks/EditViewPage-JFzIJClS.mjs.map +1 -0
  73. package/dist/_chunks/{EditViewPage-XtJmgPi5.js → EditViewPage-kkCJlZyh.js} +6 -7
  74. package/dist/_chunks/EditViewPage-kkCJlZyh.js.map +1 -0
  75. package/dist/_chunks/{EditViewPage-8uPO5GWR.mjs → EditViewPage-vz8UJ4U_.mjs} +7 -8
  76. package/dist/_chunks/EditViewPage-vz8UJ4U_.mjs.map +1 -0
  77. package/dist/_chunks/{EventsTable-hI0aV29K.js → EventsTable-1X4uyY8J.js} +2 -2
  78. package/dist/_chunks/{EventsTable-hI0aV29K.js.map → EventsTable-1X4uyY8J.js.map} +1 -1
  79. package/dist/_chunks/{EventsTable-WP7PUujH.mjs → EventsTable-dN2MNNFu.mjs} +2 -2
  80. package/dist/_chunks/{EventsTable-WP7PUujH.mjs.map → EventsTable-dN2MNNFu.mjs.map} +1 -1
  81. package/dist/_chunks/{FieldTypeIcon-Is5Qjngf.mjs → FieldTypeIcon-4-UZzZla.mjs} +2 -2
  82. package/dist/_chunks/{FieldTypeIcon-Is5Qjngf.mjs.map → FieldTypeIcon-4-UZzZla.mjs.map} +1 -1
  83. package/dist/_chunks/{FieldTypeIcon-OeDSkshr.js → FieldTypeIcon-wxfhExw2.js} +2 -2
  84. package/dist/_chunks/{FieldTypeIcon-OeDSkshr.js.map → FieldTypeIcon-wxfhExw2.js.map} +1 -1
  85. package/dist/_chunks/{Filters-tMd2Q5jg.mjs → Filters--lh-i85A.mjs} +2 -3
  86. package/dist/_chunks/Filters--lh-i85A.mjs.map +1 -0
  87. package/dist/_chunks/{Filters-xVuf1kg6.js → Filters-V0VODaNk.js} +4 -5
  88. package/dist/_chunks/Filters-V0VODaNk.js.map +1 -0
  89. package/dist/_chunks/{Form-EiK_H9BI.js → Form-6QJjWK34.js} +3 -3
  90. package/dist/_chunks/{Form-EiK_H9BI.js.map → Form-6QJjWK34.js.map} +1 -1
  91. package/dist/_chunks/{Form-sZKjSFQC.mjs → Form-HXiNxSZi.mjs} +3 -3
  92. package/dist/_chunks/{Form-sZKjSFQC.mjs.map → Form-HXiNxSZi.mjs.map} +1 -1
  93. package/dist/_chunks/{History-1AF4LH3c.mjs → History-CRGqDfHr.mjs} +4 -5
  94. package/dist/_chunks/History-CRGqDfHr.mjs.map +1 -0
  95. package/dist/_chunks/{History-V_ik1IL0.js → History-R_4lEy01.js} +9 -10
  96. package/dist/_chunks/History-R_4lEy01.js.map +1 -0
  97. package/dist/_chunks/{HomePage-7Xva17wM.mjs → HomePage-GJRtRqAj.mjs} +3 -3
  98. package/dist/_chunks/{HomePage-7Xva17wM.mjs.map → HomePage-GJRtRqAj.mjs.map} +1 -1
  99. package/dist/_chunks/{HomePage-C6Ivli1q.mjs → HomePage-Si17pjt5.mjs} +4 -4
  100. package/dist/_chunks/{HomePage-C6Ivli1q.mjs.map → HomePage-Si17pjt5.mjs.map} +1 -1
  101. package/dist/_chunks/{HomePage-yrIp1-eG.js → HomePage-oiaJD-JE.js} +4 -4
  102. package/dist/_chunks/{HomePage-yrIp1-eG.js.map → HomePage-oiaJD-JE.js.map} +1 -1
  103. package/dist/_chunks/{HomePage-zL7HPV7A.js → HomePage-rEW7Jpww.js} +3 -3
  104. package/dist/_chunks/{HomePage-zL7HPV7A.js.map → HomePage-rEW7Jpww.js.map} +1 -1
  105. package/dist/_chunks/{InputRenderer-iP1kRki4.mjs → InputRenderer-JfwBoJk0.mjs} +23 -8
  106. package/dist/_chunks/InputRenderer-JfwBoJk0.mjs.map +1 -0
  107. package/dist/_chunks/{InputRenderer-RMnWnPI4.js → InputRenderer-hWILsDgK.js} +25 -10
  108. package/dist/_chunks/InputRenderer-hWILsDgK.js.map +1 -0
  109. package/dist/_chunks/{InstalledPluginsPage-7m_FfOGl.mjs → InstalledPluginsPage-XqzfeZgq.mjs} +5 -7
  110. package/dist/_chunks/InstalledPluginsPage-XqzfeZgq.mjs.map +1 -0
  111. package/dist/_chunks/{InstalledPluginsPage-PrMyistN.js → InstalledPluginsPage-ao6yYe7N.js} +4 -6
  112. package/dist/_chunks/InstalledPluginsPage-ao6yYe7N.js.map +1 -0
  113. package/dist/_chunks/{Layout-tDfvrUZo.mjs → Layout-2dctwEHz.mjs} +2 -2
  114. package/dist/_chunks/{Layout-tDfvrUZo.mjs.map → Layout-2dctwEHz.mjs.map} +1 -1
  115. package/dist/_chunks/{Layout-EDS3Yv8X.mjs → Layout-3sYAgWn4.mjs} +4 -4
  116. package/dist/_chunks/{Layout-EDS3Yv8X.mjs.map → Layout-3sYAgWn4.mjs.map} +1 -1
  117. package/dist/_chunks/{Layout-DC68R0Fa.js → Layout-4vMUN0Ez.js} +2 -2
  118. package/dist/_chunks/{Layout-DC68R0Fa.js.map → Layout-4vMUN0Ez.js.map} +1 -1
  119. package/dist/_chunks/{Layout-9Li8e-qi.js → Layout-kbqdKkiF.js} +4 -4
  120. package/dist/_chunks/{Layout-9Li8e-qi.js.map → Layout-kbqdKkiF.js.map} +1 -1
  121. package/dist/_chunks/{ListConfigurationPage-Gl8AA-2t.js → ListConfigurationPage-BXuW_9Wt.js} +3 -3
  122. package/dist/_chunks/{ListConfigurationPage-Gl8AA-2t.js.map → ListConfigurationPage-BXuW_9Wt.js.map} +1 -1
  123. package/dist/_chunks/{ListConfigurationPage-7O7HiJjG.mjs → ListConfigurationPage-lPILAPkW.mjs} +3 -3
  124. package/dist/_chunks/{ListConfigurationPage-7O7HiJjG.mjs.map → ListConfigurationPage-lPILAPkW.mjs.map} +1 -1
  125. package/dist/_chunks/{ListPage-_i7RNkUF.js → ListPage-02WM7Pt9.js} +6 -7
  126. package/dist/_chunks/ListPage-02WM7Pt9.js.map +1 -0
  127. package/dist/_chunks/{ListPage-em8KMoKx.js → ListPage-7TAp-q4k.js} +8 -9
  128. package/dist/_chunks/ListPage-7TAp-q4k.js.map +1 -0
  129. package/dist/_chunks/{ListPage-RlY1nro4.mjs → ListPage-EdOy02-v.mjs} +6 -7
  130. package/dist/_chunks/ListPage-EdOy02-v.mjs.map +1 -0
  131. package/dist/_chunks/{ListPage-1q5Fi4W9.mjs → ListPage-OaldiDCh.mjs} +50 -51
  132. package/dist/_chunks/ListPage-OaldiDCh.mjs.map +1 -0
  133. package/dist/_chunks/{ListPage-cBvO_gYR.mjs → ListPage-R8Qs69v7.mjs} +3 -3
  134. package/dist/_chunks/{ListPage-cBvO_gYR.mjs.map → ListPage-R8Qs69v7.mjs.map} +1 -1
  135. package/dist/_chunks/{ListPage-DZBRIMkE.mjs → ListPage-SCTNGhhO.mjs} +6 -7
  136. package/dist/_chunks/ListPage-SCTNGhhO.mjs.map +1 -0
  137. package/dist/_chunks/{ListPage-God7L19W.mjs → ListPage-YZ45BiMe.mjs} +10 -11
  138. package/dist/_chunks/ListPage-YZ45BiMe.mjs.map +1 -0
  139. package/dist/_chunks/{ListPage-skKuhRrN.js → ListPage-ZWUo77nT.js} +49 -49
  140. package/dist/_chunks/ListPage-ZWUo77nT.js.map +1 -0
  141. package/dist/_chunks/{ListPage-0eDZZ7Zw.js → ListPage-bE4a6YkV.js} +3 -3
  142. package/dist/_chunks/{ListPage-0eDZZ7Zw.js.map → ListPage-bE4a6YkV.js.map} +1 -1
  143. package/dist/_chunks/{ListPage-Ky2tG2bd.mjs → ListPage-p17R2Gql.mjs} +10 -14
  144. package/dist/_chunks/ListPage-p17R2Gql.mjs.map +1 -0
  145. package/dist/_chunks/{ListPage-NdzVJ_Ed.js → ListPage-rCVvOLlD.js} +9 -13
  146. package/dist/_chunks/ListPage-rCVvOLlD.js.map +1 -0
  147. package/dist/_chunks/{ListPage-aElBcYPH.js → ListPage-u6uVacPz.js} +4 -5
  148. package/dist/_chunks/ListPage-u6uVacPz.js.map +1 -0
  149. package/dist/_chunks/{ListView-hm-mjZ8N.mjs → ListView--O7X6dMw.mjs} +7 -8
  150. package/dist/_chunks/ListView--O7X6dMw.mjs.map +1 -0
  151. package/dist/_chunks/{ListView--mxDKrnG.js → ListView-SsUn5vcn.js} +5 -6
  152. package/dist/_chunks/ListView-SsUn5vcn.js.map +1 -0
  153. package/dist/_chunks/{ListView-vP-PjR4p.js → ListView-ZkjwQBXQ.js} +5 -6
  154. package/dist/_chunks/ListView-ZkjwQBXQ.js.map +1 -0
  155. package/dist/_chunks/{ListView-QEgFV6dm.mjs → ListView-oP-C8SCR.mjs} +7 -8
  156. package/dist/_chunks/ListView-oP-C8SCR.mjs.map +1 -0
  157. package/dist/_chunks/{ListViewPage-xOVa04T_.mjs → ListViewPage-1VNVP9Rw.mjs} +10 -11
  158. package/dist/_chunks/ListViewPage-1VNVP9Rw.mjs.map +1 -0
  159. package/dist/_chunks/{ListViewPage-NiwpwxBR.js → ListViewPage-idgrhBAP.js} +14 -15
  160. package/dist/_chunks/ListViewPage-idgrhBAP.js.map +1 -0
  161. package/dist/_chunks/{Login-0FtP5Ck_.js → Login-4Igrm6CC.js} +2 -2
  162. package/dist/_chunks/{Login-0FtP5Ck_.js.map → Login-4Igrm6CC.js.map} +1 -1
  163. package/dist/_chunks/{Login-IFCsIrab.mjs → Login-B55AM-7k.mjs} +2 -2
  164. package/dist/_chunks/{Login-IFCsIrab.mjs.map → Login-B55AM-7k.mjs.map} +1 -1
  165. package/dist/_chunks/{MagicLinkEE-eaU4kQ6o.mjs → MagicLinkEE-Zy_9ZZ7y.mjs} +3 -3
  166. package/dist/_chunks/{MagicLinkEE-eaU4kQ6o.mjs.map → MagicLinkEE-Zy_9ZZ7y.mjs.map} +1 -1
  167. package/dist/_chunks/{MagicLinkEE-S7dXBaH0.js → MagicLinkEE-v7xTuVEA.js} +3 -3
  168. package/dist/_chunks/{MagicLinkEE-S7dXBaH0.js.map → MagicLinkEE-v7xTuVEA.js.map} +1 -1
  169. package/dist/_chunks/{MarketplacePage-f0ZrC_p8.mjs → MarketplacePage-UGys0LVN.mjs} +3 -5
  170. package/dist/_chunks/MarketplacePage-UGys0LVN.mjs.map +1 -0
  171. package/dist/_chunks/{MarketplacePage-zSQ_GRnZ.js → MarketplacePage-tWKM5xe8.js} +5 -7
  172. package/dist/_chunks/MarketplacePage-tWKM5xe8.js.map +1 -0
  173. package/dist/_chunks/{NoContentTypePage-ER4yVLjV.mjs → NoContentTypePage-BaaTD5uB.mjs} +4 -6
  174. package/dist/_chunks/NoContentTypePage-BaaTD5uB.mjs.map +1 -0
  175. package/dist/_chunks/{NoContentTypePage-_XU8B8oQ.js → NoContentTypePage-Lbuve_Uu.js} +3 -5
  176. package/dist/_chunks/NoContentTypePage-Lbuve_Uu.js.map +1 -0
  177. package/dist/_chunks/{NoPermissionsPage-DcFRsCHz.mjs → NoPermissionsPage--Oa97N7k.mjs} +5 -7
  178. package/dist/_chunks/NoPermissionsPage--Oa97N7k.mjs.map +1 -0
  179. package/dist/_chunks/{NoPermissionsPage-5A4Hwjad.js → NoPermissionsPage-q44k5VFX.js} +3 -5
  180. package/dist/_chunks/NoPermissionsPage-q44k5VFX.js.map +1 -0
  181. package/dist/_chunks/{Permissions--rdF1ZKQ.js → Permissions-CFuwI0Ni.js} +2 -2
  182. package/dist/_chunks/{Permissions--rdF1ZKQ.js.map → Permissions-CFuwI0Ni.js.map} +1 -1
  183. package/dist/_chunks/{Permissions-Ke5fqSQ2.mjs → Permissions-NbmBkSB4.mjs} +2 -2
  184. package/dist/_chunks/{Permissions-Ke5fqSQ2.mjs.map → Permissions-NbmBkSB4.mjs.map} +1 -1
  185. package/dist/_chunks/{PrivateRoute-dWrZb-9J.mjs → PrivateRoute-YN_98pM_.mjs} +2 -2
  186. package/dist/_chunks/{PrivateRoute-dWrZb-9J.mjs.map → PrivateRoute-YN_98pM_.mjs.map} +1 -1
  187. package/dist/_chunks/{PrivateRoute-GLTcdbu8.js → PrivateRoute-avlq1MEy.js} +2 -2
  188. package/dist/_chunks/{PrivateRoute-GLTcdbu8.js.map → PrivateRoute-avlq1MEy.js.map} +1 -1
  189. package/dist/_chunks/{ProfilePage-EEcNKnGH.js → ProfilePage-brPbqDP1.js} +4 -6
  190. package/dist/_chunks/ProfilePage-brPbqDP1.js.map +1 -0
  191. package/dist/_chunks/{ProfilePage-bE7txhNu.mjs → ProfilePage-eCIvxxJY.mjs} +5 -7
  192. package/dist/_chunks/ProfilePage-eCIvxxJY.mjs.map +1 -0
  193. package/dist/_chunks/{ReviewWorkflowsColumn-hJRkAN5a.js → ReviewWorkflowsColumn-HfjzpLFU.js} +2 -2
  194. package/dist/_chunks/{ReviewWorkflowsColumn-hJRkAN5a.js.map → ReviewWorkflowsColumn-HfjzpLFU.js.map} +1 -1
  195. package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto.mjs → ReviewWorkflowsColumn-sPZxvFUd.mjs} +2 -2
  196. package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto.mjs.map → ReviewWorkflowsColumn-sPZxvFUd.mjs.map} +1 -1
  197. package/dist/_chunks/{SelectRoles-XK5HcBdP.js → SelectRoles-BmNzL0q5.js} +4 -5
  198. package/dist/_chunks/SelectRoles-BmNzL0q5.js.map +1 -0
  199. package/dist/_chunks/{SelectRoles-Iih1yeTu.mjs → SelectRoles-jvH4WUf6.mjs} +3 -4
  200. package/dist/_chunks/SelectRoles-jvH4WUf6.mjs.map +1 -0
  201. package/dist/_chunks/{SingleSignOnPage-uURRsIxP.js → SingleSignOnPage-ZyiHtZxJ.js} +4 -5
  202. package/dist/_chunks/SingleSignOnPage-ZyiHtZxJ.js.map +1 -0
  203. package/dist/_chunks/{SingleSignOnPage-vOeDxBfa.mjs → SingleSignOnPage-aMd3wcAh.mjs} +6 -7
  204. package/dist/_chunks/SingleSignOnPage-aMd3wcAh.mjs.map +1 -0
  205. package/dist/_chunks/{Table-k6gVR2KH.mjs → Table-591I_RMU.mjs} +2 -3
  206. package/dist/_chunks/Table-591I_RMU.mjs.map +1 -0
  207. package/dist/_chunks/{Table-VsNr4Mha.js → Table-aUfykqgd.js} +3 -4
  208. package/dist/_chunks/Table-aUfykqgd.js.map +1 -0
  209. package/dist/_chunks/{TokenTypeSelect-Z9iyoteG.mjs → TokenTypeSelect-vIBdBE9t.mjs} +2 -3
  210. package/dist/_chunks/TokenTypeSelect-vIBdBE9t.mjs.map +1 -0
  211. package/dist/_chunks/{TokenTypeSelect-QN_bDdss.js → TokenTypeSelect-vp-54yBv.js} +3 -4
  212. package/dist/_chunks/TokenTypeSelect-vp-54yBv.js.map +1 -0
  213. package/dist/_chunks/{UseCasePage-xAlTWOcX.js → UseCasePage-0_alQEc9.js} +3 -3
  214. package/dist/_chunks/{UseCasePage-xAlTWOcX.js.map → UseCasePage-0_alQEc9.js.map} +1 -1
  215. package/dist/_chunks/{UseCasePage-qJwKBweD.mjs → UseCasePage-Cxu2FeWo.mjs} +3 -3
  216. package/dist/_chunks/{UseCasePage-qJwKBweD.mjs.map → UseCasePage-Cxu2FeWo.mjs.map} +1 -1
  217. package/dist/_chunks/{apiTokens-b3w4qO8B.js → apiTokens-IG3rF-G2.js} +2 -2
  218. package/dist/_chunks/{apiTokens-b3w4qO8B.js.map → apiTokens-IG3rF-G2.js.map} +1 -1
  219. package/dist/_chunks/{apiTokens-dGGyJI-w.mjs → apiTokens-wLmJ3Liv.mjs} +2 -2
  220. package/dist/_chunks/{apiTokens-dGGyJI-w.mjs.map → apiTokens-wLmJ3Liv.mjs.map} +1 -1
  221. package/dist/_chunks/{constants-WjN6I3sL.mjs → constants-0OGkpIzK.mjs} +3 -3
  222. package/dist/_chunks/{constants-WjN6I3sL.mjs.map → constants-0OGkpIzK.mjs.map} +1 -1
  223. package/dist/_chunks/{constants-PHXhIuUs.js → constants-7yqqXq3r.js} +2 -2
  224. package/dist/_chunks/{constants-PHXhIuUs.js.map → constants-7yqqXq3r.js.map} +1 -1
  225. package/dist/_chunks/{constants-ruIkLWCb.mjs → constants-JgR8CVx2.mjs} +2 -2
  226. package/dist/_chunks/{constants-ruIkLWCb.mjs.map → constants-JgR8CVx2.mjs.map} +1 -1
  227. package/dist/_chunks/{constants-IZEgEoW9.js → constants-XJLrl2Tl.js} +3 -3
  228. package/dist/_chunks/{constants-IZEgEoW9.js.map → constants-XJLrl2Tl.js.map} +1 -1
  229. package/dist/_chunks/{index-5ZvCaCyY.mjs → index-GIVuHJgC.mjs} +347 -188
  230. package/dist/_chunks/index-GIVuHJgC.mjs.map +1 -0
  231. package/dist/_chunks/{index-ibtz273H.js → index-haHGOQMJ.js} +270 -110
  232. package/dist/_chunks/index-haHGOQMJ.js.map +1 -0
  233. package/dist/_chunks/{selectors-JBxTdRJK.mjs → selectors--2Vzk8PA.mjs} +2 -2
  234. package/dist/_chunks/{selectors-JBxTdRJK.mjs.map → selectors--2Vzk8PA.mjs.map} +1 -1
  235. package/dist/_chunks/{selectors-TFKI8arF.js → selectors-NSSzzIzx.js} +2 -2
  236. package/dist/_chunks/{selectors-TFKI8arF.js.map → selectors-NSSzzIzx.js.map} +1 -1
  237. package/dist/_chunks/{transferTokens-4KlyXDql.mjs → transferTokens-WIsWKVbF.mjs} +2 -2
  238. package/dist/_chunks/{transferTokens-4KlyXDql.mjs.map → transferTokens-WIsWKVbF.mjs.map} +1 -1
  239. package/dist/_chunks/{transferTokens-G-suI4pp.js → transferTokens-xL4mlopP.js} +2 -2
  240. package/dist/_chunks/{transferTokens-G-suI4pp.js.map → transferTokens-xL4mlopP.js.map} +1 -1
  241. package/dist/_chunks/{useAdminRoles-7_YWhmkQ.mjs → useAdminRoles--ozrdfW_.mjs} +2 -2
  242. package/dist/_chunks/{useAdminRoles-7_YWhmkQ.mjs.map → useAdminRoles--ozrdfW_.mjs.map} +1 -1
  243. package/dist/_chunks/{useAdminRoles-o4dxsCcY.js → useAdminRoles-Y25Pjlcy.js} +2 -2
  244. package/dist/_chunks/{useAdminRoles-o4dxsCcY.js.map → useAdminRoles-Y25Pjlcy.js.map} +1 -1
  245. package/dist/_chunks/{useContentTypes-dRoMxL8c.js → useContentTypes-Vr8jkHQL.js} +2 -2
  246. package/dist/_chunks/{useContentTypes-dRoMxL8c.js.map → useContentTypes-Vr8jkHQL.js.map} +1 -1
  247. package/dist/_chunks/{useContentTypes-x6OLbsWe.mjs → useContentTypes-ralhLmpD.mjs} +2 -2
  248. package/dist/_chunks/{useContentTypes-x6OLbsWe.mjs.map → useContentTypes-ralhLmpD.mjs.map} +1 -1
  249. package/dist/_chunks/{useLicenseLimitNotification-wzvrsJoL.mjs → useLicenseLimitNotification-RSTkqcfW.mjs} +2 -2
  250. package/dist/_chunks/{useLicenseLimitNotification-wzvrsJoL.mjs.map → useLicenseLimitNotification-RSTkqcfW.mjs.map} +1 -1
  251. package/dist/_chunks/{useLicenseLimitNotification-BaSsY40x.js → useLicenseLimitNotification-fSsffVh-.js} +2 -2
  252. package/dist/_chunks/{useLicenseLimitNotification-BaSsY40x.js.map → useLicenseLimitNotification-fSsffVh-.js.map} +1 -1
  253. package/dist/_chunks/{useReviewWorkflows-PAvhwNm3.mjs → useReviewWorkflows--7WPIykR.mjs} +2 -2
  254. package/dist/_chunks/{useReviewWorkflows-PAvhwNm3.mjs.map → useReviewWorkflows--7WPIykR.mjs.map} +1 -1
  255. package/dist/_chunks/{useReviewWorkflows-3SKYABe_.js → useReviewWorkflows-4t3eVbDa.js} +2 -2
  256. package/dist/_chunks/{useReviewWorkflows-3SKYABe_.js.map → useReviewWorkflows-4t3eVbDa.js.map} +1 -1
  257. package/dist/_chunks/{useSyncRbac-f7CCq_yt.js → useSyncRbac-Fw5UPeMQ.js} +2 -2
  258. package/dist/_chunks/{useSyncRbac-f7CCq_yt.js.map → useSyncRbac-Fw5UPeMQ.js.map} +1 -1
  259. package/dist/_chunks/{useSyncRbac-Kt8Li0Yf.mjs → useSyncRbac-JNQibLFa.mjs} +2 -2
  260. package/dist/_chunks/{useSyncRbac-Kt8Li0Yf.mjs.map → useSyncRbac-JNQibLFa.mjs.map} +1 -1
  261. package/dist/_chunks/{useWebhooks-Fhm21I_2.js → useWebhooks-IXb4Ks8E.js} +2 -2
  262. package/dist/_chunks/{useWebhooks-Fhm21I_2.js.map → useWebhooks-IXb4Ks8E.js.map} +1 -1
  263. package/dist/_chunks/{useWebhooks-6rWM4vzd.mjs → useWebhooks-sfNt0r3v.mjs} +2 -2
  264. package/dist/_chunks/{useWebhooks-6rWM4vzd.mjs.map → useWebhooks-sfNt0r3v.mjs.map} +1 -1
  265. package/dist/_chunks/{validateWorkflow-DlwU9a4N.mjs → validateWorkflow-YRBggwod.mjs} +2 -2
  266. package/dist/_chunks/{validateWorkflow-DlwU9a4N.mjs.map → validateWorkflow-YRBggwod.mjs.map} +1 -1
  267. package/dist/_chunks/{validateWorkflow-1g4fl4e7.js → validateWorkflow-akFNValJ.js} +2 -2
  268. package/dist/_chunks/{validateWorkflow-1g4fl4e7.js.map → validateWorkflow-akFNValJ.js.map} +1 -1
  269. package/dist/_chunks/{validation-NckIpCgz.js → validation--QPWqn0e.js} +2 -2
  270. package/dist/_chunks/{validation-NckIpCgz.js.map → validation--QPWqn0e.js.map} +1 -1
  271. package/dist/_chunks/{validation-aaWzg0nE.mjs → validation-hlioQ0PO.mjs} +2 -2
  272. package/dist/_chunks/{validation-aaWzg0nE.mjs.map → validation-hlioQ0PO.mjs.map} +1 -1
  273. package/dist/admin/index.js +4 -1
  274. package/dist/admin/index.js.map +1 -1
  275. package/dist/admin/index.mjs +21 -18
  276. package/dist/admin/src/components/PageHelpers.d.ts +6 -2
  277. package/dist/admin/src/content-manager/history/services/historyVersion.d.ts +1 -1
  278. package/dist/admin/src/content-manager/history/tests/mockData.d.ts +692 -0
  279. package/dist/admin/src/content-manager/history/tests/server.d.ts +3 -0
  280. package/dist/admin/src/content-manager/services/api.d.ts +1 -1
  281. package/dist/admin/src/content-manager/services/components.d.ts +2 -2
  282. package/dist/admin/src/content-manager/services/contentTypes.d.ts +3 -3
  283. package/dist/admin/src/content-manager/services/documents.d.ts +17 -20
  284. package/dist/admin/src/content-manager/services/init.d.ts +1 -1
  285. package/dist/admin/src/content-manager/services/relations.d.ts +2 -2
  286. package/dist/admin/src/content-manager/services/uid.d.ts +3 -3
  287. package/dist/admin/src/core/store/configure.d.ts +2 -2
  288. package/dist/admin/src/core/store/hooks.d.ts +3 -3
  289. package/dist/admin/src/hooks/useAPIErrorHandler.d.ts +2 -1
  290. package/dist/admin/src/hooks/useClipboard.d.ts +4 -0
  291. package/dist/admin/src/hooks/useFetchClient.d.ts +43 -0
  292. package/dist/admin/src/hooks/useFocusInputField.d.ts +20 -0
  293. package/dist/admin/src/hooks/useQueryParams.d.ts +5 -0
  294. package/dist/admin/src/index.d.ts +8 -6
  295. package/dist/admin/src/selectors.d.ts +2 -2
  296. package/dist/admin/src/utils/baseQuery.d.ts +1 -1
  297. package/dist/admin/src/utils/getFetchClient.d.ts +30 -0
  298. package/dist/admin/src/utils/normalizeAPIError.d.ts +2 -2
  299. package/dist/admin/tests/index.js +49173 -0
  300. package/dist/admin/tests/index.js.map +1 -0
  301. package/dist/admin/tests/index.mjs +49135 -0
  302. package/dist/admin/tests/index.mjs.map +1 -0
  303. package/dist/admin/tests/mockData.d.ts +2053 -0
  304. package/dist/admin/tests/server.d.ts +2 -0
  305. package/dist/admin/tests/setup.d.ts +1 -0
  306. package/dist/admin/tests/store.d.ts +468 -0
  307. package/dist/admin/tests/utils.d.ts +511 -0
  308. package/package.json +19 -12
  309. package/dist/_chunks/ApplicationInfoPage-PHLA1Ysy.js.map +0 -1
  310. package/dist/_chunks/ApplicationInfoPage-Zn5JU2zd.mjs.map +0 -1
  311. package/dist/_chunks/EditPage-A6olBfVm.js.map +0 -1
  312. package/dist/_chunks/EditPage-VoRR5DCQ.mjs.map +0 -1
  313. package/dist/_chunks/EditView-C_ynfmtW.js.map +0 -1
  314. package/dist/_chunks/EditView-EuUw_2zc.mjs.map +0 -1
  315. package/dist/_chunks/EditViewPage-8uPO5GWR.mjs.map +0 -1
  316. package/dist/_chunks/EditViewPage-XtJmgPi5.js.map +0 -1
  317. package/dist/_chunks/EditViewPage-Z_e1dpbU.js.map +0 -1
  318. package/dist/_chunks/EditViewPage-xYzUSAwS.mjs.map +0 -1
  319. package/dist/_chunks/Filters-tMd2Q5jg.mjs.map +0 -1
  320. package/dist/_chunks/Filters-xVuf1kg6.js.map +0 -1
  321. package/dist/_chunks/History-1AF4LH3c.mjs.map +0 -1
  322. package/dist/_chunks/History-V_ik1IL0.js.map +0 -1
  323. package/dist/_chunks/InputRenderer-RMnWnPI4.js.map +0 -1
  324. package/dist/_chunks/InputRenderer-iP1kRki4.mjs.map +0 -1
  325. package/dist/_chunks/InstalledPluginsPage-7m_FfOGl.mjs.map +0 -1
  326. package/dist/_chunks/InstalledPluginsPage-PrMyistN.js.map +0 -1
  327. package/dist/_chunks/ListPage-1q5Fi4W9.mjs.map +0 -1
  328. package/dist/_chunks/ListPage-DZBRIMkE.mjs.map +0 -1
  329. package/dist/_chunks/ListPage-God7L19W.mjs.map +0 -1
  330. package/dist/_chunks/ListPage-Ky2tG2bd.mjs.map +0 -1
  331. package/dist/_chunks/ListPage-NdzVJ_Ed.js.map +0 -1
  332. package/dist/_chunks/ListPage-RlY1nro4.mjs.map +0 -1
  333. package/dist/_chunks/ListPage-_i7RNkUF.js.map +0 -1
  334. package/dist/_chunks/ListPage-aElBcYPH.js.map +0 -1
  335. package/dist/_chunks/ListPage-em8KMoKx.js.map +0 -1
  336. package/dist/_chunks/ListPage-skKuhRrN.js.map +0 -1
  337. package/dist/_chunks/ListView--mxDKrnG.js.map +0 -1
  338. package/dist/_chunks/ListView-QEgFV6dm.mjs.map +0 -1
  339. package/dist/_chunks/ListView-hm-mjZ8N.mjs.map +0 -1
  340. package/dist/_chunks/ListView-vP-PjR4p.js.map +0 -1
  341. package/dist/_chunks/ListViewPage-NiwpwxBR.js.map +0 -1
  342. package/dist/_chunks/ListViewPage-xOVa04T_.mjs.map +0 -1
  343. package/dist/_chunks/MarketplacePage-f0ZrC_p8.mjs.map +0 -1
  344. package/dist/_chunks/MarketplacePage-zSQ_GRnZ.js.map +0 -1
  345. package/dist/_chunks/NoContentTypePage-ER4yVLjV.mjs.map +0 -1
  346. package/dist/_chunks/NoContentTypePage-_XU8B8oQ.js.map +0 -1
  347. package/dist/_chunks/NoPermissionsPage-5A4Hwjad.js.map +0 -1
  348. package/dist/_chunks/NoPermissionsPage-DcFRsCHz.mjs.map +0 -1
  349. package/dist/_chunks/ProfilePage-EEcNKnGH.js.map +0 -1
  350. package/dist/_chunks/ProfilePage-bE7txhNu.mjs.map +0 -1
  351. package/dist/_chunks/SelectRoles-Iih1yeTu.mjs.map +0 -1
  352. package/dist/_chunks/SelectRoles-XK5HcBdP.js.map +0 -1
  353. package/dist/_chunks/SingleSignOnPage-uURRsIxP.js.map +0 -1
  354. package/dist/_chunks/SingleSignOnPage-vOeDxBfa.mjs.map +0 -1
  355. package/dist/_chunks/Table-VsNr4Mha.js.map +0 -1
  356. package/dist/_chunks/Table-k6gVR2KH.mjs.map +0 -1
  357. package/dist/_chunks/TokenTypeSelect-QN_bDdss.js.map +0 -1
  358. package/dist/_chunks/TokenTypeSelect-Z9iyoteG.mjs.map +0 -1
  359. package/dist/_chunks/index-5ZvCaCyY.mjs.map +0 -1
  360. package/dist/_chunks/index-ibtz273H.js.map +0 -1
  361. package/dist/admin/src/types/errors.d.ts +0 -2
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListPage-aElBcYPH.js","sources":["../../admin/src/pages/Settings/pages/Webhooks/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotifyAT,\n ActionLayout,\n BaseCheckbox,\n Button,\n ContentLayout,\n EmptyStateLayout,\n Flex,\n HeaderLayout,\n IconButton,\n Layout,\n Main,\n Switch,\n Table,\n Tbody,\n Td,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useFocusWhenNavigate, useRBAC } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Pencil, Plus, Trash } from '@strapi/icons';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\n\nimport { UpdateWebhook } from '../../../../../../shared/contracts/webhooks';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\n\nimport { useWebhooks } from './hooks/useWebhooks';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPage = () => {\n const [showModal, setShowModal] = React.useState(false);\n const [webhooksToDelete, setWebhooksToDelete] = React.useState<string[]>([]);\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.webhooks);\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n useFocusWhenNavigate();\n const navigate = useNavigate();\n\n const {\n isLoading: isRBACLoading,\n allowedActions: { canCreate, canUpdate, canDelete },\n } = useRBAC(permissions);\n const { notifyStatus } = useNotifyAT();\n\n const {\n isLoading: isWebhooksLoading,\n webhooks,\n error: webhooksError,\n updateWebhook,\n deleteManyWebhooks,\n } = useWebhooks();\n\n React.useEffect(() => {\n if (webhooksError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(webhooksError),\n });\n\n return;\n }\n if (webhooks) {\n notifyStatus(\n formatMessage({\n id: 'Settings.webhooks.list.loading.success',\n defaultMessage: 'Webhooks have been loaded',\n })\n );\n }\n }, [webhooks, webhooksError, toggleNotification, formatMessage, notifyStatus, formatAPIError]);\n\n const enableWebhook = async (body: UpdateWebhook.Request['body'] & UpdateWebhook.Params) => {\n try {\n const res = await updateWebhook(body);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const confirmDelete = async () => {\n try {\n const res = await deleteManyWebhooks({\n ids: webhooksToDelete,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setWebhooksToDelete([]);\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n } finally {\n setShowModal(false);\n }\n };\n\n const selectAllCheckbox = (selected: boolean) =>\n selected\n ? setWebhooksToDelete(webhooks?.map((webhook) => webhook.id) ?? [])\n : setWebhooksToDelete([]);\n\n const selectOneCheckbox = (selected: boolean, id: string) =>\n selected\n ? setWebhooksToDelete((prev) => [...prev, id])\n : setWebhooksToDelete((prev) => prev.filter((webhookId) => webhookId !== id));\n\n const isLoading = isRBACLoading || isWebhooksLoading;\n const numberOfWebhooks = webhooks?.length ?? 0;\n const webhooksToDeleteLength = webhooksToDelete.length;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layout>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Webhooks',\n }\n )}\n />\n <Main aria-busy={isLoading}>\n <HeaderLayout\n title={formatMessage({ id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' })}\n subtitle={formatMessage({\n id: 'Settings.webhooks.list.description',\n defaultMessage: 'Get POST changes notifications',\n })}\n primaryAction={\n canCreate &&\n !isLoading && (\n <LinkButton\n as={NavLink}\n startIcon={<Plus />}\n variant=\"default\"\n // @ts-expect-error – this is an issue with the DS where as props are not inferred\n to=\"create\"\n size=\"S\"\n >\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </LinkButton>\n )\n }\n />\n {webhooksToDeleteLength > 0 && canDelete && (\n <ActionLayout\n startActions={\n <>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.webhooks.to.delete',\n defaultMessage:\n '{webhooksToDeleteLength, plural, one {# webhook} other {# webhooks}} selected',\n },\n { webhooksToDeleteLength }\n )}\n </Typography>\n <Button\n onClick={() => setShowModal(true)}\n startIcon={<Trash />}\n size=\"L\"\n variant=\"danger-light\"\n >\n {formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n </Button>\n </>\n }\n />\n )}\n <ContentLayout>\n {numberOfWebhooks > 0 ? (\n <Table\n colCount={5}\n rowCount={numberOfWebhooks + 1}\n footer={\n <TFooter\n onClick={() => {\n if (canCreate) {\n navigate('create');\n }\n }}\n icon={<Plus />}\n >\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </TFooter>\n }\n >\n <Thead>\n <Tr>\n <Th>\n <BaseCheckbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n indeterminate={\n webhooksToDeleteLength > 0 && webhooksToDeleteLength < numberOfWebhooks\n }\n value={webhooksToDeleteLength === numberOfWebhooks}\n onValueChange={selectAllCheckbox}\n />\n </Th>\n <Th width=\"20%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th width=\"60%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.webhooks.form.url',\n defaultMessage: 'URL',\n })}\n </Typography>\n </Th>\n <Th width=\"20%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.webhooks.list.th.status',\n defaultMessage: 'Status',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'Settings.webhooks.list.th.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {webhooks?.map((webhook) => (\n <Tr\n key={webhook.id}\n onClick={() => {\n if (canUpdate) {\n navigate(webhook.id);\n }\n }}\n style={{ cursor: canUpdate ? 'pointer' : 'default' }}\n >\n <Td onClick={(e) => e.stopPropagation()}>\n <BaseCheckbox\n aria-label={`${formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n })} ${webhook.name}`}\n value={webhooksToDelete?.includes(webhook.id)}\n onValueChange={(selected) => selectOneCheckbox(selected, webhook.id)}\n name=\"select\"\n />\n </Td>\n <Td>\n <Typography fontWeight=\"semiBold\" textColor=\"neutral800\">\n {webhook.name}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{webhook.url}</Typography>\n </Td>\n <Td>\n <Flex>\n <Switch\n onLabel={formatMessage({\n id: 'global.enabled',\n defaultMessage: 'Enabled',\n })}\n offLabel={formatMessage({\n id: 'global.disabled',\n defaultMessage: 'Disabled',\n })}\n label={`${webhook.name} ${formatMessage({\n id: 'Settings.webhooks.list.th.status',\n defaultMessage: 'Status',\n })}`}\n selected={webhook.isEnabled}\n onChange={(e) => {\n e.stopPropagation();\n enableWebhook({\n ...webhook,\n isEnabled: !webhook.isEnabled,\n });\n }}\n visibleLabels\n />\n </Flex>\n </Td>\n <Td>\n <Flex gap={1}>\n {canUpdate && (\n <IconButton\n label={formatMessage({\n id: 'Settings.webhooks.events.update',\n defaultMessage: 'Update',\n })}\n icon={<Pencil />}\n noBorder\n />\n )}\n {canDelete && (\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n setWebhooksToDelete([webhook.id]);\n setShowModal(true);\n }}\n label={formatMessage({\n id: 'Settings.webhooks.events.delete',\n defaultMessage: 'Delete webhook',\n })}\n icon={<Trash />}\n noBorder\n />\n )}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n ) : (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"160px\" />}\n content={formatMessage({\n id: 'Settings.webhooks.list.empty.description',\n defaultMessage: 'No webhooks found',\n })}\n action={\n canCreate ? (\n // @ts-expect-error – this is an issue with the DS where as props are not inferred\n <LinkButton variant=\"secondary\" startIcon={<Plus />} as={NavLink} to=\"create\">\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </LinkButton>\n ) : null\n }\n />\n )}\n </ContentLayout>\n </Main>\n <ConfirmDialog\n isOpen={showModal}\n onClose={() => setShowModal((prev) => !prev)}\n onConfirm={confirmDelete}\n />\n </Layout>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.webhooks.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["React","useTypedSelector","useIntl","useAPIErrorHandler","useNotification","useFocusWhenNavigate","useNavigate","useRBAC","useNotifyAT","useWebhooks","jsx","Page","Layout","Helmet","jsxs","Main","HeaderLayout","LinkButton","NavLink","Plus","ActionLayout","Fragment","Typography","Button","Trash","ContentLayout","Table","TFooter","Thead","Tr","Th","BaseCheckbox","VisuallyHidden","Tbody","Td","Flex","Switch","IconButton","Pencil","EmptyStateLayout","EmptyDocuments","ConfirmDialog"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAM,WAAW,MAAM;AACrB,QAAM,CAAC,WAAW,YAAY,IAAIA,iBAAM,SAAS,KAAK;AACtD,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,iBAAM,SAAmB,CAAA,CAAE;AACrE,QAAA,cAAcC,uBAAiB,CAAC,UAAU,MAAM,UAAU,YAAY,UAAU,QAAQ;AACxF,QAAA,EAAE,kBAAkBC,UAAAA;AAC1B,QAAM,EAAE,yBAAyB,eAAe,IAAIC,MAAmB,mBAAA;AACjE,QAAA,EAAE,uBAAuBC,MAAAA;AACVC,eAAAA;AACrB,QAAM,WAAWC,eAAAA;AAEX,QAAA;AAAA,IACJ,WAAW;AAAA,IACX,gBAAgB,EAAE,WAAW,WAAW,UAAU;AAAA,EAAA,IAChDC,aAAAA,QAAQ,WAAW;AACjB,QAAA,EAAE,iBAAiBC,aAAAA;AAEnB,QAAA;AAAA,IACJ,WAAW;AAAA,IACX;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,MACEC,YAAY,YAAA;AAEhBT,mBAAM,UAAU,MAAM;AACpB,QAAI,eAAe;AACE,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,aAAa;AAAA,MAAA,CACtC;AAED;AAAA,IACF;AACA,QAAI,UAAU;AACZ;AAAA,QACE,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IAEL;AAAA,EAAA,GACC,CAAC,UAAU,eAAe,oBAAoB,eAAe,cAAc,cAAc,CAAC;AAEvF,QAAA,gBAAgB,OAAO,SAA+D;AACtF,QAAA;AACI,YAAA,MAAM,MAAM,cAAc,IAAI;AAEpC,UAAI,WAAW,KAAK;AACC,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,eAAe,IAAI,KAAK;AAAA,QAAA,CAClC;AAAA,MACH;AAAA,IAAA,QACM;AACa,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACF;AAAA,IACH;AAAA,EAAA;AAGF,QAAM,gBAAgB,YAAY;AAC5B,QAAA;AACI,YAAA,MAAM,MAAM,mBAAmB;AAAA,QACnC,KAAK;AAAA,MAAA,CACN;AAED,UAAI,WAAW,KAAK;AACC,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,eAAe,IAAI,KAAK;AAAA,QAAA,CAClC;AAED;AAAA,MACF;AAEA,0BAAoB,CAAE,CAAA;AAAA,IAAA,QAChB;AACa,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACF;AAAA,IAAA,UACD;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EAAA;AAGF,QAAM,oBAAoB,CAAC,aACzB,WACI,oBAAoB,UAAU,IAAI,CAAC,YAAY,QAAQ,EAAE,KAAK,CAAE,CAAA,IAChE,oBAAoB,CAAA,CAAE;AAEtB,QAAA,oBAAoB,CAAC,UAAmB,OAC5C,WACI,oBAAoB,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC,IAC3C,oBAAoB,CAAC,SAAS,KAAK,OAAO,CAAC,cAAc,cAAc,EAAE,CAAC;AAEhF,QAAM,YAAY,iBAAiB;AAC7B,QAAA,mBAAmB,UAAU,UAAU;AAC7C,QAAM,yBAAyB,iBAAiB;AAEhD,MAAI,WAAW;AACN,WAAAU,+BAACC,MAAAA,KAAK,SAAL,CAAa,CAAA;AAAA,EACvB;AAEA,yCACGC,qBACC,EAAA,UAAA;AAAA,IAAAF,2BAAA;AAAA,MAACG,YAAA;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,EAAE,IAAI,sBAAsB,gBAAgB,oBAAoB;AAAA,UAChE;AAAA,YACE,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,IACAC,2BAAAA,KAACC,aAAAA,MAAK,EAAA,aAAW,WACf,UAAA;AAAA,MAAAL,2BAAA;AAAA,QAACM,aAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc,EAAE,IAAI,2BAA2B,gBAAgB,YAAY;AAAA,UAClF,UAAU,cAAc;AAAA,YACtB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,eACE,aACA,CAAC,aACCN,2BAAA;AAAA,YAACO,GAAA;AAAA,YAAA;AAAA,cACC,IAAIC,eAAA;AAAA,cACJ,0CAAYC,MAAK,MAAA,EAAA;AAAA,cACjB,SAAQ;AAAA,cAER,IAAG;AAAA,cACH,MAAK;AAAA,cAEJ,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MAGN;AAAA,MACC,yBAAyB,KAAK,aAC7BT,2BAAA;AAAA,QAACU,aAAA;AAAA,QAAA;AAAA,UACC,cAEIN,2BAAA,KAAAO,qBAAA,EAAA,UAAA;AAAA,YAAAX,2BAAA,IAACY,aAAW,YAAA,EAAA,SAAQ,WAAU,WAAU,cACrC,UAAA;AAAA,cACC;AAAA,gBACE,IAAI;AAAA,gBACJ,gBACE;AAAA,cACJ;AAAA,cACA,EAAE,uBAAuB;AAAA,YAAA,GAE7B;AAAA,YACAZ,2BAAA;AAAA,cAACa,aAAA;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM,aAAa,IAAI;AAAA,gBAChC,0CAAYC,MAAM,OAAA,EAAA;AAAA,gBAClB,MAAK;AAAA,gBACL,SAAQ;AAAA,gBAEP,UAAc,cAAA;AAAA,kBACb,IAAI;AAAA,kBACJ,gBAAgB;AAAA,gBAAA,CACjB;AAAA,cAAA;AAAA,YACH;AAAA,UAAA,GACF;AAAA,QAAA;AAAA,MAEJ;AAAA,MAEFd,2BAAAA,IAACe,aAAAA,eACE,EAAA,UAAA,mBAAmB,IAClBX,2BAAA;AAAA,QAACY,aAAA;AAAA,QAAA;AAAA,UACC,UAAU;AAAA,UACV,UAAU,mBAAmB;AAAA,UAC7B,QACEhB,2BAAA;AAAA,YAACiB,aAAA;AAAA,YAAA;AAAA,cACC,SAAS,MAAM;AACb,oBAAI,WAAW;AACb,2BAAS,QAAQ;AAAA,gBACnB;AAAA,cACF;AAAA,cACA,qCAAOR,MAAK,MAAA,EAAA;AAAA,cAEX,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,YAAA;AAAA,UACH;AAAA,UAGF,UAAA;AAAA,YAACT,2BAAA,IAAAkB,aAAA,OAAA,EACC,0CAACC,aAAAA,IACC,EAAA,UAAA;AAAA,cAAAnB,+BAACoB,aAAAA,IACC,EAAA,UAAApB,2BAAA;AAAA,gBAACqB,aAAA;AAAA,gBAAA;AAAA,kBACC,cAAY,cAAc;AAAA,oBACxB,IAAI;AAAA,oBACJ,gBAAgB;AAAA,kBAAA,CACjB;AAAA,kBACD,eACE,yBAAyB,KAAK,yBAAyB;AAAA,kBAEzD,OAAO,2BAA2B;AAAA,kBAClC,eAAe;AAAA,gBAAA;AAAA,cAAA,GAEnB;AAAA,cACArB,2BAAAA,IAACoB,aAAAA,IAAG,EAAA,OAAM,OACR,UAAApB,2BAAA,IAACY,2BAAW,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB,GACH,EACF,CAAA;AAAA,cACAZ,2BAAAA,IAACoB,aAAAA,IAAG,EAAA,OAAM,OACR,UAAApB,2BAAA,IAACY,2BAAW,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB,GACH,EACF,CAAA;AAAA,cACAZ,2BAAAA,IAACoB,aAAAA,IAAG,EAAA,OAAM,OACR,UAAApB,2BAAA,IAACY,2BAAW,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB,GACH,EACF,CAAA;AAAA,cACCZ,2BAAA,IAAAoB,aAAA,IAAA,EACC,UAACpB,2BAAA,IAAAsB,6BAAA,EACE,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB,GACH,EACF,CAAA;AAAA,YAAA,EAAA,CACF,EACF,CAAA;AAAA,YACCtB,2BAAA,IAAAuB,aAAA,OAAA,EACE,UAAU,UAAA,IAAI,CAAC,YACdnB,2BAAA;AAAA,cAACe,aAAA;AAAA,cAAA;AAAA,gBAEC,SAAS,MAAM;AACb,sBAAI,WAAW;AACb,6BAAS,QAAQ,EAAE;AAAA,kBACrB;AAAA,gBACF;AAAA,gBACA,OAAO,EAAE,QAAQ,YAAY,YAAY,UAAU;AAAA,gBAEnD,UAAA;AAAA,kBAAAnB,+BAACwB,aAAAA,MAAG,SAAS,CAAC,MAAM,EAAE,mBACpB,UAAAxB,2BAAA;AAAA,oBAACqB,aAAA;AAAA,oBAAA;AAAA,sBACC,cAAY,GAAG,cAAc;AAAA,wBAC3B,IAAI;AAAA,wBACJ,gBAAgB;AAAA,sBACjB,CAAA,CAAC,IAAI,QAAQ,IAAI;AAAA,sBAClB,OAAO,kBAAkB,SAAS,QAAQ,EAAE;AAAA,sBAC5C,eAAe,CAAC,aAAa,kBAAkB,UAAU,QAAQ,EAAE;AAAA,sBACnE,MAAK;AAAA,oBAAA;AAAA,kBAAA,GAET;AAAA,kBACArB,2BAAA,IAACwB,aACC,IAAA,EAAA,UAAAxB,2BAAAA,IAACY,aAAAA,YAAW,EAAA,YAAW,YAAW,WAAU,cACzC,UAAQ,QAAA,KAAA,CACX,EACF,CAAA;AAAA,kBACAZ,2BAAAA,IAACwB,aAAAA,MACC,UAACxB,2BAAAA,IAAAY,aAAAA,YAAA,EAAW,WAAU,cAAc,UAAA,QAAQ,KAAI,EAClD,CAAA;AAAA,kBACAZ,2BAAA,IAACwB,aACC,IAAA,EAAA,UAAAxB,2BAAA,IAACyB,aACC,MAAA,EAAA,UAAAzB,2BAAA;AAAA,oBAAC0B,aAAA;AAAA,oBAAA;AAAA,sBACC,SAAS,cAAc;AAAA,wBACrB,IAAI;AAAA,wBACJ,gBAAgB;AAAA,sBAAA,CACjB;AAAA,sBACD,UAAU,cAAc;AAAA,wBACtB,IAAI;AAAA,wBACJ,gBAAgB;AAAA,sBAAA,CACjB;AAAA,sBACD,OAAO,GAAG,QAAQ,IAAI,IAAI,cAAc;AAAA,wBACtC,IAAI;AAAA,wBACJ,gBAAgB;AAAA,sBACjB,CAAA,CAAC;AAAA,sBACF,UAAU,QAAQ;AAAA,sBAClB,UAAU,CAAC,MAAM;AACf,0BAAE,gBAAgB;AACJ,sCAAA;AAAA,0BACZ,GAAG;AAAA,0BACH,WAAW,CAAC,QAAQ;AAAA,wBAAA,CACrB;AAAA,sBACH;AAAA,sBACA,eAAa;AAAA,oBAAA;AAAA,qBAEjB,EACF,CAAA;AAAA,kBACC1B,+BAAAwB,aAAAA,IAAA,EACC,UAACpB,2BAAAA,KAAAqB,aAAAA,MAAA,EAAK,KAAK,GACR,UAAA;AAAA,oBACC,aAAAzB,2BAAA;AAAA,sBAAC2B,aAAA;AAAA,sBAAA;AAAA,wBACC,OAAO,cAAc;AAAA,0BACnB,IAAI;AAAA,0BACJ,gBAAgB;AAAA,wBAAA,CACjB;AAAA,wBACD,qCAAOC,MAAO,QAAA,EAAA;AAAA,wBACd,UAAQ;AAAA,sBAAA;AAAA,oBACV;AAAA,oBAED,aACC5B,2BAAA;AAAA,sBAAC2B,aAAA;AAAA,sBAAA;AAAA,wBACC,SAAS,CAAC,MAAM;AACd,4BAAE,gBAAgB;AACE,8CAAA,CAAC,QAAQ,EAAE,CAAC;AAChC,uCAAa,IAAI;AAAA,wBACnB;AAAA,wBACA,OAAO,cAAc;AAAA,0BACnB,IAAI;AAAA,0BACJ,gBAAgB;AAAA,wBAAA,CACjB;AAAA,wBACD,qCAAOb,MAAM,OAAA,EAAA;AAAA,wBACb,UAAQ;AAAA,sBAAA;AAAA,oBACV;AAAA,kBAAA,EAAA,CAEJ,EACF,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAlFK,QAAQ;AAAA,YAoFhB,CAAA,GACH;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,IAGFd,2BAAA;AAAA,QAAC6B,aAAA;AAAA,QAAA;AAAA,UACC,MAAM7B,2BAAAA,IAAC8B,MAAAA,gBAAe,EAAA,OAAM,QAAQ,CAAA;AAAA,UACpC,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,QACE;AAAA;AAAA,YAEG9B,2BAAA,IAAAO,GAAA,YAAA,EAAW,SAAQ,aAAY,WAAWP,2BAAAA,IAACS,MAAAA,MAAK,CAAA,CAAA,GAAI,IAAID,eAAA,SAAS,IAAG,UAClE,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YACjB,CAAA,GACH;AAAA,cACE;AAAA,QAAA;AAAA,MAAA,GAIZ;AAAA,IAAA,GACF;AAAA,IACAR,2BAAA;AAAA,MAAC+B,MAAA;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,SAAS,MAAM,aAAa,CAAC,SAAS,CAAC,IAAI;AAAA,QAC3C,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,EACF,EAAA,CAAA;AAEJ;AAMA,MAAM,oBAAoB,MAAM;AAC9B,QAAM,cAAcxC,MAAA;AAAA,IAClB,CAAC,UAAU,MAAM,UAAU,YAAY,UAAU,SAAS;AAAA,EAAA;AAG5D,wCACGU,MAAAA,KAAK,SAAL,EAAa,aACZ,UAAAD,2BAAAA,IAAC,YAAS,EACZ,CAAA;AAEJ;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListPage-em8KMoKx.js","sources":["../../admin/src/pages/Settings/pages/Users/components/CreateActionCE.tsx","../../admin/src/pages/Settings/pages/Users/components/NewUserForm.tsx","../../admin/src/pages/Settings/pages/Users/ListPage.tsx"],"sourcesContent":["import { Button, ButtonProps } from '@strapi/design-system';\nimport { Envelop } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\ninterface CreateActionCEProps extends Pick<ButtonProps, 'onClick'> {}\n\nconst CreateActionCE = ({ onClick }: CreateActionCEProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Button onClick={onClick} startIcon={<Envelop />} size=\"S\">\n {formatMessage({\n id: 'Settings.permissions.users.create',\n defaultMessage: 'Invite new user',\n })}\n </Button>\n );\n};\n\nexport { CreateActionCE };\nexport type { CreateActionCEProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Grid,\n GridItem,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Typography,\n} from '@strapi/design-system';\nimport { Breadcrumbs, Crumb } from '@strapi/design-system/v2';\nimport { Entity } from '@strapi/types';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { Form, type FormHelpers } from '../../../../../components/Form';\nimport { InputRenderer } from '../../../../../components/FormInputs/Renderer';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../../hooks/useEnterprise';\nimport { useCreateUserMutation } from '../../../../../services/users';\nimport { FormLayoutInputProps } from '../../../../../types/forms';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../../utils/translatedErrors';\n\nimport { MagicLinkCE } from './MagicLinkCE';\nimport { SelectRoles } from './SelectRoles';\n\ninterface ModalFormProps {\n onToggle: () => void;\n}\n\ntype FormLayout = FormLayoutInputProps[][];\n\nconst ModalForm = ({ onToggle }: ModalFormProps) => {\n const [currentStep, setStep] = React.useState<keyof typeof STEPPER>('create');\n const [registrationToken, setRegistrationToken] = React.useState('');\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const roleLayout = useEnterprise<FormLayout, FormLayout, FormLayout>(\n ROLE_LAYOUT,\n async () =>\n (\n await import(\n '../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm'\n )\n ).ROLE_LAYOUT,\n {\n combine(ceRoles, eeRoles) {\n return [...ceRoles, ...eeRoles];\n },\n\n defaultValue: [],\n }\n );\n\n const initialValues = useEnterprise<InitialData>(\n FORM_INITIAL_VALUES,\n async () =>\n (\n await import(\n '../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm'\n )\n ).FORM_INITIAL_VALUES,\n {\n combine(ceValues, eeValues) {\n return {\n ...ceValues,\n ...eeValues,\n };\n },\n\n defaultValue: FORM_INITIAL_VALUES,\n }\n );\n const MagicLink = useEnterprise(\n MagicLinkCE,\n async () =>\n (\n await import(\n '../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE'\n )\n ).MagicLinkEE\n );\n\n const [createUser] = useCreateUserMutation();\n\n const headerTitle = formatMessage({\n id: 'Settings.permissions.users.create',\n defaultMessage: 'Invite new user',\n });\n\n const handleSubmit = async (body: InitialData, { setErrors }: FormHelpers<InitialData>) => {\n const res = await createUser({\n ...body,\n roles: body.roles ?? [],\n });\n\n if ('data' in res) {\n if (res.data.registrationToken) {\n setRegistrationToken(res.data.registrationToken);\n\n goNext();\n } else {\n // This shouldn't happen, but just incase.\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n }\n }\n };\n\n const goNext = () => {\n if (next) {\n setStep(next);\n } else {\n onToggle();\n }\n };\n\n const { buttonSubmitLabel, isDisabled, next } = STEPPER[currentStep];\n\n // block rendering until the EE component is fully loaded\n if (!MagicLink) {\n return null;\n }\n\n return (\n <ModalLayout onClose={onToggle} labelledBy=\"title\">\n <ModalHeader>\n {/**\n * TODO: this is not semantically correct and should be amended.\n */}\n <Breadcrumbs label={headerTitle}>\n <Crumb isCurrent>{headerTitle}</Crumb>\n </Breadcrumbs>\n </ModalHeader>\n <Form\n method={currentStep === 'create' ? 'POST' : 'PUT'}\n initialValues={initialValues ?? {}}\n onSubmit={handleSubmit}\n validationSchema={FORM_SCHEMA}\n >\n {({ isSubmitting }) => {\n return (\n <>\n <ModalBody>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {currentStep !== 'create' && <MagicLink registrationToken={registrationToken} />}\n <Box>\n <Typography variant=\"beta\" as=\"h2\">\n {formatMessage({\n id: 'app.components.Users.ModalCreateBody.block-title.details',\n defaultMessage: 'User details',\n })}\n </Typography>\n <Box paddingTop={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Grid gap={5}>\n {FORM_LAYOUT.map((row) => {\n return row.map(({ size, ...field }) => {\n return (\n <GridItem key={field.name} col={size}>\n <InputRenderer\n {...field}\n disabled={isDisabled}\n label={formatMessage(field.label)}\n placeholder={formatMessage(field.placeholder)}\n />\n </GridItem>\n );\n });\n })}\n </Grid>\n </Flex>\n </Box>\n </Box>\n <Box>\n <Typography variant=\"beta\" as=\"h2\">\n {formatMessage({\n id: 'global.roles',\n defaultMessage: \"User's role\",\n })}\n </Typography>\n <Box paddingTop={4}>\n <Grid gap={5}>\n <GridItem col={6} xs={12}>\n <SelectRoles disabled={isDisabled} />\n </GridItem>\n {roleLayout.map((row) => {\n return row.map(({ size, ...field }) => {\n return (\n <GridItem key={field.name} col={size}>\n <InputRenderer\n {...field}\n disabled={isDisabled}\n label={formatMessage(field.label)}\n placeholder={\n field.placeholder ? formatMessage(field.placeholder) : undefined\n }\n hint={field.hint ? formatMessage(field.hint) : undefined}\n />\n </GridItem>\n );\n });\n })}\n </Grid>\n </Box>\n </Box>\n </Flex>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button variant=\"tertiary\" onClick={onToggle} type=\"button\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n currentStep === 'create' ? (\n <Button type=\"submit\" loading={isSubmitting}>\n {formatMessage(buttonSubmitLabel)}\n </Button>\n ) : (\n <Button type=\"button\" loading={isSubmitting} onClick={onToggle}>\n {formatMessage(buttonSubmitLabel)}\n </Button>\n )\n }\n />\n </>\n );\n }}\n </Form>\n </ModalLayout>\n );\n};\n\ninterface InitialData {\n firstname?: string;\n lastname?: string;\n email?: string;\n roles?: Entity.ID[];\n useSSORegistration?: boolean;\n}\n\nconst FORM_INITIAL_VALUES = {\n firstname: '',\n lastname: '',\n email: '',\n roles: [],\n};\n\nconst ROLE_LAYOUT: FormLayout = [];\n\nconst FORM_LAYOUT = [\n [\n {\n label: {\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n },\n name: 'firstname',\n placeholder: {\n id: 'Auth.form.firstname.placeholder',\n defaultMessage: 'e.g. Kai',\n },\n type: 'string' as const,\n size: 6,\n required: true,\n },\n {\n label: {\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n },\n name: 'lastname',\n placeholder: {\n id: 'Auth.form.lastname.placeholder',\n defaultMessage: 'e.g. Doe',\n },\n type: 'string' as const,\n size: 6,\n },\n ],\n [\n {\n label: {\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n },\n name: 'email',\n placeholder: {\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'e.g. kai.doe@strapi.io',\n },\n type: 'email' as const,\n size: 6,\n required: true,\n },\n ],\n] satisfies FormLayout;\n\nconst FORM_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n lastname: yup.string(),\n email: yup.string().email(translatedErrors.email).required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n roles: yup\n .array()\n .min(1, {\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n});\n\nconst STEPPER = {\n create: {\n buttonSubmitLabel: {\n id: 'app.containers.Users.ModalForm.footer.button-success',\n defaultMessage: 'Invite user',\n },\n isDisabled: false,\n next: 'magic-link',\n },\n 'magic-link': {\n buttonSubmitLabel: { id: 'global.finish', defaultMessage: 'Finish' },\n isDisabled: true,\n next: null,\n },\n} as const;\n\nexport { ModalForm };\nexport type { InitialData };\n","import * as React from 'react';\n\nimport {\n ActionLayout,\n ContentLayout,\n HeaderLayout,\n Main,\n Flex,\n Typography,\n Status,\n IconButton,\n} from '@strapi/design-system';\nimport { useFocusWhenNavigate, useRBAC } from '@strapi/helper-plugin';\nimport { Pencil, Trash } from '@strapi/icons';\nimport * as qs from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\n\nimport { SanitizedAdminUser } from '../../../../../../shared/contracts/shared';\nimport { Filters } from '../../../../components/Filters';\nimport { Page } from '../../../../components/PageHelpers';\nimport { Pagination } from '../../../../components/Pagination';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { Table } from '../../../../components/Table';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useAdminUsers, useDeleteManyUsersMutation } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\n\nimport { CreateActionCE } from './components/CreateActionCE';\nimport { ModalForm } from './components/NewUserForm';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPageCE = () => {\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [isModalOpened, setIsModalOpen] = React.useState(false);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const {\n allowedActions: { canCreate, canDelete, canRead },\n } = useRBAC(permissions.settings?.users);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search } = useLocation();\n useFocusWhenNavigate();\n const { data, isError, isLoading } = useAdminUsers(qs.parse(search, { ignoreQueryPrefix: true }));\n\n const { pagination, users = [] } = data ?? {};\n\n const CreateAction = useEnterprise(\n CreateActionCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE'\n )\n ).CreateActionEE\n );\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const title = formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n });\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const [deleteAll] = useDeleteManyUsersMutation();\n const handleDeleteAll = async (ids: Array<SanitizedAdminUser['id']>) => {\n try {\n const res = await deleteAll({ ids });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n console.error(err);\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'global.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const handleRowClick = (id: SanitizedAdminUser['id']) => () => {\n if (canRead) {\n navigate(id.toString());\n }\n };\n\n const handleDeleteClick = (id: SanitizedAdminUser['id']) => async () =>\n await handleDeleteAll([id]);\n\n // block rendering until the EE component is fully loaded\n if (!CreateAction) {\n return null;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Main aria-busy={isLoading}>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Users',\n }\n )}\n />\n <HeaderLayout\n primaryAction={canCreate && <CreateAction onClick={handleToggle} />}\n title={title}\n subtitle={formatMessage({\n id: 'Settings.permissions.users.listview.header.subtitle',\n defaultMessage: 'All the users who have access to the Strapi admin panel',\n })}\n />\n <ActionLayout\n startActions={\n <>\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n <Filters.Root options={FILTERS}>\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n </>\n }\n />\n <ContentLayout>\n <Table.Root rows={users} headers={headers}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n {canDelete ? <Table.HeaderCheckboxCell /> : null}\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {users.map((user) => (\n <Table.Row\n key={user.id}\n onClick={handleRowClick(user.id)}\n cursor={canRead ? 'pointer' : 'default'}\n >\n {canDelete ? <Table.CheckboxCell id={user.id} /> : null}\n {headers.map(({ cellFormatter, name, ...rest }) => {\n return (\n <Table.Cell key={name}>\n {typeof cellFormatter === 'function' ? (\n cellFormatter(user, { name, ...rest })\n ) : (\n // @ts-expect-error – name === \"roles\" has the data value of `AdminRole[]` but the header has a cellFormatter value so this shouldn't be called.\n <Typography textColor=\"neutral800\">{user[name] || '-'}</Typography>\n )}\n </Table.Cell>\n );\n })}\n {canRead || canDelete ? (\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n {canRead ? (\n <IconButton\n forwardedAs={NavLink}\n // @ts-expect-error – This is an issue in the DS with the as prop not adding the inferred props to the component.\n to={user.id.toString()}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getDisplayName(user, formatMessage) }\n )}\n noBorder\n icon={<Pencil />}\n />\n ) : null}\n {canDelete ? (\n <IconButton\n onClick={handleDeleteClick(user.id)}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: getDisplayName(user, formatMessage) }\n )}\n noBorder\n icon={<Trash />}\n />\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </ContentLayout>\n {isModalOpened && <ModalForm onToggle={handleToggle} />}\n </Main>\n );\n};\n\nconst TABLE_HEADERS: Array<\n Omit<Table.Header<SanitizedAdminUser, any>, 'label'> & { label: MessageDescriptor }\n> = [\n {\n name: 'firstname',\n label: {\n id: 'Settings.permissions.users.firstname',\n defaultMessage: 'Firstname',\n },\n sortable: true,\n },\n {\n name: 'lastname',\n label: {\n id: 'Settings.permissions.users.lastname',\n defaultMessage: 'Lastname',\n },\n sortable: true,\n },\n {\n name: 'email',\n label: { id: 'Settings.permissions.users.email', defaultMessage: 'Email' },\n sortable: true,\n },\n {\n name: 'roles',\n label: {\n id: 'Settings.permissions.users.roles',\n defaultMessage: 'Roles',\n },\n sortable: false,\n cellFormatter({ roles }) {\n return (\n <Typography textColor=\"neutral800\">{roles.map((role) => role.name).join(',\\n')}</Typography>\n );\n },\n },\n {\n name: 'username',\n label: {\n id: 'Settings.permissions.users.username',\n defaultMessage: 'Username',\n },\n sortable: true,\n },\n {\n name: 'isActive',\n label: {\n id: 'Settings.permissions.users.user-status',\n defaultMessage: 'User status',\n },\n sortable: false,\n cellFormatter({ isActive }) {\n return (\n <Flex>\n <Status\n size=\"S\"\n borderWidth={0}\n background=\"transparent\"\n color=\"neutral800\"\n variant={isActive ? 'success' : 'danger'}\n >\n {isActive ? 'Active' : 'Inactive'}\n </Status>\n </Flex>\n );\n },\n },\n];\n\nconst FILTERS = [\n {\n name: 'firstname',\n label: 'Firstname',\n type: 'string',\n },\n {\n name: 'lastname',\n label: 'Lastname',\n type: 'string',\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n },\n {\n name: 'username',\n label: 'Username',\n type: 'string',\n },\n {\n name: 'isActive',\n label: 'Active user',\n type: 'boolean',\n },\n] satisfies Filters.Filter[];\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\n// component which determines whether this page should render the CE or EE page\nconst ListPage = () => {\n const UsersListPage = useEnterprise(\n ListPageCE,\n async () =>\n // eslint-disable-next-line import/no-cycle\n (await import('../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage'))\n .UserListPageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!UsersListPage) {\n return null;\n }\n\n return <UsersListPage />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.users.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage, ListPageCE };\n"],"names":["useIntl","jsx","Button","Envelop","React","useNotification","useAPIErrorHandler","useEnterprise","MagicLinkCE","useCreateUserMutation","isBaseQueryError","jsxs","ModalLayout","ModalHeader","Breadcrumbs","Crumb","Form","Fragment","ModalBody","Flex","Box","Typography","Grid","GridItem","InputRenderer","SelectRoles","ModalFooter","yup","translatedErrors","useTypedSelector","useRBAC","useNavigate","useLocation","useFocusWhenNavigate","useAdminUsers","qs","useDeleteManyUsersMutation","Page","Main","Helmet","HeaderLayout","ActionLayout","SearchInput","Filters","ContentLayout","Table","IconButton","NavLink","getDisplayName","Pencil","Trash","Pagination","Status"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListPage-skKuhRrN.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Flex,\n IconButton,\n Loader,\n Table,\n Thead,\n Tbody,\n Tr,\n Td,\n TFooter,\n Th,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Link, LinkButton } from '@strapi/design-system/v2';\nimport { onRowClick, useRBAC } from '@strapi/helper-plugin';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { ConfirmDialog } from '../../../../../../../admin/src/components/ConfirmDialog';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport { useNotification } from '../../../../../../../admin/src/features/Notifications';\nimport { useTracking } from '../../../../../../../admin/src/features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useContentTypes } from '../../../../../../../admin/src/hooks/useContentTypes';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\n\nimport * as Layout from './components/Layout';\nimport { LimitsModal } from './components/LimitsModal';\nimport { CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME } from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\n\nconst ActionLink = styled(Link)`\n align-items: center;\n height: ${32 / 16}rem;\n display: flex;\n justify-content: center;\n padding: ${({ theme }) => `${theme.spaces[2]}}`};\n width: ${32 / 16}rem;\n\n svg {\n height: ${12 / 16}rem;\n width: ${12 / 16}rem;\n\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n\n &:hover,\n &:focus {\n svg {\n path {\n fill: ${({ theme }) => theme.colors.neutral800};\n }\n }\n }\n`;\n\nexport const ReviewWorkflowsListView = () => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const [workflowToDelete, setWorkflowToDelete] = React.useState<string | null>(null);\n const [showLimitModal, setShowLimitModal] = React.useState<boolean>(false);\n const { collectionTypes, singleTypes, isLoading: isLoadingModels } = useContentTypes();\n const { meta, workflows, isLoading, deleteWorkflow } = useReviewWorkflows();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']\n );\n const {\n allowedActions: { canCreate, canDelete },\n } = useRBAC(permissions);\n\n const limits = getFeature('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] as string;\n\n const getContentTypeDisplayName = (uid: string) => {\n const contentType = [...collectionTypes, ...singleTypes].find(\n (contentType) => contentType.uid === uid\n );\n\n return contentType?.info.displayName;\n };\n\n const handleDeleteWorkflow = (workflowId: string) => {\n setWorkflowToDelete(workflowId);\n };\n\n const toggleConfirmDeleteDialog = () => {\n setWorkflowToDelete(null);\n };\n\n const handleConfirmDeleteDialog = async () => {\n if (!workflowToDelete) return;\n\n try {\n const res = await deleteWorkflow({ id: workflowToDelete });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setWorkflowToDelete(null);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.deleted', defaultMessage: 'Deleted' }),\n });\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error.unexpected',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoading && !isLicenseLoading) {\n if (numberOfWorkflows && meta && meta?.workflowCount > parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal(true);\n }\n }\n }, [isLicenseLoading, isLoading, meta, meta?.workflowCount, numberOfWorkflows]);\n\n return (\n <>\n <Layout.Header\n primaryAction={\n canCreate && (\n <LinkButton\n startIcon={<Plus />}\n size=\"S\"\n // @ts-expect-error - types are not inferred correctly through the as prop.\n to=\"/settings/review-workflows/create\"\n onClick={(event) => {\n /**\n * If the current license has a workflow limit:\n * check if the total count of workflows exceeds that limit. If so,\n * prevent the navigation and show the limits overlay.\n *\n * If the current license does not have a limit (e.g. offline license):\n * allow the user to navigate to the create-view. In case they exceed the\n * current hard-limit of 200 they will see an error thrown by the API.\n */\n\n if (\n numberOfWorkflows &&\n meta &&\n meta?.workflowCount >= parseInt(numberOfWorkflows, 10)\n ) {\n event.preventDefault();\n setShowLimitModal(true);\n } else {\n trackUsage('willCreateWorkflow');\n }\n }}\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </LinkButton>\n )\n }\n subtitle={formatMessage({\n id: 'Settings.review-workflows.list.page.subtitle',\n defaultMessage: 'Manage your content review process',\n })}\n title={formatMessage({\n id: 'Settings.review-workflows.list.page.title',\n defaultMessage: 'Review Workflows',\n })}\n />\n\n <Layout.Root>\n {isLoading || isLoadingModels ? (\n <Flex justifyContent=\"center\">\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.list.isLoading',\n defaultMessage: 'Workflows are loading',\n })}\n </Loader>\n </Flex>\n ) : (\n <Table\n colCount={3}\n footer={\n // TODO: we should be able to use a link here instead of an (inaccessible onClick) handler\n canCreate && (\n <TFooter\n icon={<Plus />}\n onClick={() => {\n /**\n * If the current license has a workflow limit:\n * check if the total count of workflows exceeds that limit\n *\n * If the current license does not have a limit (e.g. offline license):\n * allow the user to navigate to the create-view. In case they exceed the\n * current hard-limit of 200 they will see an error thrown by the API.\n */\n\n if (\n numberOfWorkflows &&\n meta &&\n meta?.workflowCount >= parseInt(numberOfWorkflows, 10)\n ) {\n setShowLimitModal(true);\n } else {\n navigate('/settings/review-workflows/create');\n trackUsage('willCreateWorkflow');\n }\n }}\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.create',\n defaultMessage: 'Create new workflow',\n })}\n </TFooter>\n )\n }\n rowCount={1}\n >\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\">\n {formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.name.title',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">\n {formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.stages.title',\n defaultMessage: 'Stages',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">\n {formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.contentTypes.title',\n defaultMessage: 'Content Types',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'Settings.review-workflows.list.page.list.column.actions.title',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n\n <Tbody>\n {workflows?.map((workflow) => (\n <Tr\n {...onRowClick({\n fn(event) {\n const el = event.target as HTMLElement;\n // Abort row onClick event when the user click on the delete button\n if (el.nodeName === 'BUTTON') {\n return;\n }\n\n navigate(`/settings/review-workflows/${workflow.id}`);\n },\n })}\n key={`workflow-${workflow.id}`}\n >\n <Td width={`${250 / 16}rem`}>\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {workflow.name}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{workflow.stages.length}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">\n {(workflow?.contentTypes ?? []).map(getContentTypeDisplayName).join(', ')}\n </Typography>\n </Td>\n <Td>\n <Flex alignItems=\"center\" justifyContent=\"end\">\n <ActionLink\n // @ts-expect-error – the `as` prop does not correctly infer the props of it's component\n to={`/settings/review-workflows/${workflow.id}`}\n aria-label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.edit.label',\n defaultMessage: 'Edit {name}',\n },\n { name: workflow.name }\n )}\n >\n <Pencil />\n </ActionLink>\n\n {workflows.length > 1 && canDelete && (\n <IconButton\n aria-label={formatMessage(\n {\n id: 'Settings.review-workflows.list.page.list.column.actions.delete.label',\n defaultMessage: 'Delete {name}',\n },\n { name: 'Default workflow' }\n )}\n icon={<Trash />}\n noBorder\n onClick={() => {\n handleDeleteWorkflow(String(workflow.id));\n }}\n />\n )}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n )}\n\n <ConfirmDialog\n isOpen={!!workflowToDelete}\n onClose={toggleConfirmDeleteDialog}\n onConfirm={handleConfirmDeleteDialog}\n >\n {formatMessage({\n id: 'Settings.review-workflows.list.page.delete.confirm.body',\n defaultMessage:\n 'If you remove this worfklow, all stage-related information will be removed for this content-type. Are you sure you want to remove it?',\n })}\n </ConfirmDialog>\n\n <LimitsModal.Root isOpen={showLimitModal} onClose={() => setShowLimitModal(false)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.list.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.list.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </Layout.Root>\n </>\n );\n};\n\nexport const ProtectedReviewWorkflowsPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['review-workflows']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ReviewWorkflowsListView />\n </Page.Protect>\n );\n};\n"],"names":["styled","Link","useIntl","useNavigate","useTracking","React","useContentTypes","useReviewWorkflows","useAPIErrorHandler","useNotification","useLicenseLimits","useTypedSelector","useRBAC","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","contentType","jsxs","Fragment","jsx","Layout.Header","LinkButton","Plus","Layout.Root","Flex","Loader","Table","TFooter","Thead","Tr","Th","Typography","VisuallyHidden","Tbody","createElement","onRowClick","Td","Pencil","IconButton","Trash","ConfirmDialog","LimitsModal","Page"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView--mxDKrnG.js","sources":["../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ContentLayout,\n EmptyStateLayout,\n HeaderLayout,\n LinkButton,\n Main,\n} from '@strapi/design-system';\nimport { useFocusWhenNavigate, useRBAC } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { Entity } from '@strapi/types';\nimport * as qs from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Entity.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n />\n <HeaderLayout\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Main aria-busy={isLoading}>\n <ContentLayout>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"10rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"10rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </ContentLayout>\n </Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["useFocusWhenNavigate","useIntl","useNotification","useTypedSelector","useRBAC","useNavigate","useTracking","useGuidedTour","useAPIErrorHandler","React","qs","useOnce","API_TOKEN_TYPE","apiTokens","useGetAPITokensQuery","useDeleteAPITokenMutation","jsxs","Fragment","jsx","Helmet","HeaderLayout","LinkButton","Plus","Page","Main","ContentLayout","Table","EmptyStateLayout","EmptyDocuments"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAM,gBAAgB;AAAA,EACpB;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAEO,MAAM,WAAW,MAAM;AACPA,eAAAA;AACf,QAAA,EAAE,kBAAkBC,UAAAA;AACpB,QAAA,EAAE,uBAAuBC,MAAAA;AAC/B,QAAM,cAAcC,MAAA;AAAA,IAClB,CAAC,UAAU,MAAM,UAAU,YAAY,WAAW,YAAY;AAAA,EAAA;AAE1D,QAAA;AAAA,IACJ,gBAAgB,EAAE,SAAS,WAAW,WAAW,UAAU;AAAA,EAAA,IACzDC,aAAAA,QAAQ,WAAW;AACvB,QAAM,WAAWC,eAAAA;AACX,QAAA,EAAE,eAAeC,MAAAA;AACvB,QAAM,eAAeC,MAAAA,cAAc,YAAY,CAAC,UAAU,MAAM,YAAY;AAC5E,QAAM,EAAE,yBAAyB,eAAe,IAAIC,MAAmB,mBAAA;AAEvEC,mBAAM,UAAU,MAAM;AACpB,iBAAa,WAAW;AAAA,EAAA,GACvB,CAAC,YAAY,CAAC;AAEjBA,mBAAM,UAAU,MAAM;AACpB,aAAS,EAAE,QAAQC,cAAG,UAAU,EAAE,MAAM,WAAW,GAAG,EAAE,QAAQ,MAAO,CAAA,EAAG,CAAA;AAAA,EAAA,GACzE,CAAC,QAAQ,CAAC;AAEb,QAAM,UAAU,cAAc,IAAI,CAAC,YAAY;AAAA,IAC7C,GAAG;AAAA,IACH,OAAO,cAAc,OAAO,KAAK;AAAA,EACjC,EAAA;AAEFC,UAAAA,QAAQ,MAAM;AACZ,eAAW,uBAAuB;AAAA,MAChC,WAAWC,UAAA;AAAA,IAAA,CACZ;AAAA,EAAA,CACF;AAEK,QAAA,EAAE,MAAMC,cAAY,CAAA,GAAI,WAAW,MAAA,IAAUC,UAAAA;AAEnDL,mBAAM,UAAU,MAAM;AACpB,QAAI,OAAO;AACU,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,KAAK;AAAA,MAAA,CAC9B;AAAA,IACH;AAAA,EACC,GAAA,CAAC,OAAO,gBAAgB,kBAAkB,CAAC;AAE9CA,mBAAM,UAAU,MAAM;AACpB,eAAW,sBAAsB,EAAE,QAAQI,YAAU,QAAQ,WAAWD,0BAAgB;AAAA,EAAA,GACvF,CAACC,aAAW,UAAU,CAAC;AAEpB,QAAA,CAAC,WAAW,IAAIE,UAAAA;AAEhB,QAAA,eAAe,OAAO,OAAkB;AACxC,QAAA;AACI,YAAA,MAAM,MAAM,YAAY,EAAE;AAEhC,UAAI,WAAW,KAAK;AACC,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,eAAe,IAAI,KAAK;AAAA,QAAA,CAClC;AAED;AAAA,MACF;AAEA,iBAAW,gBAAgB;AAAA,IAAA,QACrB;AACa,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACF;AAAA,IACH;AAAA,EAAA;AAGF,SAEIC,2BAAA,KAAAC,qBAAA,EAAA,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,YAAA;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,EAAE,IAAI,sBAAsB,gBAAgB,oBAAoB;AAAA,UAChE,EAAE,MAAM,aAAa;AAAA,QACvB;AAAA,MAAA;AAAA,IACF;AAAA,IACAD,2BAAA;AAAA,MAACE,aAAA;AAAA,MAAA;AAAA,QACC,OAAO,cAAc,EAAE,IAAI,4BAA4B,gBAAgB,cAAc;AAAA,QACrF,UAAU,cAAc;AAAA,UACtB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,eACE,aACEF,2BAAA;AAAA,UAACG,aAAA;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,0CAAYC,MAAK,MAAA,EAAA;AAAA,YACjB,MAAK;AAAA,YACL,SAAS,MACP,WAAW,wBAAwB;AAAA,cACjC,WAAWV,UAAA;AAAA,YAAA,CACZ;AAAA,YAEH,IAAG;AAAA,YAEF,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAGN;AAAA,IACC,CAAC,UACCM,2BAAAA,IAAAK,MAAAA,KAAK,eAAL,CAAA,CAAmB,IAEpBL,2BAAA,IAACM,aAAK,MAAA,EAAA,aAAW,WACf,UAAAR,2BAAAA,KAACS,aAAAA,eACE,EAAA,UAAA;AAAA,MAAAZ,YAAU,SAAS,KAClBK,2BAAA;AAAA,QAACQ,MAAA;AAAA,QAAA;AAAA,UACC,aAAa,EAAE,SAAS,WAAW,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,UACjB,QAAQb;AAAAA,UACR,WAAWD,UAAA;AAAA,QAAA;AAAA,MACb;AAAA,MAED,aAAaC,YAAU,WAAW,IACjCK,2BAAA;AAAA,QAACS,aAAA;AAAA,QAAA;AAAA,UACC,MAAMT,2BAAAA,IAACU,MAAAA,gBAAe,EAAA,OAAM,QAAQ,CAAA;AAAA,UACpC,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UACD,QACEV,2BAAA;AAAA,YAACG,aAAA;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,0CAAYC,MAAK,MAAA,EAAA;AAAA,cACjB,IAAG;AAAA,cAEF,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MAAA,IAGF;AAAA,MACH,CAAC,aAAaT,YAAU,WAAW,IAClCK,2BAAA;AAAA,QAACS,aAAA;AAAA,QAAA;AAAA,UACC,MAAMT,2BAAAA,IAACU,MAAAA,gBAAe,EAAA,OAAM,QAAQ,CAAA;AAAA,UACpC,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,MAAA,IAED;AAAA,IAAA,EAAA,CACN,EACF,CAAA;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEO,MAAM,oBAAoB,MAAM;AACrC,QAAM,cAAczB,MAAA;AAAA,IAClB,CAAC,UAAU,MAAM,UAAU,YAAY,WAAW,YAAY,EAAE;AAAA,EAAA;AAGlE,wCACGoB,MAAAA,KAAK,SAAL,EAAa,aACZ,UAAAL,2BAAAA,IAAC,YAAS,EACZ,CAAA;AAEJ;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView-QEgFV6dm.mjs","sources":["../../admin/src/pages/Settings/pages/TransferTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ContentLayout,\n EmptyStateLayout,\n HeaderLayout,\n LinkButton,\n Main,\n} from '@strapi/design-system';\nimport { useFocusWhenNavigate, useRBAC } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { Entity } from '@strapi/types';\nimport * as qs from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport {\n useDeleteTransferTokenMutation,\n useGetTransferTokensQuery,\n} from '../../../../services/transferTokens';\nimport { TRANSFER_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nconst tableHeaders = [\n {\n name: 'name',\n label: {\n id: 'Settings.tokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.tokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.tokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.tokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * ListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens']\n );\n const {\n isLoading: isLoadingRBAC,\n allowedActions: { canCreate, canDelete, canUpdate, canRead },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n });\n\n const headers = tableHeaders.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const {\n data: transferTokens = [],\n isLoading: isLoadingTokens,\n error,\n } = useGetTransferTokensQuery(undefined, {\n skip: !canRead,\n });\n\n React.useEffect(() => {\n if (transferTokens) {\n trackUsage('didAccessTokenList', {\n number: transferTokens.length,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }\n }, [trackUsage, transferTokens]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const [deleteToken] = useDeleteTransferTokenMutation();\n\n const handleDelete = async (id: Entity.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const isLoading = isLoadingTokens || isLoadingRBAC;\n\n return (\n <>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Transfer Tokens',\n }\n )}\n />\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.transferTokens.title',\n defaultMessage: 'Transfer Tokens',\n })}\n subtitle={formatMessage({\n id: 'Settings.transferTokens.description',\n defaultMessage: '\"List of generated transfer tokens\"', // TODO change this message\n })}\n primaryAction={\n canCreate ? (\n <LinkButton\n data-testid=\"create-transfer-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n })\n }\n to=\"/settings/transfer-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.transferTokens.create',\n defaultMessage: 'Create new Transfer Token',\n })}\n </LinkButton>\n ) : undefined\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Main aria-busy={isLoading}>\n <ContentLayout>\n {transferTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={transferTokens}\n tokenType={TRANSFER_TOKEN_TYPE}\n />\n )}\n {canCreate && transferTokens.length === 0 ? (\n <EmptyStateLayout\n action={\n <LinkButton\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/transfer-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.transferTokens.addNewToken',\n defaultMessage: 'Add new Transfer Token',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"10rem\" />}\n content={formatMessage({\n id: 'Settings.transferTokens.addFirstToken',\n defaultMessage: 'Add your first Transfer Token',\n })}\n />\n ) : null}\n {!canCreate && transferTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"10rem\" />}\n content={formatMessage({\n id: 'Settings.transferTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </ContentLayout>\n </Main>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n\nexport { ListView, ProtectedListView };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView-hm-mjZ8N.mjs","sources":["../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ContentLayout,\n EmptyStateLayout,\n HeaderLayout,\n LinkButton,\n Main,\n} from '@strapi/design-system';\nimport { useFocusWhenNavigate, useRBAC } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { Entity } from '@strapi/types';\nimport * as qs from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Entity.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n />\n <HeaderLayout\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Main aria-busy={isLoading}>\n <ContentLayout>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"10rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"10rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </ContentLayout>\n </Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView-vP-PjR4p.js","sources":["../../admin/src/pages/Settings/pages/TransferTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ContentLayout,\n EmptyStateLayout,\n HeaderLayout,\n LinkButton,\n Main,\n} from '@strapi/design-system';\nimport { useFocusWhenNavigate, useRBAC } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { Entity } from '@strapi/types';\nimport * as qs from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport {\n useDeleteTransferTokenMutation,\n useGetTransferTokensQuery,\n} from '../../../../services/transferTokens';\nimport { TRANSFER_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nconst tableHeaders = [\n {\n name: 'name',\n label: {\n id: 'Settings.tokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.tokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.tokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.tokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * ListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens']\n );\n const {\n isLoading: isLoadingRBAC,\n allowedActions: { canCreate, canDelete, canUpdate, canRead },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n });\n\n const headers = tableHeaders.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const {\n data: transferTokens = [],\n isLoading: isLoadingTokens,\n error,\n } = useGetTransferTokensQuery(undefined, {\n skip: !canRead,\n });\n\n React.useEffect(() => {\n if (transferTokens) {\n trackUsage('didAccessTokenList', {\n number: transferTokens.length,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }\n }, [trackUsage, transferTokens]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const [deleteToken] = useDeleteTransferTokenMutation();\n\n const handleDelete = async (id: Entity.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const isLoading = isLoadingTokens || isLoadingRBAC;\n\n return (\n <>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Transfer Tokens',\n }\n )}\n />\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.transferTokens.title',\n defaultMessage: 'Transfer Tokens',\n })}\n subtitle={formatMessage({\n id: 'Settings.transferTokens.description',\n defaultMessage: '\"List of generated transfer tokens\"', // TODO change this message\n })}\n primaryAction={\n canCreate ? (\n <LinkButton\n data-testid=\"create-transfer-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n })\n }\n to=\"/settings/transfer-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.transferTokens.create',\n defaultMessage: 'Create new Transfer Token',\n })}\n </LinkButton>\n ) : undefined\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Main aria-busy={isLoading}>\n <ContentLayout>\n {transferTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={transferTokens}\n tokenType={TRANSFER_TOKEN_TYPE}\n />\n )}\n {canCreate && transferTokens.length === 0 ? (\n <EmptyStateLayout\n action={\n <LinkButton\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/transfer-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.transferTokens.addNewToken',\n defaultMessage: 'Add new Transfer Token',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"10rem\" />}\n content={formatMessage({\n id: 'Settings.transferTokens.addFirstToken',\n defaultMessage: 'Add your first Transfer Token',\n })}\n />\n ) : null}\n {!canCreate && transferTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"10rem\" />}\n content={formatMessage({\n id: 'Settings.transferTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </ContentLayout>\n </Main>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n\nexport { ListView, ProtectedListView };\n"],"names":["useFocusWhenNavigate","useIntl","useNotification","useTypedSelector","useRBAC","useNavigate","useTracking","useAPIErrorHandler","React","qs","useOnce","TRANSFER_TOKEN_TYPE","transferTokens","useGetTransferTokensQuery","useDeleteTransferTokenMutation","jsxs","Fragment","jsx","Helmet","HeaderLayout","LinkButton","Plus","Page","Main","ContentLayout","Table","EmptyStateLayout","EmptyDocuments"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListViewPage-NiwpwxBR.js","sources":["../../admin/src/content-manager/hooks/usePrev.ts","../../admin/src/content-manager/pages/ListView/components/Filters.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/CellValue.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/Components.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/Media.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/Relations.tsx","../../admin/src/content-manager/pages/ListView/components/TableCells/CellContent.tsx","../../admin/src/content-manager/pages/ListView/components/ViewSettingsMenu.tsx","../../admin/src/content-manager/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nexport const usePrev = <T>(value: T): T | undefined => {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n};\n","import * as React from 'react';\n\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { findMatchingPermissions, useQueryParams, useRBACProvider } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../components/Filters';\nimport { useField } from '../../../../components/Form';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useAdminUsers } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\n\nconst REVIEW_WORKFLOW_FILTER_CE: Filters.Filter[] = [];\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const { allPermissions } = useRBACProvider();\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedAttributeFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = findMatchingPermissions(\n allPermissions,\n [\n {\n action: 'plugin::content-manager.explorer.read',\n subject: model,\n },\n ]\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return [\n 'id',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user, formatMessage),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[];\n }, [\n allPermissions,\n model,\n canReadAdminUsers,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n ]);\n\n const reviewWorkflowFilter = useEnterprise(\n REVIEW_WORKFLOW_FILTER_CE,\n async () =>\n (await import('../../../../../../ee/admin/src/content-manager/pages/ListView/constants'))\n .REVIEW_WORKFLOW_FILTERS,\n {\n combine(ceFilters, eeFilters) {\n return [\n ...ceFilters,\n ...eeFilters\n .filter((eeFilter) => {\n // do not display the filter at all, if the current user does\n // not have permissions to read admin users\n if (eeFilter.name === 'strapi_assignee') {\n return (\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0\n );\n }\n return true;\n })\n .map((eeFilter) => ({\n ...eeFilter,\n 'aria-label': formatMessage(eeFilter.label),\n options:\n // TODO: strapi_assignee should not be in here and rather defined\n // in the ee directory.\n eeFilter.name === 'strapi_assignee'\n ? users.map((user) => ({\n label: getDisplayName(user, formatMessage),\n value: user.id.toString(),\n }))\n : undefined,\n })),\n ];\n },\n defaultValue: [],\n // we have to wait for admin users to be fully loaded, because otherwise\n // combine is called to early and does not contain the latest state of\n // the users array\n enabled: !!options?.reviewWorkflows && !isLoadingAdminUsers,\n }\n /**\n * this is cast because the data returns MessageDescriptor\n * as `metadatas.label` _then_ we turn it to a string.\n */\n ) as Filters.Filter[];\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const displayedFilters = [...displayedAttributeFilters, ...reviewWorkflowFilter].sort((a, b) =>\n formatter.compare(a.label, b.label)\n );\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [page, setPage] = React.useState(1);\n const { formatMessage } = useIntl();\n const { data, isLoading } = useAdminUsers({\n page,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPage(1);\n }\n };\n\n const users = data?.users || [];\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPage((prev) => prev + 1)}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user, formatMessage)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n","import parseISO from 'date-fns/parseISO';\nimport toString from 'lodash/toString';\nimport { useIntl } from 'react-intl';\n\nimport type { Attribute } from '@strapi/types';\n\ninterface CellValueProps {\n type: Attribute.Kind | 'custom';\n value: any;\n}\n\nconst CellValue = ({ type, value }: CellValueProps) => {\n const { formatDate, formatTime, formatNumber } = useIntl();\n let formattedValue = value;\n\n if (type === 'date') {\n formattedValue = formatDate(parseISO(value), { dateStyle: 'full' });\n }\n\n if (type === 'datetime') {\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n }\n\n if (type === 'time') {\n const [hour, minute, second] = value.split(':');\n const date = new Date();\n date.setHours(hour);\n date.setMinutes(minute);\n date.setSeconds(second);\n\n formattedValue = formatTime(date, {\n timeStyle: 'short',\n });\n }\n\n if (['float', 'decimal'].includes(type)) {\n formattedValue = formatNumber(value, {\n // Should be kept in sync with the corresponding value\n // in the design-system/NumberInput: https://github.com/strapi/design-system/blob/main/packages/strapi-design-system/src/NumberInput/NumberInput.js#L53\n maximumFractionDigits: 20,\n });\n }\n\n if (['integer', 'biginteger'].includes(type)) {\n formattedValue = formatNumber(value, { maximumFractionDigits: 0 });\n }\n\n return toString(formattedValue);\n};\n\nexport { CellValue };\nexport type { CellValueProps };\n","import { Badge, Tooltip, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { CellContentProps } from './CellContent';\nimport { CellValue } from './CellValue';\n\nimport type { ComponentsDictionary } from '../../../../hooks/useDocument';\nimport type { Attribute } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * SingleComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SingleComponentProps extends Pick<CellContentProps, 'mainField'> {\n content: Attribute.GetValue<Attribute.Component<`${string}.${string}`, false>>;\n}\n\nconst SingleComponent = ({ content, mainField }: SingleComponentProps) => {\n if (!mainField) {\n return null;\n }\n\n return (\n <Tooltip label={content[mainField.name]}>\n <SingleComponentTypography textColor=\"neutral800\" ellipsis>\n <CellValue type={mainField.type} value={content[mainField.name]} />\n </SingleComponentTypography>\n </Tooltip>\n );\n};\n\nconst SingleComponentTypography = styled(Typography)`\n max-width: 250px;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RepeatableComponentProps extends Pick<CellContentProps, 'mainField'> {\n content: Attribute.GetValue<Attribute.Component<`${string}.${string}`, true>>;\n}\n\nconst RepeatableComponent = ({ content, mainField }: RepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n\n if (!mainField) {\n return null;\n }\n\n return (\n <Menu.Root>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Badge>{content.length}</Badge>{' '}\n {formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: content.length }\n )}\n </MenuTrigger>\n <Menu.Content>\n {content.map((item) => (\n <Menu.Item key={item.id} disabled>\n <RepeatableComponentTypography ellipsis>\n <CellValue type={mainField.type} value={item[mainField.name]} />\n </RepeatableComponentTypography>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nconst RepeatableComponentTypography = styled(Typography)`\n max-width: 500px;\n`;\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: ${6 / 16}rem;\n height: ${4 / 16}rem;\n }\n`;\n\nexport { SingleComponent, RepeatableComponent };\nexport type { SingleComponentProps, RepeatableComponentProps };\n","import * as React from 'react';\n\nimport { Avatar, AvatarGroup, Flex, Tooltip, Typography } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../../utils/urls';\n\nimport type { Entity } from '@strapi/types';\n\ninterface MediaFile {\n id?: Entity.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return <Avatar src={mediaURL} alt={alternativeText || name} preview />;\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n as=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled(Typography)`\n font-size: 0.6rem;\n line-height: 0.6rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <AvatarGroup>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </AvatarGroup>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n","import * as React from 'react';\n\nimport { Typography, Badge, Flex, Loader, useNotifyAT } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n return (\n <TypographyMaxWidth textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField)}\n </TypographyMaxWidth>\n );\n};\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 500px;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\n/**\n * TODO: fix this component – tracking issue https://strapi-inc.atlassian.net/browse/CONTENT-2184\n */\nconst RelationMultiple = ({ mainField, content, rowId, name }: RelationMultipleProps) => {\n const { model } = useDoc();\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n\n const [targetField] = name.split('.');\n\n const { data, isLoading } = useGetRelationsQuery(\n {\n model,\n id: rowId,\n targetField,\n },\n {\n skip: !isOpen,\n refetchOnMountOrArgChange: true,\n }\n );\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('DynamicTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Flex gap={1} wrap=\"nowrap\">\n <Badge>{content.count}</Badge>\n {formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: content.count }\n )}\n </Flex>\n </MenuTrigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.documentId} disabled>\n <TypographyMaxWidth ellipsis>\n {getRelationLabel(entry, mainField)}\n </TypographyMaxWidth>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: ${6 / 16}rem;\n height: ${4 / 16}rem;\n }\n`;\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n","import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\nimport styled from 'styled-components';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Attribute, Entity } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Attribute.GetValue<Attribute.Any>;\n rowId: Entity.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return <Typography textColor=\"neutral800\">-</Typography>;\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip description={content}>\n <TypographyMaxWidth ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </TypographyMaxWidth>\n </Tooltip>\n );\n\n default:\n return (\n <TypographyMaxWidth ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </TypographyMaxWidth>\n );\n }\n};\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 300px;\n`;\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n return content?.count > 0;\n }\n\n /* \n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n","import * as React from 'react';\n\nimport {\n Flex,\n IconButton,\n Popover,\n BaseCheckbox,\n TextButton,\n Typography,\n useCollator,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useQueryParams, useRBAC } from '@strapi/helper-plugin';\nimport { Cog, Layer } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const cogButtonRef = React.useRef<HTMLButtonElement>(null!);\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canViewConfiguration },\n } = useRBAC({\n viewConfiguration: permissions,\n });\n\n const handleToggle = () => {\n setIsVisible((prev) => !prev);\n };\n\n return (\n <>\n <IconButton\n icon={<Cog />}\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n ref={cogButtonRef}\n onClick={handleToggle}\n />\n {isVisible && (\n <Popover\n placement=\"bottom-end\"\n source={cogButtonRef}\n onDismiss={handleToggle}\n spacing={4}\n padding={3}\n >\n <Flex alignItems=\"stretch\" direction=\"column\" gap={3}>\n {canViewConfiguration ? (\n <LinkButton\n size=\"S\"\n startIcon={<Layer />}\n variant=\"secondary\"\n as={NavLink}\n // @ts-expect-error – inference from the as prop does not work in the DS.\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover>\n )}\n </>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = [], resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex as=\"fieldset\" direction=\"column\" alignItems=\"stretch\" gap={3}>\n <Flex justifyContent=\"space-between\">\n <Typography as=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <ChackboxWrapper\n wrap=\"wrap\"\n gap={2}\n as=\"label\"\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n key={header.name}\n >\n <BaseCheckbox\n onChange={() => handleChange(header.name)}\n value={isActive}\n name={header.name}\n />\n <Typography fontSize={1}>{header.label}</Typography>\n </ChackboxWrapper>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nconst ChackboxWrapper = styled(Flex)`\n :hover {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n`;\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n","import * as React from 'react';\n\nimport {\n Main,\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n Flex,\n Typography,\n lightTheme,\n ButtonProps,\n} from '@strapi/design-system';\nimport { useFocusWhenNavigate, useQueryParams } from '@strapi/helper-plugin';\nimport { Plus } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { stringify } from 'qs';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { InjectionZone } from '../../../components/InjectionZone';\nimport { Page } from '../../../components/PageHelpers';\nimport { Pagination } from '../../../components/Pagination';\nimport { SearchInput } from '../../../components/SearchInput';\nimport { Table } from '../../../components/Table';\nimport { HOOKS } from '../../../constants';\nimport { BackButton } from '../../../features/BackButton';\nimport { useNotification } from '../../../features/Notifications';\nimport { useStrapiApp } from '../../../features/StrapiApp';\nimport { useTracking } from '../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../hooks/useEnterprise';\nimport { getDisplayName } from '../../../utils/users';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useSyncRbac } from '../../hooks/useSyncRbac';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Documents } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\nconst REVIEW_WORKFLOW_COLUMNS_CE = null;\nconst REVIEW_WORKFLOW_COLUMNS_CELL_CE = {\n ReviewWorkflowsStageEE: () => null,\n ReviewWorkflowsAssigneeEE: () => null,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n useFocusWhenNavigate();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const [displayedHeaders, setDisplayedHeaders] = React.useState<ListFieldLayout[]>([]);\n\n const listLayout = usePrev(list.layout);\n React.useEffect(() => {\n /**\n * ONLY update the displayedHeaders if the document\n * layout has actually changed in value.\n */\n if (!isEqual(listLayout, list.layout)) {\n setDisplayedHeaders(list.layout);\n }\n }, [list.layout, listLayout]);\n\n const handleSetHeaders = (headers: string[]) => {\n setDisplayedHeaders(\n convertListLayoutToFieldLayouts(headers, schema!.attributes, list.metadatas)\n );\n };\n\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const { data, error, isLoading } = useGetAllDocumentsQuery({\n model,\n params,\n });\n\n /**\n * If the API returns an error, display a notification\n */\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\n }));\n\n /* -------------------------------------------------------------------------------------------------\n * Create all our table headers and run the hook for plugins to inject.\n * -----------------------------------------------------------------------------------------------*/\n const reviewWorkflowColumns = useEnterprise(\n REVIEW_WORKFLOW_COLUMNS_CE,\n async () =>\n (await import('../../../../../ee/admin/src/content-manager/pages/ListView/constants'))\n .REVIEW_WORKFLOW_COLUMNS_EE,\n {\n enabled: !!schema?.options?.reviewWorkflows,\n }\n );\n const ReviewWorkflowsColumns = useEnterprise(\n REVIEW_WORKFLOW_COLUMNS_CELL_CE,\n async () => {\n const { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE } = await import(\n '../../../../../ee/admin/src/content-manager/pages/ListView/components/ReviewWorkflowsColumn'\n );\n return { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE };\n },\n {\n enabled: !!schema?.options?.reviewWorkflows,\n }\n );\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n return {\n ...header,\n label: typeof header.label === 'string' ? header.label : formatMessage(header.label),\n name: `${header.name}${header.mainField ? `.${header.mainField}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: false,\n } satisfies ListFieldLayout);\n }\n\n if (reviewWorkflowColumns) {\n formattedHeaders.push(\n ...reviewWorkflowColumns.map((column) => ({\n ...column,\n label: formatMessage(column.label),\n }))\n );\n }\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n list,\n reviewWorkflowColumns,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName ?? 'Untitled';\n\n const handleRowClick = (id: Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n return (\n <Main>\n <Helmet title={`${contentTypeTitle} | Strapi`} />\n <HeaderLayout\n primaryAction={canCreate ? <CreateButton /> : null}\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n <ActionLayout\n endActions={\n <>\n <InjectionZone area=\"contentManager.listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={() => setDisplayedHeaders(list.layout)}\n headers={displayedHeaders.map((header) => header.name)}\n />\n </>\n }\n startActions={\n <>\n {list.settings.searchable && (\n <SearchInput\n disabled={results.length === 0}\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n {list.settings.filterable && schema ? (\n <Filters disabled={results.length === 0} schema={schema} />\n ) : null}\n </>\n }\n />\n <ContentLayout>\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={results} headers={tableHeaders} isLoading={isLoading}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (schema?.options?.reviewWorkflows) {\n if (header.name === 'strapi_stage') {\n return (\n <Table.Cell key={header.name}>\n {row.strapi_stage ? (\n <ReviewWorkflowsColumns.ReviewWorkflowsStageEE\n color={row.strapi_stage.color ?? lightTheme.colors.primary600}\n name={row.strapi_stage.name}\n />\n ) : (\n <Typography textColor=\"neutral800\">-</Typography>\n )}\n </Table.Cell>\n );\n }\n if (header.name === 'strapi_assignee') {\n return (\n <Table.Cell key={header.name}>\n {row.strapi_assignee ? (\n <ReviewWorkflowsColumns.ReviewWorkflowsAssigneeEE\n user={row.strapi_assignee}\n />\n ) : (\n <Typography textColor=\"neutral800\">-</Typography>\n )}\n </Table.Cell>\n );\n }\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]], formatMessage)\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {/* @ts-expect-error – TODO: fix this TS error */}\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n />\n </Table.Cell>\n );\n })}\n {/* we stop propogation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </ContentLayout>\n </Main>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n forwardedAs={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n // @ts-expect-error – DS inference does not work with as or forwardedAs\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\n const { model } = useDoc();\n const [{ query }] = useQueryParams();\n const { permissions = [], isLoading, isError } = useSyncRbac(model, query, 'editView');\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <ListViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["useRef","useEffect","CREATOR_FIELDS","useIntl","useTracking","useRBACProvider","useQueryParams","useContentTypeSchema","React","findMatchingPermissions","useAdminUsers","useGetContentTypeConfigurationQuery","useCollator","getMainField","getDisplayName","useEnterprise","jsxs","Filters","jsx","useField","Combobox","ComboboxOption","parseISO","toString","Tooltip","styled","Typography","Menu","MenuTrigger","Badge","prefixFileUrlWithBackendUrl","Avatar","Flex","AvatarGroup","index","TypographyMaxWidth","getRelationLabel","useDoc","useNotifyAT","useGetRelationsQuery","getTranslation","isOpen","Loader","Fragment","isEmpty","useTypedSelector","useRBAC","IconButton","Cog","Popover","LinkButton","Layer","NavLink","stringify","useDocumentLayout","checkIfAttributeIsDisplayable","TextButton","BaseCheckbox","HOOKS","useNavigate","useNotification","useFocusWhenNavigate","useAPIErrorHandler","isEqual","convertListLayoutToFieldLayouts","buildValidParams","useGetAllDocumentsQuery","useDocumentRBAC","canCreate","useStrapiApp","runHookWaterfall","Page","Main","Helmet","HeaderLayout","BackButton","ActionLayout","InjectionZone","SearchInput","ContentLayout","Table","DocumentStatus","lightTheme","TableActions","Pagination","Button","ReactRouterLink","Plus","useSyncRbac","permissions","DocumentRBAC"],"mappings":"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"}