@strapi/admin 5.51.0 → 5.51.1

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 (82) hide show
  1. package/dist/admin/admin/tests/server.js +23 -1
  2. package/dist/admin/admin/tests/server.js.map +1 -1
  3. package/dist/admin/admin/tests/server.mjs +23 -1
  4. package/dist/admin/admin/tests/server.mjs.map +1 -1
  5. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +38 -7
  6. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
  7. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +18 -7
  8. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
  9. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js +4 -1
  10. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js.map +1 -1
  11. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs +4 -1
  12. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map +1 -1
  13. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js +17 -6
  14. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
  15. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs +18 -7
  16. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs.map +1 -1
  17. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js +23 -26
  18. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
  19. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs +23 -26
  20. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
  21. package/dist/admin/ee/admin/src/services/auditLogs.js +10 -1
  22. package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
  23. package/dist/admin/ee/admin/src/services/auditLogs.mjs +10 -2
  24. package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
  25. package/dist/admin/shared/utils/auth-cookie-domain.js +1 -0
  26. package/dist/admin/shared/utils/auth-cookie-domain.js.map +1 -1
  27. package/dist/admin/shared/utils/auth-cookie-domain.mjs +1 -0
  28. package/dist/admin/shared/utils/auth-cookie-domain.mjs.map +1 -1
  29. package/dist/admin/shared/utils/auth-cookie-path.js +1 -0
  30. package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
  31. package/dist/admin/shared/utils/auth-cookie-path.mjs +1 -0
  32. package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
  33. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.d.ts +6 -1
  34. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.d.ts +5 -3
  35. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.d.ts +8 -4
  36. package/dist/ee/admin/src/services/auditLogs.d.ts +5 -2
  37. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts +1 -0
  38. package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts.map +1 -1
  39. package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts.map +1 -1
  40. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +16 -0
  41. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
  42. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +2 -0
  43. package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -1
  44. package/dist/ee/server/src/index.d.ts +1 -0
  45. package/dist/ee/server/src/index.d.ts.map +1 -1
  46. package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js +10 -0
  47. package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js.map +1 -1
  48. package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs +11 -1
  49. package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs.map +1 -1
  50. package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js +24 -32
  51. package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js.map +1 -1
  52. package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs +24 -32
  53. package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs.map +1 -1
  54. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +33 -1
  55. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
  56. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +33 -1
  57. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
  58. package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js +8 -0
  59. package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js.map +1 -1
  60. package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs +8 -1
  61. package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs.map +1 -1
  62. package/dist/server/shared/utils/auth-cookie-domain.js +1 -0
  63. package/dist/server/shared/utils/auth-cookie-domain.js.map +1 -1
  64. package/dist/server/shared/utils/auth-cookie-domain.mjs +1 -0
  65. package/dist/server/shared/utils/auth-cookie-domain.mjs.map +1 -1
  66. package/dist/server/shared/utils/auth-cookie-path.js +1 -0
  67. package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
  68. package/dist/server/shared/utils/auth-cookie-path.mjs +1 -0
  69. package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
  70. package/dist/shared/contracts/api-token.d.ts +2 -2
  71. package/dist/shared/contracts/api-token.d.ts.map +1 -1
  72. package/dist/shared/contracts/audit-logs.d.ts +19 -1
  73. package/dist/shared/contracts/audit-logs.d.ts.map +1 -1
  74. package/dist/shared/contracts/authentication.d.ts +1 -1
  75. package/dist/shared/contracts/authentication.d.ts.map +1 -1
  76. package/dist/shared/contracts/homepage.d.ts +2 -2
  77. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  78. package/dist/shared/contracts/user.d.ts +1 -1
  79. package/dist/shared/contracts/user.d.ts.map +1 -1
  80. package/dist/shared/utils/auth-cookie-domain.d.ts.map +1 -1
  81. package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
  82. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.js","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import { 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 { useQueryParams } from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs, canReadUsers },\n isLoading: isLoadingRBAC,\n } = useRBAC({\n ...permissions?.auditLogs,\n readUsers: permissions?.users.read || [],\n });\n\n const [{ query }, setQuery] = useQueryParams<{ id?: AuditLog['id'] }>();\n const {\n auditLogs,\n users,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n canReadUsers,\n });\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({ formatMessage, users, canReadUsers });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n ];\n\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={() => setQuery({ id: log.id }, 'push', true)}>\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={() => setQuery({ id: log.id }, 'push', true)}\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 && (\n <Modal\n handleClose={() => setQuery({ id: '' }, 'remove', true)}\n logId={query.id.toString()}\n />\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":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canReadAuditLogs","canReadUsers","isLoading","isLoadingRBAC","useRBAC","auditLogs","readUsers","users","read","query","setQuery","useQueryParams","isLoadingData","hasError","useAuditLogsData","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","headers","name","label","id","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 { 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 { useQueryParams } from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst 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<{ id?: AuditLog['id'] }>();\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={() => setQuery({ id: log.id }, 'push', true)}>\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={() => setQuery({ id: log.id }, 'push', true)}\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 && (\n <Modal\n handleClose={() => setQuery({ id: '' }, 'remove', true)}\n logId={query.id.toString()}\n />\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","allowedActions","canRead","canReadAuditLogs","isLoading","isLoadingRBAC","useRBAC","auditLogs","read","query","setQuery","useQueryParams","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","id","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,4 +1,5 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import * as React from 'react';
2
3
  import { Typography, Flex, IconButton } from '@strapi/design-system';
3
4
  import { Eye } from '@strapi/icons';
4
5
  import { useIntl } from 'react-intl';
@@ -16,23 +17,33 @@ import { useFormatTimeStamp } from './hooks/useFormatTimeStamp.mjs';
16
17
  import { getDefaultMessage } from './utils/getActionTypesDefaultMessages.mjs';
17
18
  import { getDisplayedFilters } from './utils/getDisplayedFilters.mjs';
18
19
 
20
+ const USERS_PAGE_SIZE = 10;
19
21
  const ListPage = ()=>{
20
22
  const { formatMessage } = useIntl();
21
23
  const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings);
22
- const { allowedActions: { canRead: canReadAuditLogs, canReadUsers }, isLoading: isLoadingRBAC } = useRBAC({
23
- ...permissions?.auditLogs,
24
- readUsers: permissions?.users.read || []
25
- });
24
+ const { allowedActions: { canRead: canReadAuditLogs }, isLoading: isLoadingRBAC } = useRBAC(permissions?.auditLogs?.read || []);
26
25
  const [{ query }, setQuery] = useQueryParams();
27
- const { auditLogs, users, isLoading: isLoadingData, hasError } = useAuditLogsData({
26
+ const [usersPageSize, setUsersPageSize] = React.useState(USERS_PAGE_SIZE);
27
+ const { auditLogs, users, usersPagination, isLoadingUsers, isLoading: isLoadingData, hasError } = useAuditLogsData({
28
28
  canReadAuditLogs,
29
- canReadUsers
29
+ usersPageSize
30
30
  });
31
+ const { page = 1, pageCount = 1 } = usersPagination ?? {};
32
+ const hasMoreUsers = page < pageCount;
33
+ const handleLoadMoreUsers = ()=>{
34
+ if (hasMoreUsers) {
35
+ setUsersPageSize((prevPageSize)=>prevPageSize + USERS_PAGE_SIZE);
36
+ }
37
+ };
31
38
  const formatTimeStamp = useFormatTimeStamp();
32
39
  const displayedFilters = getDisplayedFilters({
33
40
  formatMessage,
34
41
  users,
35
- canReadUsers
42
+ usersFilter: {
43
+ loading: isLoadingUsers,
44
+ hasMoreItems: hasMoreUsers,
45
+ onLoadMore: handleLoadMoreUsers
46
+ }
36
47
  });
37
48
  const headers = [
38
49
  {
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import { 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 { useQueryParams } from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs, canReadUsers },\n isLoading: isLoadingRBAC,\n } = useRBAC({\n ...permissions?.auditLogs,\n readUsers: permissions?.users.read || [],\n });\n\n const [{ query }, setQuery] = useQueryParams<{ id?: AuditLog['id'] }>();\n const {\n auditLogs,\n users,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n canReadUsers,\n });\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({ formatMessage, users, canReadUsers });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n ];\n\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={() => setQuery({ id: log.id }, 'push', true)}>\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={() => setQuery({ id: log.id }, 'push', true)}\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 && (\n <Modal\n handleClose={() => setQuery({ id: '' }, 'remove', true)}\n logId={query.id.toString()}\n />\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":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canReadAuditLogs","canReadUsers","isLoading","isLoadingRBAC","useRBAC","auditLogs","readUsers","users","read","query","setQuery","useQueryParams","isLoadingData","hasError","useAuditLogsData","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","headers","name","label","id","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.mjs","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 { useQueryParams } from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst 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<{ id?: AuditLog['id'] }>();\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={() => setQuery({ id: log.id }, 'push', true)}>\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={() => setQuery({ id: log.id }, 'push', true)}\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 && (\n <Modal\n handleClose={() => setQuery({ id: '' }, 'remove', true)}\n logId={query.id.toString()}\n />\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","allowedActions","canRead","canReadAuditLogs","isLoading","isLoadingRBAC","useRBAC","auditLogs","read","query","setQuery","useQueryParams","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","id","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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"}
@@ -5,7 +5,7 @@ var designSystem = require('@strapi/design-system');
5
5
  var reactIntl = require('react-intl');
6
6
  var Form = require('../../../../../../../../admin/src/components/Form.js');
7
7
 
8
- const ComboboxFilter = (props)=>{
8
+ const ComboboxFilter = ({ loading, hasMoreItems, onLoadMore, ...props })=>{
9
9
  const { formatMessage } = reactIntl.useIntl();
10
10
  const field = Form.useField(props.name);
11
11
  const ariaLabel = formatMessage({
@@ -19,6 +19,9 @@ const ComboboxFilter = (props)=>{
19
19
  "aria-label": ariaLabel,
20
20
  value: field.value,
21
21
  onChange: handleChange,
22
+ loading: loading,
23
+ hasMoreItems: hasMoreItems,
24
+ onLoadMore: onLoadMore,
22
25
  children: props.options?.map((opt)=>{
23
26
  const value = typeof opt === 'string' ? opt : opt.value;
24
27
  const label = typeof opt === 'string' ? opt : opt.label;
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxFilter.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.tsx"],"sourcesContent":["import { Combobox, ComboboxOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { useField } from '../../../../../../../../admin/src/components/Form';\n\nexport const ComboboxFilter = (props: Filters.ValueInputProps) => {\n const { formatMessage } = useIntl();\n const field = useField<string>(props.name);\n const ariaLabel = formatMessage({\n id: 'Settings.permissions.auditLogs.filter.aria-label',\n defaultMessage: 'Search and select an option to filter',\n });\n\n const handleChange = (value?: string) => {\n field.onChange(props.name, value);\n };\n\n return (\n <Combobox aria-label={ariaLabel} value={field.value} onChange={handleChange}>\n {props.options?.map((opt) => {\n const value = typeof opt === 'string' ? opt : opt.value;\n const label = typeof opt === 'string' ? opt : opt.label;\n return (\n <ComboboxOption key={value} value={value}>\n {label}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n"],"names":["ComboboxFilter","props","formatMessage","useIntl","field","useField","name","ariaLabel","id","defaultMessage","handleChange","value","onChange","_jsx","Combobox","aria-label","options","map","opt","label","ComboboxOption"],"mappings":";;;;;;;AAMO,MAAMA,iBAAiB,CAACC,KAAAA,GAAAA;IAC7B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAMC,KAAAA,GAAQC,aAAAA,CAAiBJ,KAAAA,CAAMK,IAAI,CAAA;AACzC,IAAA,MAAMC,YAAYL,aAAAA,CAAc;QAC9BM,EAAAA,EAAI,kDAAA;QACJC,cAAAA,EAAgB;AAClB,KAAA,CAAA;AAEA,IAAA,MAAMC,eAAe,CAACC,KAAAA,GAAAA;AACpBP,QAAAA,KAAAA,CAAMQ,QAAQ,CAACX,KAAAA,CAAMK,IAAI,EAAEK,KAAAA,CAAAA;AAC7B,IAAA,CAAA;AAEA,IAAA,qBACEE,cAAA,CAACC,qBAAAA,EAAAA;QAASC,YAAAA,EAAYR,SAAAA;AAAWI,QAAAA,KAAAA,EAAOP,MAAMO,KAAK;QAAEC,QAAAA,EAAUF,YAAAA;kBAC5DT,KAAAA,CAAMe,OAAO,EAAEC,GAAAA,CAAI,CAACC,GAAAA,GAAAA;AACnB,YAAA,MAAMP,QAAQ,OAAOO,GAAAA,KAAQ,QAAA,GAAWA,GAAAA,GAAMA,IAAIP,KAAK;AACvD,YAAA,MAAMQ,QAAQ,OAAOD,GAAAA,KAAQ,QAAA,GAAWA,GAAAA,GAAMA,IAAIC,KAAK;AACvD,YAAA,qBACEN,cAAA,CAACO,2BAAAA,EAAAA;gBAA2BT,KAAAA,EAAOA,KAAAA;AAChCQ,gBAAAA,QAAAA,EAAAA;AADkBR,aAAAA,EAAAA,KAAAA,CAAAA;AAIzB,QAAA,CAAA;;AAGN;;;;"}
1
+ {"version":3,"file":"ComboboxFilter.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.tsx"],"sourcesContent":["import { Combobox, ComboboxOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { useField } from '../../../../../../../../admin/src/components/Form';\n\nexport interface ComboboxFilterProps extends Filters.ValueInputProps {\n loading?: boolean;\n hasMoreItems?: boolean;\n onLoadMore?: () => void;\n}\n\nexport const ComboboxFilter = ({\n loading,\n hasMoreItems,\n onLoadMore,\n ...props\n}: ComboboxFilterProps) => {\n const { formatMessage } = useIntl();\n const field = useField<string>(props.name);\n const ariaLabel = formatMessage({\n id: 'Settings.permissions.auditLogs.filter.aria-label',\n defaultMessage: 'Search and select an option to filter',\n });\n\n const handleChange = (value?: string) => {\n field.onChange(props.name, value);\n };\n\n return (\n <Combobox\n aria-label={ariaLabel}\n value={field.value}\n onChange={handleChange}\n loading={loading}\n hasMoreItems={hasMoreItems}\n onLoadMore={onLoadMore}\n >\n {props.options?.map((opt) => {\n const value = typeof opt === 'string' ? opt : opt.value;\n const label = typeof opt === 'string' ? opt : opt.label;\n return (\n <ComboboxOption key={value} value={value}>\n {label}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n"],"names":["ComboboxFilter","loading","hasMoreItems","onLoadMore","props","formatMessage","useIntl","field","useField","name","ariaLabel","id","defaultMessage","handleChange","value","onChange","_jsx","Combobox","aria-label","options","map","opt","label","ComboboxOption"],"mappings":";;;;;;;AAYO,MAAMA,cAAAA,GAAiB,CAAC,EAC7BC,OAAO,EACPC,YAAY,EACZC,UAAU,EACV,GAAGC,KAAAA,EACiB,GAAA;IACpB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAMC,KAAAA,GAAQC,aAAAA,CAAiBJ,KAAAA,CAAMK,IAAI,CAAA;AACzC,IAAA,MAAMC,YAAYL,aAAAA,CAAc;QAC9BM,EAAAA,EAAI,kDAAA;QACJC,cAAAA,EAAgB;AAClB,KAAA,CAAA;AAEA,IAAA,MAAMC,eAAe,CAACC,KAAAA,GAAAA;AACpBP,QAAAA,KAAAA,CAAMQ,QAAQ,CAACX,KAAAA,CAAMK,IAAI,EAAEK,KAAAA,CAAAA;AAC7B,IAAA,CAAA;AAEA,IAAA,qBACEE,cAAA,CAACC,qBAAAA,EAAAA;QACCC,YAAAA,EAAYR,SAAAA;AACZI,QAAAA,KAAAA,EAAOP,MAAMO,KAAK;QAClBC,QAAAA,EAAUF,YAAAA;QACVZ,OAAAA,EAASA,OAAAA;QACTC,YAAAA,EAAcA,YAAAA;QACdC,UAAAA,EAAYA,UAAAA;kBAEXC,KAAAA,CAAMe,OAAO,EAAEC,GAAAA,CAAI,CAACC,GAAAA,GAAAA;AACnB,YAAA,MAAMP,QAAQ,OAAOO,GAAAA,KAAQ,QAAA,GAAWA,GAAAA,GAAMA,IAAIP,KAAK;AACvD,YAAA,MAAMQ,QAAQ,OAAOD,GAAAA,KAAQ,QAAA,GAAWA,GAAAA,GAAMA,IAAIC,KAAK;AACvD,YAAA,qBACEN,cAAA,CAACO,2BAAAA,EAAAA;gBAA2BT,KAAAA,EAAOA,KAAAA;AAChCQ,gBAAAA,QAAAA,EAAAA;AADkBR,aAAAA,EAAAA,KAAAA,CAAAA;AAIzB,QAAA,CAAA;;AAGN;;;;"}
@@ -3,7 +3,7 @@ import { Combobox, ComboboxOption } from '@strapi/design-system';
3
3
  import { useIntl } from 'react-intl';
4
4
  import { useField } from '../../../../../../../../admin/src/components/Form.mjs';
5
5
 
6
- const ComboboxFilter = (props)=>{
6
+ const ComboboxFilter = ({ loading, hasMoreItems, onLoadMore, ...props })=>{
7
7
  const { formatMessage } = useIntl();
8
8
  const field = useField(props.name);
9
9
  const ariaLabel = formatMessage({
@@ -17,6 +17,9 @@ const ComboboxFilter = (props)=>{
17
17
  "aria-label": ariaLabel,
18
18
  value: field.value,
19
19
  onChange: handleChange,
20
+ loading: loading,
21
+ hasMoreItems: hasMoreItems,
22
+ onLoadMore: onLoadMore,
20
23
  children: props.options?.map((opt)=>{
21
24
  const value = typeof opt === 'string' ? opt : opt.value;
22
25
  const label = typeof opt === 'string' ? opt : opt.label;
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxFilter.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.tsx"],"sourcesContent":["import { Combobox, ComboboxOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { useField } from '../../../../../../../../admin/src/components/Form';\n\nexport const ComboboxFilter = (props: Filters.ValueInputProps) => {\n const { formatMessage } = useIntl();\n const field = useField<string>(props.name);\n const ariaLabel = formatMessage({\n id: 'Settings.permissions.auditLogs.filter.aria-label',\n defaultMessage: 'Search and select an option to filter',\n });\n\n const handleChange = (value?: string) => {\n field.onChange(props.name, value);\n };\n\n return (\n <Combobox aria-label={ariaLabel} value={field.value} onChange={handleChange}>\n {props.options?.map((opt) => {\n const value = typeof opt === 'string' ? opt : opt.value;\n const label = typeof opt === 'string' ? opt : opt.label;\n return (\n <ComboboxOption key={value} value={value}>\n {label}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n"],"names":["ComboboxFilter","props","formatMessage","useIntl","field","useField","name","ariaLabel","id","defaultMessage","handleChange","value","onChange","_jsx","Combobox","aria-label","options","map","opt","label","ComboboxOption"],"mappings":";;;;;AAMO,MAAMA,iBAAiB,CAACC,KAAAA,GAAAA;IAC7B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAMC,KAAAA,GAAQC,QAAAA,CAAiBJ,KAAAA,CAAMK,IAAI,CAAA;AACzC,IAAA,MAAMC,YAAYL,aAAAA,CAAc;QAC9BM,EAAAA,EAAI,kDAAA;QACJC,cAAAA,EAAgB;AAClB,KAAA,CAAA;AAEA,IAAA,MAAMC,eAAe,CAACC,KAAAA,GAAAA;AACpBP,QAAAA,KAAAA,CAAMQ,QAAQ,CAACX,KAAAA,CAAMK,IAAI,EAAEK,KAAAA,CAAAA;AAC7B,IAAA,CAAA;AAEA,IAAA,qBACEE,GAAA,CAACC,QAAAA,EAAAA;QAASC,YAAAA,EAAYR,SAAAA;AAAWI,QAAAA,KAAAA,EAAOP,MAAMO,KAAK;QAAEC,QAAAA,EAAUF,YAAAA;kBAC5DT,KAAAA,CAAMe,OAAO,EAAEC,GAAAA,CAAI,CAACC,GAAAA,GAAAA;AACnB,YAAA,MAAMP,QAAQ,OAAOO,GAAAA,KAAQ,QAAA,GAAWA,GAAAA,GAAMA,IAAIP,KAAK;AACvD,YAAA,MAAMQ,QAAQ,OAAOD,GAAAA,KAAQ,QAAA,GAAWA,GAAAA,GAAMA,IAAIC,KAAK;AACvD,YAAA,qBACEN,GAAA,CAACO,cAAAA,EAAAA;gBAA2BT,KAAAA,EAAOA,KAAAA;AAChCQ,gBAAAA,QAAAA,EAAAA;AADkBR,aAAAA,EAAAA,KAAAA,CAAAA;AAIzB,QAAA,CAAA;;AAGN;;;;"}
1
+ {"version":3,"file":"ComboboxFilter.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.tsx"],"sourcesContent":["import { Combobox, ComboboxOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { useField } from '../../../../../../../../admin/src/components/Form';\n\nexport interface ComboboxFilterProps extends Filters.ValueInputProps {\n loading?: boolean;\n hasMoreItems?: boolean;\n onLoadMore?: () => void;\n}\n\nexport const ComboboxFilter = ({\n loading,\n hasMoreItems,\n onLoadMore,\n ...props\n}: ComboboxFilterProps) => {\n const { formatMessage } = useIntl();\n const field = useField<string>(props.name);\n const ariaLabel = formatMessage({\n id: 'Settings.permissions.auditLogs.filter.aria-label',\n defaultMessage: 'Search and select an option to filter',\n });\n\n const handleChange = (value?: string) => {\n field.onChange(props.name, value);\n };\n\n return (\n <Combobox\n aria-label={ariaLabel}\n value={field.value}\n onChange={handleChange}\n loading={loading}\n hasMoreItems={hasMoreItems}\n onLoadMore={onLoadMore}\n >\n {props.options?.map((opt) => {\n const value = typeof opt === 'string' ? opt : opt.value;\n const label = typeof opt === 'string' ? opt : opt.label;\n return (\n <ComboboxOption key={value} value={value}>\n {label}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n"],"names":["ComboboxFilter","loading","hasMoreItems","onLoadMore","props","formatMessage","useIntl","field","useField","name","ariaLabel","id","defaultMessage","handleChange","value","onChange","_jsx","Combobox","aria-label","options","map","opt","label","ComboboxOption"],"mappings":";;;;;AAYO,MAAMA,cAAAA,GAAiB,CAAC,EAC7BC,OAAO,EACPC,YAAY,EACZC,UAAU,EACV,GAAGC,KAAAA,EACiB,GAAA;IACpB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAMC,KAAAA,GAAQC,QAAAA,CAAiBJ,KAAAA,CAAMK,IAAI,CAAA;AACzC,IAAA,MAAMC,YAAYL,aAAAA,CAAc;QAC9BM,EAAAA,EAAI,kDAAA;QACJC,cAAAA,EAAgB;AAClB,KAAA,CAAA;AAEA,IAAA,MAAMC,eAAe,CAACC,KAAAA,GAAAA;AACpBP,QAAAA,KAAAA,CAAMQ,QAAQ,CAACX,KAAAA,CAAMK,IAAI,EAAEK,KAAAA,CAAAA;AAC7B,IAAA,CAAA;AAEA,IAAA,qBACEE,GAAA,CAACC,QAAAA,EAAAA;QACCC,YAAAA,EAAYR,SAAAA;AACZI,QAAAA,KAAAA,EAAOP,MAAMO,KAAK;QAClBC,QAAAA,EAAUF,YAAAA;QACVZ,OAAAA,EAASA,OAAAA;QACTC,YAAAA,EAAcA,YAAAA;QACdC,UAAAA,EAAYA,UAAAA;kBAEXC,KAAAA,CAAMe,OAAO,EAAEC,GAAAA,CAAI,CAACC,GAAAA,GAAAA;AACnB,YAAA,MAAMP,QAAQ,OAAOO,GAAAA,KAAQ,QAAA,GAAWA,GAAAA,GAAMA,IAAIP,KAAK;AACvD,YAAA,MAAMQ,QAAQ,OAAOD,GAAAA,KAAQ,QAAA,GAAWA,GAAAA,GAAMA,IAAIC,KAAK;AACvD,YAAA,qBACEN,GAAA,CAACO,cAAAA,EAAAA;gBAA2BT,KAAAA,EAAOA,KAAAA;AAChCQ,gBAAAA,QAAAA,EAAAA;AADkBR,aAAAA,EAAAA,KAAAA,CAAAA;AAIzB,QAAA,CAAA;;AAGN;;;;"}
@@ -4,7 +4,6 @@ var React = require('react');
4
4
  var Notifications = require('../../../../../../../../admin/src/features/Notifications.js');
5
5
  var useAPIErrorHandler = require('../../../../../../../../admin/src/hooks/useAPIErrorHandler.js');
6
6
  var useQueryParams = require('../../../../../../../../admin/src/hooks/useQueryParams.js');
7
- var users = require('../../../../../../../../admin/src/services/users.js');
8
7
  var auditLogs = require('../../../../../services/auditLogs.js');
9
8
 
10
9
  function _interopNamespace(e) {
@@ -27,14 +26,24 @@ function _interopNamespace(e) {
27
26
 
28
27
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
28
 
30
- const useAuditLogsData = ({ canReadAuditLogs, canReadUsers })=>{
29
+ const useAuditLogsData = ({ canReadAuditLogs, usersPageSize })=>{
31
30
  const { toggleNotification } = Notifications.useNotification();
32
31
  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler.useAPIErrorHandler();
33
32
  const [{ query }] = useQueryParams.useQueryParams();
34
- const { data, error, isError: isUsersError, isLoading: isLoadingUsers } = users.useAdminUsers({}, {
35
- skip: !canReadUsers,
33
+ const { data, error, isError: isUsersError, isLoading: isLoadingUsers } = auditLogs.useGetAuditLogUsersQuery({
34
+ pageSize: usersPageSize
35
+ }, {
36
+ skip: !canReadAuditLogs,
36
37
  refetchOnMountOrArgChange: true
37
38
  });
39
+ const [usersData, setUsersData] = React__namespace.useState();
40
+ React__namespace.useEffect(()=>{
41
+ if (data) {
42
+ setUsersData(data);
43
+ }
44
+ }, [
45
+ data
46
+ ]);
38
47
  React__namespace.useEffect(()=>{
39
48
  if (error) {
40
49
  toggleNotification({
@@ -65,8 +74,10 @@ const useAuditLogsData = ({ canReadAuditLogs, canReadUsers })=>{
65
74
  ]);
66
75
  return {
67
76
  auditLogs: auditLogs$1,
68
- users: data?.users ?? [],
69
- isLoading: isLoadingUsers || isLoadingAuditLogs,
77
+ users: usersData?.results ?? [],
78
+ usersPagination: usersData?.pagination ?? undefined,
79
+ isLoadingUsers,
80
+ isLoading: isLoadingUsers && !usersData || isLoadingAuditLogs,
70
81
  hasError: isAuditLogsError || isUsersError
71
82
  };
72
83
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useAuditLogsData.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useQueryParams } from '../../../../../../../../admin/src/hooks/useQueryParams';\nimport { useAdminUsers } from '../../../../../../../../admin/src/services/users';\nimport { useGetAuditLogsQuery } from '../../../../../services/auditLogs';\n\nexport const useAuditLogsData = ({\n canReadAuditLogs,\n canReadUsers,\n}: {\n canReadAuditLogs: boolean;\n canReadUsers: boolean;\n}) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams();\n\n const {\n data,\n error,\n isError: isUsersError,\n isLoading: isLoadingUsers,\n } = useAdminUsers(\n {},\n {\n skip: !canReadUsers,\n refetchOnMountOrArgChange: true,\n }\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({ type: 'danger', message: formatAPIError(error) });\n }\n }, [error, toggleNotification, formatAPIError]);\n\n const {\n data: auditLogs,\n isLoading: isLoadingAuditLogs,\n isError: isAuditLogsError,\n error: auditLogsError,\n } = useGetAuditLogsQuery(query, {\n refetchOnMountOrArgChange: true,\n skip: !canReadAuditLogs,\n });\n\n React.useEffect(() => {\n if (auditLogsError) {\n toggleNotification({ type: 'danger', message: formatAPIError(auditLogsError) });\n }\n }, [auditLogsError, toggleNotification, formatAPIError]);\n\n return {\n auditLogs,\n users: data?.users ?? [],\n isLoading: isLoadingUsers || isLoadingAuditLogs,\n hasError: isAuditLogsError || isUsersError,\n };\n};\n"],"names":["useAuditLogsData","canReadAuditLogs","canReadUsers","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","query","useQueryParams","data","error","isError","isUsersError","isLoading","isLoadingUsers","useAdminUsers","skip","refetchOnMountOrArgChange","React","useEffect","type","message","auditLogs","isLoadingAuditLogs","isAuditLogsError","auditLogsError","useGetAuditLogsQuery","users","hasError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQaA,gBAAAA,GAAmB,CAAC,EAC/BC,gBAAgB,EAChBC,YAAY,EAIb,GAAA;IACC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,qCAAAA,EAAAA;AACpD,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,6BAAAA,EAAAA;AAEpB,IAAA,MAAM,EACJC,IAAI,EACJC,KAAK,EACLC,OAAAA,EAASC,YAAY,EACrBC,SAAAA,EAAWC,cAAc,EAC1B,GAAGC,mBAAAA,CACF,EAAC,EACD;AACEC,QAAAA,IAAAA,EAAM,CAACf,YAAAA;QACPgB,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;AAGFC,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIT,KAAAA,EAAO;YACTR,kBAAAA,CAAmB;gBAAEkB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAAShB,cAAAA,CAAeK,KAAAA;AAAO,aAAA,CAAA;AACtE,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,KAAAA;AAAOR,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;AAE9C,IAAA,MAAM,EACJI,IAAAA,EAAMa,WAAS,EACfT,WAAWU,kBAAkB,EAC7BZ,OAAAA,EAASa,gBAAgB,EACzBd,KAAAA,EAAOe,cAAc,EACtB,GAAGC,+BAAqBnB,KAAAA,EAAO;QAC9BU,yBAAAA,EAA2B,IAAA;AAC3BD,QAAAA,IAAAA,EAAM,CAAChB;AACT,KAAA,CAAA;AAEAkB,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIM,cAAAA,EAAgB;YAClBvB,kBAAAA,CAAmB;gBAAEkB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAAShB,cAAAA,CAAeoB,cAAAA;AAAgB,aAAA,CAAA;AAC/E,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,cAAAA;AAAgBvB,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;IAEvD,OAAO;AACLiB,mBAAAA,WAAAA;QACAK,KAAAA,EAAOlB,IAAAA,EAAMkB,SAAS,EAAE;AACxBd,QAAAA,SAAAA,EAAWC,cAAAA,IAAkBS,kBAAAA;AAC7BK,QAAAA,QAAAA,EAAUJ,gBAAAA,IAAoBZ;AAChC,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"useAuditLogsData.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useQueryParams } from '../../../../../../../../admin/src/hooks/useQueryParams';\nimport { useGetAuditLogsQuery, useGetAuditLogUsersQuery } from '../../../../../services/auditLogs';\n\nexport const useAuditLogsData = ({\n canReadAuditLogs,\n usersPageSize,\n}: {\n canReadAuditLogs: boolean;\n usersPageSize: number;\n}) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams();\n\n const {\n data,\n error,\n isError: isUsersError,\n isLoading: isLoadingUsers,\n } = useGetAuditLogUsersQuery(\n { pageSize: usersPageSize },\n {\n skip: !canReadAuditLogs,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [usersData, setUsersData] = React.useState<typeof data>();\n\n React.useEffect(() => {\n if (data) {\n setUsersData(data);\n }\n }, [data]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({ type: 'danger', message: formatAPIError(error) });\n }\n }, [error, toggleNotification, formatAPIError]);\n\n const {\n data: auditLogs,\n isLoading: isLoadingAuditLogs,\n isError: isAuditLogsError,\n error: auditLogsError,\n } = useGetAuditLogsQuery(query, {\n refetchOnMountOrArgChange: true,\n skip: !canReadAuditLogs,\n });\n\n React.useEffect(() => {\n if (auditLogsError) {\n toggleNotification({ type: 'danger', message: formatAPIError(auditLogsError) });\n }\n }, [auditLogsError, toggleNotification, formatAPIError]);\n\n return {\n auditLogs,\n users: usersData?.results ?? [],\n usersPagination: usersData?.pagination ?? undefined,\n isLoadingUsers,\n isLoading: (isLoadingUsers && !usersData) || isLoadingAuditLogs,\n hasError: isAuditLogsError || isUsersError,\n };\n};\n"],"names":["useAuditLogsData","canReadAuditLogs","usersPageSize","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","query","useQueryParams","data","error","isError","isUsersError","isLoading","isLoadingUsers","useGetAuditLogUsersQuery","pageSize","skip","refetchOnMountOrArgChange","usersData","setUsersData","React","useState","useEffect","type","message","auditLogs","isLoadingAuditLogs","isAuditLogsError","auditLogsError","useGetAuditLogsQuery","users","results","usersPagination","pagination","undefined","hasError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;MAOaA,gBAAAA,GAAmB,CAAC,EAC/BC,gBAAgB,EAChBC,aAAa,EAId,GAAA;IACC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,qCAAAA,EAAAA;AACpD,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,6BAAAA,EAAAA;AAEpB,IAAA,MAAM,EACJC,IAAI,EACJC,KAAK,EACLC,OAAAA,EAASC,YAAY,EACrBC,SAAAA,EAAWC,cAAc,EAC1B,GAAGC,kCAAAA,CACF;QAAEC,QAAAA,EAAUf;KAAc,EAC1B;AACEgB,QAAAA,IAAAA,EAAM,CAACjB,gBAAAA;QACPkB,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;AAGF,IAAA,MAAM,CAACC,SAAAA,EAAWC,YAAAA,CAAa,GAAGC,iBAAMC,QAAQ,EAAA;AAEhDD,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;AACd,QAAA,IAAId,IAAAA,EAAM;YACRW,YAAAA,CAAaX,IAAAA,CAAAA;AACf,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA;AAAK,KAAA,CAAA;AAETY,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;AACd,QAAA,IAAIb,KAAAA,EAAO;YACTR,kBAAAA,CAAmB;gBAAEsB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAASpB,cAAAA,CAAeK,KAAAA;AAAO,aAAA,CAAA;AACtE,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,KAAAA;AAAOR,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;AAE9C,IAAA,MAAM,EACJI,IAAAA,EAAMiB,WAAS,EACfb,WAAWc,kBAAkB,EAC7BhB,OAAAA,EAASiB,gBAAgB,EACzBlB,KAAAA,EAAOmB,cAAc,EACtB,GAAGC,+BAAqBvB,KAAAA,EAAO;QAC9BW,yBAAAA,EAA2B,IAAA;AAC3BD,QAAAA,IAAAA,EAAM,CAACjB;AACT,KAAA,CAAA;AAEAqB,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;AACd,QAAA,IAAIM,cAAAA,EAAgB;YAClB3B,kBAAAA,CAAmB;gBAAEsB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAASpB,cAAAA,CAAewB,cAAAA;AAAgB,aAAA,CAAA;AAC/E,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,cAAAA;AAAgB3B,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;IAEvD,OAAO;AACLqB,mBAAAA,WAAAA;QACAK,KAAAA,EAAOZ,SAAAA,EAAWa,WAAW,EAAE;AAC/BC,QAAAA,eAAAA,EAAiBd,WAAWe,UAAAA,IAAcC,SAAAA;AAC1CrB,QAAAA,cAAAA;QACAD,SAAAA,EAAYC,cAAAA,IAAkB,CAACK,SAAAA,IAAcQ,kBAAAA;AAC7CS,QAAAA,QAAAA,EAAUR,gBAAAA,IAAoBhB;AAChC,KAAA;AACF;;;;"}
@@ -2,17 +2,26 @@ import * as React from 'react';
2
2
  import { useNotification } from '../../../../../../../../admin/src/features/Notifications.mjs';
3
3
  import { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler.mjs';
4
4
  import { useQueryParams } from '../../../../../../../../admin/src/hooks/useQueryParams.mjs';
5
- import { useAdminUsers } from '../../../../../../../../admin/src/services/users.mjs';
6
- import { useGetAuditLogsQuery } from '../../../../../services/auditLogs.mjs';
5
+ import { useGetAuditLogUsersQuery, useGetAuditLogsQuery } from '../../../../../services/auditLogs.mjs';
7
6
 
8
- const useAuditLogsData = ({ canReadAuditLogs, canReadUsers })=>{
7
+ const useAuditLogsData = ({ canReadAuditLogs, usersPageSize })=>{
9
8
  const { toggleNotification } = useNotification();
10
9
  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
11
10
  const [{ query }] = useQueryParams();
12
- const { data, error, isError: isUsersError, isLoading: isLoadingUsers } = useAdminUsers({}, {
13
- skip: !canReadUsers,
11
+ const { data, error, isError: isUsersError, isLoading: isLoadingUsers } = useGetAuditLogUsersQuery({
12
+ pageSize: usersPageSize
13
+ }, {
14
+ skip: !canReadAuditLogs,
14
15
  refetchOnMountOrArgChange: true
15
16
  });
17
+ const [usersData, setUsersData] = React.useState();
18
+ React.useEffect(()=>{
19
+ if (data) {
20
+ setUsersData(data);
21
+ }
22
+ }, [
23
+ data
24
+ ]);
16
25
  React.useEffect(()=>{
17
26
  if (error) {
18
27
  toggleNotification({
@@ -43,8 +52,10 @@ const useAuditLogsData = ({ canReadAuditLogs, canReadUsers })=>{
43
52
  ]);
44
53
  return {
45
54
  auditLogs,
46
- users: data?.users ?? [],
47
- isLoading: isLoadingUsers || isLoadingAuditLogs,
55
+ users: usersData?.results ?? [],
56
+ usersPagination: usersData?.pagination ?? undefined,
57
+ isLoadingUsers,
58
+ isLoading: isLoadingUsers && !usersData || isLoadingAuditLogs,
48
59
  hasError: isAuditLogsError || isUsersError
49
60
  };
50
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useAuditLogsData.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useQueryParams } from '../../../../../../../../admin/src/hooks/useQueryParams';\nimport { useAdminUsers } from '../../../../../../../../admin/src/services/users';\nimport { useGetAuditLogsQuery } from '../../../../../services/auditLogs';\n\nexport const useAuditLogsData = ({\n canReadAuditLogs,\n canReadUsers,\n}: {\n canReadAuditLogs: boolean;\n canReadUsers: boolean;\n}) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams();\n\n const {\n data,\n error,\n isError: isUsersError,\n isLoading: isLoadingUsers,\n } = useAdminUsers(\n {},\n {\n skip: !canReadUsers,\n refetchOnMountOrArgChange: true,\n }\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({ type: 'danger', message: formatAPIError(error) });\n }\n }, [error, toggleNotification, formatAPIError]);\n\n const {\n data: auditLogs,\n isLoading: isLoadingAuditLogs,\n isError: isAuditLogsError,\n error: auditLogsError,\n } = useGetAuditLogsQuery(query, {\n refetchOnMountOrArgChange: true,\n skip: !canReadAuditLogs,\n });\n\n React.useEffect(() => {\n if (auditLogsError) {\n toggleNotification({ type: 'danger', message: formatAPIError(auditLogsError) });\n }\n }, [auditLogsError, toggleNotification, formatAPIError]);\n\n return {\n auditLogs,\n users: data?.users ?? [],\n isLoading: isLoadingUsers || isLoadingAuditLogs,\n hasError: isAuditLogsError || isUsersError,\n };\n};\n"],"names":["useAuditLogsData","canReadAuditLogs","canReadUsers","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","query","useQueryParams","data","error","isError","isUsersError","isLoading","isLoadingUsers","useAdminUsers","skip","refetchOnMountOrArgChange","React","useEffect","type","message","auditLogs","isLoadingAuditLogs","isAuditLogsError","auditLogsError","useGetAuditLogsQuery","users","hasError"],"mappings":";;;;;;;MAQaA,gBAAAA,GAAmB,CAAC,EAC/BC,gBAAgB,EAChBC,YAAY,EAIb,GAAA;IACC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;AACpD,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AAEpB,IAAA,MAAM,EACJC,IAAI,EACJC,KAAK,EACLC,OAAAA,EAASC,YAAY,EACrBC,SAAAA,EAAWC,cAAc,EAC1B,GAAGC,aAAAA,CACF,EAAC,EACD;AACEC,QAAAA,IAAAA,EAAM,CAACf,YAAAA;QACPgB,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;AAGFC,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIT,KAAAA,EAAO;YACTR,kBAAAA,CAAmB;gBAAEkB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAAShB,cAAAA,CAAeK,KAAAA;AAAO,aAAA,CAAA;AACtE,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,KAAAA;AAAOR,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;AAE9C,IAAA,MAAM,EACJI,IAAAA,EAAMa,SAAS,EACfT,WAAWU,kBAAkB,EAC7BZ,OAAAA,EAASa,gBAAgB,EACzBd,KAAAA,EAAOe,cAAc,EACtB,GAAGC,qBAAqBnB,KAAAA,EAAO;QAC9BU,yBAAAA,EAA2B,IAAA;AAC3BD,QAAAA,IAAAA,EAAM,CAAChB;AACT,KAAA,CAAA;AAEAkB,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIM,cAAAA,EAAgB;YAClBvB,kBAAAA,CAAmB;gBAAEkB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAAShB,cAAAA,CAAeoB,cAAAA;AAAgB,aAAA,CAAA;AAC/E,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,cAAAA;AAAgBvB,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;IAEvD,OAAO;AACLiB,QAAAA,SAAAA;QACAK,KAAAA,EAAOlB,IAAAA,EAAMkB,SAAS,EAAE;AACxBd,QAAAA,SAAAA,EAAWC,cAAAA,IAAkBS,kBAAAA;AAC7BK,QAAAA,QAAAA,EAAUJ,gBAAAA,IAAoBZ;AAChC,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"useAuditLogsData.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useQueryParams } from '../../../../../../../../admin/src/hooks/useQueryParams';\nimport { useGetAuditLogsQuery, useGetAuditLogUsersQuery } from '../../../../../services/auditLogs';\n\nexport const useAuditLogsData = ({\n canReadAuditLogs,\n usersPageSize,\n}: {\n canReadAuditLogs: boolean;\n usersPageSize: number;\n}) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams();\n\n const {\n data,\n error,\n isError: isUsersError,\n isLoading: isLoadingUsers,\n } = useGetAuditLogUsersQuery(\n { pageSize: usersPageSize },\n {\n skip: !canReadAuditLogs,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [usersData, setUsersData] = React.useState<typeof data>();\n\n React.useEffect(() => {\n if (data) {\n setUsersData(data);\n }\n }, [data]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({ type: 'danger', message: formatAPIError(error) });\n }\n }, [error, toggleNotification, formatAPIError]);\n\n const {\n data: auditLogs,\n isLoading: isLoadingAuditLogs,\n isError: isAuditLogsError,\n error: auditLogsError,\n } = useGetAuditLogsQuery(query, {\n refetchOnMountOrArgChange: true,\n skip: !canReadAuditLogs,\n });\n\n React.useEffect(() => {\n if (auditLogsError) {\n toggleNotification({ type: 'danger', message: formatAPIError(auditLogsError) });\n }\n }, [auditLogsError, toggleNotification, formatAPIError]);\n\n return {\n auditLogs,\n users: usersData?.results ?? [],\n usersPagination: usersData?.pagination ?? undefined,\n isLoadingUsers,\n isLoading: (isLoadingUsers && !usersData) || isLoadingAuditLogs,\n hasError: isAuditLogsError || isUsersError,\n };\n};\n"],"names":["useAuditLogsData","canReadAuditLogs","usersPageSize","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","query","useQueryParams","data","error","isError","isUsersError","isLoading","isLoadingUsers","useGetAuditLogUsersQuery","pageSize","skip","refetchOnMountOrArgChange","usersData","setUsersData","React","useState","useEffect","type","message","auditLogs","isLoadingAuditLogs","isAuditLogsError","auditLogsError","useGetAuditLogsQuery","users","results","usersPagination","pagination","undefined","hasError"],"mappings":";;;;;;MAOaA,gBAAAA,GAAmB,CAAC,EAC/BC,gBAAgB,EAChBC,aAAa,EAId,GAAA;IACC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;AACpD,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AAEpB,IAAA,MAAM,EACJC,IAAI,EACJC,KAAK,EACLC,OAAAA,EAASC,YAAY,EACrBC,SAAAA,EAAWC,cAAc,EAC1B,GAAGC,wBAAAA,CACF;QAAEC,QAAAA,EAAUf;KAAc,EAC1B;AACEgB,QAAAA,IAAAA,EAAM,CAACjB,gBAAAA;QACPkB,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;AAGF,IAAA,MAAM,CAACC,SAAAA,EAAWC,YAAAA,CAAa,GAAGC,MAAMC,QAAQ,EAAA;AAEhDD,IAAAA,KAAAA,CAAME,SAAS,CAAC,IAAA;AACd,QAAA,IAAId,IAAAA,EAAM;YACRW,YAAAA,CAAaX,IAAAA,CAAAA;AACf,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA;AAAK,KAAA,CAAA;AAETY,IAAAA,KAAAA,CAAME,SAAS,CAAC,IAAA;AACd,QAAA,IAAIb,KAAAA,EAAO;YACTR,kBAAAA,CAAmB;gBAAEsB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAASpB,cAAAA,CAAeK,KAAAA;AAAO,aAAA,CAAA;AACtE,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,KAAAA;AAAOR,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;AAE9C,IAAA,MAAM,EACJI,IAAAA,EAAMiB,SAAS,EACfb,WAAWc,kBAAkB,EAC7BhB,OAAAA,EAASiB,gBAAgB,EACzBlB,KAAAA,EAAOmB,cAAc,EACtB,GAAGC,qBAAqBvB,KAAAA,EAAO;QAC9BW,yBAAAA,EAA2B,IAAA;AAC3BD,QAAAA,IAAAA,EAAM,CAACjB;AACT,KAAA,CAAA;AAEAqB,IAAAA,KAAAA,CAAME,SAAS,CAAC,IAAA;AACd,QAAA,IAAIM,cAAAA,EAAgB;YAClB3B,kBAAAA,CAAmB;gBAAEsB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAASpB,cAAAA,CAAewB,cAAAA;AAAgB,aAAA,CAAA;AAC/E,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,cAAAA;AAAgB3B,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;IAEvD,OAAO;AACLqB,QAAAA,SAAAA;QACAK,KAAAA,EAAOZ,SAAAA,EAAWa,WAAW,EAAE;AAC/BC,QAAAA,eAAAA,EAAiBd,WAAWe,UAAAA,IAAcC,SAAAA;AAC1CrB,QAAAA,cAAAA;QACAD,SAAAA,EAAYC,cAAAA,IAAkB,CAACK,SAAAA,IAAcQ,kBAAAA;AAC7CS,QAAAA,QAAAA,EAAUR,gBAAAA,IAAoBhB;AAChC,KAAA;AACF;;;;"}
@@ -1,10 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var users = require('../../../../../../../../admin/src/utils/users.js');
4
3
  var ComboboxFilter = require('../components/ComboboxFilter.js');
5
4
  var getActionTypesDefaultMessages = require('./getActionTypesDefaultMessages.js');
6
5
 
7
- const getDisplayedFilters = ({ formatMessage, users: users$1, canReadUsers })=>{
6
+ const getDisplayedFilters = ({ formatMessage, users, usersFilter })=>{
8
7
  const operators = [
9
8
  {
10
9
  label: formatMessage({
@@ -50,30 +49,28 @@ const getDisplayedFilters = ({ formatMessage, users: users$1, canReadUsers })=>{
50
49
  type: 'datetime'
51
50
  }
52
51
  ];
53
- if (canReadUsers && users$1) {
54
- return [
55
- ...filters,
56
- {
57
- input: ComboboxFilter.ComboboxFilter,
58
- label: formatMessage({
59
- id: 'Settings.permissions.auditLogs.user',
60
- defaultMessage: 'User'
61
- }),
62
- mainField: {
63
- name: 'id',
64
- type: 'integer'
65
- },
66
- name: 'user',
67
- operators,
68
- options: users$1.map((user)=>({
69
- label: users.getDisplayName(user),
70
- value: user.id.toString()
71
- })),
72
- type: 'relation'
73
- }
74
- ];
75
- }
76
- return filters;
52
+ return [
53
+ ...filters,
54
+ {
55
+ input: ComboboxFilter.ComboboxFilter,
56
+ label: formatMessage({
57
+ id: 'Settings.permissions.auditLogs.user',
58
+ defaultMessage: 'User'
59
+ }),
60
+ mainField: {
61
+ name: 'id',
62
+ type: 'integer'
63
+ },
64
+ name: 'user',
65
+ operators,
66
+ options: users.map((user)=>({
67
+ label: user.displayName,
68
+ value: user.id.toString()
69
+ })),
70
+ type: 'relation',
71
+ ...usersFilter
72
+ }
73
+ ];
77
74
  };
78
75
 
79
76
  exports.getDisplayedFilters = getDisplayedFilters;
@@ -1 +1 @@
1
- {"version":3,"file":"getDisplayedFilters.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.ts"],"sourcesContent":["import { IntlShape } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { getDisplayName } from '../../../../../../../../admin/src/utils/users';\nimport { SanitizedAdminUser } from '../../../../../../../../shared/contracts/shared';\nimport { ComboboxFilter } from '../components/ComboboxFilter';\n\nimport { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages';\n\nexport const getDisplayedFilters = ({\n formatMessage,\n users,\n canReadUsers,\n}: {\n formatMessage: IntlShape['formatMessage'];\n users: SanitizedAdminUser[];\n canReadUsers: boolean;\n}): Filters.Filter[] => {\n const operators = [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ] as NonNullable<Filters.Filter['operators']>;\n\n const filters = [\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n name: 'action',\n operators,\n options: (Object.keys(actionTypes) as (keyof typeof actionTypes)[]).map((action) => ({\n label: formatMessage(\n {\n id: `Settings.permissions.auditLogs.${action}`,\n defaultMessage: getDefaultMessage(action),\n },\n { model: undefined }\n ),\n value: action,\n })),\n type: 'enumeration',\n },\n {\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n name: 'date',\n type: 'datetime',\n },\n ] satisfies Filters.Filter[];\n\n if (canReadUsers && users) {\n return [\n ...filters,\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n mainField: { name: 'id', type: 'integer' },\n name: 'user',\n operators,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n type: 'relation',\n } satisfies Filters.Filter,\n ];\n }\n\n return filters;\n};\n"],"names":["getDisplayedFilters","formatMessage","users","canReadUsers","operators","label","id","defaultMessage","value","filters","input","ComboboxFilter","name","options","Object","keys","actionTypes","map","action","getDefaultMessage","model","undefined","type","mainField","user","getDisplayName","toString"],"mappings":";;;;;;AASO,MAAMA,sBAAsB,CAAC,EAClCC,aAAa,SACbC,OAAK,EACLC,YAAY,EAKb,GAAA;AACC,IAAA,MAAMC,SAAAA,GAAY;AAChB,QAAA;AACEC,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,2CAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,KAAAA,EAAO;AACT,SAAA;AACA,QAAA;AACEH,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,2CAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,KAAAA,EAAO;AACT;AACD,KAAA;AAED,IAAA,MAAMC,OAAAA,GAAU;AACd,QAAA;YACEC,KAAAA,EAAOC,6BAAAA;AACPN,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,uCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAK,IAAAA,EAAM,QAAA;AACNR,YAAAA,SAAAA;YACAS,OAAAA,EAAUC,OAAOC,IAAI,CAACC,2CAA8CC,GAAG,CAAC,CAACC,MAAAA,IAAY;AACnFb,oBAAAA,KAAAA,EAAOJ,aAAAA,CACL;wBACEK,EAAAA,EAAI,CAAC,+BAA+B,EAAEY,MAAAA,CAAAA,CAAQ;AAC9CX,wBAAAA,cAAAA,EAAgBY,+CAAAA,CAAkBD,MAAAA;qBACpC,EACA;wBAAEE,KAAAA,EAAOC;AAAU,qBAAA,CAAA;oBAErBb,KAAAA,EAAOU;iBACT,CAAA,CAAA;YACAI,IAAAA,EAAM;AACR,SAAA;AACA,QAAA;AACEjB,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAK,IAAAA,EAAM,MAAA;YACNU,IAAAA,EAAM;AACR;AACD,KAAA;AAED,IAAA,IAAInB,gBAAgBD,OAAAA,EAAO;QACzB,OAAO;AACFO,YAAAA,GAAAA,OAAAA;AACH,YAAA;gBACEC,KAAAA,EAAOC,6BAAAA;AACPN,gBAAAA,KAAAA,EAAOJ,aAAAA,CAAc;oBACnBK,EAAAA,EAAI,qCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAgB,SAAAA,EAAW;oBAAEX,IAAAA,EAAM,IAAA;oBAAMU,IAAAA,EAAM;AAAU,iBAAA;gBACzCV,IAAAA,EAAM,MAAA;AACNR,gBAAAA,SAAAA;AACAS,gBAAAA,OAAAA,EAASX,OAAAA,CAAMe,GAAG,CAAC,CAACO,QAAU;AAC5BnB,wBAAAA,KAAAA,EAAOoB,oBAAAA,CAAeD,IAAAA,CAAAA;wBACtBhB,KAAAA,EAAOgB,IAAAA,CAAKlB,EAAE,CAACoB,QAAQ;qBACzB,CAAA,CAAA;gBACAJ,IAAAA,EAAM;AACR;AACD,SAAA;AACH,IAAA;IAEA,OAAOb,OAAAA;AACT;;;;"}
1
+ {"version":3,"file":"getDisplayedFilters.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.ts"],"sourcesContent":["import { IntlShape } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { GetUsers } from '../../../../../../../../shared/contracts/audit-logs';\nimport { ComboboxFilter, ComboboxFilterProps } from '../components/ComboboxFilter';\n\nimport { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages';\n\ntype UsersFilterProps = Pick<ComboboxFilterProps, 'loading' | 'hasMoreItems' | 'onLoadMore'>;\n\ntype AuditLogUser = NonNullable<GetUsers.Response['results']>[number];\n\nexport const getDisplayedFilters = ({\n formatMessage,\n users,\n usersFilter,\n}: {\n formatMessage: IntlShape['formatMessage'];\n users: AuditLogUser[];\n usersFilter?: UsersFilterProps;\n}): Filters.Filter[] => {\n const operators = [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ] as NonNullable<Filters.Filter['operators']>;\n\n const filters = [\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n name: 'action',\n operators,\n options: (Object.keys(actionTypes) as (keyof typeof actionTypes)[]).map((action) => ({\n label: formatMessage(\n {\n id: `Settings.permissions.auditLogs.${action}`,\n defaultMessage: getDefaultMessage(action),\n },\n { model: undefined }\n ),\n value: action,\n })),\n type: 'enumeration',\n },\n {\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n name: 'date',\n type: 'datetime',\n },\n ] satisfies Filters.Filter[];\n\n return [\n ...filters,\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n mainField: { name: 'id', type: 'integer' },\n name: 'user',\n operators,\n options: users.map((user) => ({\n label: user.displayName,\n value: user.id.toString(),\n })),\n type: 'relation',\n ...usersFilter,\n } satisfies Filters.Filter & UsersFilterProps,\n ];\n};\n"],"names":["getDisplayedFilters","formatMessage","users","usersFilter","operators","label","id","defaultMessage","value","filters","input","ComboboxFilter","name","options","Object","keys","actionTypes","map","action","getDefaultMessage","model","undefined","type","mainField","user","displayName","toString"],"mappings":";;;;;AAYO,MAAMA,sBAAsB,CAAC,EAClCC,aAAa,EACbC,KAAK,EACLC,WAAW,EAKZ,GAAA;AACC,IAAA,MAAMC,SAAAA,GAAY;AAChB,QAAA;AACEC,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,2CAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,KAAAA,EAAO;AACT,SAAA;AACA,QAAA;AACEH,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,2CAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,KAAAA,EAAO;AACT;AACD,KAAA;AAED,IAAA,MAAMC,OAAAA,GAAU;AACd,QAAA;YACEC,KAAAA,EAAOC,6BAAAA;AACPN,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,uCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAK,IAAAA,EAAM,QAAA;AACNR,YAAAA,SAAAA;YACAS,OAAAA,EAAUC,OAAOC,IAAI,CAACC,2CAA8CC,GAAG,CAAC,CAACC,MAAAA,IAAY;AACnFb,oBAAAA,KAAAA,EAAOJ,aAAAA,CACL;wBACEK,EAAAA,EAAI,CAAC,+BAA+B,EAAEY,MAAAA,CAAAA,CAAQ;AAC9CX,wBAAAA,cAAAA,EAAgBY,+CAAAA,CAAkBD,MAAAA;qBACpC,EACA;wBAAEE,KAAAA,EAAOC;AAAU,qBAAA,CAAA;oBAErBb,KAAAA,EAAOU;iBACT,CAAA,CAAA;YACAI,IAAAA,EAAM;AACR,SAAA;AACA,QAAA;AACEjB,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAK,IAAAA,EAAM,MAAA;YACNU,IAAAA,EAAM;AACR;AACD,KAAA;IAED,OAAO;AACFb,QAAAA,GAAAA,OAAAA;AACH,QAAA;YACEC,KAAAA,EAAOC,6BAAAA;AACPN,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAgB,SAAAA,EAAW;gBAAEX,IAAAA,EAAM,IAAA;gBAAMU,IAAAA,EAAM;AAAU,aAAA;YACzCV,IAAAA,EAAM,MAAA;AACNR,YAAAA,SAAAA;AACAS,YAAAA,OAAAA,EAASX,KAAAA,CAAMe,GAAG,CAAC,CAACO,QAAU;AAC5BnB,oBAAAA,KAAAA,EAAOmB,KAAKC,WAAW;oBACvBjB,KAAAA,EAAOgB,IAAAA,CAAKlB,EAAE,CAACoB,QAAQ;iBACzB,CAAA,CAAA;YACAJ,IAAAA,EAAM,UAAA;AACN,YAAA,GAAGnB;AACL;AACD,KAAA;AACH;;;;"}
@@ -1,8 +1,7 @@
1
- import { getDisplayName } from '../../../../../../../../admin/src/utils/users.mjs';
2
1
  import { ComboboxFilter } from '../components/ComboboxFilter.mjs';
3
2
  import { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages.mjs';
4
3
 
5
- const getDisplayedFilters = ({ formatMessage, users, canReadUsers })=>{
4
+ const getDisplayedFilters = ({ formatMessage, users, usersFilter })=>{
6
5
  const operators = [
7
6
  {
8
7
  label: formatMessage({
@@ -48,30 +47,28 @@ const getDisplayedFilters = ({ formatMessage, users, canReadUsers })=>{
48
47
  type: 'datetime'
49
48
  }
50
49
  ];
51
- if (canReadUsers && users) {
52
- return [
53
- ...filters,
54
- {
55
- input: ComboboxFilter,
56
- label: formatMessage({
57
- id: 'Settings.permissions.auditLogs.user',
58
- defaultMessage: 'User'
59
- }),
60
- mainField: {
61
- name: 'id',
62
- type: 'integer'
63
- },
64
- name: 'user',
65
- operators,
66
- options: users.map((user)=>({
67
- label: getDisplayName(user),
68
- value: user.id.toString()
69
- })),
70
- type: 'relation'
71
- }
72
- ];
73
- }
74
- return filters;
50
+ return [
51
+ ...filters,
52
+ {
53
+ input: ComboboxFilter,
54
+ label: formatMessage({
55
+ id: 'Settings.permissions.auditLogs.user',
56
+ defaultMessage: 'User'
57
+ }),
58
+ mainField: {
59
+ name: 'id',
60
+ type: 'integer'
61
+ },
62
+ name: 'user',
63
+ operators,
64
+ options: users.map((user)=>({
65
+ label: user.displayName,
66
+ value: user.id.toString()
67
+ })),
68
+ type: 'relation',
69
+ ...usersFilter
70
+ }
71
+ ];
75
72
  };
76
73
 
77
74
  export { getDisplayedFilters };