@strapi/admin 5.0.0-rc.6 → 5.0.0-rc.8

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 (159) hide show
  1. package/dist/admin/{ApplicationInfoPage-XdSWKyov.js → ApplicationInfoPage-DOljMjfU.js} +2 -2
  2. package/dist/admin/{ApplicationInfoPage-XdSWKyov.js.map → ApplicationInfoPage-DOljMjfU.js.map} +1 -1
  3. package/dist/admin/{ApplicationInfoPage-7o4EZn7X.mjs → ApplicationInfoPage-_QAWr13m.mjs} +2 -2
  4. package/dist/admin/{ApplicationInfoPage-7o4EZn7X.mjs.map → ApplicationInfoPage-_QAWr13m.mjs.map} +1 -1
  5. package/dist/admin/{AuthenticatedLayout-e3YQ88OH.mjs → AuthenticatedLayout-DhxlhqLg.mjs} +9 -9
  6. package/dist/admin/{AuthenticatedLayout-e3YQ88OH.mjs.map → AuthenticatedLayout-DhxlhqLg.mjs.map} +1 -1
  7. package/dist/admin/{AuthenticatedLayout-TKxq4shz.js → AuthenticatedLayout-S2qRx5pp.js} +9 -9
  8. package/dist/admin/{AuthenticatedLayout-TKxq4shz.js.map → AuthenticatedLayout-S2qRx5pp.js.map} +1 -1
  9. package/dist/admin/{CreatePage-9QUN61f1.mjs → CreatePage-4aSBZ-8M.mjs} +2 -2
  10. package/dist/admin/{CreatePage-9QUN61f1.mjs.map → CreatePage-4aSBZ-8M.mjs.map} +1 -1
  11. package/dist/admin/{CreatePage-v9SQXlEj.mjs → CreatePage-5Lsxkk31.mjs} +2 -2
  12. package/dist/admin/{CreatePage-v9SQXlEj.mjs.map → CreatePage-5Lsxkk31.mjs.map} +1 -1
  13. package/dist/admin/{CreatePage-rEmI7qI7.js → CreatePage-HNRkTZwZ.js} +2 -2
  14. package/dist/admin/{CreatePage-rEmI7qI7.js.map → CreatePage-HNRkTZwZ.js.map} +1 -1
  15. package/dist/admin/{CreatePage-tGGDcbhE.js → CreatePage-czINWoI4.js} +2 -2
  16. package/dist/admin/{CreatePage-tGGDcbhE.js.map → CreatePage-czINWoI4.js.map} +1 -1
  17. package/dist/admin/{CreateView-X3Pqd3Dd.js → CreateView-AXL3tH85.js} +2 -2
  18. package/dist/admin/{CreateView-X3Pqd3Dd.js.map → CreateView-AXL3tH85.js.map} +1 -1
  19. package/dist/admin/{CreateView-1uZ4VmL_.js → CreateView-aIiiLy3C.js} +2 -2
  20. package/dist/admin/{CreateView-1uZ4VmL_.js.map → CreateView-aIiiLy3C.js.map} +1 -1
  21. package/dist/admin/{CreateView-laE25y0T.mjs → CreateView-qzRvLGBC.mjs} +2 -2
  22. package/dist/admin/{CreateView-laE25y0T.mjs.map → CreateView-qzRvLGBC.mjs.map} +1 -1
  23. package/dist/admin/{CreateView-tG-CILnD.mjs → CreateView-u0mACDyv.mjs} +2 -2
  24. package/dist/admin/{CreateView-tG-CILnD.mjs.map → CreateView-u0mACDyv.mjs.map} +1 -1
  25. package/dist/admin/{EditPage-LeR7QgAb.js → EditPage-BAq4SLUJ.js} +3 -3
  26. package/dist/admin/{EditPage-LeR7QgAb.js.map → EditPage-BAq4SLUJ.js.map} +1 -1
  27. package/dist/admin/{EditPage-hsVsJsq0.mjs → EditPage-Qp1c1eXd.mjs} +3 -3
  28. package/dist/admin/{EditPage-hsVsJsq0.mjs.map → EditPage-Qp1c1eXd.mjs.map} +1 -1
  29. package/dist/admin/{EditPage-AADf5Vpf.js → EditPage-RZcyUKwu.js} +3 -3
  30. package/dist/admin/{EditPage-AADf5Vpf.js.map → EditPage-RZcyUKwu.js.map} +1 -1
  31. package/dist/admin/{EditPage-7NGggszv.mjs → EditPage-cMbU4NVE.mjs} +3 -3
  32. package/dist/admin/{EditPage-7NGggszv.mjs.map → EditPage-cMbU4NVE.mjs.map} +1 -1
  33. package/dist/admin/{EditPage-er5AI58q.mjs → EditPage-hHV9CNBD.mjs} +5 -5
  34. package/dist/admin/{EditPage-er5AI58q.mjs.map → EditPage-hHV9CNBD.mjs.map} +1 -1
  35. package/dist/admin/{EditPage-nEoilWWr.js → EditPage-nJMUfPC_.js} +5 -5
  36. package/dist/admin/{EditPage-nEoilWWr.js.map → EditPage-nJMUfPC_.js.map} +1 -1
  37. package/dist/admin/{EditView-RTJROhjq.js → EditView-CqQ7E0hw.js} +3 -3
  38. package/dist/admin/{EditView-RTJROhjq.js.map → EditView-CqQ7E0hw.js.map} +1 -1
  39. package/dist/admin/{EditView-eReVFzzp.mjs → EditView-cnGxE7oC.mjs} +3 -3
  40. package/dist/admin/{EditView-eReVFzzp.mjs.map → EditView-cnGxE7oC.mjs.map} +1 -1
  41. package/dist/admin/{EditViewPage-u6yLUtOo.mjs → EditViewPage-tTqJWPbg.mjs} +3 -3
  42. package/dist/admin/{EditViewPage-u6yLUtOo.mjs.map → EditViewPage-tTqJWPbg.mjs.map} +1 -1
  43. package/dist/admin/{EditViewPage-fj471bYN.js → EditViewPage-uUDS6iky.js} +3 -3
  44. package/dist/admin/{EditViewPage-fj471bYN.js.map → EditViewPage-uUDS6iky.js.map} +1 -1
  45. package/dist/admin/{EventsTable-k0KvIEem.js → EventsTable-MqaO8InG.js} +2 -2
  46. package/dist/admin/{EventsTable-k0KvIEem.js.map → EventsTable-MqaO8InG.js.map} +1 -1
  47. package/dist/admin/{EventsTable-gf2_RhIm.mjs → EventsTable-bAm473aQ.mjs} +2 -2
  48. package/dist/admin/{EventsTable-gf2_RhIm.mjs.map → EventsTable-bAm473aQ.mjs.map} +1 -1
  49. package/dist/admin/{HomePage-JiNfv32C.js → HomePage-cSNwcjEI.js} +3 -3
  50. package/dist/admin/{HomePage-JiNfv32C.js.map → HomePage-cSNwcjEI.js.map} +1 -1
  51. package/dist/admin/{HomePage-ra1hGTKy.mjs → HomePage-iOCLC8T5.mjs} +2 -2
  52. package/dist/admin/{HomePage-ra1hGTKy.mjs.map → HomePage-iOCLC8T5.mjs.map} +1 -1
  53. package/dist/admin/{HomePage-t9rWvlnT.mjs → HomePage-kxpv-2IT.mjs} +3 -3
  54. package/dist/admin/{HomePage-t9rWvlnT.mjs.map → HomePage-kxpv-2IT.mjs.map} +1 -1
  55. package/dist/admin/{HomePage-VoSt1p9I.js → HomePage-qHKQJ_vS.js} +2 -2
  56. package/dist/admin/{HomePage-VoSt1p9I.js.map → HomePage-qHKQJ_vS.js.map} +1 -1
  57. package/dist/admin/{InstalledPluginsPage-ycDwbck-.js → InstalledPluginsPage-Vj2K7uad.js} +2 -2
  58. package/dist/admin/{InstalledPluginsPage-ycDwbck-.js.map → InstalledPluginsPage-Vj2K7uad.js.map} +1 -1
  59. package/dist/admin/{InstalledPluginsPage-Dm2VGFVD.mjs → InstalledPluginsPage-nryUCDD3.mjs} +2 -2
  60. package/dist/admin/{InstalledPluginsPage-Dm2VGFVD.mjs.map → InstalledPluginsPage-nryUCDD3.mjs.map} +1 -1
  61. package/dist/admin/{Layout-qM02Y__v.js → Layout-Y4dCGf7_.js} +3 -3
  62. package/dist/admin/{Layout-qM02Y__v.js.map → Layout-Y4dCGf7_.js.map} +1 -1
  63. package/dist/admin/{Layout-iZuTlHEy.mjs → Layout-Z093DFKa.mjs} +3 -3
  64. package/dist/admin/{Layout-iZuTlHEy.mjs.map → Layout-Z093DFKa.mjs.map} +1 -1
  65. package/dist/admin/{ListPage-0A2hI6zS.js → ListPage-2bW3tnRz.js} +2 -2
  66. package/dist/admin/{ListPage-0A2hI6zS.js.map → ListPage-2bW3tnRz.js.map} +1 -1
  67. package/dist/admin/{ListPage-knuN4NNO.mjs → ListPage-3OjwvR-r.mjs} +2 -2
  68. package/dist/admin/{ListPage-knuN4NNO.mjs.map → ListPage-3OjwvR-r.mjs.map} +1 -1
  69. package/dist/admin/{ListPage-db__q8gB.mjs → ListPage-9Y5APon-.mjs} +2 -2
  70. package/dist/admin/{ListPage-db__q8gB.mjs.map → ListPage-9Y5APon-.mjs.map} +1 -1
  71. package/dist/admin/{ListPage--pk7_i4C.js → ListPage-KvnBaksH.js} +2 -2
  72. package/dist/admin/{ListPage--pk7_i4C.js.map → ListPage-KvnBaksH.js.map} +1 -1
  73. package/dist/admin/{ListPage-tg3BaRwe.js → ListPage-MQLTqMD4.js} +2 -2
  74. package/dist/admin/{ListPage-tg3BaRwe.js.map → ListPage-MQLTqMD4.js.map} +1 -1
  75. package/dist/admin/{ListPage-xpMw5ka5.js → ListPage-eY08uWFn.js} +5 -5
  76. package/dist/admin/{ListPage-xpMw5ka5.js.map → ListPage-eY08uWFn.js.map} +1 -1
  77. package/dist/admin/{ListPage-0RslgSLG.mjs → ListPage-hyar31Ge.mjs} +5 -5
  78. package/dist/admin/{ListPage-0RslgSLG.mjs.map → ListPage-hyar31Ge.mjs.map} +1 -1
  79. package/dist/admin/{ListPage-pV7HxKzF.js → ListPage-qr-mWRUO.js} +3 -3
  80. package/dist/admin/{ListPage-pV7HxKzF.js.map → ListPage-qr-mWRUO.js.map} +1 -1
  81. package/dist/admin/{ListPage-_2rHMRu7.mjs → ListPage-uSjUZ61P.mjs} +3 -3
  82. package/dist/admin/{ListPage-_2rHMRu7.mjs.map → ListPage-uSjUZ61P.mjs.map} +1 -1
  83. package/dist/admin/{ListPage-LJzzy5BP.mjs → ListPage-v8u0mb2U.mjs} +2 -2
  84. package/dist/admin/{ListPage-LJzzy5BP.mjs.map → ListPage-v8u0mb2U.mjs.map} +1 -1
  85. package/dist/admin/{ListView-5WvMFqaj.js → ListView-4XLHSTtI.js} +3 -3
  86. package/dist/admin/{ListView-5WvMFqaj.js.map → ListView-4XLHSTtI.js.map} +1 -1
  87. package/dist/admin/{ListView-Bl8_BOlX.mjs → ListView-Hx1s5o_O.mjs} +3 -3
  88. package/dist/admin/{ListView-Bl8_BOlX.mjs.map → ListView-Hx1s5o_O.mjs.map} +1 -1
  89. package/dist/admin/{ListView-MVc5DA4a.mjs → ListView-NUg6w25H.mjs} +3 -3
  90. package/dist/admin/{ListView-MVc5DA4a.mjs.map → ListView-NUg6w25H.mjs.map} +1 -1
  91. package/dist/admin/{ListView-DAN35ql2.js → ListView-U0ueqVjR.js} +3 -3
  92. package/dist/admin/{ListView-DAN35ql2.js.map → ListView-U0ueqVjR.js.map} +1 -1
  93. package/dist/admin/{Login-x89aTK1v.js → Login-D_lEvhlk.js} +2 -2
  94. package/dist/admin/{Login-x89aTK1v.js.map → Login-D_lEvhlk.js.map} +1 -1
  95. package/dist/admin/{Login-yXXn7QYB.mjs → Login-StNvuHl2.mjs} +2 -2
  96. package/dist/admin/{Login-yXXn7QYB.mjs.map → Login-StNvuHl2.mjs.map} +1 -1
  97. package/dist/admin/{MagicLinkEE-5BIoEK-E.mjs → MagicLinkEE-Enht2VEX.mjs} +3 -3
  98. package/dist/admin/{MagicLinkEE-5BIoEK-E.mjs.map → MagicLinkEE-Enht2VEX.mjs.map} +1 -1
  99. package/dist/admin/{MagicLinkEE-fhBiVLyG.js → MagicLinkEE-yv0VjDUG.js} +3 -3
  100. package/dist/admin/{MagicLinkEE-fhBiVLyG.js.map → MagicLinkEE-yv0VjDUG.js.map} +1 -1
  101. package/dist/admin/{MarketplacePage-CKzqH_m0.mjs → MarketplacePage-0HLsOYU8.mjs} +2 -2
  102. package/dist/admin/{MarketplacePage-CKzqH_m0.mjs.map → MarketplacePage-0HLsOYU8.mjs.map} +1 -1
  103. package/dist/admin/{MarketplacePage-LaM_D-xS.js → MarketplacePage-eNFHM7J0.js} +2 -2
  104. package/dist/admin/{MarketplacePage-LaM_D-xS.js.map → MarketplacePage-eNFHM7J0.js.map} +1 -1
  105. package/dist/admin/{ProfilePage-kEoS7Yzo.mjs → ProfilePage-5ix1J-t3.mjs} +3 -3
  106. package/dist/admin/{ProfilePage-kEoS7Yzo.mjs.map → ProfilePage-5ix1J-t3.mjs.map} +1 -1
  107. package/dist/admin/{ProfilePage-qMI-E9Vg.js → ProfilePage-8lhmqZEh.js} +3 -3
  108. package/dist/admin/{ProfilePage-qMI-E9Vg.js.map → ProfilePage-8lhmqZEh.js.map} +1 -1
  109. package/dist/admin/{PurchaseAuditLogs-pBPam9EQ.js → PurchaseAuditLogs-LAxKPeum.js} +2 -2
  110. package/dist/admin/{PurchaseAuditLogs-pBPam9EQ.js.map → PurchaseAuditLogs-LAxKPeum.js.map} +1 -1
  111. package/dist/admin/{PurchaseAuditLogs-twuxJFGU.mjs → PurchaseAuditLogs-amcjjsft.mjs} +2 -2
  112. package/dist/admin/{PurchaseAuditLogs-twuxJFGU.mjs.map → PurchaseAuditLogs-amcjjsft.mjs.map} +1 -1
  113. package/dist/admin/{PurchaseSingleSignOn-Nd81sJ5B.mjs → PurchaseSingleSignOn-2jOz2dDs.mjs} +2 -2
  114. package/dist/admin/{PurchaseSingleSignOn-Nd81sJ5B.mjs.map → PurchaseSingleSignOn-2jOz2dDs.mjs.map} +1 -1
  115. package/dist/admin/{PurchaseSingleSignOn-zA4QOmPd.js → PurchaseSingleSignOn-trhjWQVO.js} +2 -2
  116. package/dist/admin/{PurchaseSingleSignOn-zA4QOmPd.js.map → PurchaseSingleSignOn-trhjWQVO.js.map} +1 -1
  117. package/dist/admin/{SelectRoles-S1Wl8LWC.mjs → SelectRoles-b0crlFl7.mjs} +3 -3
  118. package/dist/admin/{SelectRoles-S1Wl8LWC.mjs.map → SelectRoles-b0crlFl7.mjs.map} +1 -1
  119. package/dist/admin/{SelectRoles-YsPcyKVn.js → SelectRoles-nRbY6X9X.js} +3 -3
  120. package/dist/admin/{SelectRoles-YsPcyKVn.js.map → SelectRoles-nRbY6X9X.js.map} +1 -1
  121. package/dist/admin/{SingleSignOnPage-pgI5dRd6.mjs → SingleSignOnPage-SoYGwm82.mjs} +3 -3
  122. package/dist/admin/{SingleSignOnPage-pgI5dRd6.mjs.map → SingleSignOnPage-SoYGwm82.mjs.map} +1 -1
  123. package/dist/admin/{SingleSignOnPage-UiNl-8pJ.js → SingleSignOnPage-ifswElWH.js} +3 -3
  124. package/dist/admin/{SingleSignOnPage-UiNl-8pJ.js.map → SingleSignOnPage-ifswElWH.js.map} +1 -1
  125. package/dist/admin/{Table-cJ9JMeIZ.mjs → Table-GNJgJ_tZ.mjs} +2 -2
  126. package/dist/admin/{Table-cJ9JMeIZ.mjs.map → Table-GNJgJ_tZ.mjs.map} +1 -1
  127. package/dist/admin/{Table-adxu1Nui.js → Table-b0AhH-1j.js} +2 -2
  128. package/dist/admin/{Table-adxu1Nui.js.map → Table-b0AhH-1j.js.map} +1 -1
  129. package/dist/admin/{TokenTypeSelect-otcSFQnr.js → TokenTypeSelect-88Lcbz54.js} +2 -2
  130. package/dist/admin/{TokenTypeSelect-otcSFQnr.js.map → TokenTypeSelect-88Lcbz54.js.map} +1 -1
  131. package/dist/admin/{TokenTypeSelect-yuNriu9V.mjs → TokenTypeSelect-9u9d8fcv.mjs} +2 -2
  132. package/dist/admin/{TokenTypeSelect-yuNriu9V.mjs.map → TokenTypeSelect-9u9d8fcv.mjs.map} +1 -1
  133. package/dist/admin/{UseCasePage--bIfwMfb.js → UseCasePage-ipjo7uhC.js} +2 -2
  134. package/dist/admin/{UseCasePage--bIfwMfb.js.map → UseCasePage-ipjo7uhC.js.map} +1 -1
  135. package/dist/admin/{UseCasePage-1fvAnsrz.mjs → UseCasePage-z6GrO4cL.mjs} +2 -2
  136. package/dist/admin/{UseCasePage-1fvAnsrz.mjs.map → UseCasePage-z6GrO4cL.mjs.map} +1 -1
  137. package/dist/admin/{constants-_aKqqdTC.mjs → constants-JnuNds5i.mjs} +2 -2
  138. package/dist/admin/{constants-_aKqqdTC.mjs.map → constants-JnuNds5i.mjs.map} +1 -1
  139. package/dist/admin/{constants-m4Q5L3er.js → constants-PyUVE8mk.js} +2 -2
  140. package/dist/admin/{constants-m4Q5L3er.js.map → constants-PyUVE8mk.js.map} +1 -1
  141. package/dist/admin/{index-UvMVCH5g.js → index-3GWFhGv_.js} +33 -33
  142. package/dist/admin/index-3GWFhGv_.js.map +1 -0
  143. package/dist/admin/{index-EuBu2rv5.mjs → index-4iCJ7_08.mjs} +33 -33
  144. package/dist/admin/index-4iCJ7_08.mjs.map +1 -0
  145. package/dist/admin/index.js +1 -1
  146. package/dist/admin/index.mjs +1 -1
  147. package/dist/admin/src/components/FormInputs/Json.d.ts +2 -2
  148. package/dist/admin/{useAdminRoles-Mvuk6dzh.js → useAdminRoles-T7bcAXVs.js} +2 -2
  149. package/dist/admin/{useAdminRoles-Mvuk6dzh.js.map → useAdminRoles-T7bcAXVs.js.map} +1 -1
  150. package/dist/admin/{useAdminRoles-IG_cJwX1.mjs → useAdminRoles-ZBjAOdVi.mjs} +2 -2
  151. package/dist/admin/{useAdminRoles-IG_cJwX1.mjs.map → useAdminRoles-ZBjAOdVi.mjs.map} +1 -1
  152. package/dist/admin/{validation-yGrvkrUU.mjs → validation-Yg-jfoIk.mjs} +2 -2
  153. package/dist/admin/{validation-yGrvkrUU.mjs.map → validation-Yg-jfoIk.mjs.map} +1 -1
  154. package/dist/admin/{validation-IInns81I.js → validation-bQ-dFrHn.js} +2 -2
  155. package/dist/admin/{validation-IInns81I.js.map → validation-bQ-dFrHn.js.map} +1 -1
  156. package/dist/package.json.d.ts +7 -7
  157. package/package.json +8 -8
  158. package/dist/admin/index-EuBu2rv5.mjs.map +0 -1
  159. package/dist/admin/index-UvMVCH5g.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage-pV7HxKzF.js","sources":["../../admin/src/pages/Settings/pages/Roles/components/RoleRow.tsx","../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import { Box, Flex, IconButton, IconButtonProps, Td, Tr, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport type { AdminRole } from '../../../../../hooks/useAdminRoles';\n\ninterface RoleRowProps extends Pick<AdminRole, 'id' | 'name' | 'description' | 'usersCount'> {\n icons: Array<Required<Pick<IconButtonProps, 'children' | 'label' | 'onClick'>>>;\n rowIndex: number;\n canUpdate?: boolean;\n}\n\nconst RoleRow = ({\n id,\n name,\n description,\n usersCount,\n icons,\n rowIndex,\n canUpdate,\n}: RoleRowProps) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n // @ts-expect-error – the prop uses `HTMLButtonElement` but we just specify `HTMLElement`\n onClick={canUpdate ? editObject.onClick : undefined}\n >\n <Td maxWidth={`13rem`}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={`25rem`}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" onClick={(e) => e.stopPropagation()}>\n {icons.map((icon, i) => {\n if (icon) {\n return (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton {...icon} borderWidth={0} />\n </Box>\n );\n }\n\n return null;\n })}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nexport { RoleRow };\nexport type { RoleRowProps };\n","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 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 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":["useIntl","jsxs","Tr","jsx","Td","Typography","Flex","Box","IconButton","useTypedSelector","selectAdminPermissions","useAPIErrorHandler","useNotification","React","useQueryParams","useRBAC","useAdminRoles","useNavigate","useFetchClient","isFetchError","Page","Layouts","Button","Plus","SearchInput","Table","TFooter","Thead","Th","VisuallyHidden","Tbody","Duplicate","Pencil","Trash","Dialog","ConfirmDialog","produce"],"mappings":"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"}
1
+ {"version":3,"file":"ListPage-qr-mWRUO.js","sources":["../../admin/src/pages/Settings/pages/Roles/components/RoleRow.tsx","../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import { Box, Flex, IconButton, IconButtonProps, Td, Tr, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport type { AdminRole } from '../../../../../hooks/useAdminRoles';\n\ninterface RoleRowProps extends Pick<AdminRole, 'id' | 'name' | 'description' | 'usersCount'> {\n icons: Array<Required<Pick<IconButtonProps, 'children' | 'label' | 'onClick'>>>;\n rowIndex: number;\n canUpdate?: boolean;\n}\n\nconst RoleRow = ({\n id,\n name,\n description,\n usersCount,\n icons,\n rowIndex,\n canUpdate,\n}: RoleRowProps) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n // @ts-expect-error – the prop uses `HTMLButtonElement` but we just specify `HTMLElement`\n onClick={canUpdate ? editObject.onClick : undefined}\n >\n <Td maxWidth={`13rem`}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={`25rem`}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" onClick={(e) => e.stopPropagation()}>\n {icons.map((icon, i) => {\n if (icon) {\n return (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton {...icon} borderWidth={0} />\n </Box>\n );\n }\n\n return null;\n })}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nexport { RoleRow };\nexport type { RoleRowProps };\n","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 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 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":["useIntl","jsxs","Tr","jsx","Td","Typography","Flex","Box","IconButton","useTypedSelector","selectAdminPermissions","useAPIErrorHandler","useNotification","React","useQueryParams","useRBAC","useAdminRoles","useNavigate","useFetchClient","isFetchError","Page","Layouts","Button","Plus","SearchInput","Table","TFooter","Thead","Th","VisuallyHidden","Tbody","Duplicate","Pencil","Trash","Dialog","ConfirmDialog","produce"],"mappings":"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"}
@@ -5,9 +5,9 @@ import { Plus, Duplicate, Pencil, Trash } from '@strapi/icons';
5
5
  import { produce } from 'immer';
6
6
  import { useIntl } from 'react-intl';
7
7
  import { useNavigate } from 'react-router-dom';
8
- import { o as useQueryParams, p as useFetchClient, b as Layouts, S as SearchInput, C as ConfirmDialog } from './index-EuBu2rv5.mjs';
8
+ import { o as useQueryParams, p as useFetchClient, b as Layouts, S as SearchInput, C as ConfirmDialog } from './index-4iCJ7_08.mjs';
9
9
  import { b as useTypedSelector, P as Page, f as useAPIErrorHandler, a as useNotification, k as useRBAC } from './Theme-PrUuuGtN.mjs';
10
- import { u as useAdminRoles } from './useAdminRoles-IG_cJwX1.mjs';
10
+ import { u as useAdminRoles } from './useAdminRoles-ZBjAOdVi.mjs';
11
11
  import { s as selectAdminPermissions } from './selectors-ZpHhvPK4.mjs';
12
12
  import { c as isFetchError } from './admin-B6AW0Kov.mjs';
13
13
 
@@ -265,4 +265,4 @@ const ProtectedListPage = () => {
265
265
  };
266
266
 
267
267
  export { ListPage, ProtectedListPage };
268
- //# sourceMappingURL=ListPage-_2rHMRu7.mjs.map
268
+ //# sourceMappingURL=ListPage-uSjUZ61P.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage-_2rHMRu7.mjs","sources":["../../admin/src/pages/Settings/pages/Roles/components/RoleRow.tsx","../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import { Box, Flex, IconButton, IconButtonProps, Td, Tr, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport type { AdminRole } from '../../../../../hooks/useAdminRoles';\n\ninterface RoleRowProps extends Pick<AdminRole, 'id' | 'name' | 'description' | 'usersCount'> {\n icons: Array<Required<Pick<IconButtonProps, 'children' | 'label' | 'onClick'>>>;\n rowIndex: number;\n canUpdate?: boolean;\n}\n\nconst RoleRow = ({\n id,\n name,\n description,\n usersCount,\n icons,\n rowIndex,\n canUpdate,\n}: RoleRowProps) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n // @ts-expect-error – the prop uses `HTMLButtonElement` but we just specify `HTMLElement`\n onClick={canUpdate ? editObject.onClick : undefined}\n >\n <Td maxWidth={`13rem`}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={`25rem`}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" onClick={(e) => e.stopPropagation()}>\n {icons.map((icon, i) => {\n if (icon) {\n return (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton {...icon} borderWidth={0} />\n </Box>\n );\n }\n\n return null;\n })}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nexport { RoleRow };\nexport type { RoleRowProps };\n","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 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 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":[],"mappings":"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"}
1
+ {"version":3,"file":"ListPage-uSjUZ61P.mjs","sources":["../../admin/src/pages/Settings/pages/Roles/components/RoleRow.tsx","../../admin/src/pages/Settings/pages/Roles/ListPage.tsx"],"sourcesContent":["import { Box, Flex, IconButton, IconButtonProps, Td, Tr, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport type { AdminRole } from '../../../../../hooks/useAdminRoles';\n\ninterface RoleRowProps extends Pick<AdminRole, 'id' | 'name' | 'description' | 'usersCount'> {\n icons: Array<Required<Pick<IconButtonProps, 'children' | 'label' | 'onClick'>>>;\n rowIndex: number;\n canUpdate?: boolean;\n}\n\nconst RoleRow = ({\n id,\n name,\n description,\n usersCount,\n icons,\n rowIndex,\n canUpdate,\n}: RoleRowProps) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n // @ts-expect-error – the prop uses `HTMLButtonElement` but we just specify `HTMLElement`\n onClick={canUpdate ? editObject.onClick : undefined}\n >\n <Td maxWidth={`13rem`}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={`25rem`}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" onClick={(e) => e.stopPropagation()}>\n {icons.map((icon, i) => {\n if (icon) {\n return (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton {...icon} borderWidth={0} />\n </Box>\n );\n }\n\n return null;\n })}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nexport { RoleRow };\nexport type { RoleRowProps };\n","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 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 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":[],"mappings":";;;;;;;;;;;;;AAWA,MAAM,UAAU,CAAC;AAAA,EACf,EAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AACF,CAAoB,KAAA;AAClB,EAAM,MAAA,EAAE,aAAc,EAAA,GAAI,OAAQ,EAAA,CAAA;AAClC,EAAM,MAAA,GAAG,UAAU,CAAI,GAAA,KAAA,CAAA;AAEvB,EAAA,MAAM,cAAiB,GAAA,aAAA;AAAA,IACrB;AAAA,MACE,EAAI,EAAA,CAAA,wBAAA,CAAA;AAAA,MACJ,cAAgB,EAAA,8DAAA;AAAA,KAClB;AAAA,IACA,EAAE,QAAQ,UAAW,EAAA;AAAA,GACvB,CAAA;AAEA,EACE,uBAAA,IAAA;AAAA,IAAC,EAAA;AAAA,IAAA;AAAA,MACC,eAAe,EAAA,QAAA;AAAA,MAGf,OAAA,EAAS,SAAY,GAAA,UAAA,CAAW,OAAU,GAAA,KAAA,CAAA;AAAA,MAE1C,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,EAAA,EAAA,EAAG,QAAU,EAAA,CAAA,KAAA,CAAA,EACZ,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAW,UAAQ,IAAC,EAAA,SAAA,EAAU,YAC5B,EAAA,QAAA,EAAA,IAAA,EACH,CACF,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,EAAG,EAAA,EAAA,QAAA,EAAU,CACZ,KAAA,CAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,SAAA,EAAU,YAC5B,EAAA,QAAA,EAAA,WAAA,EACH,CACF,EAAA,CAAA;AAAA,4BACC,EACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,cAAW,SAAU,EAAA,YAAA,EAAc,0BAAe,CACrD,EAAA,CAAA;AAAA,4BACC,EACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,cAAA,EAAe,YAAW,OAAS,EAAA,CAAC,CAAM,KAAA,CAAA,CAAE,iBAC/C,EAAA,QAAA,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,MAAM,CAAM,KAAA;AACtB,UAAA,IAAI,IAAM,EAAA;AACR,YAAA,uBACG,GAAA,CAAA,GAAA,EAAA,EAAqB,WAAa,EAAA,CAAA,KAAM,IAAI,CAAI,GAAA,CAAA,EAC/C,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAY,GAAG,IAAM,EAAA,WAAA,EAAa,CAAG,EAAA,CAAA,EAAA,EAD9B,KAAK,KAEf,CAAA,CAAA;AAAA,WAEJ;AAEA,UAAO,OAAA,IAAA,CAAA;AAAA,SACR,GACH,CACF,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,IA/BK,EAAA;AAAA,GAgCP,CAAA;AAEJ,CAAA;;ACjCA,MAAM,WAAW,MAAM;AACrB,EAAM,MAAA,EAAE,aAAc,EAAA,GAAI,OAAQ,EAAA,CAAA;AAClC,EAAM,MAAA,WAAA,GAAc,iBAAiB,sBAAsB,CAAA,CAAA;AAC3D,EAAM,MAAA,EAAE,cAAe,EAAA,GAAI,kBAAmB,EAAA,CAAA;AAC9C,EAAM,MAAA,EAAE,kBAAmB,EAAA,GAAI,eAAgB,EAAA,CAAA;AAC/C,EAAA,MAAM,CAAC,wBAA0B,EAAA,4BAA4B,CAAI,GAAA,KAAA,CAAM,SAAS,KAAK,CAAA,CAAA;AACrF,EAAA,MAAM,CAAC,EAAE,KAAM,EAAC,IAAI,cAAgC,EAAA,CAAA;AACpD,EAAM,MAAA;AAAA,IACJ,SAAW,EAAA,uBAAA;AAAA,IACX,cAAgB,EAAA,EAAE,SAAW,EAAA,SAAA,EAAW,SAAS,SAAU,EAAA;AAAA,GACzD,GAAA,OAAA,CAAQ,WAAY,CAAA,QAAA,EAAU,KAAK,CAAA,CAAA;AAEvC,EAAA,MAAM,EAAE,KAAA,EAAO,OAAS,EAAA,YAAA,EAAiB,GAAA,aAAA;AAAA,IACvC,EAAE,OAAA,EAAS,KAAO,EAAA,EAAA,GAAK,EAAE,IAAA,EAAM,EAAE,UAAA,EAAY,KAAM,CAAA,EAAA,EAAK,EAAA,GAAI,KAAU,CAAA,EAAA;AAAA,IACtE;AAAA,MACE,yBAA2B,EAAA,IAAA;AAAA,MAC3B,IAAA,EAAM,2BAA2B,CAAC,OAAA;AAAA,KACpC;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAM,MAAA,CAAC,EAAE,YAAa,EAAA,EAAG,QAAQ,CAAI,GAAA,KAAA,CAAM,UAAW,CAAA,OAAA,EAAS,YAAY,CAAA,CAAA;AAC3E,EAAM,MAAA,EAAE,IAAK,EAAA,GAAI,cAAe,EAAA,CAAA;AAEhC,EAAA,MAAM,mBAAmB,YAAY;AACnC,IAAI,IAAA;AACF,MAAS,QAAA,CAAA;AAAA,QACP,IAAM,EAAA,iBAAA;AAAA,OACP,CAAA,CAAA;AAED,MAAA,MAAM,KAAK,2BAA6B,EAAA;AAAA,QACtC,GAAA,EAAK,CAAC,YAAY,CAAA;AAAA,OACnB,CAAA,CAAA;AAED,MAAA,MAAM,YAAa,EAAA,CAAA;AAEnB,MAAS,QAAA,CAAA;AAAA,QACP,IAAM,EAAA,sBAAA;AAAA,OACP,CAAA,CAAA;AAAA,aACM,KAAO,EAAA;AACd,MAAI,IAAA,YAAA,CAAa,KAAK,CAAG,EAAA;AACvB,QAAmB,kBAAA,CAAA;AAAA,UACjB,IAAM,EAAA,QAAA;AAAA,UACN,OAAA,EAAS,eAAe,KAAK,CAAA;AAAA,SAC9B,CAAA,CAAA;AAAA,OACH;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,kBAAA,GAAqB,MAAM,QAAA,CAAS,KAAK,CAAA,CAAA;AAE/C,EAAA,MAAM,oBAAoB,MAAM,4BAAA,CAA6B,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA,CAAA;AAE5E,EAAA,MAAM,iBAAoB,GAAA,CAAC,IAAoB,KAAA,CAAC,CAA2C,KAAA;AACzF,IAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACjB,IAAA,CAAA,CAAE,eAAgB,EAAA,CAAA;AAElB,IAAA,IAAI,KAAK,UAAY,EAAA;AACnB,MAAmB,kBAAA,CAAA;AAAA,QACjB,IAAM,EAAA,MAAA;AAAA,QACN,OAAS,EAAA,aAAA,CAAc,EAAE,EAAA,EAAI,kDAAkD,CAAA;AAAA,OAChF,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAS,QAAA,CAAA;AAAA,QACP,IAAM,EAAA,oBAAA;AAAA,QACN,IAAI,IAAK,CAAA,EAAA;AAAA,OACV,CAAA,CAAA;AAED,MAAkB,iBAAA,EAAA,CAAA;AAAA,KACpB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,oBAAuB,GAAA,CAAC,IAAoB,KAAA,CAAC,CAA2C,KAAA;AAC5F,IAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACjB,IAAA,CAAA,CAAE,eAAgB,EAAA,CAAA;AAElB,IAAS,QAAA,CAAA,CAAA,UAAA,EAAa,IAAK,CAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAAA,GACjC,CAAA;AAEA,EAAM,MAAA,QAAA,GAAW,MAAM,MAAS,GAAA,CAAA,CAAA;AAChC,EAAA,MAAM,QAAW,GAAA,CAAA,CAAA;AAEjB,EAAA,IAAI,uBAAyB,EAAA;AAC3B,IAAO,uBAAA,GAAA,CAAC,IAAK,CAAA,OAAA,EAAL,EAAa,CAAA,CAAA;AAAA,GACvB;AAEA,EACE,uBAAA,IAAA,CAAC,IAAK,CAAA,IAAA,EAAL,EACC,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,IAAA,CAAK,OAAL,EACE,QAAA,EAAA,aAAA;AAAA,MACC,EAAE,EAAA,EAAI,oBAAsB,EAAA,cAAA,EAAgB,mBAAoB,EAAA;AAAA,MAChE;AAAA,QACE,IAAM,EAAA,OAAA;AAAA,OACR;AAAA,KAEJ,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,OAAQ,CAAA,MAAA;AAAA,MAAR;AAAA,QACC,aACE,EAAA,SAAA,mBACG,GAAA,CAAA,MAAA,EAAA,EAAO,OAAS,EAAA,kBAAA,EAAoB,SAAW,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,CAAA,EAAI,IAAK,EAAA,GAAA,EAC5D,QAAc,EAAA,aAAA,CAAA;AAAA,UACb,EAAI,EAAA,gCAAA;AAAA,UACJ,cAAgB,EAAA,cAAA;AAAA,SACjB,GACH,CACE,GAAA,IAAA;AAAA,QAEN,OAAO,aAAc,CAAA;AAAA,UACnB,EAAI,EAAA,cAAA;AAAA,UACJ,cAAgB,EAAA,OAAA;AAAA,SACjB,CAAA;AAAA,QACD,UAAU,aAAc,CAAA;AAAA,UACtB,EAAI,EAAA,iCAAA;AAAA,UACJ,cAAgB,EAAA,eAAA;AAAA,SACjB,CAAA;AAAA,OAAA;AAAA,KACH;AAAA,IACC,OACC,oBAAA,GAAA;AAAA,MAAC,OAAQ,CAAA,MAAA;AAAA,MAAR;AAAA,QACC,YACE,kBAAA,GAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,KAAO,EAAA,aAAA;AAAA,cACL,EAAE,EAAA,EAAI,4BAA8B,EAAA,cAAA,EAAgB,qBAAsB,EAAA;AAAA,cAC1E;AAAA,gBACE,QAAQ,aAAc,CAAA;AAAA,kBACpB,EAAI,EAAA,cAAA;AAAA,kBACJ,cAAgB,EAAA,OAAA;AAAA,iBACjB,CAAA;AAAA,eACH;AAAA,aACF;AAAA,WAAA;AAAA,SACF;AAAA,OAAA;AAAA,KAEJ;AAAA,IAED,OACC,oBAAA,GAAA,CAAC,OAAQ,CAAA,OAAA,EAAR,EACC,QAAA,kBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,QAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,EACE,SACE,mBAAA,GAAA,CAAC,OAAQ,EAAA,EAAA,OAAA,EAAS,oBAAoB,IAAM,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,CAAA,EAC/C,QAAc,EAAA,aAAA,CAAA;AAAA,UACb,EAAI,EAAA,gCAAA;AAAA,UACJ,cAAgB,EAAA,cAAA;AAAA,SACjB,GACH,CACE,GAAA,IAAA;AAAA,QAGN,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KACC,EAAA,EAAA,QAAA,kBAAA,IAAA,CAAC,EAAG,EAAA,EAAA,eAAA,EAAe,CACjB,EAAA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MACC,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,OAAQ,EAAA,SAAA,EAAU,cACnC,QAAc,EAAA,aAAA,CAAA;AAAA,cACb,EAAI,EAAA,aAAA;AAAA,cACJ,cAAgB,EAAA,MAAA;AAAA,aACjB,GACH,CACF,EAAA,CAAA;AAAA,4BACA,GAAA,CAAC,MACC,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,OAAQ,EAAA,SAAA,EAAU,cACnC,QAAc,EAAA,aAAA,CAAA;AAAA,cACb,EAAI,EAAA,oBAAA;AAAA,cACJ,cAAgB,EAAA,aAAA;AAAA,aACjB,GACH,CACF,EAAA,CAAA;AAAA,4BACA,GAAA,CAAC,MACC,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,OAAQ,EAAA,SAAA,EAAU,cACnC,QAAc,EAAA,aAAA,CAAA;AAAA,cACb,EAAI,EAAA,cAAA;AAAA,cACJ,cAAgB,EAAA,OAAA;AAAA,aACjB,GACH,CACF,EAAA,CAAA;AAAA,4BACC,GAAA,CAAA,EAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,cAAA,EAAA,EACE,QAAc,EAAA,aAAA,CAAA;AAAA,cACb,EAAI,EAAA,gBAAA;AAAA,cACJ,cAAgB,EAAA,SAAA;AAAA,aACjB,GACH,CACF,EAAA,CAAA;AAAA,WAAA,EACF,CACF,EAAA,CAAA;AAAA,8BACC,KACE,EAAA,EAAA,QAAA,EAAA,KAAA,EAAO,GAAI,CAAA,CAAC,MAAM,KACjB,qBAAA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cAEC,IAAI,IAAK,CAAA,EAAA;AAAA,cACT,MAAM,IAAK,CAAA,IAAA;AAAA,cACX,aAAa,IAAK,CAAA,WAAA;AAAA,cAClB,YAAY,IAAK,CAAA,UAAA;AAAA,cACjB,KACE,EAAA;AAAA,gBACE,SACG,IAAA;AAAA,kBACC,OAAA,EAAS,qBAAqB,IAAI,CAAA;AAAA,kBAClC,OAAO,aAAc,CAAA;AAAA,oBACnB,EAAI,EAAA,qBAAA;AAAA,oBACJ,cAAgB,EAAA,WAAA;AAAA,mBACjB,CAAA;AAAA,kBACD,QAAA,sBAAW,SAAU,EAAA,EAAA,CAAA;AAAA,iBACvB;AAAA,gBACF,SACG,IAAA;AAAA,kBACC,SAAS,MAAM,QAAA,CAAS,IAAK,CAAA,EAAA,CAAG,UAAU,CAAA;AAAA,kBAC1C,OAAO,aAAc,CAAA,EAAE,IAAI,gBAAkB,EAAA,cAAA,EAAgB,QAAQ,CAAA;AAAA,kBACrE,QAAA,sBAAW,MAAO,EAAA,EAAA,CAAA;AAAA,iBACpB;AAAA,gBACF,SACG,IAAA;AAAA,kBACC,OAAA,EAAS,kBAAkB,IAAI,CAAA;AAAA,kBAC/B,OAAO,aAAc,CAAA,EAAE,IAAI,eAAiB,EAAA,cAAA,EAAgB,UAAU,CAAA;AAAA,kBACtE,QAAA,sBAAW,KAAM,EAAA,EAAA,CAAA;AAAA,iBACnB;AAAA,eACJ,CAAE,OAAO,OAAO,CAAA;AAAA,cAElB,UAAU,KAAQ,GAAA,CAAA;AAAA,cAClB,SAAA;AAAA,aAAA;AAAA,YA/BK,IAAK,CAAA,EAAA;AAAA,WAiCb,CACH,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAEJ,EAAA,CAAA;AAAA,oBAED,GAAA,CAAA,MAAA,CAAO,IAAP,EAAA,EAAY,IAAM,EAAA,wBAAA,EAA0B,YAAc,EAAA,iBAAA,EACzD,QAAC,kBAAA,GAAA,CAAA,aAAA,EAAA,EAAc,SAAW,EAAA,gBAAA,EAAkB,CAC9C,EAAA,CAAA;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ,EAAA;AAgBA,MAAM,YAAe,GAAA;AAAA,EACnB,YAAc,EAAA,IAAA;AAAA,EACd,6BAA+B,EAAA,KAAA;AAAA,EAC/B,iBAAmB,EAAA,KAAA;AACrB,CAAA,CAAA;AAwBA,MAAM,UAAU,CAAC,KAAA,EAAc,WAC7B,OAAQ,CAAA,KAAA,EAAO,CAAC,UAAe,KAAA;AAC7B,EAAA,QAAQ,OAAO,IAAM;AAAA,IACnB,KAAK,iBAAmB,EAAA;AACtB,MAAA,UAAA,CAAW,6BAAgC,GAAA,IAAA,CAAA;AAC3C,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,2BAA6B,EAAA;AAChC,MAAA,UAAA,CAAW,iBAAoB,GAAA,IAAA,CAAA;AAC/B,MAAA,UAAA,CAAW,YAAe,GAAA,IAAA,CAAA;AAC1B,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,sBAAwB,EAAA;AAC3B,MAAA,UAAA,CAAW,iBAAoB,GAAA,KAAA,CAAA;AAC/B,MAAA,UAAA,CAAW,YAAe,GAAA,IAAA,CAAA;AAC1B,MAAA,UAAA,CAAW,6BAAgC,GAAA,KAAA,CAAA;AAC3C,MAAA,MAAA;AAAA,KACF;AAAA,IACA,KAAK,oBAAsB,EAAA;AACzB,MAAA,UAAA,CAAW,eAAe,MAAO,CAAA,EAAA,CAAA;AAEjC,MAAA,MAAA;AAAA,KACF;AAAA,IACA;AACE,MAAO,OAAA,UAAA,CAAA;AAAA,GACX;AACF,CAAC,CAAA,CAAA;AAMH,MAAM,oBAAoB,MAAM;AAC9B,EAAM,MAAA,WAAA,GAAc,iBAAiB,CAAC,KAAA,KAAU,MAAM,SAAU,CAAA,WAAA,CAAY,QAAU,EAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAEhG,EAAA,2BACG,IAAK,CAAA,OAAA,EAAL,EAAa,WACZ,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { ListPageCE } from './ListPage-0RslgSLG.mjs';
2
+ import { ListPageCE } from './ListPage-hyar31Ge.mjs';
3
3
  import { u as useLicenseLimitNotification } from './useLicenseLimitNotification-PaR7jmqd.mjs';
4
4
 
5
5
  const UserListPageEE = () => {
@@ -8,4 +8,4 @@ const UserListPageEE = () => {
8
8
  };
9
9
 
10
10
  export { UserListPageEE };
11
- //# sourceMappingURL=ListPage-LJzzy5BP.mjs.map
11
+ //# sourceMappingURL=ListPage-v8u0mb2U.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage-LJzzy5BP.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage.tsx"],"sourcesContent":["import { ListPageCE } from '../../../../../../../admin/src/pages/Settings/pages/Users/ListPage';\nimport { useLicenseLimitNotification } from '../../../../hooks/useLicenseLimitNotification';\n\nexport const UserListPageEE = () => {\n useLicenseLimitNotification();\n\n return <ListPageCE />;\n};\n"],"names":[],"mappings":";;;;AAGO,MAAM,iBAAiB,MAAM;AAClC,EAA4B,2BAAA,EAAA,CAAA;AAE5B,EAAA,2BAAQ,UAAW,EAAA,EAAA,CAAA,CAAA;AACrB;;;;"}
1
+ {"version":3,"file":"ListPage-v8u0mb2U.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage.tsx"],"sourcesContent":["import { ListPageCE } from '../../../../../../../admin/src/pages/Settings/pages/Users/ListPage';\nimport { useLicenseLimitNotification } from '../../../../hooks/useLicenseLimitNotification';\n\nexport const UserListPageEE = () => {\n useLicenseLimitNotification();\n\n return <ListPageCE />;\n};\n"],"names":[],"mappings":";;;;AAGO,MAAM,iBAAiB,MAAM;AAClC,EAA4B,2BAAA,EAAA,CAAA;AAE5B,EAAA,2BAAQ,UAAW,EAAA,EAAA,CAAA,CAAA;AACrB;;;;"}
@@ -10,12 +10,12 @@ const symbols = require('@strapi/icons/symbols');
10
10
  const qs = require('qs');
11
11
  const reactIntl = require('react-intl');
12
12
  const reactRouterDom = require('react-router-dom');
13
- const index = require('./index-UvMVCH5g.js');
13
+ const index = require('./index-3GWFhGv_.js');
14
14
  const Theme = require('./Theme-7W0we6BI.js');
15
15
  const useOnce = require('./useOnce--ZSbXFh3.js');
16
16
  const apiTokens = require('./apiTokens-YxfAnO7_.js');
17
17
  const constants = require('./constants-8PhEUZTR.js');
18
- const Table = require('./Table-adxu1Nui.js');
18
+ const Table = require('./Table-b0AhH-1j.js');
19
19
 
20
20
  function _interopNamespace(e) {
21
21
  if (e && e.__esModule) return e;
@@ -223,4 +223,4 @@ const ProtectedListView = () => {
223
223
 
224
224
  exports.ListView = ListView;
225
225
  exports.ProtectedListView = ProtectedListView;
226
- //# sourceMappingURL=ListView-5WvMFqaj.js.map
226
+ //# sourceMappingURL=ListView-4XLHSTtI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListView-5WvMFqaj.js","sources":["../../admin/src/pages/Settings/pages/ApiTokens/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 { Data } from '@strapi/types';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { 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 { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.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\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["useIntl","useNotification","useTypedSelector","useRBAC","useNavigate","useTracking","useGuidedTour","useAPIErrorHandler","React","qs","useOnce","API_TOKEN_TYPE","apiTokens","useGetAPITokensQuery","useDeleteAPITokenMutation","jsxs","Fragment","jsx","Page","Layouts","LinkButton","Link","Plus","Table","EmptyStateLayout","EmptyDocuments"],"mappings":"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"}
1
+ {"version":3,"file":"ListView-4XLHSTtI.js","sources":["../../admin/src/pages/Settings/pages/ApiTokens/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 { Data } from '@strapi/types';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { 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 { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.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\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["useIntl","useNotification","useTypedSelector","useRBAC","useNavigate","useTracking","useGuidedTour","useAPIErrorHandler","React","qs","useOnce","API_TOKEN_TYPE","apiTokens","useGetAPITokensQuery","useDeleteAPITokenMutation","jsxs","Fragment","jsx","Page","Layouts","LinkButton","Link","Plus","Table","EmptyStateLayout","EmptyDocuments"],"mappings":"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"}
@@ -6,12 +6,12 @@ import { EmptyDocuments } from '@strapi/icons/symbols';
6
6
  import * as qs from 'qs';
7
7
  import { useIntl } from 'react-intl';
8
8
  import { useNavigate, Link } from 'react-router-dom';
9
- import { l as useGuidedTour, b as Layouts } from './index-EuBu2rv5.mjs';
9
+ import { l as useGuidedTour, b as Layouts } from './index-4iCJ7_08.mjs';
10
10
  import { b as useTypedSelector, P as Page, a as useNotification, k as useRBAC, d as useTracking, f as useAPIErrorHandler } from './Theme-PrUuuGtN.mjs';
11
11
  import { u as useOnce } from './useOnce-GJ2Ta2mZ.mjs';
12
12
  import { u as useGetAPITokensQuery, a as useDeleteAPITokenMutation } from './apiTokens-YMUmHnrH.mjs';
13
13
  import { A as API_TOKEN_TYPE } from './constants-EoEtSd4i.mjs';
14
- import { T as Table } from './Table-cJ9JMeIZ.mjs';
14
+ import { T as Table } from './Table-GNJgJ_tZ.mjs';
15
15
 
16
16
  const TABLE_HEADERS = [
17
17
  {
@@ -197,4 +197,4 @@ const ProtectedListView = () => {
197
197
  };
198
198
 
199
199
  export { ListView, ProtectedListView };
200
- //# sourceMappingURL=ListView-Bl8_BOlX.mjs.map
200
+ //# sourceMappingURL=ListView-Hx1s5o_O.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListView-Bl8_BOlX.mjs","sources":["../../admin/src/pages/Settings/pages/ApiTokens/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 { Data } from '@strapi/types';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { 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 { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.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\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ListView-Hx1s5o_O.mjs","sources":["../../admin/src/pages/Settings/pages/ApiTokens/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 { Data } from '@strapi/types';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { 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 { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.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\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -6,12 +6,12 @@ import { EmptyDocuments } from '@strapi/icons/symbols';
6
6
  import * as qs from 'qs';
7
7
  import { useIntl } from 'react-intl';
8
8
  import { useNavigate, Link } from 'react-router-dom';
9
- import { b as Layouts } from './index-EuBu2rv5.mjs';
9
+ import { b as Layouts } from './index-4iCJ7_08.mjs';
10
10
  import { b as useTypedSelector, P as Page, a as useNotification, k as useRBAC, d as useTracking, f as useAPIErrorHandler } from './Theme-PrUuuGtN.mjs';
11
11
  import { u as useOnce } from './useOnce-GJ2Ta2mZ.mjs';
12
12
  import { c as useGetTransferTokensQuery, d as useDeleteTransferTokenMutation } from './transferTokens-CNI0TFdA.mjs';
13
13
  import { T as TRANSFER_TOKEN_TYPE } from './constants-EoEtSd4i.mjs';
14
- import { T as Table } from './Table-cJ9JMeIZ.mjs';
14
+ import { T as Table } from './Table-GNJgJ_tZ.mjs';
15
15
 
16
16
  const tableHeaders = [
17
17
  {
@@ -208,4 +208,4 @@ const ProtectedListView = () => {
208
208
  };
209
209
 
210
210
  export { ListView, ProtectedListView };
211
- //# sourceMappingURL=ListView-MVc5DA4a.mjs.map
211
+ //# sourceMappingURL=ListView-NUg6w25H.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListView-MVc5DA4a.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 { Data } from '@strapi/types';\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\nconst tableHeaders = [\n {\n name: 'name',\n label: {\n id: 'Settings.tokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.tokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.tokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.tokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * ListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens']\n );\n const {\n isLoading: isLoadingRBAC,\n allowedActions: { canCreate, canDelete, canUpdate, canRead },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n });\n\n const headers = tableHeaders.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const {\n data: transferTokens = [],\n isLoading: isLoadingTokens,\n error,\n } = useGetTransferTokensQuery(undefined, {\n skip: !canRead,\n });\n\n React.useEffect(() => {\n if (transferTokens) {\n trackUsage('didAccessTokenList', {\n number: transferTokens.length,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }\n }, [trackUsage, transferTokens]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const [deleteToken] = useDeleteTransferTokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const isLoading = isLoadingTokens || isLoadingRBAC;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Transfer Tokens',\n }\n )}\n </Page.Title>\n <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":[],"mappings":"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"}
1
+ {"version":3,"file":"ListView-NUg6w25H.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 { Data } from '@strapi/types';\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\nconst tableHeaders = [\n {\n name: 'name',\n label: {\n id: 'Settings.tokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.tokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.tokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.tokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * ListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens']\n );\n const {\n isLoading: isLoadingRBAC,\n allowedActions: { canCreate, canDelete, canUpdate, canRead },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n });\n\n const headers = tableHeaders.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const {\n data: transferTokens = [],\n isLoading: isLoadingTokens,\n error,\n } = useGetTransferTokensQuery(undefined, {\n skip: !canRead,\n });\n\n React.useEffect(() => {\n if (transferTokens) {\n trackUsage('didAccessTokenList', {\n number: transferTokens.length,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }\n }, [trackUsage, transferTokens]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const [deleteToken] = useDeleteTransferTokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const isLoading = isLoadingTokens || isLoadingRBAC;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Transfer Tokens',\n }\n )}\n </Page.Title>\n <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":[],"mappings":"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"}
@@ -10,12 +10,12 @@ const symbols = require('@strapi/icons/symbols');
10
10
  const qs = require('qs');
11
11
  const reactIntl = require('react-intl');
12
12
  const reactRouterDom = require('react-router-dom');
13
- const index = require('./index-UvMVCH5g.js');
13
+ const index = require('./index-3GWFhGv_.js');
14
14
  const Theme = require('./Theme-7W0we6BI.js');
15
15
  const useOnce = require('./useOnce--ZSbXFh3.js');
16
16
  const transferTokens = require('./transferTokens-HcVXmOrq.js');
17
17
  const constants = require('./constants-8PhEUZTR.js');
18
- const Table = require('./Table-adxu1Nui.js');
18
+ const Table = require('./Table-b0AhH-1j.js');
19
19
 
20
20
  function _interopNamespace(e) {
21
21
  if (e && e.__esModule) return e;
@@ -234,4 +234,4 @@ const ProtectedListView = () => {
234
234
 
235
235
  exports.ListView = ListView;
236
236
  exports.ProtectedListView = ProtectedListView;
237
- //# sourceMappingURL=ListView-DAN35ql2.js.map
237
+ //# sourceMappingURL=ListView-U0ueqVjR.js.map