@strapi/admin 5.0.0-beta.5 → 5.0.0-beta.7

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 (342) hide show
  1. package/dist/admin/{AdminSeatInfo-jPH1stsB.mjs → AdminSeatInfo-f4TfgHFE.mjs} +8 -17
  2. package/dist/admin/AdminSeatInfo-f4TfgHFE.mjs.map +1 -0
  3. package/dist/admin/{AdminSeatInfo-H5eNy3Gq.js → AdminSeatInfo-jSvlksaP.js} +7 -16
  4. package/dist/admin/AdminSeatInfo-jSvlksaP.js.map +1 -0
  5. package/dist/admin/{ApplicationInfoPage-leY1AEgo.js → ApplicationInfoPage-75RPd0Ro.js} +35 -49
  6. package/dist/admin/ApplicationInfoPage-75RPd0Ro.js.map +1 -0
  7. package/dist/admin/{ApplicationInfoPage-QiVVy6LS.mjs → ApplicationInfoPage-aB-vx1uX.mjs} +37 -50
  8. package/dist/admin/ApplicationInfoPage-aB-vx1uX.mjs.map +1 -0
  9. package/dist/admin/{AuthResponse-B3Y_lz50.mjs → AuthResponse-HbQI8hB8.mjs} +2 -2
  10. package/dist/admin/{AuthResponse-B3Y_lz50.mjs.map → AuthResponse-HbQI8hB8.mjs.map} +1 -1
  11. package/dist/admin/{AuthResponse-FrsRAqFn.js → AuthResponse-YXlkDXrI.js} +2 -2
  12. package/dist/admin/{AuthResponse-FrsRAqFn.js.map → AuthResponse-YXlkDXrI.js.map} +1 -1
  13. package/dist/admin/{AuthenticatedLayout-CHSwnqUb.mjs → AuthenticatedLayout-LYVDZ-jl.mjs} +274 -219
  14. package/dist/admin/AuthenticatedLayout-LYVDZ-jl.mjs.map +1 -0
  15. package/dist/admin/{AuthenticatedLayout-vS7Bwbws.js → AuthenticatedLayout-xkecaUXJ.js} +278 -224
  16. package/dist/admin/AuthenticatedLayout-xkecaUXJ.js.map +1 -0
  17. package/dist/admin/{ContentBox-xqJCP2BC.js → ContentBox-3MRTNw0X.js} +7 -10
  18. package/dist/admin/ContentBox-3MRTNw0X.js.map +1 -0
  19. package/dist/admin/{ContentBox-PbS25I_4.mjs → ContentBox-9LBDzws0.mjs} +5 -4
  20. package/dist/admin/ContentBox-9LBDzws0.mjs.map +1 -0
  21. package/dist/admin/{CreateActionEE-2DKYzbq_.js → CreateActionEE-9Z-woKCk.js} +4 -12
  22. package/dist/admin/CreateActionEE-9Z-woKCk.js.map +1 -0
  23. package/dist/admin/{CreateActionEE-TcGdWjIN.mjs → CreateActionEE-QiVnA7Rx.mjs} +6 -14
  24. package/dist/admin/CreateActionEE-QiVnA7Rx.mjs.map +1 -0
  25. package/dist/admin/{CreatePage-BrnwHVcz.mjs → CreatePage-1iAK5V1h.mjs} +30 -27
  26. package/dist/admin/CreatePage-1iAK5V1h.mjs.map +1 -0
  27. package/dist/admin/{CreatePage-FylqLa6E.js → CreatePage-ZrJXDmLJ.js} +3 -3
  28. package/dist/admin/{CreatePage-FylqLa6E.js.map → CreatePage-ZrJXDmLJ.js.map} +1 -1
  29. package/dist/admin/{CreatePage-rnuGS1p6.mjs → CreatePage-jsVARlnB.mjs} +3 -3
  30. package/dist/admin/{CreatePage-rnuGS1p6.mjs.map → CreatePage-jsVARlnB.mjs.map} +1 -1
  31. package/dist/admin/{CreatePage-aBOoUjUW.js → CreatePage-uHcWJ0EG.js} +30 -30
  32. package/dist/admin/CreatePage-uHcWJ0EG.js.map +1 -0
  33. package/dist/admin/{CreateView-s_woT94q.js → CreateView-1WqjD6uO.js} +3 -3
  34. package/dist/admin/{CreateView-s_woT94q.js.map → CreateView-1WqjD6uO.js.map} +1 -1
  35. package/dist/admin/{CreateView-g1_N_BFO.mjs → CreateView-Bi2p6uqA.mjs} +3 -3
  36. package/dist/admin/{CreateView-g1_N_BFO.mjs.map → CreateView-Bi2p6uqA.mjs.map} +1 -1
  37. package/dist/admin/{CreateView-L-2WWDGY.js → CreateView-HhvACL4t.js} +3 -3
  38. package/dist/admin/{CreateView-L-2WWDGY.js.map → CreateView-HhvACL4t.js.map} +1 -1
  39. package/dist/admin/{CreateView-v0E-2MUk.mjs → CreateView-tSUpjqXs.mjs} +3 -3
  40. package/dist/admin/{CreateView-v0E-2MUk.mjs.map → CreateView-tSUpjqXs.mjs.map} +1 -1
  41. package/dist/admin/{EditPage-QD0hqEQx.js → EditPage-2l5T1lDC.js} +217 -272
  42. package/dist/admin/EditPage-2l5T1lDC.js.map +1 -0
  43. package/dist/admin/{EditPage-x0JVIh4C.mjs → EditPage-JmGISZmG.mjs} +218 -270
  44. package/dist/admin/EditPage-JmGISZmG.mjs.map +1 -0
  45. package/dist/admin/{EditPage-FLtTVd-J.js → EditPage-LMYuiLOp.js} +45 -29
  46. package/dist/admin/EditPage-LMYuiLOp.js.map +1 -0
  47. package/dist/admin/{EditPage-l77sfwOj.js → EditPage-MGQBBDmf.js} +12 -12
  48. package/dist/admin/EditPage-MGQBBDmf.js.map +1 -0
  49. package/dist/admin/{EditPage-RH6-47fP.mjs → EditPage-xQSTfVfO.mjs} +46 -30
  50. package/dist/admin/EditPage-xQSTfVfO.mjs.map +1 -0
  51. package/dist/admin/{EditPage-pZmycDG6.mjs → EditPage-yFuP3hZG.mjs} +13 -13
  52. package/dist/admin/EditPage-yFuP3hZG.mjs.map +1 -0
  53. package/dist/admin/{EditView-dEKhCE7v.mjs → EditView-06IK7yeo.mjs} +9 -9
  54. package/dist/admin/EditView-06IK7yeo.mjs.map +1 -0
  55. package/dist/admin/{EditView-0jWi165t.js → EditView-9cnQdotQ.js} +8 -8
  56. package/dist/admin/EditView-9cnQdotQ.js.map +1 -0
  57. package/dist/admin/{EditViewPage-mLGPwfRP.js → EditViewPage-ZTHin7cu.js} +20 -21
  58. package/dist/admin/EditViewPage-ZTHin7cu.js.map +1 -0
  59. package/dist/admin/{EditViewPage-urKxemM0.mjs → EditViewPage-x06h850j.mjs} +17 -17
  60. package/dist/admin/EditViewPage-x06h850j.mjs.map +1 -0
  61. package/dist/admin/{EventsTable-y0d489dF.js → EventsTable-i6DpZCjP.js} +2 -2
  62. package/dist/admin/{EventsTable-y0d489dF.js.map → EventsTable-i6DpZCjP.js.map} +1 -1
  63. package/dist/admin/{EventsTable-BCAvurrX.mjs → EventsTable-uKf7y-DM.mjs} +2 -2
  64. package/dist/admin/{EventsTable-BCAvurrX.mjs.map → EventsTable-uKf7y-DM.mjs.map} +1 -1
  65. package/dist/admin/{HomePage-jcsulO2V.mjs → HomePage-Dk_BC7we.mjs} +3 -3
  66. package/dist/admin/{HomePage-jcsulO2V.mjs.map → HomePage-Dk_BC7we.mjs.map} +1 -1
  67. package/dist/admin/{HomePage-p-eVAC_O.js → HomePage-VKuqPKIc.js} +58 -48
  68. package/dist/admin/HomePage-VKuqPKIc.js.map +1 -0
  69. package/dist/admin/{HomePage-1CH8bE47.js → HomePage-tgoADIWe.js} +3 -3
  70. package/dist/admin/{HomePage-1CH8bE47.js.map → HomePage-tgoADIWe.js.map} +1 -1
  71. package/dist/admin/{HomePage-hsBKC9UT.mjs → HomePage-ytofle46.mjs} +42 -29
  72. package/dist/admin/HomePage-ytofle46.mjs.map +1 -0
  73. package/dist/admin/{InstalledPluginsPage-s_PGIc3_.mjs → InstalledPluginsPage--iVM14K3.mjs} +9 -8
  74. package/dist/admin/InstalledPluginsPage--iVM14K3.mjs.map +1 -0
  75. package/dist/admin/{InstalledPluginsPage-ZIPyDrzh.js → InstalledPluginsPage-5fDQJ3wY.js} +8 -7
  76. package/dist/admin/InstalledPluginsPage-5fDQJ3wY.js.map +1 -0
  77. package/dist/admin/{Layout-TtAytojj.js → Layout-BYaZsvrJ.js} +15 -17
  78. package/dist/admin/Layout-BYaZsvrJ.js.map +1 -0
  79. package/dist/admin/{Layout-E5qOsA9X.mjs → Layout-woodqxaL.mjs} +12 -13
  80. package/dist/admin/Layout-woodqxaL.mjs.map +1 -0
  81. package/dist/admin/{ListPage-FJ7Z1gS2.js → ListPage-0zYjdNsU.js} +13 -14
  82. package/dist/admin/ListPage-0zYjdNsU.js.map +1 -0
  83. package/dist/admin/{ListPage-_p5xKu6Q.mjs → ListPage-4VNlnYoD.mjs} +3 -3
  84. package/dist/admin/{ListPage-_p5xKu6Q.mjs.map → ListPage-4VNlnYoD.mjs.map} +1 -1
  85. package/dist/admin/{ListPage-hhPlIMGc.js → ListPage-5OElNgYk.js} +15 -20
  86. package/dist/admin/ListPage-5OElNgYk.js.map +1 -0
  87. package/dist/admin/{ListPage-VymLq96p.mjs → ListPage-7wUYXUgs.mjs} +18 -19
  88. package/dist/admin/ListPage-7wUYXUgs.mjs.map +1 -0
  89. package/dist/admin/{ListPage-54QP9CgX.mjs → ListPage-HCUzAC2B.mjs} +19 -32
  90. package/dist/admin/ListPage-HCUzAC2B.mjs.map +1 -0
  91. package/dist/admin/{ListPage-AzfR4Vrk.js → ListPage-MxOKlYmC.js} +17 -18
  92. package/dist/admin/ListPage-MxOKlYmC.js.map +1 -0
  93. package/dist/admin/{ListPage-M4WMxB5d.mjs → ListPage-NURPzLD-.mjs} +15 -20
  94. package/dist/admin/ListPage-NURPzLD-.mjs.map +1 -0
  95. package/dist/admin/{ListPage-av7186GD.js → ListPage-V26wHeo6.js} +18 -31
  96. package/dist/admin/ListPage-V26wHeo6.js.map +1 -0
  97. package/dist/admin/{ListPage-ojfvM5qr.js → ListPage-XZshrlES.js} +3 -3
  98. package/dist/admin/{ListPage-ojfvM5qr.js.map → ListPage-XZshrlES.js.map} +1 -1
  99. package/dist/admin/{ListPage-DVSiz4k2.mjs → ListPage-wtqw0RXL.mjs} +14 -15
  100. package/dist/admin/ListPage-wtqw0RXL.mjs.map +1 -0
  101. package/dist/admin/{ListView-WmnatWVx.js → ListView-SmHj4MFz.js} +15 -13
  102. package/dist/admin/ListView-SmHj4MFz.js.map +1 -0
  103. package/dist/admin/{ListView-QWjCBmaw.mjs → ListView-VRdl68JN.mjs} +14 -14
  104. package/dist/admin/ListView-VRdl68JN.mjs.map +1 -0
  105. package/dist/admin/{ListView-lSCZzdzM.mjs → ListView-hi5fg7r8.mjs} +15 -13
  106. package/dist/admin/ListView-hi5fg7r8.mjs.map +1 -0
  107. package/dist/admin/{ListView-MHzoKSAg.js → ListView-siyyh4f7.js} +14 -14
  108. package/dist/admin/ListView-siyyh4f7.js.map +1 -0
  109. package/dist/admin/{Login--ZDAgCsE.mjs → Login-9hdTvAlD.mjs} +5 -5
  110. package/dist/admin/Login-9hdTvAlD.mjs.map +1 -0
  111. package/dist/admin/{Login-Qfx7Y8LA.js → Login-bGhxScoT.js} +6 -10
  112. package/dist/admin/Login-bGhxScoT.js.map +1 -0
  113. package/dist/admin/{MagicLinkEE-QVRUN_dM.js → MagicLinkEE-5c7HTc8n.js} +3 -3
  114. package/dist/admin/{MagicLinkEE-QVRUN_dM.js.map → MagicLinkEE-5c7HTc8n.js.map} +1 -1
  115. package/dist/admin/{MagicLinkEE-HT2w-ynq.mjs → MagicLinkEE-cAwS-v3S.mjs} +3 -3
  116. package/dist/admin/{MagicLinkEE-HT2w-ynq.mjs.map → MagicLinkEE-cAwS-v3S.mjs.map} +1 -1
  117. package/dist/admin/{MarketplacePage-e41eJgNp.mjs → MarketplacePage-hCtNAEWd.mjs} +66 -86
  118. package/dist/admin/MarketplacePage-hCtNAEWd.mjs.map +1 -0
  119. package/dist/admin/{MarketplacePage-bs_XrVBk.js → MarketplacePage-t6FAhfMK.js} +72 -93
  120. package/dist/admin/MarketplacePage-t6FAhfMK.js.map +1 -0
  121. package/dist/admin/{Ornaments-RhzFP9rf.js → Ornaments-UTssGzOw.js} +8 -8
  122. package/dist/admin/{Ornaments-RhzFP9rf.js.map → Ornaments-UTssGzOw.js.map} +1 -1
  123. package/dist/admin/{Ornaments-izqdN6fh.mjs → Ornaments-h_LCCr5P.mjs} +8 -8
  124. package/dist/admin/{Ornaments-izqdN6fh.mjs.map → Ornaments-h_LCCr5P.mjs.map} +1 -1
  125. package/dist/admin/{Permissions-eyokRb6a.mjs → Permissions-Ng22nlYS.mjs} +51 -51
  126. package/dist/admin/Permissions-Ng22nlYS.mjs.map +1 -0
  127. package/dist/admin/{Permissions-IbcPzM2X.js → Permissions-aRi-vOk-.js} +68 -69
  128. package/dist/admin/Permissions-aRi-vOk-.js.map +1 -0
  129. package/dist/admin/{PrivateRoute-KAM10GGM.js → PrivateRoute--JuZZan_.js} +2 -2
  130. package/dist/admin/{PrivateRoute-KAM10GGM.js.map → PrivateRoute--JuZZan_.js.map} +1 -1
  131. package/dist/admin/{PrivateRoute-wDu6Vo0N.mjs → PrivateRoute-hfATZKl-.mjs} +2 -2
  132. package/dist/admin/{PrivateRoute-wDu6Vo0N.mjs.map → PrivateRoute-hfATZKl-.mjs.map} +1 -1
  133. package/dist/admin/{ProfilePage-1ptv647K.js → ProfilePage-8ieqgIrW.js} +11 -11
  134. package/dist/admin/ProfilePage-8ieqgIrW.js.map +1 -0
  135. package/dist/admin/{ProfilePage-jsFPZpKL.mjs → ProfilePage-imi1Exl5.mjs} +12 -12
  136. package/dist/admin/ProfilePage-imi1Exl5.mjs.map +1 -0
  137. package/dist/admin/{PurchaseAuditLogs-8_4PcW7P.mjs → PurchaseAuditLogs-RGCYZl25.mjs} +8 -7
  138. package/dist/admin/PurchaseAuditLogs-RGCYZl25.mjs.map +1 -0
  139. package/dist/admin/{PurchaseAuditLogs-tS_tVSGI.js → PurchaseAuditLogs-xUopaGaS.js} +7 -6
  140. package/dist/admin/PurchaseAuditLogs-xUopaGaS.js.map +1 -0
  141. package/dist/admin/{PurchaseSingleSignOn-9SV6-fYs.js → PurchaseSingleSignOn-XOgkJmcn.js} +7 -6
  142. package/dist/admin/PurchaseSingleSignOn-XOgkJmcn.js.map +1 -0
  143. package/dist/admin/{PurchaseSingleSignOn--gblfVu6.mjs → PurchaseSingleSignOn-uMysWmJV.mjs} +8 -7
  144. package/dist/admin/PurchaseSingleSignOn-uMysWmJV.mjs.map +1 -0
  145. package/dist/admin/{SSOProviders-JTam8pNP.js → SSOProviders-AirHFyBl.js} +6 -10
  146. package/dist/admin/SSOProviders-AirHFyBl.js.map +1 -0
  147. package/dist/admin/{SSOProviders-f1OPn1AH.mjs → SSOProviders-t8D-v8As.mjs} +4 -4
  148. package/dist/admin/SSOProviders-t8D-v8As.mjs.map +1 -0
  149. package/dist/admin/{SelectRoles-9TYXaG64.mjs → SelectRoles-kh6E_r88.mjs} +44 -39
  150. package/dist/admin/SelectRoles-kh6E_r88.mjs.map +1 -0
  151. package/dist/admin/{SelectRoles-OEKLwb7S.js → SelectRoles-uO7YohIC.js} +44 -43
  152. package/dist/admin/SelectRoles-uO7YohIC.js.map +1 -0
  153. package/dist/admin/SingleSignOnPage-T90Opl7K.mjs +231 -0
  154. package/dist/admin/SingleSignOnPage-T90Opl7K.mjs.map +1 -0
  155. package/dist/admin/SingleSignOnPage-bnlsJPDh.js +256 -0
  156. package/dist/admin/SingleSignOnPage-bnlsJPDh.js.map +1 -0
  157. package/dist/admin/{Table-PQ0O80QL.mjs → Table-XkC1iUuN.mjs} +8 -9
  158. package/dist/admin/Table-XkC1iUuN.mjs.map +1 -0
  159. package/dist/admin/{Table--gMZz8mZ.js → Table-qGOQznHA.js} +8 -12
  160. package/dist/admin/Table-qGOQznHA.js.map +1 -0
  161. package/dist/admin/{TokenTypeSelect-QB3M2AO_.js → TokenTypeSelect-733TgUaC.js} +86 -68
  162. package/dist/admin/TokenTypeSelect-733TgUaC.js.map +1 -0
  163. package/dist/admin/{TokenTypeSelect-zx8B_1pv.mjs → TokenTypeSelect-kjhQiPbj.mjs} +88 -70
  164. package/dist/admin/TokenTypeSelect-kjhQiPbj.mjs.map +1 -0
  165. package/dist/admin/{UseCasePage-khHikw1F.mjs → UseCasePage-cNK2fN9i.mjs} +17 -34
  166. package/dist/admin/UseCasePage-cNK2fN9i.mjs.map +1 -0
  167. package/dist/admin/{UseCasePage-R3vzwRYQ.js → UseCasePage-uk5jmSsj.js} +16 -36
  168. package/dist/admin/UseCasePage-uk5jmSsj.js.map +1 -0
  169. package/dist/admin/admin-dE-jnuNr.mjs +339 -0
  170. package/dist/admin/admin-dE-jnuNr.mjs.map +1 -0
  171. package/dist/admin/{admin-vlKSOeHB.js → admin-sk7xXllW.js} +146 -61
  172. package/dist/admin/admin-sk7xXllW.js.map +1 -0
  173. package/dist/admin/{apiTokens-dBRuo1wd.mjs → apiTokens-W-bmo-dU.mjs} +2 -2
  174. package/dist/admin/{apiTokens-dBRuo1wd.mjs.map → apiTokens-W-bmo-dU.mjs.map} +1 -1
  175. package/dist/admin/{apiTokens-lXn03No3.js → apiTokens-amUH0Wax.js} +2 -2
  176. package/dist/admin/{apiTokens-lXn03No3.js.map → apiTokens-amUH0Wax.js.map} +1 -1
  177. package/dist/admin/{constants-O2S8dPXm.mjs → constants-K5IOuR0b.mjs} +8 -9
  178. package/dist/admin/constants-K5IOuR0b.mjs.map +1 -0
  179. package/dist/admin/{constants-EH1lNehX.js → constants-ZW8_ZgiN.js} +8 -13
  180. package/dist/admin/constants-ZW8_ZgiN.js.map +1 -0
  181. package/dist/admin/ee.js +1 -1
  182. package/dist/admin/ee.mjs +1 -1
  183. package/dist/admin/{en-qvX6GTOD.mjs → en-D7rooMTs.mjs} +2 -1
  184. package/dist/admin/{en-qvX6GTOD.mjs.map → en-D7rooMTs.mjs.map} +1 -1
  185. package/dist/admin/{en-2FB7x9Rq.js → en-zVbLVH-h.js} +2 -1
  186. package/dist/admin/{en-2FB7x9Rq.js.map → en-zVbLVH-h.js.map} +1 -1
  187. package/dist/admin/{index-3MYZ88xc.mjs → index--VHJr8__.mjs} +609 -427
  188. package/dist/admin/index--VHJr8__.mjs.map +1 -0
  189. package/dist/admin/{index-Ze-KuF2r.js → index-8r8zglVb.js} +620 -438
  190. package/dist/admin/index-8r8zglVb.js.map +1 -0
  191. package/dist/admin/index.js +6 -3
  192. package/dist/admin/index.js.map +1 -1
  193. package/dist/admin/index.mjs +3 -3
  194. package/dist/admin/{rbac-sYT_mXH0.mjs → rbac-OjYDiE2n.mjs} +13 -13
  195. package/dist/admin/rbac-OjYDiE2n.mjs.map +1 -0
  196. package/dist/admin/{rbac-WZsv1761.js → rbac-xo8GO653.js} +14 -14
  197. package/dist/admin/rbac-xo8GO653.js.map +1 -0
  198. package/dist/admin/{selectors-3gRe5pAj.mjs → selectors-k4OkEbL7.mjs} +2 -2
  199. package/dist/admin/{selectors-3gRe5pAj.mjs.map → selectors-k4OkEbL7.mjs.map} +1 -1
  200. package/dist/admin/{selectors-CiTVxP8O.js → selectors-lQOnkFXz.js} +2 -2
  201. package/dist/admin/{selectors-CiTVxP8O.js.map → selectors-lQOnkFXz.js.map} +1 -1
  202. package/dist/admin/src/components/FormInputs/Email.d.ts +1 -1
  203. package/dist/admin/src/components/FormInputs/Enumeration.d.ts +1 -1
  204. package/dist/admin/src/components/FormInputs/Json.d.ts +2 -4
  205. package/dist/admin/src/components/FormInputs/Password.d.ts +1 -1
  206. package/dist/admin/src/components/FormInputs/String.d.ts +1 -4
  207. package/dist/admin/src/components/FormInputs/Textarea.d.ts +1 -1
  208. package/dist/admin/src/components/FormInputs/types.d.ts +1 -0
  209. package/dist/admin/src/components/Layouts/ActionLayout.d.ts +7 -0
  210. package/dist/admin/src/components/Layouts/ContentLayout.d.ts +6 -0
  211. package/dist/admin/src/components/Layouts/GridLayout.d.ts +17 -0
  212. package/dist/admin/src/components/Layouts/HeaderLayout.d.ts +19 -0
  213. package/dist/admin/src/components/MainNav/MainNav.d.ts +3 -0
  214. package/dist/admin/src/components/MainNav/NavLink.d.ts +24 -0
  215. package/dist/admin/src/components/MainNav/NavUser.d.ts +7 -0
  216. package/dist/admin/src/features/BackButton.d.ts +1 -1
  217. package/dist/admin/src/hooks/useAPIErrorHandler.d.ts +2 -4
  218. package/dist/admin/src/hooks/useFetchClient.d.ts +7 -8
  219. package/dist/admin/src/hooks/useFocusInputField.d.ts +2 -5
  220. package/dist/admin/src/index.d.ts +6 -1
  221. package/dist/admin/src/layouts/UnauthenticatedLayout.d.ts +4 -1
  222. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +6 -50
  223. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.d.ts +1 -1
  224. package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.d.ts +2 -1
  225. package/dist/admin/src/pages/Settings/pages/Roles/components/HiddenAction.d.ts +2 -1
  226. package/dist/admin/src/pages/Settings/pages/Roles/utils/constants.d.ts +3 -3
  227. package/dist/admin/src/pages/Settings/pages/Webhooks/components/Events.d.ts +2 -3
  228. package/dist/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.d.ts +2 -2
  229. package/dist/admin/src/services/contentApi.d.ts +1 -1
  230. package/dist/admin/src/utils/baseQuery.d.ts +6 -6
  231. package/dist/admin/src/utils/getFetchClient.d.ts +40 -10
  232. package/dist/admin/src/utils/normalizeAPIError.d.ts +2 -5
  233. package/dist/admin/test.js +2 -2
  234. package/dist/admin/test.mjs +2 -2
  235. package/dist/admin/{transferTokens-5qQjIKFd.js → transferTokens-6WfQBaQ-.js} +2 -2
  236. package/dist/admin/{transferTokens-5qQjIKFd.js.map → transferTokens-6WfQBaQ-.js.map} +1 -1
  237. package/dist/admin/{transferTokens-OLPKYcY_.mjs → transferTokens-i692XANY.mjs} +2 -2
  238. package/dist/admin/{transferTokens-OLPKYcY_.mjs.map → transferTokens-i692XANY.mjs.map} +1 -1
  239. package/dist/admin/{useAdminRoles-K6leAcQd.js → useAdminRoles-Y5UQ6Egv.js} +2 -2
  240. package/dist/admin/{useAdminRoles-K6leAcQd.js.map → useAdminRoles-Y5UQ6Egv.js.map} +1 -1
  241. package/dist/admin/{useAdminRoles-dMrStp_i.mjs → useAdminRoles-eVMCxlw1.mjs} +2 -2
  242. package/dist/admin/{useAdminRoles-dMrStp_i.mjs.map → useAdminRoles-eVMCxlw1.mjs.map} +1 -1
  243. package/dist/admin/{useLicenseLimitNotification-aTNbD3xK.mjs → useLicenseLimitNotification-OHVMxaBa.mjs} +3 -3
  244. package/dist/admin/{useLicenseLimitNotification-aTNbD3xK.mjs.map → useLicenseLimitNotification-OHVMxaBa.mjs.map} +1 -1
  245. package/dist/admin/{useLicenseLimitNotification-0UWeCY_u.js → useLicenseLimitNotification-sfaZoueO.js} +3 -3
  246. package/dist/admin/{useLicenseLimitNotification-0UWeCY_u.js.map → useLicenseLimitNotification-sfaZoueO.js.map} +1 -1
  247. package/dist/admin/{useLicenseLimits-F7K-YWAE.mjs → useLicenseLimits--WDjYzSj.mjs} +2 -2
  248. package/dist/admin/{useLicenseLimits-F7K-YWAE.mjs.map → useLicenseLimits--WDjYzSj.mjs.map} +1 -1
  249. package/dist/admin/{useLicenseLimits-m11DOu9p.js → useLicenseLimits-mA4KtQ81.js} +2 -2
  250. package/dist/admin/{useLicenseLimits-m11DOu9p.js.map → useLicenseLimits-mA4KtQ81.js.map} +1 -1
  251. package/dist/admin/{useWebhooks-7BXPSMHG.mjs → useWebhooks-0pDqX-k4.mjs} +2 -2
  252. package/dist/admin/{useWebhooks-7BXPSMHG.mjs.map → useWebhooks-0pDqX-k4.mjs.map} +1 -1
  253. package/dist/admin/{useWebhooks-oZ5DKtvz.js → useWebhooks-BBj9Ew7F.js} +2 -2
  254. package/dist/admin/{useWebhooks-oZ5DKtvz.js.map → useWebhooks-BBj9Ew7F.js.map} +1 -1
  255. package/dist/admin/{validation-FXocLGal.js → validation-hp8oweyu.js} +2 -2
  256. package/dist/admin/{validation-FXocLGal.js.map → validation-hp8oweyu.js.map} +1 -1
  257. package/dist/admin/{validation-EKBCSsCp.mjs → validation-xeirflOd.mjs} +2 -2
  258. package/dist/admin/{validation-EKBCSsCp.mjs.map → validation-xeirflOd.mjs.map} +1 -1
  259. package/dist/package.json.d.ts +14 -15
  260. package/dist/server/index.js +9 -6
  261. package/dist/server/index.js.map +1 -1
  262. package/dist/server/index.mjs +9 -6
  263. package/dist/server/index.mjs.map +1 -1
  264. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  265. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  266. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  267. package/package.json +15 -16
  268. package/dist/admin/AdminSeatInfo-H5eNy3Gq.js.map +0 -1
  269. package/dist/admin/AdminSeatInfo-jPH1stsB.mjs.map +0 -1
  270. package/dist/admin/ApplicationInfoPage-QiVVy6LS.mjs.map +0 -1
  271. package/dist/admin/ApplicationInfoPage-leY1AEgo.js.map +0 -1
  272. package/dist/admin/AuthenticatedLayout-CHSwnqUb.mjs.map +0 -1
  273. package/dist/admin/AuthenticatedLayout-vS7Bwbws.js.map +0 -1
  274. package/dist/admin/ContentBox-PbS25I_4.mjs.map +0 -1
  275. package/dist/admin/ContentBox-xqJCP2BC.js.map +0 -1
  276. package/dist/admin/CreateActionEE-2DKYzbq_.js.map +0 -1
  277. package/dist/admin/CreateActionEE-TcGdWjIN.mjs.map +0 -1
  278. package/dist/admin/CreatePage-BrnwHVcz.mjs.map +0 -1
  279. package/dist/admin/CreatePage-aBOoUjUW.js.map +0 -1
  280. package/dist/admin/EditPage-FLtTVd-J.js.map +0 -1
  281. package/dist/admin/EditPage-QD0hqEQx.js.map +0 -1
  282. package/dist/admin/EditPage-RH6-47fP.mjs.map +0 -1
  283. package/dist/admin/EditPage-l77sfwOj.js.map +0 -1
  284. package/dist/admin/EditPage-pZmycDG6.mjs.map +0 -1
  285. package/dist/admin/EditPage-x0JVIh4C.mjs.map +0 -1
  286. package/dist/admin/EditView-0jWi165t.js.map +0 -1
  287. package/dist/admin/EditView-dEKhCE7v.mjs.map +0 -1
  288. package/dist/admin/EditViewPage-mLGPwfRP.js.map +0 -1
  289. package/dist/admin/EditViewPage-urKxemM0.mjs.map +0 -1
  290. package/dist/admin/HomePage-hsBKC9UT.mjs.map +0 -1
  291. package/dist/admin/HomePage-p-eVAC_O.js.map +0 -1
  292. package/dist/admin/InstalledPluginsPage-ZIPyDrzh.js.map +0 -1
  293. package/dist/admin/InstalledPluginsPage-s_PGIc3_.mjs.map +0 -1
  294. package/dist/admin/Layout-E5qOsA9X.mjs.map +0 -1
  295. package/dist/admin/Layout-TtAytojj.js.map +0 -1
  296. package/dist/admin/ListPage-54QP9CgX.mjs.map +0 -1
  297. package/dist/admin/ListPage-AzfR4Vrk.js.map +0 -1
  298. package/dist/admin/ListPage-DVSiz4k2.mjs.map +0 -1
  299. package/dist/admin/ListPage-FJ7Z1gS2.js.map +0 -1
  300. package/dist/admin/ListPage-M4WMxB5d.mjs.map +0 -1
  301. package/dist/admin/ListPage-VymLq96p.mjs.map +0 -1
  302. package/dist/admin/ListPage-av7186GD.js.map +0 -1
  303. package/dist/admin/ListPage-hhPlIMGc.js.map +0 -1
  304. package/dist/admin/ListView-MHzoKSAg.js.map +0 -1
  305. package/dist/admin/ListView-QWjCBmaw.mjs.map +0 -1
  306. package/dist/admin/ListView-WmnatWVx.js.map +0 -1
  307. package/dist/admin/ListView-lSCZzdzM.mjs.map +0 -1
  308. package/dist/admin/Login--ZDAgCsE.mjs.map +0 -1
  309. package/dist/admin/Login-Qfx7Y8LA.js.map +0 -1
  310. package/dist/admin/MarketplacePage-bs_XrVBk.js.map +0 -1
  311. package/dist/admin/MarketplacePage-e41eJgNp.mjs.map +0 -1
  312. package/dist/admin/Permissions-IbcPzM2X.js.map +0 -1
  313. package/dist/admin/Permissions-eyokRb6a.mjs.map +0 -1
  314. package/dist/admin/ProfilePage-1ptv647K.js.map +0 -1
  315. package/dist/admin/ProfilePage-jsFPZpKL.mjs.map +0 -1
  316. package/dist/admin/PurchaseAuditLogs-8_4PcW7P.mjs.map +0 -1
  317. package/dist/admin/PurchaseAuditLogs-tS_tVSGI.js.map +0 -1
  318. package/dist/admin/PurchaseSingleSignOn--gblfVu6.mjs.map +0 -1
  319. package/dist/admin/PurchaseSingleSignOn-9SV6-fYs.js.map +0 -1
  320. package/dist/admin/SSOProviders-JTam8pNP.js.map +0 -1
  321. package/dist/admin/SSOProviders-f1OPn1AH.mjs.map +0 -1
  322. package/dist/admin/SelectRoles-9TYXaG64.mjs.map +0 -1
  323. package/dist/admin/SelectRoles-OEKLwb7S.js.map +0 -1
  324. package/dist/admin/SingleSignOnPage-ELEF2pqT.mjs +0 -234
  325. package/dist/admin/SingleSignOnPage-ELEF2pqT.mjs.map +0 -1
  326. package/dist/admin/SingleSignOnPage-TFMqxPEF.js +0 -259
  327. package/dist/admin/SingleSignOnPage-TFMqxPEF.js.map +0 -1
  328. package/dist/admin/Table--gMZz8mZ.js.map +0 -1
  329. package/dist/admin/Table-PQ0O80QL.mjs.map +0 -1
  330. package/dist/admin/TokenTypeSelect-QB3M2AO_.js.map +0 -1
  331. package/dist/admin/TokenTypeSelect-zx8B_1pv.mjs.map +0 -1
  332. package/dist/admin/UseCasePage-R3vzwRYQ.js.map +0 -1
  333. package/dist/admin/UseCasePage-khHikw1F.mjs.map +0 -1
  334. package/dist/admin/admin-DUKhYsmP.mjs +0 -256
  335. package/dist/admin/admin-DUKhYsmP.mjs.map +0 -1
  336. package/dist/admin/admin-vlKSOeHB.js.map +0 -1
  337. package/dist/admin/constants-EH1lNehX.js.map +0 -1
  338. package/dist/admin/constants-O2S8dPXm.mjs.map +0 -1
  339. package/dist/admin/index-3MYZ88xc.mjs.map +0 -1
  340. package/dist/admin/index-Ze-KuF2r.js.map +0 -1
  341. package/dist/admin/rbac-WZsv1761.js.map +0 -1
  342. package/dist/admin/rbac-sYT_mXH0.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListPage-hhPlIMGc.js","sources":["../../ee/admin/src/services/auditLogs.ts","../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.ts","../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.ts","../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.tsx","../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.ts","../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.tsx","../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.ts","../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import { adminApi } from '../../../../admin/src/services/api';\nimport * as AuditLogs from '../../../../shared/contracts/audit-logs';\n\nconst auditLogsService = adminApi.injectEndpoints({\n endpoints: (builder) => ({\n getAuditLogs: builder.query<AuditLogs.GetAll.Response, AuditLogs.GetAll.Request['query']>({\n query: (params) => ({\n url: `/admin/audit-logs`,\n config: {\n params,\n },\n }),\n }),\n getAuditLog: builder.query<AuditLogs.Get.Response, AuditLogs.Get.Params['id']>({\n query: (id) => `/admin/audit-logs/${id}`,\n }),\n }),\n overrideExisting: false,\n});\n\nconst { useGetAuditLogsQuery, useGetAuditLogQuery } = auditLogsService;\n\nexport { useGetAuditLogsQuery, useGetAuditLogQuery };\n","import parseISO from 'date-fns/parseISO';\nimport { useIntl } from 'react-intl';\n\nexport const useFormatTimeStamp = () => {\n const { formatDate } = useIntl();\n\n const formatTimeStamp = (value: string) => {\n const date = parseISO(value);\n\n const formattedDate = formatDate(date, {\n dateStyle: 'long',\n });\n const formattedTime = formatDate(date, {\n timeStyle: 'medium',\n hourCycle: 'h24',\n });\n\n return `${formattedDate}, ${formattedTime}`;\n };\n\n return formatTimeStamp;\n};\n","export const actionTypes = {\n 'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',\n 'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',\n 'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',\n 'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',\n 'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',\n 'media.create': 'Create media',\n 'media.update': 'Update media',\n 'media.delete': 'Delete media',\n 'media-folder.create': 'Create media folder',\n 'media-folder.update': 'Update media folder',\n 'media-folder.delete': 'Delete media folder',\n 'user.create': 'Create user',\n 'user.update': 'Update user',\n 'user.delete': 'Delete user',\n 'admin.auth.success': 'Admin login',\n 'admin.logout': 'Admin logout',\n 'content-type.create': 'Create content type',\n 'content-type.update': 'Update content type',\n 'content-type.delete': 'Delete content type',\n 'component.create': 'Create component',\n 'component.update': 'Update component',\n 'component.delete': 'Delete component',\n 'role.create': 'Create role',\n 'role.update': 'Update role',\n 'role.delete': 'Delete role',\n 'permission.create': 'Create permission',\n 'permission.update': 'Update permission',\n 'permission.delete': 'Delete permission',\n};\n\nexport const getDefaultMessage = (value: keyof typeof actionTypes) => {\n return actionTypes[value] || value;\n};\n","import * as React from 'react';\n\nimport {\n Box,\n Flex,\n Grid,\n JSONInput,\n Loader,\n ModalBody,\n ModalHeader,\n ModalLayout,\n Typography,\n} from '@strapi/design-system';\nimport { Breadcrumbs, Crumb } from '@strapi/design-system/v2';\nimport { useIntl } from 'react-intl';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { AuditLog } from '../../../../../../../../shared/contracts/audit-logs';\nimport { useGetAuditLogQuery } from '../../../../../services/auditLogs';\nimport { useFormatTimeStamp } from '../hooks/useFormatTimeStamp';\nimport { actionTypes, getDefaultMessage } from '../utils/getActionTypesDefaultMessages';\n\ninterface ModalProps {\n handleClose: () => void;\n logId: string;\n}\n\nexport const Modal = ({ handleClose, logId }: ModalProps) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading } = useGetAuditLogQuery(logId);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n handleClose();\n }\n }, [error, formatAPIError, handleClose, toggleNotification]);\n\n const formatTimeStamp = useFormatTimeStamp();\n const formattedDate = data && 'date' in data ? formatTimeStamp(data.date) : '';\n\n return (\n <ModalLayout onClose={handleClose} labelledBy=\"title\">\n <ModalHeader>\n {/**\n * TODO: this is not semantically correct and should be amended.\n */}\n <Breadcrumbs label={formattedDate} id=\"title\">\n <Crumb isCurrent>{formattedDate}</Crumb>\n </Breadcrumbs>\n </ModalHeader>\n <ModalBody>\n <ActionBody isLoading={isLoading} data={data as AuditLog} formattedDate={formattedDate} />\n </ModalBody>\n </ModalLayout>\n );\n};\n\ninterface ActionBodyProps {\n isLoading?: boolean;\n data: AuditLog;\n formattedDate: string;\n}\n\nconst ActionBody = ({ isLoading, data, formattedDate }: ActionBodyProps) => {\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <Flex padding={7} justifyContent=\"center\" alignItems=\"center\">\n {/**\n * TODO: this will need to be translated.\n */}\n <Loader>Loading content...</Loader>\n </Flex>\n );\n }\n\n const { action, user, payload } = data;\n\n return (\n <>\n <Box marginBottom={3}>\n <Typography variant=\"delta\" id=\"title\">\n {formatMessage({\n id: 'Settings.permissions.auditLogs.details',\n defaultMessage: 'Log Details',\n })}\n </Typography>\n </Box>\n <Grid\n gap={4}\n gridCols={2}\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={6}\n marginBottom={4}\n background=\"neutral100\"\n hasRadius\n >\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n })}\n actionName={formatMessage(\n {\n id: `Settings.permissions.auditLogs.${action}`,\n defaultMessage: getDefaultMessage(action as keyof typeof actionTypes),\n },\n // @ts-expect-error - any\n { model: payload?.model }\n )}\n />\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n })}\n actionName={formattedDate}\n />\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n })}\n actionName={user?.displayName || '-'}\n />\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.userId',\n defaultMessage: 'User ID',\n })}\n actionName={user?.id.toString() || '-'}\n />\n </Grid>\n <JSONInput\n value={JSON.stringify(payload, null, 2)}\n disabled\n label={formatMessage({\n id: 'Settings.permissions.auditLogs.payload',\n defaultMessage: 'Payload',\n })}\n />\n </>\n );\n};\n\ninterface ActionItemProps {\n actionLabel: string;\n actionName: string;\n}\n\nconst ActionItem = ({ actionLabel, actionName }: ActionItemProps) => {\n return (\n <Flex direction=\"column\" alignItems=\"baseline\" gap={1}>\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {actionLabel}\n </Typography>\n <Typography textColor=\"neutral600\">{actionName}</Typography>\n </Flex>\n );\n};\n","import * as React from 'react';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useQueryParams } from '../../../../../../../../admin/src/hooks/useQueryParams';\nimport { useAdminUsers } from '../../../../../../../../admin/src/services/users';\nimport { useGetAuditLogsQuery } from '../../../../../services/auditLogs';\n\nexport const useAuditLogsData = ({\n canReadAuditLogs,\n canReadUsers,\n}: {\n canReadAuditLogs: boolean;\n canReadUsers: boolean;\n}) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams();\n\n const {\n data,\n error,\n isError: isUsersError,\n isLoading: isLoadingUsers,\n } = useAdminUsers(\n {},\n {\n skip: !canReadUsers,\n refetchOnMountOrArgChange: true,\n }\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({ type: 'danger', message: formatAPIError(error) });\n }\n }, [error, toggleNotification, formatAPIError]);\n\n const {\n data: auditLogs,\n isLoading: isLoadingAuditLogs,\n isError: isAuditLogsError,\n error: auditLogsError,\n } = useGetAuditLogsQuery(query, {\n refetchOnMountOrArgChange: true,\n skip: !canReadAuditLogs,\n });\n\n React.useEffect(() => {\n if (auditLogsError) {\n toggleNotification({ type: 'danger', message: formatAPIError(auditLogsError) });\n }\n }, [auditLogsError, toggleNotification, formatAPIError]);\n\n return {\n auditLogs,\n users: data?.users ?? [],\n isLoading: isLoadingUsers || isLoadingAuditLogs,\n hasError: isAuditLogsError || isUsersError,\n };\n};\n","import { Combobox, ComboboxOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { useField } from '../../../../../../../../admin/src/components/Form';\n\nexport const ComboboxFilter = (props: Filters.ValueInputProps) => {\n const { formatMessage } = useIntl();\n const field = useField(props.name);\n const ariaLabel = formatMessage({\n id: 'Settings.permissions.auditLogs.filter.aria-label',\n defaultMessage: 'Search and select an option to filter',\n });\n\n const handleChange = (value?: string) => {\n field.onChange(props.name, value);\n };\n\n return (\n <Combobox aria-label={ariaLabel} value={field.value} onChange={handleChange}>\n {props.options?.map((opt) => {\n const value = typeof opt === 'string' ? opt : opt.value;\n const label = typeof opt === 'string' ? opt : opt.label;\n return (\n <ComboboxOption key={value} value={value}>\n {label}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n","import { IntlShape } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { getDisplayName } from '../../../../../../../../admin/src/utils/users';\nimport { SanitizedAdminUser } from '../../../../../../../../shared/contracts/shared';\nimport { ComboboxFilter } from '../components/ComboboxFilter';\n\nimport { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages';\n\nexport const getDisplayedFilters = ({\n formatMessage,\n users,\n canReadUsers,\n}: {\n formatMessage: IntlShape['formatMessage'];\n users: SanitizedAdminUser[];\n canReadUsers: boolean;\n}): Filters.Filter[] => {\n const 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 ] as NonNullable<Filters.Filter['operators']>;\n\n const filters = [\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n name: 'action',\n operators,\n options: (Object.keys(actionTypes) as (keyof typeof actionTypes)[]).map((action) => ({\n label: formatMessage(\n {\n id: `Settings.permissions.auditLogs.${action}`,\n defaultMessage: getDefaultMessage(action),\n },\n { model: undefined }\n ),\n value: action,\n })),\n type: 'enumeration',\n },\n {\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n name: 'date',\n type: 'datetime',\n },\n ] satisfies Filters.Filter[];\n\n if (canReadUsers && users) {\n return [\n ...filters,\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n mainField: { name: 'id', type: 'integer' },\n name: 'user',\n operators,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n type: 'relation',\n } satisfies Filters.Filter,\n ];\n }\n\n return filters;\n};\n","import {\n ActionLayout,\n ContentLayout,\n Flex,\n HeaderLayout,\n IconButton,\n Typography,\n} from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport { useQueryParams } from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs, canReadUsers },\n isLoading: isLoadingRBAC,\n } = useRBAC({\n ...permissions?.auditLogs,\n readUsers: permissions?.users.read || [],\n });\n\n const [{ query }, setQuery] = useQueryParams<{ id?: AuditLog['id'] }>();\n const {\n auditLogs,\n users,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n canReadUsers,\n });\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({ formatMessage, users, canReadUsers });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n {\n name: 'actions',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.actions',\n defaultMessage: 'Actions',\n }),\n sortable: false,\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <HeaderLayout\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n />\n <ActionLayout\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n }\n />\n <ContentLayout>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\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 {results.map((log) => (\n <Table.Row key={log.id} onClick={() => setQuery({ id: log.id })}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n case 'actions':\n return null;\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => setQuery({ id: log.id })}\n aria-label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n noBorder\n icon={<Eye />}\n />\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...auditLogs?.pagination} defaultPageSize={24}>\n <Pagination.PageSize options={['12', '24', '50', '100']} />\n <Pagination.Links />\n </Pagination.Root>\n </ContentLayout>\n {query?.id && (\n <Modal handleClose={() => setQuery({ id: '' }, 'remove')} logId={query.id.toString()} />\n )}\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["adminApi","useIntl","parseISO","useNotification","useAPIErrorHandler","React","jsxs","ModalLayout","jsx","ModalHeader","Breadcrumbs","Crumb","ModalBody","Flex","Loader","Fragment","Box","Typography","Grid","JSONInput","useQueryParams","useAdminUsers","useField","Combobox","ComboboxOption","users","getDisplayName","useTypedSelector","useRBAC","Page","HeaderLayout","ActionLayout","Filters","ContentLayout","Table","IconButton","Eye","Pagination"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView-MHzoKSAg.js","sources":["../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { ContentLayout, EmptyStateLayout, HeaderLayout } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { Data } from '@strapi/types';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, 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 { useRBAC } from '../../../../hooks/useRBAC';\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 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: Data.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 <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\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 forwardedAs={Link}\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 // @ts-expect-error We need to accept the props of the component passed in the `as` prop\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 <Page.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 forwardedAs={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n // @ts-expect-error We need to accept the props of the component passed in the `as` prop\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 </Page.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":["useIntl","useNotification","useTypedSelector","useRBAC","useNavigate","useTracking","useGuidedTour","useAPIErrorHandler","React","qs","useOnce","API_TOKEN_TYPE","apiTokens","useGetAPITokensQuery","useDeleteAPITokenMutation","jsxs","Fragment","jsx","Page","HeaderLayout","LinkButton","Link","Plus","ContentLayout","Table","EmptyStateLayout","EmptyDocuments"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView-QWjCBmaw.mjs","sources":["../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { ContentLayout, EmptyStateLayout, HeaderLayout } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { Data } from '@strapi/types';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, 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 { useRBAC } from '../../../../hooks/useRBAC';\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 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: Data.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 <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\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 forwardedAs={Link}\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 // @ts-expect-error We need to accept the props of the component passed in the `as` prop\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 <Page.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 forwardedAs={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n // @ts-expect-error We need to accept the props of the component passed in the `as` prop\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 </Page.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":";;;;;;;;;;;;;;;AAsBA,MAAM,aAAgB,GAAA;AAAA,EACpB;AAAA,IACE,IAAM,EAAA,MAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,EAAI,EAAA,0CAAA;AAAA,MACJ,cAAgB,EAAA,MAAA;AAAA,KAClB;AAAA,IACA,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAM,EAAA,aAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,EAAI,EAAA,iDAAA;AAAA,MACJ,cAAgB,EAAA,aAAA;AAAA,KAClB;AAAA,IACA,QAAU,EAAA,KAAA;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAM,EAAA,WAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,EAAI,EAAA,+CAAA;AAAA,MACJ,cAAgB,EAAA,YAAA;AAAA,KAClB;AAAA,IACA,QAAU,EAAA,KAAA;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAM,EAAA,YAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,EAAI,EAAA,gDAAA;AAAA,MACJ,cAAgB,EAAA,WAAA;AAAA,KAClB;AAAA,IACA,QAAU,EAAA,KAAA;AAAA,GACZ;AACF,CAAA,CAAA;AAEO,MAAM,WAAW,MAAM;AAC5B,EAAM,MAAA,EAAE,aAAc,EAAA,GAAI,OAAQ,EAAA,CAAA;AAClC,EAAM,MAAA,EAAE,kBAAmB,EAAA,GAAI,eAAgB,EAAA,CAAA;AAC/C,EAAA,MAAM,WAAc,GAAA,gBAAA;AAAA,IAClB,CAAC,KAAU,KAAA,KAAA,CAAM,SAAU,CAAA,WAAA,CAAY,WAAW,YAAY,CAAA;AAAA,GAChE,CAAA;AACA,EAAM,MAAA;AAAA,IACJ,cAAgB,EAAA,EAAE,OAAS,EAAA,SAAA,EAAW,WAAW,SAAU,EAAA;AAAA,GAC7D,GAAI,QAAQ,WAAW,CAAA,CAAA;AACvB,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,WAAY,EAAA,CAAA;AACnC,EAAA,MAAM,eAAe,aAAc,CAAA,UAAA,EAAY,CAAC,KAAA,KAAU,MAAM,YAAY,CAAA,CAAA;AAC5E,EAAA,MAAM,EAAE,uBAAA,EAAyB,cAAe,EAAA,GAAI,kBAAmB,EAAA,CAAA;AAEvE,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,YAAA,CAAa,WAAW,CAAA,CAAA;AAAA,GAC1B,EAAG,CAAC,YAAY,CAAC,CAAA,CAAA;AAEjB,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,EAAG,CAAA,SAAA,CAAU,EAAE,IAAA,EAAM,UAAW,EAAA,EAAG,EAAE,MAAA,EAAQ,KAAM,EAAC,GAAG,CAAA,CAAA;AAAA,GAC5E,EAAG,CAAC,QAAQ,CAAC,CAAA,CAAA;AAEb,EAAA,MAAM,OAAU,GAAA,aAAA,CAAc,GAAI,CAAA,CAAC,MAAY,MAAA;AAAA,IAC7C,GAAG,MAAA;AAAA,IACH,KAAA,EAAO,aAAc,CAAA,MAAA,CAAO,KAAK,CAAA;AAAA,GACjC,CAAA,CAAA,CAAA;AAEF,EAAA,OAAA,CAAQ,MAAM;AACZ,IAAA,UAAA,CAAW,qBAAuB,EAAA;AAAA,MAChC,SAAW,EAAA,cAAA;AAAA,KACZ,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AAED,EAAM,MAAA,EAAE,MAAM,SAAY,GAAA,IAAI,SAAW,EAAA,KAAA,KAAU,oBAAqB,EAAA,CAAA;AAExE,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,KAAO,EAAA;AACT,MAAmB,kBAAA,CAAA;AAAA,QACjB,IAAM,EAAA,QAAA;AAAA,QACN,OAAA,EAAS,eAAe,KAAK,CAAA;AAAA,OAC9B,CAAA,CAAA;AAAA,KACH;AAAA,GACC,EAAA,CAAC,KAAO,EAAA,cAAA,EAAgB,kBAAkB,CAAC,CAAA,CAAA;AAE9C,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,UAAA,CAAW,sBAAsB,EAAE,MAAA,EAAQ,UAAU,MAAQ,EAAA,SAAA,EAAW,gBAAgB,CAAA,CAAA;AAAA,GACvF,EAAA,CAAC,SAAW,EAAA,UAAU,CAAC,CAAA,CAAA;AAE1B,EAAM,MAAA,CAAC,WAAW,CAAA,GAAI,yBAA0B,EAAA,CAAA;AAEhD,EAAM,MAAA,YAAA,GAAe,OAAO,EAAgB,KAAA;AAC1C,IAAI,IAAA;AACF,MAAM,MAAA,GAAA,GAAM,MAAM,WAAA,CAAY,EAAE,CAAA,CAAA;AAEhC,MAAA,IAAI,WAAW,GAAK,EAAA;AAClB,QAAmB,kBAAA,CAAA;AAAA,UACjB,IAAM,EAAA,QAAA;AAAA,UACN,OAAA,EAAS,cAAe,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA,SAClC,CAAA,CAAA;AAED,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,UAAA,CAAW,gBAAgB,CAAA,CAAA;AAAA,KACrB,CAAA,MAAA;AACN,MAAmB,kBAAA,CAAA;AAAA,QACjB,IAAM,EAAA,QAAA;AAAA,QACN,SAAS,aAAc,CAAA;AAAA,UACrB,EAAI,EAAA,oBAAA;AAAA,UACJ,cAAgB,EAAA,sBAAA;AAAA,SACjB,CAAA;AAAA,OACF,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,IAAA,CAAK,OAAL,EACE,QAAA,EAAA,aAAA;AAAA,MACC,EAAE,EAAA,EAAI,oBAAsB,EAAA,cAAA,EAAgB,mBAAoB,EAAA;AAAA,MAChE,EAAE,MAAM,YAAa,EAAA;AAAA,KAEzB,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,OAAO,aAAc,CAAA,EAAE,IAAI,0BAA4B,EAAA,cAAA,EAAgB,cAAc,CAAA;AAAA,QACrF,UAAU,aAAc,CAAA;AAAA,UACtB,EAAI,EAAA,gCAAA;AAAA,UACJ,cAAgB,EAAA,6CAAA;AAAA,SACjB,CAAA;AAAA,QACD,eACE,SACE,oBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,WAAa,EAAA,IAAA;AAAA,YACb,aAAY,EAAA,yBAAA;AAAA,YACZ,SAAA,sBAAY,IAAK,EAAA,EAAA,CAAA;AAAA,YACjB,IAAK,EAAA,GAAA;AAAA,YACL,OAAA,EAAS,MACP,UAAA,CAAW,sBAAwB,EAAA;AAAA,cACjC,SAAW,EAAA,cAAA;AAAA,aACZ,CAAA;AAAA,YAGH,EAAG,EAAA,6BAAA;AAAA,YAEF,QAAc,EAAA,aAAA,CAAA;AAAA,cACb,EAAI,EAAA,2BAAA;AAAA,cACJ,cAAgB,EAAA,sBAAA;AAAA,aACjB,CAAA;AAAA,WAAA;AAAA,SACH;AAAA,OAAA;AAAA,KAGN;AAAA,IACC,CAAC,OAAA,mBACC,GAAA,CAAA,IAAA,CAAK,eAAL,EAAmB,CAAA,mBAEnB,GAAA,CAAA,IAAA,CAAK,IAAL,EAAA,EAAU,WAAW,EAAA,SAAA,EACpB,+BAAC,aACE,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA,CAAU,SAAS,CAClB,oBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAa,EAAA,EAAE,OAAS,EAAA,SAAA,EAAW,SAAU,EAAA;AAAA,UAC7C,OAAA;AAAA,UACA,SAAA;AAAA,UACA,eAAiB,EAAA,YAAA;AAAA,UACjB,MAAQ,EAAA,SAAA;AAAA,UACR,SAAW,EAAA,cAAA;AAAA,SAAA;AAAA,OACb;AAAA,MAED,SAAA,IAAa,SAAU,CAAA,MAAA,KAAW,CACjC,mBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,IAAM,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,KAAA,EAAM,OAAQ,EAAA,CAAA;AAAA,UACpC,SAAS,aAAc,CAAA;AAAA,YACrB,EAAI,EAAA,kCAAA;AAAA,YACJ,cAAgB,EAAA,0BAAA;AAAA,WACjB,CAAA;AAAA,UACD,MACE,kBAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,WAAa,EAAA,IAAA;AAAA,cACb,OAAQ,EAAA,WAAA;AAAA,cACR,SAAA,sBAAY,IAAK,EAAA,EAAA,CAAA;AAAA,cAEjB,EAAG,EAAA,6BAAA;AAAA,cAEF,QAAc,EAAA,aAAA,CAAA;AAAA,gBACb,EAAI,EAAA,gCAAA;AAAA,gBACJ,cAAgB,EAAA,mBAAA;AAAA,eACjB,CAAA;AAAA,aAAA;AAAA,WACH;AAAA,SAAA;AAAA,OAGF,GAAA,IAAA;AAAA,MACH,CAAC,SAAA,IAAa,SAAU,CAAA,MAAA,KAAW,CAClC,mBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,IAAM,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,KAAA,EAAM,OAAQ,EAAA,CAAA;AAAA,UACpC,SAAS,aAAc,CAAA;AAAA,YACrB,EAAI,EAAA,qCAAA;AAAA,YACJ,cAAgB,EAAA,mCAAA;AAAA,WACjB,CAAA;AAAA,SAAA;AAAA,OAED,GAAA,IAAA;AAAA,KAAA,EACN,CACF,EAAA,CAAA;AAAA,GAEJ,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEO,MAAM,oBAAoB,MAAM;AACrC,EAAA,MAAM,WAAc,GAAA,gBAAA;AAAA,IAClB,CAAC,KAAU,KAAA,KAAA,CAAM,UAAU,WAAY,CAAA,QAAA,GAAW,YAAY,CAAE,CAAA,IAAA;AAAA,GAClE,CAAA;AAEA,EAAA,2BACG,IAAK,CAAA,OAAA,EAAL,EAAa,WACZ,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView-WmnatWVx.js","sources":["../../admin/src/pages/Settings/pages/TransferTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { ContentLayout, EmptyStateLayout, HeaderLayout } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { Data } from '@strapi/types';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, 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 { useRBAC } from '../../../../hooks/useRBAC';\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 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: Data.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 <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Transfer Tokens',\n }\n )}\n </Page.Title>\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 forwardedAs={Link}\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 // @ts-expect-error We need to accept the props of the component passed in the `as` prop\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 <Page.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 forwardedAs={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n // @ts-expect-error We need to accept the props of the component passed in the `as` prop\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 </Page.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":["useIntl","useNotification","useTypedSelector","useRBAC","useNavigate","useTracking","useAPIErrorHandler","React","qs","useOnce","TRANSFER_TOKEN_TYPE","transferTokens","useGetTransferTokensQuery","useDeleteTransferTokenMutation","jsxs","Fragment","jsx","Page","HeaderLayout","LinkButton","Link","Plus","ContentLayout","Table","EmptyStateLayout","EmptyDocuments"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView-lSCZzdzM.mjs","sources":["../../admin/src/pages/Settings/pages/TransferTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { ContentLayout, EmptyStateLayout, HeaderLayout } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { Data } from '@strapi/types';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, 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 { useRBAC } from '../../../../hooks/useRBAC';\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 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: Data.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 <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Transfer Tokens',\n }\n )}\n </Page.Title>\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 forwardedAs={Link}\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 // @ts-expect-error We need to accept the props of the component passed in the `as` prop\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 <Page.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 forwardedAs={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n // @ts-expect-error We need to accept the props of the component passed in the `as` prop\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 </Page.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":";;;;;;;;;;;;;;AAwBA,MAAM,YAAe,GAAA;AAAA,EACnB;AAAA,IACE,IAAM,EAAA,MAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,EAAI,EAAA,uCAAA;AAAA,MACJ,cAAgB,EAAA,MAAA;AAAA,KAClB;AAAA,IACA,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAM,EAAA,aAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,EAAI,EAAA,8CAAA;AAAA,MACJ,cAAgB,EAAA,aAAA;AAAA,KAClB;AAAA,IACA,QAAU,EAAA,KAAA;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAM,EAAA,WAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,EAAI,EAAA,4CAAA;AAAA,MACJ,cAAgB,EAAA,YAAA;AAAA,KAClB;AAAA,IACA,QAAU,EAAA,KAAA;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAM,EAAA,YAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,EAAI,EAAA,6CAAA;AAAA,MACJ,cAAgB,EAAA,WAAA;AAAA,KAClB;AAAA,IACA,QAAU,EAAA,KAAA;AAAA,GACZ;AACF,CAAA,CAAA;AAMA,MAAM,WAAW,MAAM;AACrB,EAAM,MAAA,EAAE,aAAc,EAAA,GAAI,OAAQ,EAAA,CAAA;AAClC,EAAM,MAAA,EAAE,kBAAmB,EAAA,GAAI,eAAgB,EAAA,CAAA;AAC/C,EAAA,MAAM,WAAc,GAAA,gBAAA;AAAA,IAClB,CAAC,KAAU,KAAA,KAAA,CAAM,SAAU,CAAA,WAAA,CAAY,WAAW,iBAAiB,CAAA;AAAA,GACrE,CAAA;AACA,EAAM,MAAA;AAAA,IACJ,SAAW,EAAA,aAAA;AAAA,IACX,cAAgB,EAAA,EAAE,SAAW,EAAA,SAAA,EAAW,WAAW,OAAQ,EAAA;AAAA,GAC7D,GAAI,QAAQ,WAAW,CAAA,CAAA;AACvB,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,WAAY,EAAA,CAAA;AACnC,EAAA,MAAM,EAAE,uBAAA,EAAyB,cAAe,EAAA,GAAI,kBAAmB,EAAA,CAAA;AAEvE,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,EAAG,CAAA,SAAA,CAAU,EAAE,IAAA,EAAM,UAAW,EAAA,EAAG,EAAE,MAAA,EAAQ,KAAM,EAAC,GAAG,CAAA,CAAA;AAAA,GAC5E,EAAG,CAAC,QAAQ,CAAC,CAAA,CAAA;AAEb,EAAA,OAAA,CAAQ,MAAM;AACZ,IAAA,UAAA,CAAW,qBAAuB,EAAA;AAAA,MAChC,SAAW,EAAA,mBAAA;AAAA,KACZ,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AAED,EAAA,MAAM,OAAU,GAAA,YAAA,CAAa,GAAI,CAAA,CAAC,MAAY,MAAA;AAAA,IAC5C,GAAG,MAAA;AAAA,IACH,KAAA,EAAO,aAAc,CAAA,MAAA,CAAO,KAAK,CAAA;AAAA,GACjC,CAAA,CAAA,CAAA;AAEF,EAAM,MAAA;AAAA,IACJ,IAAA,EAAM,iBAAiB,EAAC;AAAA,IACxB,SAAW,EAAA,eAAA;AAAA,IACX,KAAA;AAAA,GACF,GAAI,0BAA0B,KAAW,CAAA,EAAA;AAAA,IACvC,MAAM,CAAC,OAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,UAAA,CAAW,oBAAsB,EAAA;AAAA,QAC/B,QAAQ,cAAe,CAAA,MAAA;AAAA,QACvB,SAAW,EAAA,mBAAA;AAAA,OACZ,CAAA,CAAA;AAAA,KACH;AAAA,GACC,EAAA,CAAC,UAAY,EAAA,cAAc,CAAC,CAAA,CAAA;AAE/B,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,KAAO,EAAA;AACT,MAAmB,kBAAA,CAAA;AAAA,QACjB,IAAM,EAAA,QAAA;AAAA,QACN,OAAA,EAAS,eAAe,KAAK,CAAA;AAAA,OAC9B,CAAA,CAAA;AAAA,KACH;AAAA,GACC,EAAA,CAAC,KAAO,EAAA,cAAA,EAAgB,kBAAkB,CAAC,CAAA,CAAA;AAE9C,EAAM,MAAA,CAAC,WAAW,CAAA,GAAI,8BAA+B,EAAA,CAAA;AAErD,EAAM,MAAA,YAAA,GAAe,OAAO,EAAgB,KAAA;AAC1C,IAAI,IAAA;AACF,MAAM,MAAA,GAAA,GAAM,MAAM,WAAA,CAAY,EAAE,CAAA,CAAA;AAEhC,MAAA,IAAI,WAAW,GAAK,EAAA;AAClB,QAAmB,kBAAA,CAAA;AAAA,UACjB,IAAM,EAAA,QAAA;AAAA,UACN,OAAA,EAAS,cAAe,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA,SAClC,CAAA,CAAA;AAAA,OACH;AAAA,KACM,CAAA,MAAA;AACN,MAAmB,kBAAA,CAAA;AAAA,QACjB,IAAM,EAAA,QAAA;AAAA,QACN,SAAS,aAAc,CAAA,EAAE,IAAI,oBAAsB,EAAA,cAAA,EAAgB,oBAAoB,CAAA;AAAA,OACxF,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,YAAY,eAAmB,IAAA,aAAA,CAAA;AAErC,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,IAAA,CAAK,OAAL,EACE,QAAA,EAAA,aAAA;AAAA,MACC,EAAE,EAAA,EAAI,oBAAsB,EAAA,cAAA,EAAgB,mBAAoB,EAAA;AAAA,MAChE;AAAA,QACE,IAAM,EAAA,iBAAA;AAAA,OACR;AAAA,KAEJ,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,OAAO,aAAc,CAAA;AAAA,UACnB,EAAI,EAAA,+BAAA;AAAA,UACJ,cAAgB,EAAA,iBAAA;AAAA,SACjB,CAAA;AAAA,QACD,UAAU,aAAc,CAAA;AAAA,UACtB,EAAI,EAAA,qCAAA;AAAA,UACJ,cAAgB,EAAA,qCAAA;AAAA;AAAA,SACjB,CAAA;AAAA,QACD,eACE,SACE,mBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,WAAa,EAAA,IAAA;AAAA,YACb,aAAY,EAAA,8BAAA;AAAA,YACZ,SAAA,sBAAY,IAAK,EAAA,EAAA,CAAA;AAAA,YACjB,IAAK,EAAA,GAAA;AAAA,YACL,OAAA,EAAS,MACP,UAAA,CAAW,sBAAwB,EAAA;AAAA,cACjC,SAAW,EAAA,mBAAA;AAAA,aACZ,CAAA;AAAA,YAGH,EAAG,EAAA,kCAAA;AAAA,YAEF,QAAc,EAAA,aAAA,CAAA;AAAA,cACb,EAAI,EAAA,gCAAA;AAAA,cACJ,cAAgB,EAAA,2BAAA;AAAA,aACjB,CAAA;AAAA,WAAA;AAAA,SAED,GAAA,KAAA,CAAA;AAAA,OAAA;AAAA,KAER;AAAA,IACC,CAAC,OAAA,mBACC,GAAA,CAAA,IAAA,CAAK,eAAL,EAAmB,CAAA,mBAEnB,GAAA,CAAA,IAAA,CAAK,IAAL,EAAA,EAAU,WAAW,EAAA,SAAA,EACpB,+BAAC,aACE,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,cAAA,CAAe,SAAS,CACvB,oBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAa,EAAA,EAAE,OAAS,EAAA,SAAA,EAAW,SAAU,EAAA;AAAA,UAC7C,OAAA;AAAA,UACA,SAAA;AAAA,UACA,eAAiB,EAAA,YAAA;AAAA,UACjB,MAAQ,EAAA,cAAA;AAAA,UACR,SAAW,EAAA,mBAAA;AAAA,SAAA;AAAA,OACb;AAAA,MAED,SAAA,IAAa,cAAe,CAAA,MAAA,KAAW,CACtC,mBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,MACE,kBAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,WAAa,EAAA,IAAA;AAAA,cACb,OAAQ,EAAA,WAAA;AAAA,cACR,SAAA,sBAAY,IAAK,EAAA,EAAA,CAAA;AAAA,cAEjB,EAAG,EAAA,kCAAA;AAAA,cAEF,QAAc,EAAA,aAAA,CAAA;AAAA,gBACb,EAAI,EAAA,qCAAA;AAAA,gBACJ,cAAgB,EAAA,wBAAA;AAAA,eACjB,CAAA;AAAA,aAAA;AAAA,WACH;AAAA,UAEF,IAAM,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,KAAA,EAAM,OAAQ,EAAA,CAAA;AAAA,UACpC,SAAS,aAAc,CAAA;AAAA,YACrB,EAAI,EAAA,uCAAA;AAAA,YACJ,cAAgB,EAAA,+BAAA;AAAA,WACjB,CAAA;AAAA,SAAA;AAAA,OAED,GAAA,IAAA;AAAA,MACH,CAAC,SAAA,IAAa,cAAe,CAAA,MAAA,KAAW,CACvC,mBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,IAAM,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,KAAA,EAAM,OAAQ,EAAA,CAAA;AAAA,UACpC,SAAS,aAAc,CAAA;AAAA,YACrB,EAAI,EAAA,0CAAA;AAAA,YACJ,cAAgB,EAAA,mCAAA;AAAA,WACjB,CAAA;AAAA,SAAA;AAAA,OAED,GAAA,IAAA;AAAA,KAAA,EACN,CACF,EAAA,CAAA;AAAA,GAEJ,EAAA,CAAA,CAAA;AAEJ,EAAA;AAMA,MAAM,oBAAoB,MAAM;AAC9B,EAAA,MAAM,WAAc,GAAA,gBAAA;AAAA,IAClB,CAAC,KAAU,KAAA,KAAA,CAAM,UAAU,WAAY,CAAA,QAAA,GAAW,iBAAiB,CAAE,CAAA,IAAA;AAAA,GACvE,CAAA;AAEA,EAAA,2BACG,IAAK,CAAA,OAAA,EAAL,EAAa,WACZ,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Login--ZDAgCsE.mjs","sources":["../../ee/admin/src/pages/AuthPage/components/Login.tsx"],"sourcesContent":["import { Box, Divider, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { Login, LoginProps } from '../../../../../../admin/src/pages/Auth/components/Login';\nimport { useGetProvidersQuery } from '../../../../../../admin/src/services/auth';\n\nimport { SSOProviders } from './SSOProviders';\n\nconst DividerFull = styled(Divider)`\n flex: 1;\n`;\n\nconst LoginEE = (loginProps: LoginProps) => {\n const { formatMessage } = useIntl();\n const { isLoading, data: providers = [] } = useGetProvidersQuery(undefined, {\n skip: !window.strapi.features.isEnabled(window.strapi.features.SSO),\n });\n\n if (\n !window.strapi.features.isEnabled(window.strapi.features.SSO) ||\n (!isLoading && providers.length === 0)\n ) {\n return <Login {...loginProps} />;\n }\n\n return (\n <Login {...loginProps}>\n <Box paddingTop={7}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Flex>\n <DividerFull />\n <Box paddingLeft={3} paddingRight={3}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'Auth.login.sso.divider' })}\n </Typography>\n </Box>\n <DividerFull />\n </Flex>\n <SSOProviders providers={providers} displayAllProviders={false} />\n </Flex>\n </Box>\n </Login>\n );\n};\n\nexport { LoginEE };\n"],"names":[],"mappings":";;;;;;;;AASA,MAAM,WAAA,GAAc,OAAO,OAAO,CAAA,CAAA;AAAA;AAAA,CAAA,CAAA;AAI5B,MAAA,OAAA,GAAU,CAAC,UAA2B,KAAA;AAC1C,EAAM,MAAA,EAAE,aAAc,EAAA,GAAI,OAAQ,EAAA,CAAA;AAClC,EAAM,MAAA,EAAE,WAAW,IAAM,EAAA,SAAA,GAAY,EAAG,EAAA,GAAI,qBAAqB,KAAW,CAAA,EAAA;AAAA,IAC1E,IAAA,EAAM,CAAC,MAAO,CAAA,MAAA,CAAO,SAAS,SAAU,CAAA,MAAA,CAAO,MAAO,CAAA,QAAA,CAAS,GAAG,CAAA;AAAA,GACnE,CAAA,CAAA;AAED,EAAA,IACE,CAAC,MAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAU,MAAO,CAAA,MAAA,CAAO,QAAS,CAAA,GAAG,CAC3D,IAAA,CAAC,SAAa,IAAA,SAAA,CAAU,WAAW,CACpC,EAAA;AACA,IAAO,uBAAA,GAAA,CAAC,KAAO,EAAA,EAAA,GAAG,UAAY,EAAA,CAAA,CAAA;AAAA,GAChC;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA,EAAO,GAAG,UAAA,EACT,8BAAC,GAAI,EAAA,EAAA,UAAA,EAAY,CACf,EAAA,QAAA,kBAAA,IAAA,CAAC,QAAK,SAAU,EAAA,QAAA,EAAS,UAAW,EAAA,SAAA,EAAU,KAAK,CACjD,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,CAAA;AAAA,0BACZ,GAAI,EAAA,EAAA,WAAA,EAAa,GAAG,YAAc,EAAA,CAAA,EACjC,8BAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,SAAA,EAAU,cACnC,QAAc,EAAA,aAAA,CAAA,EAAE,IAAI,wBAAyB,EAAC,GACjD,CACF,EAAA,CAAA;AAAA,0BACC,WAAY,EAAA,EAAA,CAAA;AAAA,KACf,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,YAAA,EAAA,EAAa,SAAsB,EAAA,mBAAA,EAAqB,KAAO,EAAA,CAAA;AAAA,GAAA,EAClE,GACF,CACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Login-Qfx7Y8LA.js","sources":["../../ee/admin/src/pages/AuthPage/components/Login.tsx"],"sourcesContent":["import { Box, Divider, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { Login, LoginProps } from '../../../../../../admin/src/pages/Auth/components/Login';\nimport { useGetProvidersQuery } from '../../../../../../admin/src/services/auth';\n\nimport { SSOProviders } from './SSOProviders';\n\nconst DividerFull = styled(Divider)`\n flex: 1;\n`;\n\nconst LoginEE = (loginProps: LoginProps) => {\n const { formatMessage } = useIntl();\n const { isLoading, data: providers = [] } = useGetProvidersQuery(undefined, {\n skip: !window.strapi.features.isEnabled(window.strapi.features.SSO),\n });\n\n if (\n !window.strapi.features.isEnabled(window.strapi.features.SSO) ||\n (!isLoading && providers.length === 0)\n ) {\n return <Login {...loginProps} />;\n }\n\n return (\n <Login {...loginProps}>\n <Box paddingTop={7}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Flex>\n <DividerFull />\n <Box paddingLeft={3} paddingRight={3}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'Auth.login.sso.divider' })}\n </Typography>\n </Box>\n <DividerFull />\n </Flex>\n <SSOProviders providers={providers} displayAllProviders={false} />\n </Flex>\n </Box>\n </Login>\n );\n};\n\nexport { LoginEE };\n"],"names":["styled","Divider","useIntl","useGetProvidersQuery","jsx","Login","Box","jsxs","Flex","Typography","SSOProviders"],"mappings":";;;;;;;;;;;;;;;;AASA,MAAM,WAAA,GAAcA,wBAAOC,oBAAO,CAAA,CAAA;AAAA;AAAA,CAAA,CAAA;AAI5B,MAAA,OAAA,GAAU,CAAC,UAA2B,KAAA;AAC1C,EAAM,MAAA,EAAE,aAAc,EAAA,GAAIC,iBAAQ,EAAA,CAAA;AAClC,EAAM,MAAA,EAAE,WAAW,IAAM,EAAA,SAAA,GAAY,EAAG,EAAA,GAAIC,0BAAqB,KAAW,CAAA,EAAA;AAAA,IAC1E,IAAA,EAAM,CAAC,MAAO,CAAA,MAAA,CAAO,SAAS,SAAU,CAAA,MAAA,CAAO,MAAO,CAAA,QAAA,CAAS,GAAG,CAAA;AAAA,GACnE,CAAA,CAAA;AAED,EAAA,IACE,CAAC,MAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAU,MAAO,CAAA,MAAA,CAAO,QAAS,CAAA,GAAG,CAC3D,IAAA,CAAC,SAAa,IAAA,SAAA,CAAU,WAAW,CACpC,EAAA;AACA,IAAO,uBAAAC,cAAA,CAACC,WAAO,EAAA,EAAA,GAAG,UAAY,EAAA,CAAA,CAAA;AAAA,GAChC;AAEA,EAAA,uBACGD,cAAA,CAAAC,WAAA,EAAA,EAAO,GAAG,UAAA,EACT,yCAACC,gBAAI,EAAA,EAAA,UAAA,EAAY,CACf,EAAA,QAAA,kBAAAC,eAAA,CAACC,qBAAK,SAAU,EAAA,QAAA,EAAS,UAAW,EAAA,SAAA,EAAU,KAAK,CACjD,EAAA,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAACC,iBACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAAJ,cAAA,CAAC,WAAY,EAAA,EAAA,CAAA;AAAA,qCACZE,gBAAI,EAAA,EAAA,WAAA,EAAa,GAAG,YAAc,EAAA,CAAA,EACjC,yCAACG,uBAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,SAAA,EAAU,cACnC,QAAc,EAAA,aAAA,CAAA,EAAE,IAAI,wBAAyB,EAAC,GACjD,CACF,EAAA,CAAA;AAAA,qCACC,WAAY,EAAA,EAAA,CAAA;AAAA,KACf,EAAA,CAAA;AAAA,oBACCL,cAAA,CAAAM,yBAAA,EAAA,EAAa,SAAsB,EAAA,mBAAA,EAAqB,KAAO,EAAA,CAAA;AAAA,GAAA,EAClE,GACF,CACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarketplacePage-bs_XrVBk.js","sources":["../../admin/src/hooks/useDebounce.ts","../../admin/src/pages/Marketplace/components/NpmPackagesFilters.tsx","../../admin/src/pages/Marketplace/components/NpmPackageCard.tsx","../../admin/src/pages/Marketplace/components/NpmPackagesGrid.tsx","../../admin/src/pages/Marketplace/components/PageHeader.tsx","../../admin/src/pages/Marketplace/components/OfflineLayout.tsx","../../admin/src/pages/Marketplace/components/SortSelect.tsx","../../admin/src/pages/Marketplace/hooks/useMarketplaceData.ts","../../admin/src/pages/Marketplace/hooks/useNavigatorOnline.ts","../../admin/src/pages/Marketplace/MarketplacePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Tag,\n MultiSelect,\n MultiSelectOption,\n MultiSelectProps,\n Popover,\n Flex,\n} from '@strapi/design-system';\nimport { Cross, Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport type { Categories, Collections, FilterTypes } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType, MarketplacePageQuery } from '../MarketplacePage';\n\ninterface NpmPackagesFiltersProps {\n handleSelectClear: (type: FilterTypes) => void;\n handleSelectChange: (update: Partial<MarketplacePageQuery>) => void;\n npmPackageType: NpmPackageType;\n possibleCategories: Partial<Record<Categories, number>>;\n possibleCollections: Partial<Record<Collections, number>>;\n query: MarketplacePageQuery;\n}\n\nconst NpmPackagesFilters = ({\n handleSelectClear,\n handleSelectChange,\n npmPackageType,\n possibleCategories,\n possibleCollections,\n query,\n}: NpmPackagesFiltersProps) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const buttonRef = React.useRef<HTMLButtonElement>(null!);\n const { formatMessage } = useIntl();\n\n const handleToggle = () => setIsVisible((prev) => !prev);\n\n const handleTagRemove = (tagToRemove: string, filterType: FilterTypes) => {\n const update = {\n [filterType]: (query[filterType] ?? []).filter((previousTag) => previousTag !== tagToRemove),\n };\n\n handleSelectChange(update);\n };\n\n return (\n <>\n <Box paddingTop={1} paddingBottom={1}>\n <ButtonToggle\n variant=\"tertiary\"\n ref={buttonRef}\n startIcon={<Filter />}\n onClick={handleToggle}\n size=\"S\"\n >\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </ButtonToggle>\n {isVisible && (\n <Popover source={buttonRef} onDismiss={handleToggle} padding={3} spacing={4}>\n <FiltersFlex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.collections',\n defaultMessage: 'Collections',\n })}\n value={query?.collections || []}\n onChange={(newCollections) => {\n const update = { collections: newCollections };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('collections')}\n possibleFilters={possibleCollections}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.collectionsSelected',\n defaultMessage:\n '{count, plural, =0 {No collections} one {# collection} other {# collections}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n {npmPackageType === 'plugin' && (\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.categories',\n defaultMessage: 'Categories',\n })}\n value={query?.categories || []}\n onChange={(newCategories) => {\n const update = { categories: newCategories };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('categories')}\n possibleFilters={possibleCategories}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.categoriesSelected',\n defaultMessage:\n '{count, plural, =0 {No categories} one {# category} other {# categories}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n )}\n </FiltersFlex>\n </Popover>\n )}\n </Box>\n {query.collections?.map((collection) => (\n <Box key={collection} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(collection, 'collections')}>\n {collection}\n </Tag>\n </Box>\n ))}\n {npmPackageType === 'plugin' &&\n query.categories?.map((category) => (\n <Box key={category} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(category, 'categories')}>\n {category}\n </Tag>\n </Box>\n ))}\n </>\n );\n};\n\nconst ButtonToggle = styled(Button)`\n height: ${({ theme }) => theme.sizes.input.S};\n`;\n\nconst FiltersFlex = styled(Flex)`\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * FilterSelect\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterSelectProps\n extends Pick<MultiSelectProps, 'customizeContent' | 'onClear' | 'onChange' | 'value'> {\n message: string;\n possibleFilters:\n | NpmPackagesFiltersProps['possibleCategories']\n | NpmPackagesFiltersProps['possibleCollections'];\n}\n\nconst FilterSelect = ({\n message,\n value,\n onChange,\n possibleFilters,\n onClear,\n customizeContent,\n}: FilterSelectProps) => {\n return (\n <MultiSelect\n data-testid={`${message}-button`}\n label={message}\n placeholder={message}\n size=\"M\"\n onChange={onChange}\n onClear={onClear}\n value={value}\n customizeContent={customizeContent}\n >\n {Object.entries(possibleFilters).map(([filterName, count]) => {\n return (\n <MultiSelectOption\n data-testid={`${filterName}-${count}`}\n key={filterName}\n value={filterName}\n >\n {`${filterName} (${count})`}\n </MultiSelectOption>\n );\n })}\n </MultiSelect>\n );\n};\n\nexport { NpmPackagesFilters };\nexport type { NpmPackagesFiltersProps };\n","import { Box, Flex, Icon, Tooltip, Typography, Divider, Button } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { CheckCircle, ExternalLink, Download, Github, Star, Check, Duplicate } from '@strapi/icons';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport * as semver from 'semver';\nimport styled from 'styled-components';\n\nimport StrapiLogo from '../../../assets/images/logo-strapi-2022.svg';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useClipboard } from '../../../hooks/useClipboard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType } from '../MarketplacePage';\n\n// Custom component to have an ellipsis after the 2nd line\nconst EllipsisText = styled(Typography)`\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n`;\n\ninterface NpmPackageCardProps extends Pick<AppInfoContextValue, 'useYarn'> {\n npmPackage: Plugin | Provider;\n isInstalled: boolean;\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackageType: NpmPackageType;\n strapiAppVersion: AppInfoContextValue['strapiVersion'];\n}\n\nconst NpmPackageCard = ({\n npmPackage,\n isInstalled,\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n}: NpmPackageCardProps) => {\n const { attributes } = npmPackage;\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const commandToCopy = useYarn\n ? `yarn add ${attributes.npmPackageName}`\n : `npm install ${attributes.npmPackageName}`;\n\n const madeByStrapiMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi',\n defaultMessage: 'Made by Strapi',\n });\n\n const npmPackageHref = `https://market.strapi.io/${pluralize.plural(npmPackageType)}/${\n attributes.slug\n }`;\n\n return (\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n paddingTop={4}\n paddingRight={4}\n paddingBottom={4}\n paddingLeft={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n alignItems=\"normal\"\n data-testid=\"npm-package-card\"\n >\n <Box>\n <Flex direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Box\n as=\"img\"\n src={attributes.logo.url}\n alt={`${attributes.name} logo`}\n hasRadius\n width={11}\n height={11}\n />\n <PackageStats\n githubStars={attributes.githubStars}\n npmDownloads={attributes.npmDownloads}\n npmPackageType={npmPackageType}\n />\n </Flex>\n <Box paddingTop={4}>\n <Typography as=\"h3\" variant=\"delta\">\n <Flex alignItems=\"center\">\n {attributes.name}\n {attributes.validated && !attributes.madeByStrapi && (\n <Tooltip\n description={formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.verified',\n defaultMessage: 'Plugin verified by Strapi',\n })}\n >\n <Flex>\n <Icon as={CheckCircle} marginLeft={2} color=\"success600\" />\n </Flex>\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Flex>\n <Box\n as=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n marginLeft={1}\n width={6}\n height=\"auto\"\n />\n </Flex>\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText as=\"p\" variant=\"omega\" textColor=\"neutral600\">\n {attributes.description}\n </EllipsisText>\n </Box>\n </Box>\n\n <Flex gap={2} style={{ alignSelf: 'flex-end' }} paddingTop={6}>\n <LinkButton\n size=\"S\"\n href={npmPackageHref}\n isExternal\n endIcon={<ExternalLink />}\n aria-label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.info.label',\n defaultMessage: 'Learn more about {pluginName}',\n },\n { pluginName: attributes.name }\n )}\n variant=\"tertiary\"\n onClick={() => trackUsage('didPluginLearnMore')}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.info.text',\n defaultMessage: 'More',\n })}\n </LinkButton>\n <InstallPluginButton\n isInstalled={isInstalled}\n isInDevelopmentMode={isInDevelopmentMode}\n commandToCopy={commandToCopy}\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={attributes.strapiVersion}\n pluginName={attributes.name}\n />\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * InstallPluginButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InstallPluginButtonProps\n extends Pick<NpmPackageCardProps, 'isInstalled' | 'isInDevelopmentMode' | 'strapiAppVersion'> {\n commandToCopy: string;\n pluginName: string;\n strapiPeerDepVersion?: string;\n}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\n commandToCopy,\n strapiAppVersion,\n strapiPeerDepVersion,\n pluginName,\n}: InstallPluginButtonProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { copy } = useClipboard();\n\n const handleCopy = async () => {\n const didCopy = await copy(commandToCopy);\n\n if (didCopy) {\n trackUsage('willInstallPlugin');\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'admin.pages.MarketPlacePage.plugin.copy.success' }),\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Box paddingLeft={4}>\n <Icon as={Check} marginRight={2} width={12} height={12} color=\"success600\" />\n <Typography variant=\"omega\" textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.installed',\n defaultMessage: 'Installed',\n })}\n </Typography>\n </Box>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode) {\n return (\n <CardButton\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={strapiPeerDepVersion}\n handleCopy={handleCopy}\n pluginName={pluginName}\n />\n );\n }\n\n // Not in development and plugin not installed already. Show nothing\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CardButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CardButtonProps\n extends Pick<NpmPackageCardProps, 'strapiAppVersion'>,\n Pick<InstallPluginButtonProps, 'strapiPeerDepVersion' | 'pluginName'> {\n handleCopy: () => void;\n}\n\nconst CardButton = ({\n strapiPeerDepVersion,\n strapiAppVersion,\n handleCopy,\n pluginName,\n}: CardButtonProps) => {\n const { formatMessage } = useIntl();\n const versionRange = semver.validRange(strapiPeerDepVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n const installMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.copy',\n defaultMessage: 'Copy install command',\n });\n\n // Only plugins receive a strapiAppVersion\n if (strapiAppVersion) {\n if (!versionRange || !isCompatible) {\n return (\n <Tooltip\n data-testid={`tooltip-${pluginName}`}\n description={\n !versionRange\n ? formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version.null',\n defaultMessage:\n 'Unable to verify compatibility with your Strapi version: \"{strapiAppVersion}\"',\n },\n { strapiAppVersion }\n )\n : formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version',\n defaultMessage:\n 'Update your Strapi version: \"{strapiAppVersion}\" to: \"{versionRange}\"',\n },\n {\n strapiAppVersion,\n versionRange,\n }\n )\n }\n >\n <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\n </Tooltip>\n );\n }\n }\n\n return (\n <Button size=\"S\" startIcon={<Duplicate />} variant=\"secondary\" onClick={handleCopy}>\n {installMessage}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PackageStats\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PackageStatsProps {\n githubStars?: number;\n npmDownloads?: number;\n npmPackageType: NpmPackageType;\n}\n\nconst PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }: PackageStatsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={1}>\n {!!githubStars && (\n <>\n <Icon as={Github} height={`${12 / 16}rem`} width={`${12 / 16}rem`} aria-hidden />\n <Icon\n as={Star}\n height={`${12 / 16}rem`}\n width={`${12 / 16}rem`}\n color=\"warning500\"\n aria-hidden\n />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`,\n defaultMessage: `This {package} was starred {starsCount} on GitHub`,\n },\n {\n starsCount: githubStars,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {githubStars}\n </Typography>\n </p>\n <VerticalDivider unsetMargin={false} />\n </>\n )}\n <Icon as={Download} height={`${12 / 16}rem`} width={`${12 / 16}rem`} aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`,\n defaultMessage: `This {package} has {downloadsCount} weekly downloads`,\n },\n {\n downloadsCount: npmDownloads,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {npmDownloads}\n </Typography>\n </p>\n </Flex>\n );\n};\n\nconst VerticalDivider = styled(Divider)`\n width: ${12 / 16}rem;\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import { Box, Flex, Grid, GridItem, GridLayout, Icon, Typography } from '@strapi/design-system';\nimport { EmptyDocuments } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { Page } from '../../../components/PageHelpers';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\n\nimport { NpmPackageCard, NpmPackageCardProps } from './NpmPackageCard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\n\ninterface NpmPackagesGridProps extends Pick<NpmPackageCardProps, 'npmPackageType' | 'useYarn'> {\n debouncedSearch: string;\n installedPackageNames: string[];\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackages?: Array<Plugin | Provider>;\n status: 'idle' | 'loading' | 'error' | 'success';\n strapiAppVersion?: NpmPackageCardProps['strapiAppVersion'];\n}\n\nconst NpmPackagesGrid = ({\n status,\n npmPackages = [],\n installedPackageNames = [],\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n debouncedSearch,\n}: NpmPackagesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (status === 'error') {\n return <Page.Error />;\n }\n\n if (status === 'loading') {\n return <Page.Loading />;\n }\n\n const emptySearchMessage = formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.search.empty',\n defaultMessage: 'No result for \"{target}\"',\n },\n { target: debouncedSearch }\n );\n\n if (npmPackages.length === 0) {\n return (\n <Box position=\"relative\">\n <GridLayout>\n {Array(12)\n .fill(null)\n .map((_, idx) => (\n <EmptyPluginCard key={idx} height=\"234px\" hasRadius />\n ))}\n </GridLayout>\n <Box position=\"absolute\" top={11} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <Icon as={EmptyDocuments} color={undefined} width=\"160px\" height=\"88px\" />\n <Box paddingTop={6}>\n <Typography variant=\"delta\" as=\"p\" textColor=\"neutral600\">\n {emptySearchMessage}\n </Typography>\n </Box>\n </Flex>\n </Box>\n </Box>\n );\n }\n\n return (\n <Grid gap={4}>\n {npmPackages.map((npmPackage) => (\n <GridItem col={4} s={6} xs={12} style={{ height: '100%' }} key={npmPackage.id}>\n <NpmPackageCard\n npmPackage={npmPackage}\n isInstalled={installedPackageNames.includes(npmPackage.attributes.npmPackageName)}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType={npmPackageType}\n strapiAppVersion={strapiAppVersion}\n />\n </GridItem>\n ))}\n </Grid>\n );\n};\n\nconst EmptyPluginCard = styled(Box)`\n background: ${({ theme }) =>\n `linear-gradient(180deg, rgba(234, 234, 239, 0) 0%, ${theme.colors.neutral150} 100%)`};\n opacity: 0.33;\n`;\n\nexport { NpmPackagesGrid };\n","import { HeaderLayout } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useTracking } from '../../../features/Tracking';\n\nimport type { NpmPackageType } from '../MarketplacePage';\n\ninterface PageHeaderProps {\n isOnline?: boolean;\n npmPackageType?: NpmPackageType;\n}\n\nconst PageHeader = ({ isOnline, npmPackageType = 'plugin' }: PageHeaderProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tracking = npmPackageType === 'provider' ? 'didSubmitProvider' : 'didSubmitPlugin';\n\n return (\n <HeaderLayout\n title={formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.subtitle',\n defaultMessage: 'Get more out of Strapi',\n })}\n primaryAction={\n isOnline && (\n <LinkButton\n startIcon={<Upload />}\n variant=\"tertiary\"\n href={`https://market.strapi.io/submit-${npmPackageType}`}\n onClick={() => trackUsage(tracking)}\n isExternal\n >\n {formatMessage({\n id: `admin.pages.MarketPlacePage.submit.${npmPackageType}.link`,\n defaultMessage: `Submit ${npmPackageType}`,\n })}\n </LinkButton>\n )\n }\n />\n );\n};\n\nexport { PageHeader };\nexport type { PageHeaderProps };\n","import { Box, Flex, Layout, Main, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { PageHeader } from './PageHeader';\n\nconst OfflineLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Layout>\n <Main>\n <PageHeader />\n <Flex\n width=\"100%\"\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingTop={`${120 / 16}rem`}\n >\n <Box paddingBottom={2}>\n <Typography textColor=\"neutral700\" variant=\"alpha\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.title',\n defaultMessage: 'You are offline',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={6}>\n <Typography textColor=\"neutral700\" variant=\"epsilon\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.subtitle',\n defaultMessage: 'You need to be connected to the Internet to access Strapi Market.',\n })}\n </Typography>\n </Box>\n <svg\n width=\"88\"\n height=\"88\"\n viewBox=\"0 0 88 88\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" fill=\"#F0F0FF\" />\n <path\n d=\"M34 39.3h-4c-2.6 0-4.7 1-6.6 2.8a9 9 0 0 0-2.7 6.6 9 9 0 0 0 2.7 6.6A9 9 0 0 0 30 58h22.8L34 39.3Zm-11-11 3-3 39 39-3 3-4.7-4.6H30a13.8 13.8 0 0 1-14-14c0-3.8 1.3-7 4-9.7 2.6-2.7 5.7-4.2 9.5-4.3L23 28.2Zm38.2 11.1c3 .2 5.5 1.5 7.6 3.7A11 11 0 0 1 72 51c0 4-1.6 7.2-5 9.5l-3.3-3.4a6.5 6.5 0 0 0 3.6-6.1c0-1.9-.7-3.5-2-5-1.5-1.3-3.1-2-5-2h-3.5v-1.2c0-3.6-1.2-6.6-3.7-9a13 13 0 0 0-15-2.3L34.6 28a17 17 0 0 1 20.3 1.5c3.5 2.7 5.5 6 6.3 10Z\"\n fill=\"#4945FF\"\n />\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" stroke=\"#D9D8FF\" />\n </svg>\n </Flex>\n </Main>\n </Layout>\n );\n};\n\nexport { OfflineLayout };\n","import { Box, SingleSelectOption, SingleSelect } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst SORT_TYPES = {\n 'name:asc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical.selected',\n defaultMessage: 'Sort by alphabetical order',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical',\n defaultMessage: 'Alphabetical order',\n },\n },\n 'submissionDate:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.newest.selected',\n defaultMessage: 'Sort by newest',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.newest',\n defaultMessage: 'Newest',\n },\n },\n 'githubStars:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars.selected',\n defaultMessage: 'Sort by GitHub stars',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars',\n defaultMessage: 'Number of GitHub stars',\n },\n },\n 'npmDownloads:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads.selected',\n defaultMessage: 'Sort by npm downloads',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads',\n defaultMessage: 'Number of downloads',\n },\n },\n} as const;\n\ninterface SortSelectProps {\n sortQuery: keyof typeof SORT_TYPES;\n handleSelectChange: (payload: { sort: string }) => void;\n}\n\nconst SortSelect = ({ sortQuery, handleSelectChange }: SortSelectProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <SelectWrapper>\n <SingleSelect\n size=\"S\"\n id=\"sort-by-select\"\n value={sortQuery}\n customizeContent={() => formatMessage(SORT_TYPES[sortQuery].selected)}\n onChange={(sortName) => {\n // @ts-expect-error – in V2 design-system we'll only ever return strings.\n handleSelectChange({ sort: sortName });\n }}\n label={formatMessage({\n id: 'admin.pages.MarketPlacePage.sort.label',\n defaultMessage: 'Sort by',\n })}\n >\n {Object.entries(SORT_TYPES).map(([sortName, messages]) => {\n return (\n <SingleSelectOption key={sortName} value={sortName}>\n {formatMessage(messages.option)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled(Box)`\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n span {\n font-size: ${({ theme }) => theme.fontSizes[1]};\n }\n\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\nexport { SortSelect };\nexport type { SortSelectProps };\n","import { useNotifyAT } from '@strapi/design-system';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { useNotification } from '../../../features/Notifications';\n\nimport type { MarketplacePageQuery, NpmPackageType, TabQuery } from '../MarketplacePage';\n\nconst MARKETPLACE_API_URL = 'https://market-api.strapi.io';\n\ninterface UseMarketplaceDataParams {\n npmPackageType: NpmPackageType;\n debouncedSearch: string;\n query?: MarketplacePageQuery;\n tabQuery: TabQuery;\n}\n\ntype Collections =\n | 'Verified'\n | 'Made by the community'\n | 'Made by Strapi'\n | 'Made by official partners';\n\ntype Categories = 'Custom fields' | 'Deployment' | 'Monitoring';\n\ntype FilterTypes = 'categories' | 'collections';\n\ninterface Plugin {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n submissionDate: string;\n collections: Collections[];\n categories: Categories[];\n strapiVersion: string;\n screenshots: Array<{\n url: string;\n }>;\n };\n}\n\ninterface Provider {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n pluginName: string;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n strapiVersion?: never;\n submissionDate: string;\n collections: Collections[];\n };\n}\n\ninterface MarketplaceMeta {\n collections: Record<Collections, number>;\n pagination: {\n page: number;\n pageSize: number;\n pageCount: number;\n total: number;\n };\n}\n\ninterface MarketplaceResponse<TData extends Plugin | Provider> {\n data: TData[];\n meta: TData extends Provider\n ? MarketplaceMeta\n : MarketplaceMeta & { categories: Record<Categories, number> };\n}\n\nfunction useMarketplaceData({\n npmPackageType,\n debouncedSearch,\n query,\n tabQuery,\n}: UseMarketplaceDataParams) {\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const marketplaceTitle = formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n });\n\n const notifyMarketplaceLoad = () => {\n notifyStatus(\n formatMessage(\n {\n id: 'app.utils.notify.data-loaded',\n defaultMessage: 'The {target} has loaded',\n },\n { target: marketplaceTitle }\n )\n );\n };\n\n const paginationParams = {\n page: query?.page || 1,\n pageSize: query?.pageSize || 24,\n };\n\n const pluginParams = {\n ...tabQuery.plugin,\n pagination: paginationParams,\n search: debouncedSearch,\n };\n\n const { data: pluginsResponse, status: pluginsStatus } = useQuery(\n ['marketplace', 'plugins', pluginParams],\n async () => {\n try {\n const queryString = qs.stringify(pluginParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/plugins?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace plugins.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Plugin>;\n\n return data;\n } catch (error) {\n // silence\n }\n\n return null;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const providerParams = {\n ...tabQuery.provider,\n pagination: paginationParams,\n search: debouncedSearch,\n };\n\n const { data: providersResponse, status: providersStatus } = useQuery(\n ['marketplace', 'providers', providerParams],\n async () => {\n const queryString = qs.stringify(providerParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/providers?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace providers.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Provider>;\n\n return data;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const npmPackageTypeResponse = npmPackageType === 'plugin' ? pluginsResponse : providersResponse;\n\n const possibleCollections = npmPackageTypeResponse?.meta.collections ?? {};\n const possibleCategories = pluginsResponse?.meta.categories ?? {};\n\n const { pagination } = npmPackageTypeResponse?.meta ?? {};\n\n return {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n };\n}\n\nexport { useMarketplaceData };\nexport type {\n MarketplaceResponse,\n Plugin,\n Provider,\n MarketplaceMeta,\n Collections,\n Categories,\n FilterTypes,\n UseMarketplaceDataParams,\n};\n","import * as React from 'react';\n\n/**\n * For more details about this hook see:\n * https://www.30secondsofcode.org/react/s/use-navigator-on-line\n */\nexport const useNavigatorOnline = (): boolean => {\n const onlineStatus =\n typeof navigator !== 'undefined' && typeof navigator.onLine === 'boolean'\n ? navigator.onLine\n : true;\n\n const [isOnline, setIsOnline] = React.useState(onlineStatus);\n\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n\n React.useEffect(() => {\n window.addEventListener('online', setOnline);\n window.addEventListener('offline', setOffline);\n\n return () => {\n window.removeEventListener('online', setOnline);\n window.removeEventListener('offline', setOffline);\n };\n }, []);\n\n return isOnline;\n};\n","import * as React from 'react';\n\nimport {\n Box,\n ContentLayout,\n Flex,\n Icon,\n Layout,\n Searchbar,\n Tab,\n TabGroup,\n TabPanel,\n TabPanels,\n Tabs,\n} from '@strapi/design-system';\nimport { ExternalLink, GlassesSquare } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { ContentBox } from '../../components/ContentBox';\nimport { Page } from '../../components/PageHelpers';\nimport { Pagination } from '../../components/Pagination';\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useNotification } from '../../features/Notifications';\nimport { useTracking } from '../../features/Tracking';\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { useQueryParams } from '../../hooks/useQueryParams';\n\nimport { NpmPackagesFilters } from './components/NpmPackagesFilters';\nimport { NpmPackagesGrid } from './components/NpmPackagesGrid';\nimport { OfflineLayout } from './components/OfflineLayout';\nimport { PageHeader } from './components/PageHeader';\nimport { SortSelect, SortSelectProps } from './components/SortSelect';\nimport { FilterTypes, useMarketplaceData } from './hooks/useMarketplaceData';\nimport { useNavigatorOnline } from './hooks/useNavigatorOnline';\n\ntype NpmPackageType = 'plugin' | 'provider';\n\ninterface MarketplacePageQuery {\n collections?: string[];\n categories?: string[];\n npmPackageType?: NpmPackageType;\n page?: number;\n pageSize?: number;\n search?: string;\n sort?: SortSelectProps['sortQuery'];\n}\n\ninterface TabQuery {\n plugin: MarketplacePageQuery;\n provider: MarketplacePageQuery;\n}\n\nconst MarketplacePage = () => {\n const tabRef = React.useRef<any>(null);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }, setQuery] = useQueryParams<MarketplacePageQuery>();\n const debouncedSearch = useDebounce(query?.search, 500) || '';\n\n const {\n autoReload: isInDevelopmentMode,\n dependencies,\n useYarn,\n strapiVersion,\n } = useAppInfo('MarketplacePage', (state) => state);\n const isOnline = useNavigatorOnline();\n\n const npmPackageType = query?.npmPackageType || 'plugin';\n\n const [tabQuery, setTabQuery] = React.useState<TabQuery>({\n plugin: npmPackageType === 'plugin' ? { ...query } : {},\n provider: npmPackageType === 'provider' ? { ...query } : {},\n });\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n }),\n });\n }\n }, [toggleNotification, isInDevelopmentMode, formatMessage]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery });\n\n const indexOfNpmPackageType = ['plugin', 'provider'].indexOf(npmPackageType);\n\n // TODO: Replace this solution with v2 of the Design System\n // Check if the active tab index changes and call the handler of the ref to update the tab group component\n React.useEffect(() => {\n if (tabRef.current) {\n tabRef.current._handlers.setSelectedTabIndex(indexOfNpmPackageType);\n }\n }, [indexOfNpmPackageType]);\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (selected: number) => {\n const selectedTab = selected === 0 ? 'plugin' : 'provider';\n const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;\n\n if (hasTabQuery) {\n setQuery({\n // Keep filters and search\n ...tabQuery[selectedTab],\n search: query?.search || '',\n // Set tab and reset page\n npmPackageType: selectedTab,\n page: 1,\n });\n } else {\n setQuery({\n // Set tab\n npmPackageType: selectedTab,\n // Clear filters\n collections: [],\n categories: [],\n sort: 'name:asc',\n page: 1,\n // Keep search\n search: query?.search || '',\n });\n }\n };\n\n const handleSelectChange = (update: Partial<MarketplacePageQuery>) => {\n setQuery({ ...update, page: 1 });\n setTabQuery((prev) => ({\n ...prev,\n [npmPackageType]: { ...prev[npmPackageType], ...update },\n }));\n };\n\n const handleSelectClear = (filterType: FilterTypes) => {\n setQuery({ [filterType]: [], page: undefined }, 'remove');\n setTabQuery((prev) => ({ ...prev, [npmPackageType]: {} }));\n };\n\n const handleSortSelectChange: SortSelectProps['handleSelectChange'] = ({ sort }) =>\n // @ts-expect-error - this is a narrowing issue.\n handleSelectChange({ sort });\n\n // Check if plugins and providers are installed already\n const installedPackageNames = Object.keys(dependencies ?? {});\n\n return (\n <Layout>\n <Page.Main>\n <Page.Title>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.head',\n defaultMessage: 'Marketplace - Plugins',\n })}\n </Page.Title>\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <ContentLayout>\n <TabGroup\n label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n id=\"tabs\"\n variant=\"simple\"\n initialSelectedTabIndex={indexOfNpmPackageType}\n onTabChange={handleTabChange}\n ref={tabRef}\n >\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tab>\n </Tabs>\n <Box width=\"25%\">\n <Searchbar\n name=\"searchbar\"\n onClear={() => setQuery({ search: '', page: 1 })}\n value={query?.search}\n onChange={(e) => setQuery({ search: e.target.value, page: 1 })}\n clearLabel={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.clear',\n defaultMessage: 'Clear the search',\n })}\n placeholder={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n </Searchbar>\n </Box>\n </Flex>\n <Flex paddingBottom={4} gap={2}>\n <SortSelect\n sortQuery={query?.sort || 'name:asc'}\n handleSelectChange={handleSortSelectChange}\n />\n <NpmPackagesFilters\n npmPackageType={npmPackageType}\n possibleCollections={possibleCollections}\n possibleCategories={possibleCategories}\n query={query || {}}\n handleSelectChange={handleSelectChange}\n handleSelectClear={handleSelectClear}\n />\n </Flex>\n\n <TabPanels>\n {/* Plugins panel */}\n <TabPanel>\n <NpmPackagesGrid\n npmPackages={pluginsResponse?.data}\n status={pluginsStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"plugin\"\n strapiAppVersion={strapiVersion}\n debouncedSearch={debouncedSearch}\n />\n </TabPanel>\n {/* Providers panel */}\n <TabPanel>\n <NpmPackagesGrid\n npmPackages={providersResponse?.data}\n status={providersStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"provider\"\n debouncedSearch={debouncedSearch}\n />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n <Pagination.Root {...pagination} defaultPageSize={24}>\n <Pagination.PageSize options={['12', '24', '50', '100']} />\n <Pagination.Links />\n </Pagination.Root>\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <Icon as={ExternalLink} color=\"neutral600\" width={3} height={3} marginLeft={2} />\n }\n />\n </a>\n </Box>\n </ContentLayout>\n </Page.Main>\n </Layout>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.marketplace?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <MarketplacePage />\n </Page.Protect>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["React","useIntl","jsxs","Fragment","Box","jsx","Filter","Popover","Tag","Cross","styled","Button","Flex","MultiSelect","MultiSelectOption","Typography","useTracking","pluralize","Tooltip","Icon","CheckCircle","StrapiLogo","LinkButton","ExternalLink","useNotification","useClipboard","Check","semver","Duplicate","Github","Star","Download","Divider","Page","GridLayout","EmptyDocuments","Grid","GridItem","HeaderLayout","Upload","Layout","Main","SingleSelect","SingleSelectOption","useNotifyAT","useQuery","qs","useQueryParams","useAppInfo","ContentLayout","TabGroup","Tabs","Tab","Searchbar","TabPanels","TabPanel","Pagination","ContentBox","GlassesSquare","useTypedSelector"],"mappings":"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"}