@strapi/admin 5.52.3 → 5.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/dist/admin/admin/src/App.js +1 -1
  2. package/dist/admin/admin/src/App.js.map +1 -1
  3. package/dist/admin/admin/src/App.mjs +1 -1
  4. package/dist/admin/admin/src/App.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/DismissibleBanner.js +60 -0
  6. package/dist/admin/admin/src/components/DismissibleBanner.js.map +1 -0
  7. package/dist/admin/admin/src/components/DismissibleBanner.mjs +58 -0
  8. package/dist/admin/admin/src/components/DismissibleBanner.mjs.map +1 -0
  9. package/dist/admin/admin/src/components/Form.js +11 -2
  10. package/dist/admin/admin/src/components/Form.js.map +1 -1
  11. package/dist/admin/admin/src/components/Form.mjs +11 -2
  12. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/FormInputs/DateTime.js +1 -1
  14. package/dist/admin/admin/src/components/FormInputs/DateTime.js.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/DateTime.mjs +1 -1
  16. package/dist/admin/admin/src/components/FormInputs/DateTime.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Time.js +1 -1
  18. package/dist/admin/admin/src/components/FormInputs/Time.js.map +1 -1
  19. package/dist/admin/admin/src/components/FormInputs/Time.mjs +1 -1
  20. package/dist/admin/admin/src/components/FormInputs/Time.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/MainNav/NavUser.js +1 -2
  22. package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
  23. package/dist/admin/admin/src/components/MainNav/NavUser.mjs +1 -2
  24. package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/MediaLibraryBanner.js +85 -0
  26. package/dist/admin/admin/src/components/MediaLibraryBanner.js.map +1 -0
  27. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs +83 -0
  28. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs.map +1 -0
  29. package/dist/admin/admin/src/components/Providers.js +6 -6
  30. package/dist/admin/admin/src/components/Providers.js.map +1 -1
  31. package/dist/admin/admin/src/components/Providers.mjs +6 -6
  32. package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
  33. package/dist/admin/admin/src/components/UpsellBanner.js +56 -86
  34. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  35. package/dist/admin/admin/src/components/UpsellBanner.mjs +58 -88
  36. package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
  37. package/dist/admin/admin/src/core/store/configure.js +14 -2
  38. package/dist/admin/admin/src/core/store/configure.js.map +1 -1
  39. package/dist/admin/admin/src/core/store/configure.mjs +14 -2
  40. package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
  41. package/dist/admin/admin/src/core/store/hooks.mjs +1 -1
  42. package/dist/admin/admin/src/features/Auth.js +162 -46
  43. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  44. package/dist/admin/admin/src/features/Auth.mjs +164 -48
  45. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  46. package/dist/admin/admin/src/hooks/useRegisterUnsavedChanges.js +19 -0
  47. package/dist/admin/admin/src/hooks/useRegisterUnsavedChanges.js.map +1 -0
  48. package/dist/admin/admin/src/hooks/useRegisterUnsavedChanges.mjs +17 -0
  49. package/dist/admin/admin/src/hooks/useRegisterUnsavedChanges.mjs.map +1 -0
  50. package/dist/admin/admin/src/hooks/{useIdleSessionLogout.js → useSessionKeepalive.js} +34 -27
  51. package/dist/admin/admin/src/hooks/useSessionKeepalive.js.map +1 -0
  52. package/dist/admin/admin/src/hooks/{useIdleSessionLogout.mjs → useSessionKeepalive.mjs} +34 -27
  53. package/dist/admin/admin/src/hooks/useSessionKeepalive.mjs.map +1 -0
  54. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +2 -0
  55. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  56. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +2 -0
  57. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  58. package/dist/admin/admin/src/pages/SessionsPage.js +2 -5
  59. package/dist/admin/admin/src/pages/SessionsPage.js.map +1 -1
  60. package/dist/admin/admin/src/pages/SessionsPage.mjs +2 -5
  61. package/dist/admin/admin/src/pages/SessionsPage.mjs.map +1 -1
  62. package/dist/admin/admin/src/render.js +5 -0
  63. package/dist/admin/admin/src/render.js.map +1 -1
  64. package/dist/admin/admin/src/render.mjs +5 -0
  65. package/dist/admin/admin/src/render.mjs.map +1 -1
  66. package/dist/admin/admin/src/translations/en.json.js +30 -0
  67. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  68. package/dist/admin/admin/src/translations/en.json.mjs +30 -0
  69. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  70. package/dist/admin/admin/src/utils/baseQuery.js +3 -13
  71. package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
  72. package/dist/admin/admin/src/utils/baseQuery.mjs +3 -13
  73. package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
  74. package/dist/admin/admin/src/utils/getFetchClient.js +152 -48
  75. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  76. package/dist/admin/admin/src/utils/getFetchClient.mjs +151 -50
  77. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  78. package/dist/admin/admin/src/utils/unsavedChangesRegistry.js +25 -0
  79. package/dist/admin/admin/src/utils/unsavedChangesRegistry.js.map +1 -0
  80. package/dist/admin/admin/src/utils/unsavedChangesRegistry.mjs +22 -0
  81. package/dist/admin/admin/src/utils/unsavedChangesRegistry.mjs.map +1 -0
  82. package/dist/admin/admin/tests/utils.js +14 -14
  83. package/dist/admin/admin/tests/utils.js.map +1 -1
  84. package/dist/admin/admin/tests/utils.mjs +14 -14
  85. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  86. package/dist/admin/ee/admin/src/constants.js +6 -0
  87. package/dist/admin/ee/admin/src/constants.js.map +1 -1
  88. package/dist/admin/ee/admin/src/constants.mjs +6 -0
  89. package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
  90. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +31 -3
  91. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
  92. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +33 -5
  93. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
  94. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.js +177 -0
  95. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.js.map +1 -0
  96. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.mjs +175 -0
  97. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.mjs.map +1 -0
  98. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js +173 -0
  99. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js.map +1 -0
  100. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs +151 -0
  101. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs.map +1 -0
  102. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +14 -1
  103. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  104. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +14 -1
  105. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  106. package/dist/admin/index.js +3 -0
  107. package/dist/admin/index.js.map +1 -1
  108. package/dist/admin/index.mjs +1 -1
  109. package/dist/admin/shared/utils/audit-log-export.js +16 -0
  110. package/dist/admin/shared/utils/audit-log-export.js.map +1 -0
  111. package/dist/admin/shared/utils/audit-log-export.mjs +9 -0
  112. package/dist/admin/shared/utils/audit-log-export.mjs.map +1 -0
  113. package/dist/admin/src/components/DismissibleBanner.d.ts +8 -0
  114. package/dist/admin/src/components/MediaLibraryBanner.d.ts +2 -0
  115. package/dist/admin/src/hooks/useRegisterUnsavedChanges.d.ts +6 -0
  116. package/dist/admin/src/hooks/useSessionKeepalive.d.ts +88 -0
  117. package/dist/admin/src/utils/getFetchClient.d.ts +22 -7
  118. package/dist/admin/src/utils/unsavedChangesRegistry.d.ts +11 -0
  119. package/dist/admin/tests/store.d.ts +4 -0
  120. package/dist/admin/tests/utils.d.ts +4 -0
  121. package/dist/ee/admin/src/constants.d.ts +4 -0
  122. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.d.ts +10 -0
  123. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.d.ts +18 -0
  124. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +13 -0
  125. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts +1 -0
  126. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts.map +1 -1
  127. package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts.map +1 -1
  128. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +24 -3
  129. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
  130. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +8 -2
  131. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
  132. package/dist/ee/server/src/audit-logs/utils/csv.d.ts +5 -0
  133. package/dist/ee/server/src/audit-logs/utils/csv.d.ts.map +1 -0
  134. package/dist/ee/server/src/audit-logs/utils/export-token.d.ts +5 -0
  135. package/dist/ee/server/src/audit-logs/utils/export-token.d.ts.map +1 -0
  136. package/dist/ee/server/src/audit-logs/utils.d.ts +10 -0
  137. package/dist/ee/server/src/audit-logs/utils.d.ts.map +1 -0
  138. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +2 -0
  139. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -1
  140. package/dist/ee/server/src/config/admin-actions.d.ts.map +1 -1
  141. package/dist/ee/server/src/index.d.ts +1 -0
  142. package/dist/ee/server/src/index.d.ts.map +1 -1
  143. package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js +50 -0
  144. package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js.map +1 -1
  145. package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs +51 -1
  146. package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs.map +1 -1
  147. package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js +13 -4
  148. package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js.map +1 -1
  149. package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs +13 -4
  150. package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs.map +1 -1
  151. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +201 -7
  152. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
  153. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +201 -8
  154. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
  155. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +119 -34
  156. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  157. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +119 -34
  158. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  159. package/dist/server/ee/server/src/audit-logs/utils/csv.js +33 -0
  160. package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -0
  161. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +29 -0
  162. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -0
  163. package/dist/server/ee/server/src/audit-logs/utils/export-token.js +33 -0
  164. package/dist/server/ee/server/src/audit-logs/utils/export-token.js.map +1 -0
  165. package/dist/server/ee/server/src/audit-logs/utils/export-token.mjs +29 -0
  166. package/dist/server/ee/server/src/audit-logs/utils/export-token.mjs.map +1 -0
  167. package/dist/server/ee/server/src/audit-logs/utils.js +14 -0
  168. package/dist/server/ee/server/src/audit-logs/utils.js.map +1 -0
  169. package/dist/server/ee/server/src/audit-logs/utils.mjs +12 -0
  170. package/dist/server/ee/server/src/audit-logs/utils.mjs.map +1 -0
  171. package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js +11 -0
  172. package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js.map +1 -1
  173. package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs +11 -1
  174. package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs.map +1 -1
  175. package/dist/server/ee/server/src/config/admin-actions.js +8 -0
  176. package/dist/server/ee/server/src/config/admin-actions.js.map +1 -1
  177. package/dist/server/ee/server/src/config/admin-actions.mjs +8 -0
  178. package/dist/server/ee/server/src/config/admin-actions.mjs.map +1 -1
  179. package/dist/server/ee/server/src/index.js +10 -0
  180. package/dist/server/ee/server/src/index.js.map +1 -1
  181. package/dist/server/ee/server/src/index.mjs +10 -0
  182. package/dist/server/ee/server/src/index.mjs.map +1 -1
  183. package/dist/server/shared/utils/audit-log-export.js +22 -0
  184. package/dist/server/shared/utils/audit-log-export.js.map +1 -0
  185. package/dist/server/shared/utils/audit-log-export.mjs +12 -0
  186. package/dist/server/shared/utils/audit-log-export.mjs.map +1 -0
  187. package/dist/shared/contracts/audit-logs.d.ts +15 -1
  188. package/dist/shared/contracts/audit-logs.d.ts.map +1 -1
  189. package/dist/shared/contracts/shared.d.ts +1 -0
  190. package/dist/shared/contracts/shared.d.ts.map +1 -1
  191. package/dist/shared/utils/audit-log-export.d.ts +9 -0
  192. package/dist/shared/utils/audit-log-export.d.ts.map +1 -0
  193. package/package.json +7 -7
  194. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +0 -1
  195. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +0 -1
  196. package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +0 -87
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({ children, initialEntries, storeConfig, permissions = [] }: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </Theme>\n </LanguageProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({ children, initialEntries, storeConfig, permissions = [] }: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Theme>\n </LanguageProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":"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"}
@@ -152,20 +152,20 @@ const Providers = ({ children, initialEntries, storeConfig, permissions = [] })=
152
152
  settings: {},
153
153
  children: /*#__PURE__*/ jsx(Provider, {
154
154
  store: storeRef.current,
155
- children: /*#__PURE__*/ jsx(AuthProvider, {
156
- _defaultPermissions: allPermissions,
157
- _disableRenewToken: true,
158
- children: /*#__PURE__*/ jsx(QueryClientProvider, {
159
- client: queryClientRef.current,
160
- children: /*#__PURE__*/ jsx(DndProvider, {
161
- backend: HTML5Backend,
162
- children: /*#__PURE__*/ jsx(LanguageProvider, {
163
- messages: {},
164
- children: /*#__PURE__*/ jsx(Theme, {
165
- themes: {
166
- dark: darkTheme,
167
- light: lightTheme
168
- },
155
+ children: /*#__PURE__*/ jsx(LanguageProvider, {
156
+ messages: {},
157
+ children: /*#__PURE__*/ jsx(Theme, {
158
+ themes: {
159
+ dark: darkTheme,
160
+ light: lightTheme
161
+ },
162
+ children: /*#__PURE__*/ jsx(AuthProvider, {
163
+ _defaultPermissions: allPermissions,
164
+ _disableRenewToken: true,
165
+ children: /*#__PURE__*/ jsx(QueryClientProvider, {
166
+ client: queryClientRef.current,
167
+ children: /*#__PURE__*/ jsx(DndProvider, {
168
+ backend: HTML5Backend,
169
169
  children: /*#__PURE__*/ jsx(NotificationsProvider, {
170
170
  children: /*#__PURE__*/ jsx(GuidedTourContext, {
171
171
  enabled: false,
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({ children, initialEntries, storeConfig, permissions = [] }: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </Theme>\n </LanguageProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":"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"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({ children, initialEntries, storeConfig, permissions = [] }: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Theme>\n </LanguageProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":"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"}
@@ -20,6 +20,12 @@ const ADMIN_PERMISSIONS_EE = {
20
20
  action: 'admin::audit-logs.update',
21
21
  subject: null
22
22
  }
23
+ ],
24
+ export: [
25
+ {
26
+ action: 'admin::audit-logs.export',
27
+ subject: null
28
+ }
23
29
  ]
24
30
  },
25
31
  'review-workflows': {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../../ee/admin/src/constants.ts"],"sourcesContent":["import type { SettingsMenu } from '../../../admin/src/constants';\nimport type { PermissionMap } from '../../../admin/src/types/permissions';\nimport type { RouteObject } from 'react-router-dom';\n\nexport const ADMIN_PERMISSIONS_EE = {\n settings: {\n auditLogs: {\n main: [{ action: 'admin::audit-logs.read', subject: null }],\n read: [{ action: 'admin::audit-logs.read', subject: null }],\n update: [{ action: 'admin::audit-logs.update', subject: null }],\n },\n 'review-workflows': {\n main: [{ action: 'admin::review-workflows.read', subject: null }],\n read: [{ action: 'admin::review-workflows.read', subject: null }],\n create: [{ action: 'admin::review-workflows.create', subject: null }],\n delete: [{ action: 'admin::review-workflows.delete', subject: null }],\n update: [{ action: 'admin::review-workflows.update', subject: null }],\n },\n sso: {\n main: [{ action: 'admin::provider-login.read', subject: null }],\n read: [{ action: 'admin::provider-login.read', subject: null }],\n update: [{ action: 'admin::provider-login.update', subject: null }],\n },\n releases: {\n read: [\n {\n action: 'plugin::content-releases.settings.read',\n subject: null,\n },\n ],\n update: [\n {\n action: 'plugin::content-releases.settings.update',\n subject: null,\n },\n ],\n },\n },\n} satisfies {\n settings: Pick<PermissionMap['settings'], 'auditLogs' | 'review-workflows' | 'sso' | 'releases'>;\n};\n\n/**\n * Base EE routes, these are relative to the `root` of the app.\n * We use a function to get them so we're not looking at window\n * during build time.\n */\nexport const getEERoutes = (): RouteObject[] =>\n window.strapi.isEE\n ? [\n {\n path: 'auth/login/:authResponse',\n lazy: async () => {\n const { AuthResponse } = await import('./pages/AuthResponse');\n\n return {\n Component: AuthResponse,\n };\n },\n },\n ]\n : [];\n\nexport const AUDIT_LOGS_DEFAULT_PAGE_SIZE = 50;\n\n// TODO: the constants.js file is imported before the React application is setup and\n// therefore `window.strapi` might not exist at import-time. We should probably define\n// which constant is available at which stage of the application lifecycle.\nexport const SETTINGS_LINKS_EE = (): SettingsMenu => ({\n global: window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? [\n {\n intlLabel: { id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' },\n to: '/settings/single-sign-on',\n id: 'sso',\n licenseOnly: true,\n },\n ]\n : [],\n\n admin: window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)\n ? [\n {\n intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' },\n to: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n id: 'auditLogs',\n licenseOnly: true,\n },\n ]\n : [],\n});\n"],"names":["ADMIN_PERMISSIONS_EE","settings","auditLogs","main","action","subject","read","update","create","delete","sso","releases","getEERoutes","window","strapi","isEE","path","lazy","AuthResponse","Component","AUDIT_LOGS_DEFAULT_PAGE_SIZE","SETTINGS_LINKS_EE","global","features","isEnabled","SSO","intlLabel","id","defaultMessage","to","licenseOnly","admin","AUDIT_LOGS"],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../../ee/admin/src/constants.ts"],"sourcesContent":["import type { SettingsMenu } from '../../../admin/src/constants';\nimport type { PermissionMap } from '../../../admin/src/types/permissions';\nimport type { RouteObject } from 'react-router-dom';\n\nexport const ADMIN_PERMISSIONS_EE = {\n settings: {\n auditLogs: {\n main: [{ action: 'admin::audit-logs.read', subject: null }],\n read: [{ action: 'admin::audit-logs.read', subject: null }],\n update: [{ action: 'admin::audit-logs.update', subject: null }],\n export: [{ action: 'admin::audit-logs.export', subject: null }],\n },\n 'review-workflows': {\n main: [{ action: 'admin::review-workflows.read', subject: null }],\n read: [{ action: 'admin::review-workflows.read', subject: null }],\n create: [{ action: 'admin::review-workflows.create', subject: null }],\n delete: [{ action: 'admin::review-workflows.delete', subject: null }],\n update: [{ action: 'admin::review-workflows.update', subject: null }],\n },\n sso: {\n main: [{ action: 'admin::provider-login.read', subject: null }],\n read: [{ action: 'admin::provider-login.read', subject: null }],\n update: [{ action: 'admin::provider-login.update', subject: null }],\n },\n releases: {\n read: [\n {\n action: 'plugin::content-releases.settings.read',\n subject: null,\n },\n ],\n update: [\n {\n action: 'plugin::content-releases.settings.update',\n subject: null,\n },\n ],\n },\n },\n} satisfies {\n settings: Pick<PermissionMap['settings'], 'auditLogs' | 'review-workflows' | 'sso' | 'releases'>;\n};\n\n/**\n * Base EE routes, these are relative to the `root` of the app.\n * We use a function to get them so we're not looking at window\n * during build time.\n */\nexport const getEERoutes = (): RouteObject[] =>\n window.strapi.isEE\n ? [\n {\n path: 'auth/login/:authResponse',\n lazy: async () => {\n const { AuthResponse } = await import('./pages/AuthResponse');\n\n return {\n Component: AuthResponse,\n };\n },\n },\n ]\n : [];\n\nexport const AUDIT_LOGS_DEFAULT_PAGE_SIZE = 50;\n\n// TODO: the constants.js file is imported before the React application is setup and\n// therefore `window.strapi` might not exist at import-time. We should probably define\n// which constant is available at which stage of the application lifecycle.\nexport const SETTINGS_LINKS_EE = (): SettingsMenu => ({\n global: window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? [\n {\n intlLabel: { id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' },\n to: '/settings/single-sign-on',\n id: 'sso',\n licenseOnly: true,\n },\n ]\n : [],\n\n admin: window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)\n ? [\n {\n intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' },\n to: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n id: 'auditLogs',\n licenseOnly: true,\n },\n ]\n : [],\n});\n"],"names":["ADMIN_PERMISSIONS_EE","settings","auditLogs","main","action","subject","read","update","export","create","delete","sso","releases","getEERoutes","window","strapi","isEE","path","lazy","AuthResponse","Component","AUDIT_LOGS_DEFAULT_PAGE_SIZE","SETTINGS_LINKS_EE","global","features","isEnabled","SSO","intlLabel","id","defaultMessage","to","licenseOnly","admin","AUDIT_LOGS"],"mappings":"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"}
@@ -18,6 +18,12 @@ const ADMIN_PERMISSIONS_EE = {
18
18
  action: 'admin::audit-logs.update',
19
19
  subject: null
20
20
  }
21
+ ],
22
+ export: [
23
+ {
24
+ action: 'admin::audit-logs.export',
25
+ subject: null
26
+ }
21
27
  ]
22
28
  },
23
29
  'review-workflows': {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../../../ee/admin/src/constants.ts"],"sourcesContent":["import type { SettingsMenu } from '../../../admin/src/constants';\nimport type { PermissionMap } from '../../../admin/src/types/permissions';\nimport type { RouteObject } from 'react-router-dom';\n\nexport const ADMIN_PERMISSIONS_EE = {\n settings: {\n auditLogs: {\n main: [{ action: 'admin::audit-logs.read', subject: null }],\n read: [{ action: 'admin::audit-logs.read', subject: null }],\n update: [{ action: 'admin::audit-logs.update', subject: null }],\n },\n 'review-workflows': {\n main: [{ action: 'admin::review-workflows.read', subject: null }],\n read: [{ action: 'admin::review-workflows.read', subject: null }],\n create: [{ action: 'admin::review-workflows.create', subject: null }],\n delete: [{ action: 'admin::review-workflows.delete', subject: null }],\n update: [{ action: 'admin::review-workflows.update', subject: null }],\n },\n sso: {\n main: [{ action: 'admin::provider-login.read', subject: null }],\n read: [{ action: 'admin::provider-login.read', subject: null }],\n update: [{ action: 'admin::provider-login.update', subject: null }],\n },\n releases: {\n read: [\n {\n action: 'plugin::content-releases.settings.read',\n subject: null,\n },\n ],\n update: [\n {\n action: 'plugin::content-releases.settings.update',\n subject: null,\n },\n ],\n },\n },\n} satisfies {\n settings: Pick<PermissionMap['settings'], 'auditLogs' | 'review-workflows' | 'sso' | 'releases'>;\n};\n\n/**\n * Base EE routes, these are relative to the `root` of the app.\n * We use a function to get them so we're not looking at window\n * during build time.\n */\nexport const getEERoutes = (): RouteObject[] =>\n window.strapi.isEE\n ? [\n {\n path: 'auth/login/:authResponse',\n lazy: async () => {\n const { AuthResponse } = await import('./pages/AuthResponse');\n\n return {\n Component: AuthResponse,\n };\n },\n },\n ]\n : [];\n\nexport const AUDIT_LOGS_DEFAULT_PAGE_SIZE = 50;\n\n// TODO: the constants.js file is imported before the React application is setup and\n// therefore `window.strapi` might not exist at import-time. We should probably define\n// which constant is available at which stage of the application lifecycle.\nexport const SETTINGS_LINKS_EE = (): SettingsMenu => ({\n global: window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? [\n {\n intlLabel: { id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' },\n to: '/settings/single-sign-on',\n id: 'sso',\n licenseOnly: true,\n },\n ]\n : [],\n\n admin: window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)\n ? [\n {\n intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' },\n to: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n id: 'auditLogs',\n licenseOnly: true,\n },\n ]\n : [],\n});\n"],"names":["ADMIN_PERMISSIONS_EE","settings","auditLogs","main","action","subject","read","update","create","delete","sso","releases","getEERoutes","window","strapi","isEE","path","lazy","AuthResponse","Component","AUDIT_LOGS_DEFAULT_PAGE_SIZE","SETTINGS_LINKS_EE","global","features","isEnabled","SSO","intlLabel","id","defaultMessage","to","licenseOnly","admin","AUDIT_LOGS"],"mappings":"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"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../../ee/admin/src/constants.ts"],"sourcesContent":["import type { SettingsMenu } from '../../../admin/src/constants';\nimport type { PermissionMap } from '../../../admin/src/types/permissions';\nimport type { RouteObject } from 'react-router-dom';\n\nexport const ADMIN_PERMISSIONS_EE = {\n settings: {\n auditLogs: {\n main: [{ action: 'admin::audit-logs.read', subject: null }],\n read: [{ action: 'admin::audit-logs.read', subject: null }],\n update: [{ action: 'admin::audit-logs.update', subject: null }],\n export: [{ action: 'admin::audit-logs.export', subject: null }],\n },\n 'review-workflows': {\n main: [{ action: 'admin::review-workflows.read', subject: null }],\n read: [{ action: 'admin::review-workflows.read', subject: null }],\n create: [{ action: 'admin::review-workflows.create', subject: null }],\n delete: [{ action: 'admin::review-workflows.delete', subject: null }],\n update: [{ action: 'admin::review-workflows.update', subject: null }],\n },\n sso: {\n main: [{ action: 'admin::provider-login.read', subject: null }],\n read: [{ action: 'admin::provider-login.read', subject: null }],\n update: [{ action: 'admin::provider-login.update', subject: null }],\n },\n releases: {\n read: [\n {\n action: 'plugin::content-releases.settings.read',\n subject: null,\n },\n ],\n update: [\n {\n action: 'plugin::content-releases.settings.update',\n subject: null,\n },\n ],\n },\n },\n} satisfies {\n settings: Pick<PermissionMap['settings'], 'auditLogs' | 'review-workflows' | 'sso' | 'releases'>;\n};\n\n/**\n * Base EE routes, these are relative to the `root` of the app.\n * We use a function to get them so we're not looking at window\n * during build time.\n */\nexport const getEERoutes = (): RouteObject[] =>\n window.strapi.isEE\n ? [\n {\n path: 'auth/login/:authResponse',\n lazy: async () => {\n const { AuthResponse } = await import('./pages/AuthResponse');\n\n return {\n Component: AuthResponse,\n };\n },\n },\n ]\n : [];\n\nexport const AUDIT_LOGS_DEFAULT_PAGE_SIZE = 50;\n\n// TODO: the constants.js file is imported before the React application is setup and\n// therefore `window.strapi` might not exist at import-time. We should probably define\n// which constant is available at which stage of the application lifecycle.\nexport const SETTINGS_LINKS_EE = (): SettingsMenu => ({\n global: window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? [\n {\n intlLabel: { id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' },\n to: '/settings/single-sign-on',\n id: 'sso',\n licenseOnly: true,\n },\n ]\n : [],\n\n admin: window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)\n ? [\n {\n intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' },\n to: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n id: 'auditLogs',\n licenseOnly: true,\n },\n ]\n : [],\n});\n"],"names":["ADMIN_PERMISSIONS_EE","settings","auditLogs","main","action","subject","read","update","export","create","delete","sso","releases","getEERoutes","window","strapi","isEE","path","lazy","AuthResponse","Component","AUDIT_LOGS_DEFAULT_PAGE_SIZE","SETTINGS_LINKS_EE","global","features","isEnabled","SSO","intlLabel","id","defaultMessage","to","licenseOnly","admin","AUDIT_LOGS"],"mappings":"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"}
@@ -13,8 +13,10 @@ var Table = require('../../../../../../../admin/src/components/Table.js');
13
13
  var hooks = require('../../../../../../../admin/src/core/store/hooks.js');
14
14
  var useQueryParams = require('../../../../../../../admin/src/hooks/useQueryParams.js');
15
15
  var useRBAC = require('../../../../../../../admin/src/hooks/useRBAC.js');
16
+ var ExportCard = require('./components/ExportCard.js');
16
17
  var Modal = require('./components/Modal.js');
17
18
  var useAuditLogsData = require('./hooks/useAuditLogsData.js');
19
+ var useExportAuditLogs = require('./hooks/useExportAuditLogs.js');
18
20
  var useFormatTimeStamp = require('./hooks/useFormatTimeStamp.js');
19
21
  var getActionTypesDefaultMessages = require('./utils/getActionTypesDefaultMessages.js');
20
22
  var getDisplayedFilters = require('./utils/getDisplayedFilters.js');
@@ -43,7 +45,15 @@ const USERS_PAGE_SIZE = 10;
43
45
  const ListPage = ()=>{
44
46
  const { formatMessage } = reactIntl.useIntl();
45
47
  const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions.settings);
46
- const { allowedActions: { canRead: canReadAuditLogs }, isLoading: isLoadingRBAC } = useRBAC.useRBAC(permissions?.auditLogs?.read || []);
48
+ const readPermissions = permissions?.auditLogs?.read;
49
+ const exportPermissions = permissions?.auditLogs?.export;
50
+ const { allowedActions: { canRead: canReadAuditLogs, canExport: canExportAuditLogs }, isLoading: isLoadingRBAC } = useRBAC.useRBAC(React__namespace.useMemo(()=>[
51
+ ...readPermissions ?? [],
52
+ ...exportPermissions ?? []
53
+ ], [
54
+ readPermissions,
55
+ exportPermissions
56
+ ]));
47
57
  const [{ query }, setQuery] = useQueryParams.useQueryParams();
48
58
  const openLog = (id)=>setQuery(useQueryParams.withEncodedUserParams(query, {
49
59
  id
@@ -51,6 +61,7 @@ const ListPage = ()=>{
51
61
  const closeLog = ()=>setQuery(useQueryParams.withEncodedUserParams(query, {
52
62
  id: undefined
53
63
  }), 'push', true);
64
+ const { exportAuditLogs, downloadExport, dismissExport, isExporting, progress, exportResult } = useExportAuditLogs.useExportAuditLogs();
54
65
  const [usersPageSize, setUsersPageSize] = React__namespace.useState(USERS_PAGE_SIZE);
55
66
  const { auditLogs, users, usersPagination, isLoadingUsers, isLoading: isLoadingData, hasError } = useAuditLogsData.useAuditLogsData({
56
67
  canReadAuditLogs,
@@ -97,8 +108,8 @@ const ListPage = ()=>{
97
108
  defaultMessage: 'User'
98
109
  }),
99
110
  sortable: false,
100
- // In this case, the passed parameter cannot and shouldn't be something else than User
101
- cellFormatter: ({ user })=>user ? user.displayName : ''
111
+ // System actions, such as a scheduled release publish, have no user
112
+ cellFormatter: ({ user })=>user ? user.displayName : '-'
102
113
  }
103
114
  ];
104
115
  if (hasError) {
@@ -106,6 +117,7 @@ const ListPage = ()=>{
106
117
  }
107
118
  const isLoading = isLoadingData || isLoadingRBAC;
108
119
  const { results = [] } = auditLogs ?? {};
120
+ const totalEntries = auditLogs?.pagination?.total;
109
121
  return /*#__PURE__*/ jsxRuntime.jsxs(PageHelpers.Page.Main, {
110
122
  "aria-busy": isLoading,
111
123
  children: [
@@ -128,6 +140,16 @@ const ListPage = ()=>{
128
140
  subtitle: formatMessage({
129
141
  id: 'Settings.permissions.auditLogs.listview.header.subtitle',
130
142
  defaultMessage: 'Logs of all the activities that happened in your environment'
143
+ }),
144
+ primaryAction: canExportAuditLogs && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
145
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Download, {}),
146
+ loading: isExporting,
147
+ disabled: isLoading || totalEntries === 0,
148
+ onClick: ()=>exportAuditLogs(query?.filters, totalEntries ?? 0),
149
+ children: formatMessage({
150
+ id: 'Settings.permissions.auditLogs.listview.export',
151
+ defaultMessage: 'Export as CSV'
152
+ })
131
153
  })
132
154
  }),
133
155
  /*#__PURE__*/ jsxRuntime.jsx(Layout.Layouts.Action, {
@@ -236,6 +258,12 @@ const ListPage = ()=>{
236
258
  query?.id && /*#__PURE__*/ jsxRuntime.jsx(Modal.Modal, {
237
259
  handleClose: closeLog,
238
260
  logId: query.id.toString()
261
+ }),
262
+ /*#__PURE__*/ jsxRuntime.jsx(ExportCard.ExportCard, {
263
+ progress: progress,
264
+ exportResult: exportResult,
265
+ onDownload: downloadExport,
266
+ onDismiss: dismissExport
239
267
  })
240
268
  ]
241
269
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.js","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport {\n useQueryParams,\n withEncodedUserParams,\n} from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst USERS_PAGE_SIZE = 10;\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs },\n isLoading: isLoadingRBAC,\n } = useRBAC(permissions?.auditLogs?.read || []);\n\n const [{ query }, setQuery] = useQueryParams<{\n id?: AuditLog['id'];\n filters?: unknown;\n _q?: unknown;\n }>();\n\n const openLog = (id: AuditLog['id']) =>\n setQuery(withEncodedUserParams(query, { id }), 'push', true);\n const closeLog = () => setQuery(withEncodedUserParams(query, { id: undefined }), 'push', true);\n const [usersPageSize, setUsersPageSize] = React.useState(USERS_PAGE_SIZE);\n const {\n auditLogs,\n users,\n usersPagination,\n isLoadingUsers,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n usersPageSize,\n });\n\n const { page = 1, pageCount = 1 } = usersPagination ?? {};\n const hasMoreUsers = page < pageCount;\n\n const handleLoadMoreUsers = () => {\n if (hasMoreUsers) {\n setUsersPageSize((prevPageSize) => prevPageSize + USERS_PAGE_SIZE);\n }\n };\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({\n formatMessage,\n users,\n usersFilter: {\n loading: isLoadingUsers,\n hasMoreItems: hasMoreUsers,\n onLoadMore: handleLoadMoreUsers,\n },\n });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => openLog(log.id)}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => openLog(log.id)}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && <Modal handleClose={closeLog} logId={query.id.toString()} />}\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["USERS_PAGE_SIZE","ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canReadAuditLogs","isLoading","isLoadingRBAC","useRBAC","auditLogs","read","query","setQuery","useQueryParams","openLog","id","withEncodedUserParams","closeLog","undefined","usersPageSize","setUsersPageSize","React","useState","users","usersPagination","isLoadingUsers","isLoadingData","hasError","useAuditLogsData","page","pageCount","hasMoreUsers","handleLoadMoreUsers","prevPageSize","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","usersFilter","loading","hasMoreItems","onLoadMore","headers","name","label","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","Action","startActions","Filters","Root","options","Trigger","Popover","zIndex","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","onClick","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","pagination","PageSize","Links","Modal","handleClose","logId","toString","ProtectedListPage","main","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"ListPage.js","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Download, Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport {\n useQueryParams,\n withEncodedUserParams,\n} from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { ExportCard } from './components/ExportCard';\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useExportAuditLogs } from './hooks/useExportAuditLogs';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst USERS_PAGE_SIZE = 10;\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const readPermissions = permissions?.auditLogs?.read;\n const exportPermissions = permissions?.auditLogs?.export;\n const {\n allowedActions: { canRead: canReadAuditLogs, canExport: canExportAuditLogs },\n isLoading: isLoadingRBAC,\n } = useRBAC(\n React.useMemo(\n () => [...(readPermissions ?? []), ...(exportPermissions ?? [])],\n [readPermissions, exportPermissions]\n )\n );\n\n const [{ query }, setQuery] = useQueryParams<{\n id?: AuditLog['id'];\n filters?: unknown;\n _q?: unknown;\n }>();\n\n const openLog = (id: AuditLog['id']) =>\n setQuery(withEncodedUserParams(query, { id }), 'push', true);\n const closeLog = () => setQuery(withEncodedUserParams(query, { id: undefined }), 'push', true);\n const { exportAuditLogs, downloadExport, dismissExport, isExporting, progress, exportResult } =\n useExportAuditLogs();\n\n const [usersPageSize, setUsersPageSize] = React.useState(USERS_PAGE_SIZE);\n const {\n auditLogs,\n users,\n usersPagination,\n isLoadingUsers,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n usersPageSize,\n });\n\n const { page = 1, pageCount = 1 } = usersPagination ?? {};\n const hasMoreUsers = page < pageCount;\n\n const handleLoadMoreUsers = () => {\n if (hasMoreUsers) {\n setUsersPageSize((prevPageSize) => prevPageSize + USERS_PAGE_SIZE);\n }\n };\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({\n formatMessage,\n users,\n usersFilter: {\n loading: isLoadingUsers,\n hasMoreItems: hasMoreUsers,\n onLoadMore: handleLoadMoreUsers,\n },\n });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // System actions, such as a scheduled release publish, have no user\n cellFormatter: ({ user }) => (user ? user.displayName : '-'),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n const totalEntries = auditLogs?.pagination?.total;\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n primaryAction={\n canExportAuditLogs && (\n <Button\n startIcon={<Download />}\n loading={isExporting}\n disabled={isLoading || totalEntries === 0}\n onClick={() => exportAuditLogs(query?.filters, totalEntries ?? 0)}\n >\n {formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export',\n defaultMessage: 'Export as CSV',\n })}\n </Button>\n )\n }\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => openLog(log.id)}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => openLog(log.id)}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && <Modal handleClose={closeLog} logId={query.id.toString()} />}\n <ExportCard\n progress={progress}\n exportResult={exportResult}\n onDownload={downloadExport}\n onDismiss={dismissExport}\n />\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["USERS_PAGE_SIZE","ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","readPermissions","auditLogs","read","exportPermissions","export","allowedActions","canRead","canReadAuditLogs","canExport","canExportAuditLogs","isLoading","isLoadingRBAC","useRBAC","React","useMemo","query","setQuery","useQueryParams","openLog","id","withEncodedUserParams","closeLog","undefined","exportAuditLogs","downloadExport","dismissExport","isExporting","progress","exportResult","useExportAuditLogs","usersPageSize","setUsersPageSize","useState","users","usersPagination","isLoadingUsers","isLoadingData","hasError","useAuditLogsData","page","pageCount","hasMoreUsers","handleLoadMoreUsers","prevPageSize","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","usersFilter","loading","hasMoreItems","onLoadMore","headers","name","label","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","totalEntries","pagination","total","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","primaryAction","Button","startIcon","Download","disabled","onClick","filters","Action","startActions","Filters","Root","options","Trigger","Popover","zIndex","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","PageSize","Links","Modal","handleClose","logId","toString","ExportCard","onDownload","onDismiss","ProtectedListPage","main","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAMA,eAAAA,GAAkB,EAAA;AAExB,MAAMC,QAAAA,GAAW,IAAA;IACf,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAMC,WAAAA,GAAcC,uBAAiB,CAACC,KAAAA,GAAUA,MAAMC,SAAS,CAACH,WAAW,CAACI,QAAQ,CAAA;IAEpF,MAAMC,eAAAA,GAAkBL,aAAaM,SAAAA,EAAWC,IAAAA;IAChD,MAAMC,iBAAAA,GAAoBR,aAAaM,SAAAA,EAAWG,MAAAA;AAClD,IAAA,MAAM,EACJC,cAAAA,EAAgB,EAAEC,SAASC,gBAAgB,EAAEC,WAAWC,kBAAkB,EAAE,EAC5EC,SAAAA,EAAWC,aAAa,EACzB,GAAGC,gBACFC,gBAAAA,CAAMC,OAAO,CACX,IAAM;AAAKd,YAAAA,GAAAA,eAAAA,IAAmB,EAAE;AAAOG,YAAAA,GAAAA,iBAAAA,IAAqB;SAAI,EAChE;AAACH,QAAAA,eAAAA;AAAiBG,QAAAA;AAAkB,KAAA,CAAA,CAAA;AAIxC,IAAA,MAAM,CAAC,EAAEY,KAAK,EAAE,EAAEC,SAAS,GAAGC,6BAAAA,EAAAA;AAM9B,IAAA,MAAMC,OAAAA,GAAU,CAACC,EAAAA,GACfH,QAAAA,CAASI,qCAAsBL,KAAAA,EAAO;AAAEI,YAAAA;AAAG,SAAA,CAAA,EAAI,MAAA,EAAQ,IAAA,CAAA;AACzD,IAAA,MAAME,QAAAA,GAAW,IAAML,QAAAA,CAASI,oCAAAA,CAAsBL,KAAAA,EAAO;YAAEI,EAAAA,EAAIG;AAAU,SAAA,CAAA,EAAI,MAAA,EAAQ,IAAA,CAAA;AACzF,IAAA,MAAM,EAAEC,eAAe,EAAEC,cAAc,EAAEC,aAAa,EAAEC,WAAW,EAAEC,QAAQ,EAAEC,YAAY,EAAE,GAC3FC,qCAAAA,EAAAA;AAEF,IAAA,MAAM,CAACC,aAAAA,EAAeC,gBAAAA,CAAiB,GAAGlB,gBAAAA,CAAMmB,QAAQ,CAACzC,eAAAA,CAAAA;AACzD,IAAA,MAAM,EACJU,SAAS,EACTgC,KAAK,EACLC,eAAe,EACfC,cAAc,EACdzB,WAAW0B,aAAa,EACxBC,QAAQ,EACT,GAAGC,iCAAAA,CAAiB;AACnB/B,QAAAA,gBAAAA;AACAuB,QAAAA;AACF,KAAA,CAAA;IAEA,MAAM,EAAES,OAAO,CAAC,EAAEC,YAAY,CAAC,EAAE,GAAGN,eAAAA,IAAmB,EAAC;AACxD,IAAA,MAAMO,eAAeF,IAAAA,GAAOC,SAAAA;AAE5B,IAAA,MAAME,mBAAAA,GAAsB,IAAA;AAC1B,QAAA,IAAID,YAAAA,EAAc;YAChBV,gBAAAA,CAAiB,CAACY,eAAiBA,YAAAA,GAAepD,eAAAA,CAAAA;AACpD,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMqD,eAAAA,GAAkBC,qCAAAA,EAAAA;AAExB,IAAA,MAAMC,mBAAmBC,uCAAAA,CAAoB;AAC3CtD,QAAAA,aAAAA;AACAwC,QAAAA,KAAAA;QACAe,WAAAA,EAAa;YACXC,OAAAA,EAASd,cAAAA;YACTe,YAAAA,EAAcT,YAAAA;YACdU,UAAAA,EAAYT;AACd;AACF,KAAA,CAAA;AAEA,IAAA,MAAMU,OAAAA,GAA4C;AAChD,QAAA;YACEC,IAAAA,EAAM,QAAA;AACNC,YAAAA,KAAAA,EAAO7D,aAAAA,CAAc;gBACnB0B,EAAAA,EAAI,uCAAA;gBACJoC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,QAAAA,EAAU;AACZ,SAAA;AACA,QAAA;YACEH,IAAAA,EAAM,MAAA;AACNC,YAAAA,KAAAA,EAAO7D,aAAAA,CAAc;gBACnB0B,EAAAA,EAAI,qCAAA;gBACJoC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,QAAAA,EAAU;AACZ,SAAA;AACA,QAAA;YACEH,IAAAA,EAAM,MAAA;AACNC,YAAAA,KAAAA,EAAO7D,aAAAA,CAAc;gBACnB0B,EAAAA,EAAI,qCAAA;gBACJoC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,QAAAA,EAAU,KAAA;;YAEVC,aAAAA,EAAe,CAAC,EAAEC,IAAI,EAAE,GAAMA,IAAAA,GAAOA,IAAAA,CAAKC,WAAW,GAAG;AAC1D;AACD,KAAA;AAED,IAAA,IAAItB,QAAAA,EAAU;QACZ,qBAAOuB,cAAA,CAACC,iBAAKC,KAAK,EAAA,EAAA,CAAA;AACpB,IAAA;AAEA,IAAA,MAAMpD,YAAY0B,aAAAA,IAAiBzB,aAAAA;AAEnC,IAAA,MAAM,EAAEoD,OAAAA,GAAU,EAAE,EAAE,GAAG9D,aAAa,EAAC;IACvC,MAAM+D,YAAAA,GAAe/D,WAAWgE,UAAAA,EAAYC,KAAAA;IAE5C,qBACEC,eAAA,CAACN,iBAAKO,IAAI,EAAA;QAACC,WAAAA,EAAW3D,SAAAA;;AACpB,0BAAAkD,cAAA,CAACC,iBAAKS,KAAK,EAAA;0BACR7E,aAAAA,CACC;oBAAE0B,EAAAA,EAAI,oBAAA;oBAAsBoC,cAAAA,EAAgB;iBAAoB,EAChE;AACEF,oBAAAA,IAAAA,EAAM5D,aAAAA,CAAc;wBAClB0B,EAAAA,EAAI,kBAAA;wBACJoC,cAAAA,EAAgB;AAClB,qBAAA;AACF,iBAAA;;AAGJ,0BAAAK,cAAA,CAACW,eAAQC,MAAM,EAAA;AACbC,gBAAAA,KAAAA,EAAOhF,aAAAA,CAAc;oBACnB0B,EAAAA,EAAI,kBAAA;oBACJoC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AACAmB,gBAAAA,QAAAA,EAAUjF,aAAAA,CAAc;oBACtB0B,EAAAA,EAAI,yDAAA;oBACJoC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AACAoB,gBAAAA,aAAAA,EACElE,oCACEmD,cAAA,CAACgB,mBAAAA,EAAAA;AACCC,oBAAAA,SAAAA,gBAAWjB,cAAA,CAACkB,cAAAA,EAAAA,EAAAA,CAAAA;oBACZ7B,OAAAA,EAASvB,WAAAA;AACTqD,oBAAAA,QAAAA,EAAUrE,aAAasD,YAAAA,KAAiB,CAAA;AACxCgB,oBAAAA,OAAAA,EAAS,IAAMzD,eAAAA,CAAgBR,KAAAA,EAAOkE,OAAAA,EAASjB,YAAAA,IAAgB,CAAA,CAAA;8BAE9DvE,aAAAA,CAAc;wBACb0B,EAAAA,EAAI,gDAAA;wBACJoC,cAAAA,EAAgB;AAClB,qBAAA;;;AAKR,0BAAAK,cAAA,CAACW,eAAQW,MAAM,EAAA;gBACbC,YAAAA,gBACEhB,eAAA,CAACiB,gBAAQC,IAAI,EAAA;oBAACC,OAAAA,EAASxC,gBAAAA;;AACrB,sCAAAc,cAAA,CAACwB,gBAAQG,OAAO,EAAA,EAAA,CAAA;AAChB,sCAAA3B,cAAA,CAACwB,gBAAQI,OAAO,EAAA;4BAACC,MAAAA,EAAQ;;AACzB,sCAAA7B,cAAA,CAACwB,gBAAQM,IAAI,EAAA,EAAA;;;;AAInB,0BAAAvB,eAAA,CAACI,eAAQoB,OAAO,EAAA;;AACd,kCAAA/B,cAAA,CAACgC,YAAMP,IAAI,EAAA;wBAACQ,IAAAA,EAAM9B,OAAAA;wBAASX,OAAAA,EAASA,OAAAA;wBAAS1C,SAAAA,EAAWA,SAAAA;gDACtDyD,eAAA,CAACyB,YAAMD,OAAO,EAAA;;AACZ,8CAAA/B,cAAA,CAACgC,YAAME,IAAI,EAAA;AACR1C,oCAAAA,QAAAA,EAAAA,OAAAA,CAAQ2C,GAAG,CAAC,CAACC,MAAAA,iBACZpC,cAAA,CAACgC,YAAMK,UAAU,EAAA;AAAoB,4CAAA,GAAGD;AAAjBA,yCAAAA,EAAAA,MAAAA,CAAO3C,IAAI,CAAA;;AAGtC,8CAAAO,cAAA,CAACgC,YAAMM,KAAK,EAAA,EAAA,CAAA;AACZ,8CAAAtC,cAAA,CAACgC,YAAMO,OAAO,EAAA,EAAA,CAAA;AACd,8CAAAvC,cAAA,CAACgC,YAAMQ,IAAI,EAAA;AACRrC,oCAAAA,QAAAA,EAAAA,OAAAA,CAAQgC,GAAG,CAAC,CAACM,GAAAA,iBACZlC,eAAA,CAACyB,YAAMU,GAAG,EAAA;4CAActB,OAAAA,EAAS,IAAM9D,OAAAA,CAAQmF,GAAAA,CAAIlF,EAAE,CAAA;;gDAClDiC,OAAAA,CAAQ2C,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACZ,oDAAA,MAAM,EAAE3C,IAAI,EAAEI,aAAa,EAAE,GAAGuC,MAAAA;oDAEhC,OAAQ3C,IAAAA;wDACN,KAAK,QAAA;4DACH,qBACEO,cAAA,CAACgC,YAAMW,IAAI,EAAA;AACT,gEAAA,QAAA,gBAAA3C,cAAA,CAAC4C,uBAAAA,EAAAA;oEAAWC,SAAAA,EAAU,YAAA;8EACnBhH,aAAAA,CACC;AACE0B,wEAAAA,EAAAA,EAAI,CAAC,+BAA+B,EAAEkF,GAAAA,CAAIK,MAAM,CAAA,CAAE;;wEAElDnD,cAAAA,EAAgBoD,+CAAAA,CAAkBN,IAAIK,MAAM;qEAC9C,EACA;AAAEE,wEAAAA,KAAAA,EAAO,GAACP,CAAIQ,OAAO,EAAED,KAAAA,IAAoB;AAAG,qEAAA;;AARnCvD,6DAAAA,EAAAA,IAAAA,CAAAA;wDAarB,KAAK,MAAA;4DACH,qBACEO,cAAA,CAACgC,YAAMW,IAAI,EAAA;AACT,gEAAA,QAAA,gBAAA3C,cAAA,CAAC4C,uBAAAA,EAAAA;oEAAWC,SAAAA,EAAU,YAAA;AACnB7D,oEAAAA,QAAAA,EAAAA,eAAAA,CAAgByD,IAAIS,IAAI;;AAFZzD,6DAAAA,EAAAA,IAAAA,CAAAA;wDAMrB,KAAK,MAAA;4DACH,qBACEO,cAAA,CAACgC,YAAMW,IAAI,EAAA;AACT,gEAAA,QAAA,gBAAA3C,cAAA,CAAC4C,uBAAAA,EAAAA;oEAAWC,SAAAA,EAAU,YAAA;8EACnBhD,aAAAA,GAAgBA,aAAAA,CAAc4C,KAAKL,MAAAA,CAAAA,GAAU;;AAFjC3C,6DAAAA,EAAAA,IAAAA,CAAAA;AAMrB,wDAAA;4DACE,qBACEO,cAAA,CAACgC,YAAMW,IAAI,EAAA;AACT,gEAAA,QAAA,gBAAA3C,cAAA,CAAC4C,uBAAAA,EAAAA;oEAAWC,SAAAA,EAAU,YAAA;8EACnB,GAAI,CAACpD,IAAAA,CAAuB,IAAe;;AAF/BA,6DAAAA,EAAAA,IAAAA,CAAAA;AAMvB;AACF,gDAAA,CAAA,CAAA;AACA,8DAAAO,cAAA,CAACgC,YAAMW,IAAI,EAAA;oDAACvB,OAAAA,EAAS,CAAC+B,CAAAA,GAAMA,CAAAA,CAAEC,eAAe,EAAA;AAC3C,oDAAA,QAAA,gBAAApD,cAAA,CAACqD,iBAAAA,EAAAA;wDAAKC,cAAAA,EAAe,KAAA;AACnB,wDAAA,QAAA,gBAAAtD,cAAA,CAACuD,uBAAAA,EAAAA;4DACCnC,OAAAA,EAAS,IAAM9D,OAAAA,CAAQmF,GAAAA,CAAIlF,EAAE,CAAA;4DAC7BiG,WAAAA,EAAa,KAAA;AACb9D,4DAAAA,KAAAA,EAAO7D,aAAAA,CACL;gEAAE0B,EAAAA,EAAI,0BAAA;gEAA4BoC,cAAAA,EAAgB;6DAAmB,EACrE;AAAE8D,gEAAAA,MAAAA,EAAQ,CAAA,EAAGhB,GAAAA,CAAIK,MAAM,CAAC,OAAO;AAAE,6DAAA,CAAA;4DAEnCY,OAAAA,EAAQ,OAAA;AAER,4DAAA,QAAA,gBAAA1D,cAAA,CAAC2D,SAAAA,EAAAA,EAAAA;;;;;AAzDOlB,yCAAAA,EAAAA,GAAAA,CAAIlF,EAAE,CAAA;;;;;AAmE9B,kCAAAgD,eAAA,CAACqD,sBAAWnC,IAAI,EAAA;AAAE,wBAAA,GAAGpF,WAAWgE,UAAU;;AACxC,0CAAAL,cAAA,CAAC4D,sBAAWC,QAAQ,EAAA,EAAA,CAAA;AACpB,0CAAA7D,cAAA,CAAC4D,sBAAWE,KAAK,EAAA,EAAA;;;;;AAGpB3G,YAAAA,KAAAA,EAAOI,oBAAMyC,cAAA,CAAC+D,WAAAA,EAAAA;gBAAMC,WAAAA,EAAavG,QAAAA;gBAAUwG,KAAAA,EAAO9G,KAAAA,CAAMI,EAAE,CAAC2G,QAAQ;;0BACpElE,cAAA,CAACmE,qBAAAA,EAAAA;gBACCpG,QAAAA,EAAUA,QAAAA;gBACVC,YAAAA,EAAcA,YAAAA;gBACdoG,UAAAA,EAAYxG,cAAAA;gBACZyG,SAAAA,EAAWxG;;;;AAInB;AAEA,MAAMyG,iBAAAA,GAAoB,IAAA;IACxB,MAAMvI,WAAAA,GAAcC,sBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,SAAS,CAACH,WAAW,CAACI,QAAQ,EAAEE,SAAAA,EAAWkI,IAAAA,CAAAA;IAG9D,qBACEvE,cAAA,CAACC,iBAAKuE,OAAO,EAAA;QAACzI,WAAAA,EAAaA,WAAAA;AACzB,QAAA,QAAA,gBAAAiE,cAAA,CAACpE,QAAAA,EAAAA,EAAAA;;AAGP;;;;;"}