@strapi/admin 5.33.4 → 5.34.0

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 (287) hide show
  1. package/dist/admin/admin/src/components/GradientBadge.js +18 -2
  2. package/dist/admin/admin/src/components/GradientBadge.js.map +1 -1
  3. package/dist/admin/admin/src/components/GradientBadge.mjs +19 -3
  4. package/dist/admin/admin/src/components/GradientBadge.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/Layouts/ActionLayout.js +8 -1
  6. package/dist/admin/admin/src/components/Layouts/ActionLayout.js.map +1 -1
  7. package/dist/admin/admin/src/components/Layouts/ActionLayout.mjs +8 -1
  8. package/dist/admin/admin/src/components/Layouts/ActionLayout.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/Layouts/ContentLayout.js +4 -0
  10. package/dist/admin/admin/src/components/Layouts/ContentLayout.js.map +1 -1
  11. package/dist/admin/admin/src/components/Layouts/ContentLayout.mjs +4 -0
  12. package/dist/admin/admin/src/components/Layouts/ContentLayout.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +80 -49
  14. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  15. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +81 -50
  16. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +1 -0
  18. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
  19. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs +1 -0
  20. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/MainNav/NavLink.js +37 -6
  22. package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
  23. package/dist/admin/admin/src/components/MainNav/NavLink.mjs +38 -7
  24. package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/SubNav.js +39 -18
  26. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  27. package/dist/admin/admin/src/components/SubNav.mjs +39 -18
  28. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  29. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  30. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  31. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  32. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  33. package/dist/admin/admin/src/hooks/useMenu.js +2 -1
  34. package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
  35. package/dist/admin/admin/src/hooks/useMenu.mjs +2 -1
  36. package/dist/admin/admin/src/hooks/useMenu.mjs.map +1 -1
  37. package/dist/admin/admin/src/pages/Auth/components/Register.js +2 -1
  38. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  39. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +2 -1
  40. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  41. package/dist/admin/admin/src/pages/Home/HomePage.js +1 -0
  42. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  43. package/dist/admin/admin/src/pages/Home/HomePage.mjs +1 -0
  44. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  45. package/dist/admin/admin/src/pages/ProfilePage.js +1 -0
  46. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  47. package/dist/admin/admin/src/pages/ProfilePage.mjs +1 -0
  48. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  49. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +7 -2
  50. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  51. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +7 -2
  52. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  53. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +44 -26
  54. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  55. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +45 -27
  56. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  57. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +1 -0
  58. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  59. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +1 -0
  60. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  61. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -0
  62. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +1 -0
  64. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +3 -0
  66. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +3 -0
  68. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +9 -11
  70. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +10 -12
  72. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js +1 -0
  74. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs +1 -0
  76. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +1 -0
  78. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs +1 -0
  80. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +1 -0
  82. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  83. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs +1 -0
  84. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
  85. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js +1 -0
  86. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js.map +1 -1
  87. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.mjs +1 -0
  88. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.mjs.map +1 -1
  89. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js +1 -0
  90. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
  91. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs +1 -0
  92. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs.map +1 -1
  93. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +3 -0
  94. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  95. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs +3 -0
  96. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
  97. package/dist/admin/admin/src/router.js +0 -9
  98. package/dist/admin/admin/src/router.js.map +1 -1
  99. package/dist/admin/admin/src/router.mjs +0 -9
  100. package/dist/admin/admin/src/router.mjs.map +1 -1
  101. package/dist/admin/admin/src/translations/ar.json.js +0 -42
  102. package/dist/admin/admin/src/translations/ar.json.js.map +1 -1
  103. package/dist/admin/admin/src/translations/ar.json.mjs +0 -42
  104. package/dist/admin/admin/src/translations/ar.json.mjs.map +1 -1
  105. package/dist/admin/admin/src/translations/ca.json.js +0 -21
  106. package/dist/admin/admin/src/translations/ca.json.js.map +1 -1
  107. package/dist/admin/admin/src/translations/ca.json.mjs +0 -21
  108. package/dist/admin/admin/src/translations/ca.json.mjs.map +1 -1
  109. package/dist/admin/admin/src/translations/de.json.js +422 -66
  110. package/dist/admin/admin/src/translations/de.json.js.map +1 -1
  111. package/dist/admin/admin/src/translations/de.json.mjs +419 -67
  112. package/dist/admin/admin/src/translations/de.json.mjs.map +1 -1
  113. package/dist/admin/admin/src/translations/dk.json.js +0 -6
  114. package/dist/admin/admin/src/translations/dk.json.js.map +1 -1
  115. package/dist/admin/admin/src/translations/dk.json.mjs +0 -6
  116. package/dist/admin/admin/src/translations/dk.json.mjs.map +1 -1
  117. package/dist/admin/admin/src/translations/en.json.js +0 -44
  118. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  119. package/dist/admin/admin/src/translations/en.json.mjs +0 -44
  120. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  121. package/dist/admin/admin/src/translations/es.json.js +0 -25
  122. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  123. package/dist/admin/admin/src/translations/es.json.mjs +0 -25
  124. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  125. package/dist/admin/admin/src/translations/eu.json.js +0 -43
  126. package/dist/admin/admin/src/translations/eu.json.js.map +1 -1
  127. package/dist/admin/admin/src/translations/eu.json.mjs +0 -43
  128. package/dist/admin/admin/src/translations/eu.json.mjs.map +1 -1
  129. package/dist/admin/admin/src/translations/fr.json.js +0 -6
  130. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  131. package/dist/admin/admin/src/translations/fr.json.mjs +0 -6
  132. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  133. package/dist/admin/admin/src/translations/gu.json.js +0 -21
  134. package/dist/admin/admin/src/translations/gu.json.js.map +1 -1
  135. package/dist/admin/admin/src/translations/gu.json.mjs +0 -21
  136. package/dist/admin/admin/src/translations/gu.json.mjs.map +1 -1
  137. package/dist/admin/admin/src/translations/hi.json.js +0 -21
  138. package/dist/admin/admin/src/translations/hi.json.js.map +1 -1
  139. package/dist/admin/admin/src/translations/hi.json.mjs +0 -21
  140. package/dist/admin/admin/src/translations/hi.json.mjs.map +1 -1
  141. package/dist/admin/admin/src/translations/hu.json.js +0 -43
  142. package/dist/admin/admin/src/translations/hu.json.js.map +1 -1
  143. package/dist/admin/admin/src/translations/hu.json.mjs +0 -43
  144. package/dist/admin/admin/src/translations/hu.json.mjs.map +1 -1
  145. package/dist/admin/admin/src/translations/it.json.js +613 -3
  146. package/dist/admin/admin/src/translations/it.json.js.map +1 -1
  147. package/dist/admin/admin/src/translations/it.json.mjs +605 -4
  148. package/dist/admin/admin/src/translations/it.json.mjs.map +1 -1
  149. package/dist/admin/admin/src/translations/ja.json.js +0 -6
  150. package/dist/admin/admin/src/translations/ja.json.js.map +1 -1
  151. package/dist/admin/admin/src/translations/ja.json.mjs +0 -6
  152. package/dist/admin/admin/src/translations/ja.json.mjs.map +1 -1
  153. package/dist/admin/admin/src/translations/ko.json.js +0 -6
  154. package/dist/admin/admin/src/translations/ko.json.js.map +1 -1
  155. package/dist/admin/admin/src/translations/ko.json.mjs +0 -6
  156. package/dist/admin/admin/src/translations/ko.json.mjs.map +1 -1
  157. package/dist/admin/admin/src/translations/ml.json.js +0 -21
  158. package/dist/admin/admin/src/translations/ml.json.js.map +1 -1
  159. package/dist/admin/admin/src/translations/ml.json.mjs +0 -21
  160. package/dist/admin/admin/src/translations/ml.json.mjs.map +1 -1
  161. package/dist/admin/admin/src/translations/nl.json.js +0 -39
  162. package/dist/admin/admin/src/translations/nl.json.js.map +1 -1
  163. package/dist/admin/admin/src/translations/nl.json.mjs +0 -39
  164. package/dist/admin/admin/src/translations/nl.json.mjs.map +1 -1
  165. package/dist/admin/admin/src/translations/pl.json.js +0 -21
  166. package/dist/admin/admin/src/translations/pl.json.js.map +1 -1
  167. package/dist/admin/admin/src/translations/pl.json.mjs +0 -21
  168. package/dist/admin/admin/src/translations/pl.json.mjs.map +1 -1
  169. package/dist/admin/admin/src/translations/pt-BR.json.js +0 -25
  170. package/dist/admin/admin/src/translations/pt-BR.json.js.map +1 -1
  171. package/dist/admin/admin/src/translations/pt-BR.json.mjs +0 -25
  172. package/dist/admin/admin/src/translations/pt-BR.json.mjs.map +1 -1
  173. package/dist/admin/admin/src/translations/ru.json.js +0 -44
  174. package/dist/admin/admin/src/translations/ru.json.js.map +1 -1
  175. package/dist/admin/admin/src/translations/ru.json.mjs +0 -44
  176. package/dist/admin/admin/src/translations/ru.json.mjs.map +1 -1
  177. package/dist/admin/admin/src/translations/sa.json.js +0 -21
  178. package/dist/admin/admin/src/translations/sa.json.js.map +1 -1
  179. package/dist/admin/admin/src/translations/sa.json.mjs +0 -21
  180. package/dist/admin/admin/src/translations/sa.json.mjs.map +1 -1
  181. package/dist/admin/admin/src/translations/sv.json.js +0 -39
  182. package/dist/admin/admin/src/translations/sv.json.js.map +1 -1
  183. package/dist/admin/admin/src/translations/sv.json.mjs +0 -39
  184. package/dist/admin/admin/src/translations/sv.json.mjs.map +1 -1
  185. package/dist/admin/admin/src/translations/tr.json.js +0 -39
  186. package/dist/admin/admin/src/translations/tr.json.js.map +1 -1
  187. package/dist/admin/admin/src/translations/tr.json.mjs +0 -39
  188. package/dist/admin/admin/src/translations/tr.json.mjs.map +1 -1
  189. package/dist/admin/admin/src/translations/uk.json.js +0 -44
  190. package/dist/admin/admin/src/translations/uk.json.js.map +1 -1
  191. package/dist/admin/admin/src/translations/uk.json.mjs +0 -44
  192. package/dist/admin/admin/src/translations/uk.json.mjs.map +1 -1
  193. package/dist/admin/admin/src/translations/vi.json.js +0 -44
  194. package/dist/admin/admin/src/translations/vi.json.js.map +1 -1
  195. package/dist/admin/admin/src/translations/vi.json.mjs +0 -44
  196. package/dist/admin/admin/src/translations/vi.json.mjs.map +1 -1
  197. package/dist/admin/admin/src/translations/zh-Hans.json.js +0 -44
  198. package/dist/admin/admin/src/translations/zh-Hans.json.js.map +1 -1
  199. package/dist/admin/admin/src/translations/zh-Hans.json.mjs +0 -44
  200. package/dist/admin/admin/src/translations/zh-Hans.json.mjs.map +1 -1
  201. package/dist/admin/admin/src/translations/zh.json.js +0 -39
  202. package/dist/admin/admin/src/translations/zh.json.js.map +1 -1
  203. package/dist/admin/admin/src/translations/zh.json.mjs +0 -39
  204. package/dist/admin/admin/src/translations/zh.json.mjs.map +1 -1
  205. package/dist/admin/admin/tests/mockData.js +0 -1413
  206. package/dist/admin/admin/tests/mockData.js.map +1 -1
  207. package/dist/admin/admin/tests/mockData.mjs +0 -1413
  208. package/dist/admin/admin/tests/mockData.mjs.map +1 -1
  209. package/dist/admin/admin/tests/server.js +0 -99
  210. package/dist/admin/admin/tests/server.js.map +1 -1
  211. package/dist/admin/admin/tests/server.mjs +0 -80
  212. package/dist/admin/admin/tests/server.mjs.map +1 -1
  213. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -0
  214. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  215. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +1 -0
  216. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
  217. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js +2 -0
  218. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js.map +1 -1
  219. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.mjs +2 -0
  220. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.mjs.map +1 -1
  221. package/dist/admin/src/components/MainNav/NavLink.d.ts +2 -2
  222. package/dist/admin/src/core/apis/router.d.ts +1 -0
  223. package/dist/admin/src/features/Tracking.d.ts +1 -1
  224. package/dist/admin/src/hooks/useMenu.d.ts +1 -0
  225. package/dist/admin/tests/mockData.d.ts +0 -972
  226. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +53 -0
  227. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -0
  228. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +51 -0
  229. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -0
  230. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +7 -8
  231. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  232. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +10 -11
  233. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  234. package/dist/server/server/src/services/permission/permissions-manager/validate.js +7 -8
  235. package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
  236. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +10 -11
  237. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
  238. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts +21 -0
  239. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -0
  240. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  241. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  242. package/package.json +7 -7
  243. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js +0 -339
  244. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js.map +0 -1
  245. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs +0 -317
  246. package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs.map +0 -1
  247. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js +0 -329
  248. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +0 -1
  249. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs +0 -308
  250. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +0 -1
  251. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js +0 -121
  252. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js.map +0 -1
  253. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs +0 -119
  254. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs.map +0 -1
  255. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.js +0 -93
  256. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.js.map +0 -1
  257. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.mjs +0 -91
  258. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.mjs.map +0 -1
  259. package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.js +0 -81
  260. package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.js.map +0 -1
  261. package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.mjs +0 -79
  262. package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.mjs.map +0 -1
  263. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js +0 -38
  264. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js.map +0 -1
  265. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs +0 -36
  266. package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs.map +0 -1
  267. package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.js +0 -85
  268. package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.js.map +0 -1
  269. package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.mjs +0 -83
  270. package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.mjs.map +0 -1
  271. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js +0 -134
  272. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js.map +0 -1
  273. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs +0 -113
  274. package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs.map +0 -1
  275. package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.js +0 -44
  276. package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.js.map +0 -1
  277. package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.mjs +0 -23
  278. package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.mjs.map +0 -1
  279. package/dist/admin/src/pages/Marketplace/MarketplacePage.d.ts +0 -19
  280. package/dist/admin/src/pages/Marketplace/components/NpmPackageCard.d.ts +0 -13
  281. package/dist/admin/src/pages/Marketplace/components/NpmPackagesFilters.d.ts +0 -13
  282. package/dist/admin/src/pages/Marketplace/components/NpmPackagesGrid.d.ts +0 -13
  283. package/dist/admin/src/pages/Marketplace/components/OfflineLayout.d.ts +0 -2
  284. package/dist/admin/src/pages/Marketplace/components/PageHeader.d.ts +0 -8
  285. package/dist/admin/src/pages/Marketplace/components/SortSelect.d.ts +0 -51
  286. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +0 -93
  287. package/dist/admin/src/pages/Marketplace/hooks/useNavigatorOnline.d.ts +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"EditPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n if (role.code !== 'strapi-super-admin' && permissionsToSend) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n\n if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Flex gap={2}>\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin'}\n loading={isSubmitting}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","permissionsToSend","didUpdateConditions","current","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Flex","gap","Button","startIcon","Check","disabled","loading","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","RoleForm","onChange","onBlur","shadow","hasRadius","Permissions","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"EditPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n if (role.code !== 'strapi-super-admin' && permissionsToSend) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n\n if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin'}\n loading={isSubmitting}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","permissionsToSend","didUpdateConditions","current","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Button","startIcon","Check","disabled","loading","fullWidth","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","Flex","direction","alignItems","gap","RoleForm","onChange","onBlur","shadow","hasRadius","Permissions","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
@@ -130,6 +130,7 @@ const ListPage = ()=>{
130
130
  onClick: handleNewRoleClick,
131
131
  startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
132
132
  size: "S",
133
+ fullWidth: true,
133
134
  children: formatMessage({
134
135
  id: 'Settings.roles.list.button.add',
135
136
  defaultMessage: 'Add new role'
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Button,\n Dialog,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAdminRoles, AdminRole } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { isFetchError } from '../../../../utils/getFetchClient';\n\nimport { RoleRow, RoleRowProps } from './components/RoleRow';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector(selectAdminPermissions);\n const { formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = React.useState(false);\n const [{ query }] = useQueryParams<{ _q?: string }>();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings?.roles);\n\n const { roles, refetch: refetchRoles } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n refetchOnMountOrArgChange: true,\n skip: isLoadingForPermissions || !canRead,\n }\n );\n\n const navigate = useNavigate();\n const [{ roleToDelete }, dispatch] = React.useReducer(reducer, initialState);\n const { post } = useFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n if (isFetchError(error)) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }\n };\n\n const handleNewRoleClick = () => navigate('new');\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleClickDelete = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: 'Roles.ListPage.notification.delete-not-allowed' }),\n });\n } else {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: role.id,\n });\n\n handleToggleModal();\n }\n };\n\n const handleClickDuplicate = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n navigate(`duplicate/${role.id}`);\n };\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\">\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n />\n {canRead && (\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n {\n target: formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n }),\n }\n )}\n />\n }\n />\n )}\n {canRead && (\n <Layouts.Content>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <RoleRow\n cursor=\"pointer\"\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={\n [\n canCreate &&\n ({\n onClick: handleClickDuplicate(role),\n label: formatMessage({\n id: 'app.utils.duplicate',\n defaultMessage: 'Duplicate',\n }),\n children: <Duplicate />,\n } satisfies RoleRowProps['icons'][number]),\n canUpdate &&\n ({\n onClick: () => navigate(role.id.toString()),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n children: <Pencil />,\n } satisfies RoleRowProps['icons'][number]),\n canDelete &&\n ({\n onClick: handleClickDelete(role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n children: <Trash />,\n } satisfies RoleRowProps['icons'][number]),\n ].filter(Boolean) as RoleRowProps['icons']\n }\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n </Layouts.Content>\n )}\n <Dialog.Root open={isWarningDeleteAllOpened} onOpenChange={handleToggleModal}>\n <ConfirmDialog onConfirm={handleDeleteData} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * TODO: do we actually need this reducer? It's not doing a lot...\n */\n\ninterface State {\n roleToDelete: null | AdminRole['id'];\n showModalConfirmButtonLoading: boolean;\n shouldRefetchData: boolean;\n}\n\nconst initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n} satisfies State;\n\ninterface SetRoleToDeleteAction extends Pick<AdminRole, 'id'> {\n type: 'SET_ROLE_TO_DELETE';\n}\n\ninterface ResetDataToDeleteAction {\n type: 'RESET_DATA_TO_DELETE';\n}\n\ninterface OnRemoveRolesAction {\n type: 'ON_REMOVE_ROLES';\n}\n\ninterface OnRemoveRolesSucceededAction {\n type: 'ON_REMOVE_ROLES_SUCCEEDED';\n}\n\ntype Action =\n | SetRoleToDeleteAction\n | ResetDataToDeleteAction\n | OnRemoveRolesAction\n | OnRemoveRolesSucceededAction;\n\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.roles.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","selectAdminPermissions","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","isWarningDeleteAllOpened","setIsWarningDeleteAllOpenend","React","useState","query","useQueryParams","isLoading","isLoadingForPermissions","allowedActions","canCreate","canDelete","canRead","canUpdate","useRBAC","settings","roles","refetch","refetchRoles","useAdminRoles","filters","_q","name","$containsi","undefined","refetchOnMountOrArgChange","skip","navigate","useNavigate","roleToDelete","dispatch","useReducer","reducer","initialState","post","useFetchClient","handleDeleteData","type","ids","error","isFetchError","message","handleNewRoleClick","handleToggleModal","prev","handleClickDelete","role","e","preventDefault","stopPropagation","usersCount","id","handleClickDuplicate","rowCount","length","colCount","_jsx","Page","Loading","_jsxs","Main","Title","defaultMessage","Layouts","Header","primaryAction","Button","onClick","startIcon","Plus","size","title","subtitle","Action","startActions","SearchInput","label","target","Content","Table","footer","TFooter","cursor","icon","Thead","Tr","aria-rowindex","Th","Typography","variant","textColor","VisuallyHidden","Tbody","map","index","RoleRow","description","icons","children","Duplicate","toString","Pencil","Trash","filter","Boolean","rowIndex","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","showModalConfirmButtonLoading","shouldRefetchData","state","action","produce","draftState","ProtectedListPage","admin_app","read","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"ListPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Button,\n Dialog,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAdminRoles, AdminRole } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { isFetchError } from '../../../../utils/getFetchClient';\n\nimport { RoleRow, RoleRowProps } from './components/RoleRow';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector(selectAdminPermissions);\n const { formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = React.useState(false);\n const [{ query }] = useQueryParams<{ _q?: string }>();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings?.roles);\n\n const { roles, refetch: refetchRoles } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n refetchOnMountOrArgChange: true,\n skip: isLoadingForPermissions || !canRead,\n }\n );\n\n const navigate = useNavigate();\n const [{ roleToDelete }, dispatch] = React.useReducer(reducer, initialState);\n const { post } = useFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n if (isFetchError(error)) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }\n };\n\n const handleNewRoleClick = () => navigate('new');\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleClickDelete = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: 'Roles.ListPage.notification.delete-not-allowed' }),\n });\n } else {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: role.id,\n });\n\n handleToggleModal();\n }\n };\n\n const handleClickDuplicate = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n navigate(`duplicate/${role.id}`);\n };\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\" fullWidth>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n />\n {canRead && (\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n {\n target: formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n }),\n }\n )}\n />\n }\n />\n )}\n {canRead && (\n <Layouts.Content>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <RoleRow\n cursor=\"pointer\"\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={\n [\n canCreate &&\n ({\n onClick: handleClickDuplicate(role),\n label: formatMessage({\n id: 'app.utils.duplicate',\n defaultMessage: 'Duplicate',\n }),\n children: <Duplicate />,\n } satisfies RoleRowProps['icons'][number]),\n canUpdate &&\n ({\n onClick: () => navigate(role.id.toString()),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n children: <Pencil />,\n } satisfies RoleRowProps['icons'][number]),\n canDelete &&\n ({\n onClick: handleClickDelete(role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n children: <Trash />,\n } satisfies RoleRowProps['icons'][number]),\n ].filter(Boolean) as RoleRowProps['icons']\n }\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n </Layouts.Content>\n )}\n <Dialog.Root open={isWarningDeleteAllOpened} onOpenChange={handleToggleModal}>\n <ConfirmDialog onConfirm={handleDeleteData} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * TODO: do we actually need this reducer? It's not doing a lot...\n */\n\ninterface State {\n roleToDelete: null | AdminRole['id'];\n showModalConfirmButtonLoading: boolean;\n shouldRefetchData: boolean;\n}\n\nconst initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n} satisfies State;\n\ninterface SetRoleToDeleteAction extends Pick<AdminRole, 'id'> {\n type: 'SET_ROLE_TO_DELETE';\n}\n\ninterface ResetDataToDeleteAction {\n type: 'RESET_DATA_TO_DELETE';\n}\n\ninterface OnRemoveRolesAction {\n type: 'ON_REMOVE_ROLES';\n}\n\ninterface OnRemoveRolesSucceededAction {\n type: 'ON_REMOVE_ROLES_SUCCEEDED';\n}\n\ntype Action =\n | SetRoleToDeleteAction\n | ResetDataToDeleteAction\n | OnRemoveRolesAction\n | OnRemoveRolesSucceededAction;\n\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.roles.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","selectAdminPermissions","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","isWarningDeleteAllOpened","setIsWarningDeleteAllOpenend","React","useState","query","useQueryParams","isLoading","isLoadingForPermissions","allowedActions","canCreate","canDelete","canRead","canUpdate","useRBAC","settings","roles","refetch","refetchRoles","useAdminRoles","filters","_q","name","$containsi","undefined","refetchOnMountOrArgChange","skip","navigate","useNavigate","roleToDelete","dispatch","useReducer","reducer","initialState","post","useFetchClient","handleDeleteData","type","ids","error","isFetchError","message","handleNewRoleClick","handleToggleModal","prev","handleClickDelete","role","e","preventDefault","stopPropagation","usersCount","id","handleClickDuplicate","rowCount","length","colCount","_jsx","Page","Loading","_jsxs","Main","Title","defaultMessage","Layouts","Header","primaryAction","Button","onClick","startIcon","Plus","size","fullWidth","title","subtitle","Action","startActions","SearchInput","label","target","Content","Table","footer","TFooter","cursor","icon","Thead","Tr","aria-rowindex","Th","Typography","variant","textColor","VisuallyHidden","Tbody","map","index","RoleRow","description","icons","children","Duplicate","toString","Pencil","Trash","filter","Boolean","rowIndex","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","showModalConfirmButtonLoading","shouldRefetchData","state","action","produce","draftState","ProtectedListPage","admin_app","read","Protect"],"mappings":"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"}
@@ -109,6 +109,7 @@ const ListPage = ()=>{
109
109
  onClick: handleNewRoleClick,
110
110
  startIcon: /*#__PURE__*/ jsx(Plus, {}),
111
111
  size: "S",
112
+ fullWidth: true,
112
113
  children: formatMessage({
113
114
  id: 'Settings.roles.list.button.add',
114
115
  defaultMessage: 'Add new role'
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Button,\n Dialog,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAdminRoles, AdminRole } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { isFetchError } from '../../../../utils/getFetchClient';\n\nimport { RoleRow, RoleRowProps } from './components/RoleRow';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector(selectAdminPermissions);\n const { formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = React.useState(false);\n const [{ query }] = useQueryParams<{ _q?: string }>();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings?.roles);\n\n const { roles, refetch: refetchRoles } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n refetchOnMountOrArgChange: true,\n skip: isLoadingForPermissions || !canRead,\n }\n );\n\n const navigate = useNavigate();\n const [{ roleToDelete }, dispatch] = React.useReducer(reducer, initialState);\n const { post } = useFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n if (isFetchError(error)) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }\n };\n\n const handleNewRoleClick = () => navigate('new');\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleClickDelete = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: 'Roles.ListPage.notification.delete-not-allowed' }),\n });\n } else {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: role.id,\n });\n\n handleToggleModal();\n }\n };\n\n const handleClickDuplicate = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n navigate(`duplicate/${role.id}`);\n };\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\">\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n />\n {canRead && (\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n {\n target: formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n }),\n }\n )}\n />\n }\n />\n )}\n {canRead && (\n <Layouts.Content>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <RoleRow\n cursor=\"pointer\"\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={\n [\n canCreate &&\n ({\n onClick: handleClickDuplicate(role),\n label: formatMessage({\n id: 'app.utils.duplicate',\n defaultMessage: 'Duplicate',\n }),\n children: <Duplicate />,\n } satisfies RoleRowProps['icons'][number]),\n canUpdate &&\n ({\n onClick: () => navigate(role.id.toString()),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n children: <Pencil />,\n } satisfies RoleRowProps['icons'][number]),\n canDelete &&\n ({\n onClick: handleClickDelete(role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n children: <Trash />,\n } satisfies RoleRowProps['icons'][number]),\n ].filter(Boolean) as RoleRowProps['icons']\n }\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n </Layouts.Content>\n )}\n <Dialog.Root open={isWarningDeleteAllOpened} onOpenChange={handleToggleModal}>\n <ConfirmDialog onConfirm={handleDeleteData} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * TODO: do we actually need this reducer? It's not doing a lot...\n */\n\ninterface State {\n roleToDelete: null | AdminRole['id'];\n showModalConfirmButtonLoading: boolean;\n shouldRefetchData: boolean;\n}\n\nconst initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n} satisfies State;\n\ninterface SetRoleToDeleteAction extends Pick<AdminRole, 'id'> {\n type: 'SET_ROLE_TO_DELETE';\n}\n\ninterface ResetDataToDeleteAction {\n type: 'RESET_DATA_TO_DELETE';\n}\n\ninterface OnRemoveRolesAction {\n type: 'ON_REMOVE_ROLES';\n}\n\ninterface OnRemoveRolesSucceededAction {\n type: 'ON_REMOVE_ROLES_SUCCEEDED';\n}\n\ntype Action =\n | SetRoleToDeleteAction\n | ResetDataToDeleteAction\n | OnRemoveRolesAction\n | OnRemoveRolesSucceededAction;\n\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.roles.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","selectAdminPermissions","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","isWarningDeleteAllOpened","setIsWarningDeleteAllOpenend","React","useState","query","useQueryParams","isLoading","isLoadingForPermissions","allowedActions","canCreate","canDelete","canRead","canUpdate","useRBAC","settings","roles","refetch","refetchRoles","useAdminRoles","filters","_q","name","$containsi","undefined","refetchOnMountOrArgChange","skip","navigate","useNavigate","roleToDelete","dispatch","useReducer","reducer","initialState","post","useFetchClient","handleDeleteData","type","ids","error","isFetchError","message","handleNewRoleClick","handleToggleModal","prev","handleClickDelete","role","e","preventDefault","stopPropagation","usersCount","id","handleClickDuplicate","rowCount","length","colCount","_jsx","Page","Loading","_jsxs","Main","Title","defaultMessage","Layouts","Header","primaryAction","Button","onClick","startIcon","Plus","size","title","subtitle","Action","startActions","SearchInput","label","target","Content","Table","footer","TFooter","cursor","icon","Thead","Tr","aria-rowindex","Th","Typography","variant","textColor","VisuallyHidden","Tbody","map","index","RoleRow","description","icons","children","Duplicate","toString","Pencil","Trash","filter","Boolean","rowIndex","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","showModalConfirmButtonLoading","shouldRefetchData","state","action","produce","draftState","ProtectedListPage","admin_app","read","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Button,\n Dialog,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAdminRoles, AdminRole } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { isFetchError } from '../../../../utils/getFetchClient';\n\nimport { RoleRow, RoleRowProps } from './components/RoleRow';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector(selectAdminPermissions);\n const { formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = React.useState(false);\n const [{ query }] = useQueryParams<{ _q?: string }>();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings?.roles);\n\n const { roles, refetch: refetchRoles } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n refetchOnMountOrArgChange: true,\n skip: isLoadingForPermissions || !canRead,\n }\n );\n\n const navigate = useNavigate();\n const [{ roleToDelete }, dispatch] = React.useReducer(reducer, initialState);\n const { post } = useFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n if (isFetchError(error)) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }\n };\n\n const handleNewRoleClick = () => navigate('new');\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleClickDelete = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: 'Roles.ListPage.notification.delete-not-allowed' }),\n });\n } else {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: role.id,\n });\n\n handleToggleModal();\n }\n };\n\n const handleClickDuplicate = (role: AdminRole) => (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n navigate(`duplicate/${role.id}`);\n };\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\" fullWidth>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n />\n {canRead && (\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n {\n target: formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n }),\n }\n )}\n />\n }\n />\n )}\n {canRead && (\n <Layouts.Content>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter cursor=\"pointer\" onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <RoleRow\n cursor=\"pointer\"\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={\n [\n canCreate &&\n ({\n onClick: handleClickDuplicate(role),\n label: formatMessage({\n id: 'app.utils.duplicate',\n defaultMessage: 'Duplicate',\n }),\n children: <Duplicate />,\n } satisfies RoleRowProps['icons'][number]),\n canUpdate &&\n ({\n onClick: () => navigate(role.id.toString()),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n children: <Pencil />,\n } satisfies RoleRowProps['icons'][number]),\n canDelete &&\n ({\n onClick: handleClickDelete(role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n children: <Trash />,\n } satisfies RoleRowProps['icons'][number]),\n ].filter(Boolean) as RoleRowProps['icons']\n }\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n </Layouts.Content>\n )}\n <Dialog.Root open={isWarningDeleteAllOpened} onOpenChange={handleToggleModal}>\n <ConfirmDialog onConfirm={handleDeleteData} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * TODO: do we actually need this reducer? It's not doing a lot...\n */\n\ninterface State {\n roleToDelete: null | AdminRole['id'];\n showModalConfirmButtonLoading: boolean;\n shouldRefetchData: boolean;\n}\n\nconst initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n} satisfies State;\n\ninterface SetRoleToDeleteAction extends Pick<AdminRole, 'id'> {\n type: 'SET_ROLE_TO_DELETE';\n}\n\ninterface ResetDataToDeleteAction {\n type: 'RESET_DATA_TO_DELETE';\n}\n\ninterface OnRemoveRolesAction {\n type: 'ON_REMOVE_ROLES';\n}\n\ninterface OnRemoveRolesSucceededAction {\n type: 'ON_REMOVE_ROLES_SUCCEEDED';\n}\n\ntype Action =\n | SetRoleToDeleteAction\n | ResetDataToDeleteAction\n | OnRemoveRolesAction\n | OnRemoveRolesSucceededAction;\n\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.roles.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","selectAdminPermissions","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","isWarningDeleteAllOpened","setIsWarningDeleteAllOpenend","React","useState","query","useQueryParams","isLoading","isLoadingForPermissions","allowedActions","canCreate","canDelete","canRead","canUpdate","useRBAC","settings","roles","refetch","refetchRoles","useAdminRoles","filters","_q","name","$containsi","undefined","refetchOnMountOrArgChange","skip","navigate","useNavigate","roleToDelete","dispatch","useReducer","reducer","initialState","post","useFetchClient","handleDeleteData","type","ids","error","isFetchError","message","handleNewRoleClick","handleToggleModal","prev","handleClickDelete","role","e","preventDefault","stopPropagation","usersCount","id","handleClickDuplicate","rowCount","length","colCount","_jsx","Page","Loading","_jsxs","Main","Title","defaultMessage","Layouts","Header","primaryAction","Button","onClick","startIcon","Plus","size","fullWidth","title","subtitle","Action","startActions","SearchInput","label","target","Content","Table","footer","TFooter","cursor","icon","Thead","Tr","aria-rowindex","Th","Typography","variant","textColor","VisuallyHidden","Tbody","map","index","RoleRow","description","icons","children","Duplicate","toString","Pencil","Trash","filter","Boolean","rowIndex","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","showModalConfirmButtonLoading","shouldRefetchData","state","action","produce","draftState","ProtectedListPage","admin_app","read","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAMA,QAAW,GAAA,IAAA;IACf,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,gBAAiBC,CAAAA,sBAAAA,CAAAA;IACrC,MAAM,EAAEC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;IAC3B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,CAACC,wBAA0BC,EAAAA,4BAAAA,CAA6B,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAChF,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAM,EACJC,SAAWC,EAAAA,uBAAuB,EAClCC,cAAgB,EAAA,EAAEC,SAAS,EAAEC,SAAS,EAAEC,OAAO,EAAEC,SAAS,EAAE,EAC7D,GAAGC,OAAQpB,CAAAA,WAAAA,CAAYqB,QAAQ,EAAEC,KAAAA,CAAAA;AAElC,IAAA,MAAM,EAAEA,KAAK,EAAEC,SAASC,YAAY,EAAE,GAAGC,aACvC,CAAA;AAAEC,QAAAA,OAAAA,EAASf,OAAOgB,EAAK,GAAA;YAAEC,IAAM,EAAA;AAAEC,gBAAAA,UAAAA,EAAYlB,MAAMgB;AAAG;SAAMG,GAAAA;KAC5D,EAAA;QACEC,yBAA2B,EAAA,IAAA;AAC3BC,QAAAA,IAAAA,EAAMlB,2BAA2B,CAACI;AACpC,KAAA,CAAA;AAGF,IAAA,MAAMe,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,CAAC,EAAEC,YAAY,EAAE,EAAEC,SAAS,GAAG3B,KAAAA,CAAM4B,UAAU,CAACC,OAASC,EAAAA,YAAAA,CAAAA;IAC/D,MAAM,EAAEC,IAAI,EAAE,GAAGC,cAAAA,EAAAA;AAEjB,IAAA,MAAMC,gBAAmB,GAAA,UAAA;QACvB,IAAI;YACFN,QAAS,CAAA;gBACPO,IAAM,EAAA;AACR,aAAA,CAAA;AAEA,YAAA,MAAMH,KAAK,2BAA6B,EAAA;gBACtCI,GAAK,EAAA;AAACT,oBAAAA;AAAa;AACrB,aAAA,CAAA;YAEA,MAAMX,YAAAA,EAAAA;YAENY,QAAS,CAAA;gBACPO,IAAM,EAAA;AACR,aAAA,CAAA;AACF,SAAA,CAAE,OAAOE,KAAO,EAAA;AACd,YAAA,IAAIC,aAAaD,KAAQ,CAAA,EAAA;gBACvBxC,kBAAmB,CAAA;oBACjBsC,IAAM,EAAA,QAAA;AACNI,oBAAAA,OAAAA,EAAS5C,cAAe0C,CAAAA,KAAAA;AAC1B,iBAAA,CAAA;AACF;AACF;AACF,KAAA;IAEA,MAAMG,kBAAAA,GAAqB,IAAMf,QAAS,CAAA,KAAA,CAAA;AAE1C,IAAA,MAAMgB,iBAAoB,GAAA,IAAMzC,4BAA6B,CAAA,CAAC0C,OAAS,CAACA,IAAAA,CAAAA;IAExE,MAAMC,iBAAAA,GAAoB,CAACC,IAAAA,GAAoB,CAACC,CAAAA,GAAAA;AAC9CA,YAAAA,CAAAA,CAAEC,cAAc,EAAA;AAChBD,YAAAA,CAAAA,CAAEE,eAAe,EAAA;YAEjB,IAAIH,IAAAA,CAAKI,UAAU,EAAE;gBACnBnD,kBAAmB,CAAA;oBACjBsC,IAAM,EAAA,MAAA;AACNI,oBAAAA,OAAAA,EAASjD,aAAc,CAAA;wBAAE2D,EAAI,EAAA;AAAiD,qBAAA;AAChF,iBAAA,CAAA;aACK,MAAA;gBACLrB,QAAS,CAAA;oBACPO,IAAM,EAAA,oBAAA;AACNc,oBAAAA,EAAAA,EAAIL,KAAKK;AACX,iBAAA,CAAA;AAEAR,gBAAAA,iBAAAA,EAAAA;AACF;AACF,SAAA;IAEA,MAAMS,oBAAAA,GAAuB,CAACN,IAAAA,GAAoB,CAACC,CAAAA,GAAAA;AACjDA,YAAAA,CAAAA,CAAEC,cAAc,EAAA;AAChBD,YAAAA,CAAAA,CAAEE,eAAe,EAAA;AAEjBtB,YAAAA,QAAAA,CAAS,CAAC,UAAU,EAAEmB,IAAAA,CAAKK,EAAE,CAAE,CAAA,CAAA;AACjC,SAAA;IAEA,MAAME,QAAAA,GAAWrC,KAAMsC,CAAAA,MAAM,GAAG,CAAA;AAChC,IAAA,MAAMC,QAAW,GAAA,CAAA;AAEjB,IAAA,IAAI/C,uBAAyB,EAAA;QAC3B,qBAAOgD,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,qBACEC,IAAA,CAACF,KAAKG,IAAI,EAAA;;AACR,0BAAAJ,GAAA,CAACC,KAAKI,KAAK,EAAA;0BACRrE,aACC,CAAA;oBAAE2D,EAAI,EAAA,oBAAA;oBAAsBW,cAAgB,EAAA;iBAC5C,EAAA;oBACExC,IAAM,EAAA;AACR,iBAAA;;AAGJ,0BAAAkC,GAAA,CAACO,QAAQC,MAAM,EAAA;AACbC,gBAAAA,aAAAA,EACEvD,0BACE8C,GAACU,CAAAA,MAAAA,EAAAA;oBAAOC,OAASzB,EAAAA,kBAAAA;AAAoB0B,oBAAAA,SAAAA,gBAAWZ,GAACa,CAAAA,IAAAA,EAAAA,EAAAA,CAAAA;oBAASC,IAAK,EAAA,GAAA;oBAAIC,SAAS,EAAA,IAAA;8BACzE/E,aAAc,CAAA;wBACb2D,EAAI,EAAA,gCAAA;wBACJW,cAAgB,EAAA;AAClB,qBAAA;AAEA,iBAAA,CAAA,GAAA,IAAA;AAENU,gBAAAA,KAAAA,EAAOhF,aAAc,CAAA;oBACnB2D,EAAI,EAAA,cAAA;oBACJW,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAW,gBAAAA,QAAAA,EAAUjF,aAAc,CAAA;oBACtB2D,EAAI,EAAA,iCAAA;oBACJW,cAAgB,EAAA;AAClB,iBAAA;;YAEDlD,OACC,kBAAA4C,GAAA,CAACO,QAAQW,MAAM,EAAA;AACbC,gBAAAA,YAAAA,gBACEnB,GAACoB,CAAAA,WAAAA,EAAAA;AACCC,oBAAAA,KAAAA,EAAOrF,aACL,CAAA;wBAAE2D,EAAI,EAAA,4BAAA;wBAA8BW,cAAgB,EAAA;qBACpD,EAAA;AACEgB,wBAAAA,MAAAA,EAAQtF,aAAc,CAAA;4BACpB2D,EAAI,EAAA,cAAA;4BACJW,cAAgB,EAAA;AAClB,yBAAA;AACF,qBAAA;;;YAMTlD,OACC,kBAAA4C,GAAA,CAACO,QAAQgB,OAAO,EAAA;AACd,gBAAA,QAAA,gBAAApB,IAACqB,CAAAA,KAAAA,EAAAA;oBACCzB,QAAUA,EAAAA,QAAAA;oBACVF,QAAUA,EAAAA,QAAAA;AACV4B,oBAAAA,MAAAA,EACEvE,0BACE8C,GAAC0B,CAAAA,OAAAA,EAAAA;wBAAQC,MAAO,EAAA,SAAA;wBAAUhB,OAASzB,EAAAA,kBAAAA;AAAoB0C,wBAAAA,IAAAA,gBAAM5B,GAACa,CAAAA,IAAAA,EAAAA,EAAAA,CAAAA;kCAC3D7E,aAAc,CAAA;4BACb2D,EAAI,EAAA,gCAAA;4BACJW,cAAgB,EAAA;AAClB,yBAAA;AAEA,qBAAA,CAAA,GAAA,IAAA;;sCAGNN,GAAC6B,CAAAA,KAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAA1B,IAAC2B,CAAAA,EAAAA,EAAAA;gCAAGC,eAAe,EAAA,CAAA;;kDACjB/B,GAACgC,CAAAA,EAAAA,EAAAA;AACC,wCAAA,QAAA,gBAAAhC,GAACiC,CAAAA,UAAAA,EAAAA;4CAAWC,OAAQ,EAAA,OAAA;4CAAQC,SAAU,EAAA,YAAA;sDACnCnG,aAAc,CAAA;gDACb2D,EAAI,EAAA,aAAA;gDACJW,cAAgB,EAAA;AAClB,6CAAA;;;kDAGJN,GAACgC,CAAAA,EAAAA,EAAAA;AACC,wCAAA,QAAA,gBAAAhC,GAACiC,CAAAA,UAAAA,EAAAA;4CAAWC,OAAQ,EAAA,OAAA;4CAAQC,SAAU,EAAA,YAAA;sDACnCnG,aAAc,CAAA;gDACb2D,EAAI,EAAA,oBAAA;gDACJW,cAAgB,EAAA;AAClB,6CAAA;;;kDAGJN,GAACgC,CAAAA,EAAAA,EAAAA;AACC,wCAAA,QAAA,gBAAAhC,GAACiC,CAAAA,UAAAA,EAAAA;4CAAWC,OAAQ,EAAA,OAAA;4CAAQC,SAAU,EAAA,YAAA;sDACnCnG,aAAc,CAAA;gDACb2D,EAAI,EAAA,cAAA;gDACJW,cAAgB,EAAA;AAClB,6CAAA;;;kDAGJN,GAACgC,CAAAA,EAAAA,EAAAA;AACC,wCAAA,QAAA,gBAAAhC,GAACoC,CAAAA,cAAAA,EAAAA;sDACEpG,aAAc,CAAA;gDACb2D,EAAI,EAAA,gBAAA;gDACJW,cAAgB,EAAA;AAClB,6CAAA;;;;;;sCAKRN,GAACqC,CAAAA,KAAAA,EAAAA;AACE7E,4BAAAA,QAAAA,EAAAA,KAAAA,EAAO8E,GAAI,CAAA,CAAChD,IAAMiD,EAAAA,KAAAA,iBACjBvC,GAACwC,CAAAA,OAAAA,EAAAA;oCACCb,MAAO,EAAA,SAAA;AAEPhC,oCAAAA,EAAAA,EAAIL,KAAKK,EAAE;AACX7B,oCAAAA,IAAAA,EAAMwB,KAAKxB,IAAI;AACf2E,oCAAAA,WAAAA,EAAanD,KAAKmD,WAAW;AAC7B/C,oCAAAA,UAAAA,EAAYJ,KAAKI,UAAU;oCAC3BgD,KACE,EAAA;wCACExF,SACG,IAAA;AACCyD,4CAAAA,OAAAA,EAASf,oBAAqBN,CAAAA,IAAAA,CAAAA;AAC9B+B,4CAAAA,KAAAA,EAAOrF,aAAc,CAAA;gDACnB2D,EAAI,EAAA,qBAAA;gDACJW,cAAgB,EAAA;AAClB,6CAAA,CAAA;AACAqC,4CAAAA,QAAAA,gBAAU3C,GAAC4C,CAAAA,SAAAA,EAAAA,EAAAA;AACb,yCAAA;wCACFvF,SACG,IAAA;AACCsD,4CAAAA,OAAAA,EAAS,IAAMxC,QAAAA,CAASmB,IAAKK,CAAAA,EAAE,CAACkD,QAAQ,EAAA,CAAA;AACxCxB,4CAAAA,KAAAA,EAAOrF,aAAc,CAAA;gDAAE2D,EAAI,EAAA,gBAAA;gDAAkBW,cAAgB,EAAA;AAAO,6CAAA,CAAA;AACpEqC,4CAAAA,QAAAA,gBAAU3C,GAAC8C,CAAAA,MAAAA,EAAAA,EAAAA;AACb,yCAAA;wCACF3F,SACG,IAAA;AACCwD,4CAAAA,OAAAA,EAAStB,iBAAkBC,CAAAA,IAAAA,CAAAA;AAC3B+B,4CAAAA,KAAAA,EAAOrF,aAAc,CAAA;gDAAE2D,EAAI,EAAA,eAAA;gDAAiBW,cAAgB,EAAA;AAAS,6CAAA,CAAA;AACrEqC,4CAAAA,QAAAA,gBAAU3C,GAAC+C,CAAAA,KAAAA,EAAAA,EAAAA;AACb;AACH,qCAAA,CAACC,MAAM,CAACC,OAAAA,CAAAA;AAEXC,oCAAAA,QAAAA,EAAUX,KAAQ,GAAA,CAAA;oCAClBlF,SAAWA,EAAAA;AA/BNiC,iCAAAA,EAAAA,IAAAA,CAAKK,EAAE,CAAA;;;;;AAsCxB,0BAAAK,GAAA,CAACmD,OAAOC,IAAI,EAAA;gBAACC,IAAM5G,EAAAA,wBAAAA;gBAA0B6G,YAAcnE,EAAAA,iBAAAA;AACzD,gBAAA,QAAA,gBAAAa,GAACuD,CAAAA,aAAAA,EAAAA;oBAAcC,SAAW5E,EAAAA;;;;;AAIlC;AAgBA,MAAMH,YAAe,GAAA;IACnBJ,YAAc,EAAA,IAAA;IACdoF,6BAA+B,EAAA,KAAA;IAC/BC,iBAAmB,EAAA;AACrB,CAAA;AAwBA,MAAMlF,UAAU,CAACmF,KAAAA,EAAcC,MAC7BC,GAAAA,OAAAA,CAAQF,OAAO,CAACG,UAAAA,GAAAA;AACd,QAAA,OAAQF,OAAO/E,IAAI;YACjB,KAAK,iBAAA;AAAmB,gBAAA;AACtBiF,oBAAAA,UAAAA,CAAWL,6BAA6B,GAAG,IAAA;AAC3C,oBAAA;AACF;YACA,KAAK,2BAAA;AAA6B,gBAAA;AAChCK,oBAAAA,UAAAA,CAAWJ,iBAAiB,GAAG,IAAA;AAC/BI,oBAAAA,UAAAA,CAAWzF,YAAY,GAAG,IAAA;AAC1B,oBAAA;AACF;YACA,KAAK,sBAAA;AAAwB,gBAAA;AAC3ByF,oBAAAA,UAAAA,CAAWJ,iBAAiB,GAAG,KAAA;AAC/BI,oBAAAA,UAAAA,CAAWzF,YAAY,GAAG,IAAA;AAC1ByF,oBAAAA,UAAAA,CAAWL,6BAA6B,GAAG,KAAA;AAC3C,oBAAA;AACF;YACA,KAAK,oBAAA;AAAsB,gBAAA;oBACzBK,UAAWzF,CAAAA,YAAY,GAAGuF,MAAAA,CAAOjE,EAAE;AAEnC,oBAAA;AACF;AACA,YAAA;gBACE,OAAOmE,UAAAA;AACX;AACF,KAAA,CAAA;AAEF;;AAEkG,2GAE5FC,iBAAoB,GAAA,IAAA;IACxB,MAAM7H,WAAAA,GAAcC,gBAAiB,CAAA,CAACwH,KAAUA,GAAAA,KAAAA,CAAMK,SAAS,CAAC9H,WAAW,CAACqB,QAAQ,EAAEC,KAAMyG,CAAAA,IAAAA,CAAAA;IAE5F,qBACEjE,GAAA,CAACC,KAAKiE,OAAO,EAAA;QAAChI,WAAaA,EAAAA,WAAAA;AACzB,QAAA,QAAA,gBAAA8D,GAACjE,CAAAA,QAAAA,EAAAA,EAAAA;;AAGP;;;;"}
@@ -182,6 +182,7 @@ const tableHeaders = [
182
182
  tokenType: constants.TRANSFER_TOKEN_TYPE
183
183
  }),
184
184
  to: "/settings/transfer-tokens/create",
185
+ fullWidth: true,
185
186
  children: formatMessage({
186
187
  id: 'Settings.transferTokens.create',
187
188
  defaultMessage: 'Create new Transfer Token'
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/TransferTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\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\nimport type { Data } from '@strapi/types';\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 }) }, { replace: true });\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 <Layouts.Header\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 role=\"button\"\n tag={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 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 <Layouts.Content>\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 tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/transfer-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.transferTokens.addNewToken',\n defaultMessage: 'Add new Transfer Token',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\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=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.transferTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\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":["tableHeaders","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","isLoading","isLoadingRBAC","allowedActions","canCreate","canDelete","canUpdate","canRead","useRBAC","navigate","useNavigate","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","replace","useOnce","tokenType","TRANSFER_TOKEN_TYPE","headers","map","header","data","transferTokens","isLoadingTokens","error","useGetTransferTokensQuery","undefined","skip","number","length","type","message","deleteToken","useDeleteTransferTokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","role","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","action","variant","icon","EmptyDocuments","width","content","ProtectedListView","main","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAMA,YAAe,GAAA;AACnB,IAAA;QACEC,IAAM,EAAA,MAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,uCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ,KAAA;AACA,IAAA;QACEJ,IAAM,EAAA,aAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,8CAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ,KAAA;AACA,IAAA;QACEJ,IAAM,EAAA,WAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,4CAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ,KAAA;AACA,IAAA;QACEJ,IAAM,EAAA,YAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,6CAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ;AACD,CAAA;AAED;;AAEkG,2GAE5FC,QAAW,GAAA,IAAA;IACf,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAMC,WAAcC,GAAAA,sBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAMC,CAAAA,SAAS,CAACH,WAAW,CAACI,QAAQ,GAAG,iBAAkB,CAAA,CAAA;AAEtE,IAAA,MAAM,EACJC,SAAWC,EAAAA,aAAa,EACxBC,cAAAA,EAAgB,EAAEC,SAAS,EAAEC,SAAS,EAAEC,SAAS,EAAEC,OAAO,EAAE,EAC7D,GAAGC,eAAQZ,CAAAA,WAAAA,CAAAA;AACZ,IAAA,MAAMa,QAAWC,GAAAA,0BAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AACvB,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,qCAAAA,EAAAA;AAEpDC,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;QACdR,QAAS,CAAA;YAAES,MAAQC,EAAAA,aAAAA,CAAGC,SAAS,CAAC;gBAAEC,IAAM,EAAA;aAAc,EAAA;gBAAEC,MAAQ,EAAA;AAAM,aAAA;SAAM,EAAA;YAAEC,OAAS,EAAA;AAAK,SAAA,CAAA;KAC3F,EAAA;AAACd,QAAAA;AAAS,KAAA,CAAA;IAEbe,eAAQ,CAAA,IAAA;AACNb,QAAAA,UAAAA,CAAW,qBAAuB,EAAA;YAChCc,SAAWC,EAAAA;AACb,SAAA,CAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMC,UAAU1C,YAAa2C,CAAAA,GAAG,CAAC,CAACC,UAAY;AAC5C,YAAA,GAAGA,MAAM;YACT1C,KAAOK,EAAAA,aAAAA,CAAcqC,OAAO1C,KAAK;SACnC,CAAA,CAAA;AAEA,IAAA,MAAM,EACJ2C,IAAAA,EAAMC,gBAAiB,GAAA,EAAE,EACzB9B,SAAAA,EAAW+B,eAAe,EAC1BC,KAAK,EACN,GAAGC,wCAAAA,CAA0BC,SAAW,EAAA;AACvCC,QAAAA,IAAAA,EAAM,CAAC7B;AACT,KAAA,CAAA;AAEAS,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIc,gBAAgB,EAAA;AAClBpB,YAAAA,UAAAA,CAAW,oBAAsB,EAAA;AAC/B0B,gBAAAA,MAAAA,EAAQN,iBAAeO,MAAM;gBAC7Bb,SAAWC,EAAAA;AACb,aAAA,CAAA;AACF;KACC,EAAA;AAACf,QAAAA,UAAAA;AAAYoB,QAAAA;AAAe,KAAA,CAAA;AAE/Bf,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIgB,KAAO,EAAA;YACTvC,kBAAmB,CAAA;gBACjB6C,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAAS1B,cAAemB,CAAAA,KAAAA;AAC1B,aAAA,CAAA;AACF;KACC,EAAA;AAACA,QAAAA,KAAAA;AAAOnB,QAAAA,cAAAA;AAAgBpB,QAAAA;AAAmB,KAAA,CAAA;IAE9C,MAAM,CAAC+C,YAAY,GAAGC,6CAAAA,EAAAA;AAEtB,IAAA,MAAMC,eAAe,OAAOvD,EAAAA,GAAAA;QAC1B,IAAI;YACF,MAAMwD,GAAAA,GAAM,MAAMH,WAAYrD,CAAAA,EAAAA,CAAAA;AAE9B,YAAA,IAAI,WAAWwD,GAAK,EAAA;gBAClBlD,kBAAmB,CAAA;oBACjB6C,IAAM,EAAA,QAAA;oBACNC,OAAS1B,EAAAA,cAAAA,CAAe8B,IAAIX,KAAK;AACnC,iBAAA,CAAA;AACF;AACF,SAAA,CAAE,OAAM;YACNvC,kBAAmB,CAAA;gBACjB6C,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAAShD,aAAc,CAAA;oBAAEJ,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;AAAmB,iBAAA;AACxF,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,MAAMY,YAAY+B,eAAmB9B,IAAAA,aAAAA;IAErC,qBACE2C,eAAA,CAAAC,mBAAA,EAAA;;AACE,0BAAAC,cAAA,CAACC,iBAAKC,KAAK,EAAA;0BACRzD,aACC,CAAA;oBAAEJ,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;iBAC5C,EAAA;oBACEH,IAAM,EAAA;AACR,iBAAA;;AAGJ,0BAAA6D,cAAA,CAACG,eAAQC,MAAM,EAAA;AACbC,gBAAAA,KAAAA,EAAO5D,aAAc,CAAA;oBACnBJ,EAAI,EAAA,+BAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAgE,gBAAAA,QAAAA,EAAU7D,aAAc,CAAA;oBACtBJ,EAAI,EAAA,qCAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAiE,gBAAAA,aAAAA,EACElD,0BACE2C,cAACQ,CAAAA,uBAAAA,EAAAA;oBACCC,IAAK,EAAA,QAAA;oBACLC,GAAKC,EAAAA,mBAAAA;oBACLC,aAAY,EAAA,8BAAA;AACZC,oBAAAA,SAAAA,gBAAWb,cAACc,CAAAA,UAAAA,EAAAA,EAAAA,CAAAA;oBACZC,IAAK,EAAA,GAAA;oBACLC,OAAS,EAAA,IACPpD,WAAW,sBAAwB,EAAA;4BACjCc,SAAWC,EAAAA;AACb,yBAAA,CAAA;oBAEFsC,EAAG,EAAA,kCAAA;8BAEFxE,aAAc,CAAA;wBACbJ,EAAI,EAAA,gCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;AAEA8C,iBAAAA,CAAAA,GAAAA;;AAGP,YAAA,CAAC5B,wBACAwC,cAACC,CAAAA,gBAAAA,CAAKiB,aAAa,EAEnB,EAAA,CAAA,iBAAAlB,cAAA,CAACC,iBAAKkB,IAAI,EAAA;gBAACC,WAAWlE,EAAAA,SAAAA;wCACpB4C,eAAA,CAACK,eAAQkB,OAAO,EAAA;;wBACbrC,gBAAeO,CAAAA,MAAM,GAAG,CAAA,kBACvBS,cAACsB,CAAAA,WAAAA,EAAAA;4BACCzE,WAAa,EAAA;AAAEW,gCAAAA,OAAAA;AAASF,gCAAAA,SAAAA;AAAWC,gCAAAA;AAAU,6BAAA;4BAC7CqB,OAASA,EAAAA,OAAAA;4BACT1B,SAAWA,EAAAA,SAAAA;4BACXqE,eAAiB3B,EAAAA,YAAAA;4BACjB4B,MAAQxC,EAAAA,gBAAAA;4BACRN,SAAWC,EAAAA;;AAGdtB,wBAAAA,SAAAA,IAAa2B,gBAAeO,CAAAA,MAAM,KAAK,CAAA,iBACtCS,cAACyB,CAAAA,6BAAAA,EAAAA;AACCC,4BAAAA,MAAAA,gBACE1B,cAACQ,CAAAA,uBAAAA,EAAAA;gCACCE,GAAKC,EAAAA,mBAAAA;gCACLgB,OAAQ,EAAA,WAAA;AACRd,gCAAAA,SAAAA,gBAAWb,cAACc,CAAAA,UAAAA,EAAAA,EAAAA,CAAAA;gCACZG,EAAG,EAAA,kCAAA;0CAEFxE,aAAc,CAAA;oCACbJ,EAAI,EAAA,qCAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;;AAGJsF,4BAAAA,IAAAA,gBAAM5B,cAAC6B,CAAAA,sBAAAA,EAAAA;gCAAeC,KAAM,EAAA;;AAC5BC,4BAAAA,OAAAA,EAAStF,aAAc,CAAA;gCACrBJ,EAAI,EAAA,uCAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;AAEA,yBAAA,CAAA,GAAA,IAAA;AACH,wBAAA,CAACe,SAAa2B,IAAAA,gBAAAA,CAAeO,MAAM,KAAK,kBACvCS,cAACyB,CAAAA,6BAAAA,EAAAA;AACCG,4BAAAA,IAAAA,gBAAM5B,cAAC6B,CAAAA,sBAAAA,EAAAA;gCAAeC,KAAM,EAAA;;AAC5BC,4BAAAA,OAAAA,EAAStF,aAAc,CAAA;gCACrBJ,EAAI,EAAA,0CAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;AAEA,yBAAA,CAAA,GAAA;;;;;;AAMhB;AAEA;;AAEkG,2GAE5F0F,iBAAoB,GAAA,IAAA;AACxB,IAAA,MAAMnF,WAAcC,GAAAA,sBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAMC,CAAAA,SAAS,CAACH,WAAW,CAACI,QAAQ,GAAG,kBAAkB,CAACgF,IAAAA,CAAAA;IAGvE,qBACEjC,cAAA,CAACC,iBAAKiC,OAAO,EAAA;QAACrF,WAAaA,EAAAA,WAAAA;AACzB,QAAA,QAAA,gBAAAmD,cAACxD,CAAAA,QAAAA,EAAAA,EAAAA;;AAGP;;;;;"}
1
+ {"version":3,"file":"ListView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/TransferTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\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\nimport type { Data } from '@strapi/types';\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 }) }, { replace: true });\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 <Layouts.Header\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 role=\"button\"\n tag={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 to=\"/settings/transfer-tokens/create\"\n fullWidth\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 <Layouts.Content>\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 tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/transfer-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.transferTokens.addNewToken',\n defaultMessage: 'Add new Transfer Token',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\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=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.transferTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\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":["tableHeaders","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","isLoading","isLoadingRBAC","allowedActions","canCreate","canDelete","canUpdate","canRead","useRBAC","navigate","useNavigate","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","replace","useOnce","tokenType","TRANSFER_TOKEN_TYPE","headers","map","header","data","transferTokens","isLoadingTokens","error","useGetTransferTokensQuery","undefined","skip","number","length","type","message","deleteToken","useDeleteTransferTokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","role","tag","Link","data-testid","startIcon","Plus","size","onClick","to","fullWidth","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","action","variant","icon","EmptyDocuments","width","content","ProtectedListView","main","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAMA,YAAe,GAAA;AACnB,IAAA;QACEC,IAAM,EAAA,MAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,uCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ,KAAA;AACA,IAAA;QACEJ,IAAM,EAAA,aAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,8CAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ,KAAA;AACA,IAAA;QACEJ,IAAM,EAAA,WAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,4CAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ,KAAA;AACA,IAAA;QACEJ,IAAM,EAAA,YAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,6CAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ;AACD,CAAA;AAED;;AAEkG,2GAE5FC,QAAW,GAAA,IAAA;IACf,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAMC,WAAcC,GAAAA,sBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAMC,CAAAA,SAAS,CAACH,WAAW,CAACI,QAAQ,GAAG,iBAAkB,CAAA,CAAA;AAEtE,IAAA,MAAM,EACJC,SAAWC,EAAAA,aAAa,EACxBC,cAAAA,EAAgB,EAAEC,SAAS,EAAEC,SAAS,EAAEC,SAAS,EAAEC,OAAO,EAAE,EAC7D,GAAGC,eAAQZ,CAAAA,WAAAA,CAAAA;AACZ,IAAA,MAAMa,QAAWC,GAAAA,0BAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AACvB,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,qCAAAA,EAAAA;AAEpDC,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;QACdR,QAAS,CAAA;YAAES,MAAQC,EAAAA,aAAAA,CAAGC,SAAS,CAAC;gBAAEC,IAAM,EAAA;aAAc,EAAA;gBAAEC,MAAQ,EAAA;AAAM,aAAA;SAAM,EAAA;YAAEC,OAAS,EAAA;AAAK,SAAA,CAAA;KAC3F,EAAA;AAACd,QAAAA;AAAS,KAAA,CAAA;IAEbe,eAAQ,CAAA,IAAA;AACNb,QAAAA,UAAAA,CAAW,qBAAuB,EAAA;YAChCc,SAAWC,EAAAA;AACb,SAAA,CAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMC,UAAU1C,YAAa2C,CAAAA,GAAG,CAAC,CAACC,UAAY;AAC5C,YAAA,GAAGA,MAAM;YACT1C,KAAOK,EAAAA,aAAAA,CAAcqC,OAAO1C,KAAK;SACnC,CAAA,CAAA;AAEA,IAAA,MAAM,EACJ2C,IAAAA,EAAMC,gBAAiB,GAAA,EAAE,EACzB9B,SAAAA,EAAW+B,eAAe,EAC1BC,KAAK,EACN,GAAGC,wCAAAA,CAA0BC,SAAW,EAAA;AACvCC,QAAAA,IAAAA,EAAM,CAAC7B;AACT,KAAA,CAAA;AAEAS,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIc,gBAAgB,EAAA;AAClBpB,YAAAA,UAAAA,CAAW,oBAAsB,EAAA;AAC/B0B,gBAAAA,MAAAA,EAAQN,iBAAeO,MAAM;gBAC7Bb,SAAWC,EAAAA;AACb,aAAA,CAAA;AACF;KACC,EAAA;AAACf,QAAAA,UAAAA;AAAYoB,QAAAA;AAAe,KAAA,CAAA;AAE/Bf,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIgB,KAAO,EAAA;YACTvC,kBAAmB,CAAA;gBACjB6C,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAAS1B,cAAemB,CAAAA,KAAAA;AAC1B,aAAA,CAAA;AACF;KACC,EAAA;AAACA,QAAAA,KAAAA;AAAOnB,QAAAA,cAAAA;AAAgBpB,QAAAA;AAAmB,KAAA,CAAA;IAE9C,MAAM,CAAC+C,YAAY,GAAGC,6CAAAA,EAAAA;AAEtB,IAAA,MAAMC,eAAe,OAAOvD,EAAAA,GAAAA;QAC1B,IAAI;YACF,MAAMwD,GAAAA,GAAM,MAAMH,WAAYrD,CAAAA,EAAAA,CAAAA;AAE9B,YAAA,IAAI,WAAWwD,GAAK,EAAA;gBAClBlD,kBAAmB,CAAA;oBACjB6C,IAAM,EAAA,QAAA;oBACNC,OAAS1B,EAAAA,cAAAA,CAAe8B,IAAIX,KAAK;AACnC,iBAAA,CAAA;AACF;AACF,SAAA,CAAE,OAAM;YACNvC,kBAAmB,CAAA;gBACjB6C,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAAShD,aAAc,CAAA;oBAAEJ,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;AAAmB,iBAAA;AACxF,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,MAAMY,YAAY+B,eAAmB9B,IAAAA,aAAAA;IAErC,qBACE2C,eAAA,CAAAC,mBAAA,EAAA;;AACE,0BAAAC,cAAA,CAACC,iBAAKC,KAAK,EAAA;0BACRzD,aACC,CAAA;oBAAEJ,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;iBAC5C,EAAA;oBACEH,IAAM,EAAA;AACR,iBAAA;;AAGJ,0BAAA6D,cAAA,CAACG,eAAQC,MAAM,EAAA;AACbC,gBAAAA,KAAAA,EAAO5D,aAAc,CAAA;oBACnBJ,EAAI,EAAA,+BAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAgE,gBAAAA,QAAAA,EAAU7D,aAAc,CAAA;oBACtBJ,EAAI,EAAA,qCAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAiE,gBAAAA,aAAAA,EACElD,0BACE2C,cAACQ,CAAAA,uBAAAA,EAAAA;oBACCC,IAAK,EAAA,QAAA;oBACLC,GAAKC,EAAAA,mBAAAA;oBACLC,aAAY,EAAA,8BAAA;AACZC,oBAAAA,SAAAA,gBAAWb,cAACc,CAAAA,UAAAA,EAAAA,EAAAA,CAAAA;oBACZC,IAAK,EAAA,GAAA;oBACLC,OAAS,EAAA,IACPpD,WAAW,sBAAwB,EAAA;4BACjCc,SAAWC,EAAAA;AACb,yBAAA,CAAA;oBAEFsC,EAAG,EAAA,kCAAA;oBACHC,SAAS,EAAA,IAAA;8BAERzE,aAAc,CAAA;wBACbJ,EAAI,EAAA,gCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;AAEA8C,iBAAAA,CAAAA,GAAAA;;AAGP,YAAA,CAAC5B,wBACAwC,cAACC,CAAAA,gBAAAA,CAAKkB,aAAa,EAEnB,EAAA,CAAA,iBAAAnB,cAAA,CAACC,iBAAKmB,IAAI,EAAA;gBAACC,WAAWnE,EAAAA,SAAAA;wCACpB4C,eAAA,CAACK,eAAQmB,OAAO,EAAA;;wBACbtC,gBAAeO,CAAAA,MAAM,GAAG,CAAA,kBACvBS,cAACuB,CAAAA,WAAAA,EAAAA;4BACC1E,WAAa,EAAA;AAAEW,gCAAAA,OAAAA;AAASF,gCAAAA,SAAAA;AAAWC,gCAAAA;AAAU,6BAAA;4BAC7CqB,OAASA,EAAAA,OAAAA;4BACT1B,SAAWA,EAAAA,SAAAA;4BACXsE,eAAiB5B,EAAAA,YAAAA;4BACjB6B,MAAQzC,EAAAA,gBAAAA;4BACRN,SAAWC,EAAAA;;AAGdtB,wBAAAA,SAAAA,IAAa2B,gBAAeO,CAAAA,MAAM,KAAK,CAAA,iBACtCS,cAAC0B,CAAAA,6BAAAA,EAAAA;AACCC,4BAAAA,MAAAA,gBACE3B,cAACQ,CAAAA,uBAAAA,EAAAA;gCACCE,GAAKC,EAAAA,mBAAAA;gCACLiB,OAAQ,EAAA,WAAA;AACRf,gCAAAA,SAAAA,gBAAWb,cAACc,CAAAA,UAAAA,EAAAA,EAAAA,CAAAA;gCACZG,EAAG,EAAA,kCAAA;0CAEFxE,aAAc,CAAA;oCACbJ,EAAI,EAAA,qCAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;;AAGJuF,4BAAAA,IAAAA,gBAAM7B,cAAC8B,CAAAA,sBAAAA,EAAAA;gCAAeC,KAAM,EAAA;;AAC5BC,4BAAAA,OAAAA,EAASvF,aAAc,CAAA;gCACrBJ,EAAI,EAAA,uCAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;AAEA,yBAAA,CAAA,GAAA,IAAA;AACH,wBAAA,CAACe,SAAa2B,IAAAA,gBAAAA,CAAeO,MAAM,KAAK,kBACvCS,cAAC0B,CAAAA,6BAAAA,EAAAA;AACCG,4BAAAA,IAAAA,gBAAM7B,cAAC8B,CAAAA,sBAAAA,EAAAA;gCAAeC,KAAM,EAAA;;AAC5BC,4BAAAA,OAAAA,EAASvF,aAAc,CAAA;gCACrBJ,EAAI,EAAA,0CAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;AAEA,yBAAA,CAAA,GAAA;;;;;;AAMhB;AAEA;;AAEkG,2GAE5F2F,iBAAoB,GAAA,IAAA;AACxB,IAAA,MAAMpF,WAAcC,GAAAA,sBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAMC,CAAAA,SAAS,CAACH,WAAW,CAACI,QAAQ,GAAG,kBAAkB,CAACiF,IAAAA,CAAAA;IAGvE,qBACElC,cAAA,CAACC,iBAAKkC,OAAO,EAAA;QAACtF,WAAaA,EAAAA,WAAAA;AACzB,QAAA,QAAA,gBAAAmD,cAACxD,CAAAA,QAAAA,EAAAA,EAAAA;;AAGP;;;;;"}
@@ -160,6 +160,7 @@ const tableHeaders = [
160
160
  tokenType: TRANSFER_TOKEN_TYPE
161
161
  }),
162
162
  to: "/settings/transfer-tokens/create",
163
+ fullWidth: true,
163
164
  children: formatMessage({
164
165
  id: 'Settings.transferTokens.create',
165
166
  defaultMessage: 'Create new Transfer Token'
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/TransferTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\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\nimport type { Data } from '@strapi/types';\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 }) }, { replace: true });\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 <Layouts.Header\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 role=\"button\"\n tag={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 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 <Layouts.Content>\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 tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/transfer-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.transferTokens.addNewToken',\n defaultMessage: 'Add new Transfer Token',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\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=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.transferTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\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":["tableHeaders","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","isLoading","isLoadingRBAC","allowedActions","canCreate","canDelete","canUpdate","canRead","useRBAC","navigate","useNavigate","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","replace","useOnce","tokenType","TRANSFER_TOKEN_TYPE","headers","map","header","data","transferTokens","isLoadingTokens","error","useGetTransferTokensQuery","undefined","skip","number","length","type","message","deleteToken","useDeleteTransferTokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","role","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","action","variant","icon","EmptyDocuments","width","content","ProtectedListView","main","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/TransferTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\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\nimport type { Data } from '@strapi/types';\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 }) }, { replace: true });\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 <Layouts.Header\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 role=\"button\"\n tag={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 to=\"/settings/transfer-tokens/create\"\n fullWidth\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 <Layouts.Content>\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 tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/transfer-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.transferTokens.addNewToken',\n defaultMessage: 'Add new Transfer Token',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\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=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.transferTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\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":["tableHeaders","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","isLoading","isLoadingRBAC","allowedActions","canCreate","canDelete","canUpdate","canRead","useRBAC","navigate","useNavigate","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","replace","useOnce","tokenType","TRANSFER_TOKEN_TYPE","headers","map","header","data","transferTokens","isLoadingTokens","error","useGetTransferTokensQuery","undefined","skip","number","length","type","message","deleteToken","useDeleteTransferTokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","role","tag","Link","data-testid","startIcon","Plus","size","onClick","to","fullWidth","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","action","variant","icon","EmptyDocuments","width","content","ProtectedListView","main","Protect"],"mappings":"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"}
@@ -177,6 +177,7 @@ const fieldsToPick = [
177
177
  startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {}),
178
178
  loading: isSubmitting,
179
179
  type: "submit",
180
+ fullWidth: true,
180
181
  children: formatMessage({
181
182
  id: 'global.save',
182
183
  defaultMessage: 'Save'