@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.
- package/dist/admin/admin/tests/server.js +23 -1
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +23 -1
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +38 -7
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +18 -7
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js +4 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs +4 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js +17 -6
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs +18 -7
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js +23 -26
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs +23 -26
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js +10 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.mjs +10 -2
- package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-domain.js +1 -0
- package/dist/admin/shared/utils/auth-cookie-domain.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-domain.mjs +1 -0
- package/dist/admin/shared/utils/auth-cookie-domain.mjs.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.js +1 -0
- package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.mjs +1 -0
- package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.d.ts +6 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.d.ts +5 -3
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.d.ts +8 -4
- package/dist/ee/admin/src/services/auditLogs.d.ts +5 -2
- package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts +1 -0
- package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +16 -0
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +2 -0
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +1 -0
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js +10 -0
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs +11 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js +24 -32
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs +24 -32
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +33 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +33 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js +8 -0
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs +8 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-domain.js +1 -0
- package/dist/server/shared/utils/auth-cookie-domain.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-domain.mjs +1 -0
- package/dist/server/shared/utils/auth-cookie-domain.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.js +1 -0
- package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.mjs +1 -0
- package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/shared/contracts/api-token.d.ts +2 -2
- package/dist/shared/contracts/api-token.d.ts.map +1 -1
- package/dist/shared/contracts/audit-logs.d.ts +19 -1
- package/dist/shared/contracts/audit-logs.d.ts.map +1 -1
- package/dist/shared/contracts/authentication.d.ts +1 -1
- package/dist/shared/contracts/authentication.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +2 -2
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/dist/shared/contracts/user.d.ts +1 -1
- package/dist/shared/contracts/user.d.ts.map +1 -1
- package/dist/shared/utils/auth-cookie-domain.d.ts.map +1 -1
- package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
- 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
|
|
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
|
|
26
|
+
const [usersPageSize, setUsersPageSize] = React.useState(USERS_PAGE_SIZE);
|
|
27
|
+
const { auditLogs, users, usersPagination, isLoadingUsers, isLoading: isLoadingData, hasError } = useAuditLogsData({
|
|
28
28
|
canReadAuditLogs,
|
|
29
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;AAoBA,MAAMA,QAAAA,GAAW,IAAA;IACf,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAMC,WAAAA,GAAcC,iBAAiB,CAACC,KAAAA,GAAUA,MAAMC,SAAS,CAACH,WAAW,CAACI,QAAQ,CAAA;AAEpF,IAAA,MAAM,EACJC,cAAAA,EAAgB,EAAEC,OAAAA,EAASC,gBAAgB,EAAEC,YAAY,EAAE,EAC3DC,SAAAA,EAAWC,aAAa,EACzB,GAAGC,OAAAA,CAAQ;AACV,QAAA,GAAGX,aAAaY,SAAS;QACzBC,SAAAA,EAAWb,WAAAA,EAAac,KAAAA,CAAMC,IAAAA,IAAQ;AACxC,KAAA,CAAA;AAEA,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,EAAEC,SAAS,GAAGC,cAAAA,EAAAA;IAC9B,MAAM,EACJN,SAAS,EACTE,KAAK,EACLL,SAAAA,EAAWU,aAAa,EACxBC,QAAQ,EACT,GAAGC,gBAAAA,CAAiB;AACnBd,QAAAA,gBAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMc,eAAAA,GAAkBC,kBAAAA,EAAAA;AAExB,IAAA,MAAMC,mBAAmBC,mBAAAA,CAAoB;AAAE3B,QAAAA,aAAAA;AAAegB,QAAAA,KAAAA;AAAON,QAAAA;AAAa,KAAA,CAAA;AAElF,IAAA,MAAMkB,OAAAA,GAA4C;AAChD,QAAA;YACEC,IAAAA,EAAM,QAAA;AACNC,YAAAA,KAAAA,EAAO9B,aAAAA,CAAc;gBACnB+B,EAAAA,EAAI,uCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,QAAAA,EAAU;AACZ,SAAA;AACA,QAAA;YACEJ,IAAAA,EAAM,MAAA;AACNC,YAAAA,KAAAA,EAAO9B,aAAAA,CAAc;gBACnB+B,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,QAAAA,EAAU;AACZ,SAAA;AACA,QAAA;YACEJ,IAAAA,EAAM,MAAA;AACNC,YAAAA,KAAAA,EAAO9B,aAAAA,CAAc;gBACnB+B,EAAAA,EAAI,qCAAA;gBACJC,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,IAAId,QAAAA,EAAU;QACZ,qBAAOe,GAAA,CAACC,KAAKC,KAAK,EAAA,EAAA,CAAA;AACpB,IAAA;AAEA,IAAA,MAAM5B,YAAYU,aAAAA,IAAiBT,aAAAA;AAEnC,IAAA,MAAM,EAAE4B,OAAAA,GAAU,EAAE,EAAE,GAAG1B,aAAa,EAAC;IAEvC,qBACE2B,IAAA,CAACH,KAAKI,IAAI,EAAA;QAACC,WAAAA,EAAWhC,SAAAA;;AACpB,0BAAA0B,GAAA,CAACC,KAAKM,KAAK,EAAA;0BACR5C,aAAAA,CACC;oBAAE+B,EAAAA,EAAI,oBAAA;oBAAsBC,cAAAA,EAAgB;iBAAoB,EAChE;AACEH,oBAAAA,IAAAA,EAAM7B,aAAAA,CAAc;wBAClB+B,EAAAA,EAAI,kBAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;AACF,iBAAA;;AAGJ,0BAAAK,GAAA,CAACQ,QAAQC,MAAM,EAAA;AACbC,gBAAAA,KAAAA,EAAO/C,aAAAA,CAAc;oBACnB+B,EAAAA,EAAI,kBAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AACAgB,gBAAAA,QAAAA,EAAUhD,aAAAA,CAAc;oBACtB+B,EAAAA,EAAI,yDAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;AAEF,0BAAAK,GAAA,CAACQ,QAAQI,MAAM,EAAA;gBACbC,YAAAA,gBACET,IAAA,CAACU,QAAQC,IAAI,EAAA;oBAACC,OAAAA,EAAS3B,gBAAAA;;AACrB,sCAAAW,GAAA,CAACc,QAAQG,OAAO,EAAA,EAAA,CAAA;AAChB,sCAAAjB,GAAA,CAACc,QAAQI,OAAO,EAAA;4BAACC,MAAAA,EAAQ;;AACzB,sCAAAnB,GAAA,CAACc,QAAQM,IAAI,EAAA,EAAA;;;;AAInB,0BAAAhB,IAAA,CAACI,QAAQa,OAAO,EAAA;;AACd,kCAAArB,GAAA,CAACsB,MAAMP,IAAI,EAAA;wBAACQ,IAAAA,EAAMpB,OAAAA;wBAASZ,OAAAA,EAASA,OAAAA;wBAASjB,SAAAA,EAAWA,SAAAA;gDACtD8B,IAAA,CAACkB,MAAMD,OAAO,EAAA;;AACZ,8CAAArB,GAAA,CAACsB,MAAME,IAAI,EAAA;AACRjC,oCAAAA,QAAAA,EAAAA,OAAAA,CAAQkC,GAAG,CAAC,CAACC,MAAAA,iBACZ1B,GAAA,CAACsB,MAAMK,UAAU,EAAA;AAAoB,4CAAA,GAAGD;AAAjBA,yCAAAA,EAAAA,MAAAA,CAAOlC,IAAI,CAAA;;AAGtC,8CAAAQ,GAAA,CAACsB,MAAMM,KAAK,EAAA,EAAA,CAAA;AACZ,8CAAA5B,GAAA,CAACsB,MAAMO,OAAO,EAAA,EAAA,CAAA;AACd,8CAAA7B,GAAA,CAACsB,MAAMQ,IAAI,EAAA;AACR3B,oCAAAA,QAAAA,EAAAA,OAAAA,CAAQsB,GAAG,CAAC,CAACM,GAAAA,iBACZ3B,IAAA,CAACkB,MAAMU,GAAG,EAAA;AAAcC,4CAAAA,OAAAA,EAAS,IAAMnD,QAAAA,CAAS;AAAEY,oDAAAA,EAAAA,EAAIqC,IAAIrC;AAAG,iDAAA,EAAG,MAAA,EAAQ,IAAA,CAAA;;gDACrEH,OAAAA,CAAQkC,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACZ,oDAAA,MAAM,EAAElC,IAAI,EAAEK,aAAa,EAAE,GAAG6B,MAAAA;oDAEhC,OAAQlC,IAAAA;wDACN,KAAK,QAAA;4DACH,qBACEQ,GAAA,CAACsB,MAAMY,IAAI,EAAA;AACT,gEAAA,QAAA,gBAAAlC,GAAA,CAACmC,UAAAA,EAAAA;oEAAWC,SAAAA,EAAU,YAAA;8EACnBzE,aAAAA,CACC;AACE+B,wEAAAA,EAAAA,EAAI,CAAC,+BAA+B,EAAEqC,GAAAA,CAAIM,MAAM,CAAA,CAAE;;wEAElD1C,cAAAA,EAAgB2C,iBAAAA,CAAkBP,IAAIM,MAAM;qEAC9C,EACA;AAAEE,wEAAAA,KAAAA,EAAO,GAACR,CAAIS,OAAO,EAAED,KAAAA,IAAoB;AAAG,qEAAA;;AARnC/C,6DAAAA,EAAAA,IAAAA,CAAAA;wDAarB,KAAK,MAAA;4DACH,qBACEQ,GAAA,CAACsB,MAAMY,IAAI,EAAA;AACT,gEAAA,QAAA,gBAAAlC,GAAA,CAACmC,UAAAA,EAAAA;oEAAWC,SAAAA,EAAU,YAAA;AACnBjD,oEAAAA,QAAAA,EAAAA,eAAAA,CAAgB4C,IAAIU,IAAI;;AAFZjD,6DAAAA,EAAAA,IAAAA,CAAAA;wDAMrB,KAAK,MAAA;4DACH,qBACEQ,GAAA,CAACsB,MAAMY,IAAI,EAAA;AACT,gEAAA,QAAA,gBAAAlC,GAAA,CAACmC,UAAAA,EAAAA;oEAAWC,SAAAA,EAAU,YAAA;8EACnBvC,aAAAA,GAAgBA,aAAAA,CAAckC,KAAKL,MAAAA,CAAAA,GAAU;;AAFjClC,6DAAAA,EAAAA,IAAAA,CAAAA;AAMrB,wDAAA;4DACE,qBACEQ,GAAA,CAACsB,MAAMY,IAAI,EAAA;AACT,gEAAA,QAAA,gBAAAlC,GAAA,CAACmC,UAAAA,EAAAA;oEAAWC,SAAAA,EAAU,YAAA;8EACnB,GAAI,CAAC5C,IAAAA,CAAuB,IAAe;;AAF/BA,6DAAAA,EAAAA,IAAAA,CAAAA;AAMvB;AACF,gDAAA,CAAA,CAAA;AACA,8DAAAQ,GAAA,CAACsB,MAAMY,IAAI,EAAA;oDAACD,OAAAA,EAAS,CAACS,CAAAA,GAAMA,CAAAA,CAAEC,eAAe,EAAA;AAC3C,oDAAA,QAAA,gBAAA3C,GAAA,CAAC4C,IAAAA,EAAAA;wDAAKC,cAAAA,EAAe,KAAA;AACnB,wDAAA,QAAA,gBAAA7C,GAAA,CAAC8C,UAAAA,EAAAA;AACCb,4DAAAA,OAAAA,EAAS,IAAMnD,QAAAA,CAAS;AAAEY,oEAAAA,EAAAA,EAAIqC,IAAIrC;AAAG,iEAAA,EAAG,MAAA,EAAQ,IAAA,CAAA;4DAChDqD,WAAAA,EAAa,KAAA;AACbtD,4DAAAA,KAAAA,EAAO9B,aAAAA,CACL;gEAAE+B,EAAAA,EAAI,0BAAA;gEAA4BC,cAAAA,EAAgB;6DAAmB,EACrE;AAAEqD,gEAAAA,MAAAA,EAAQ,CAAA,EAAGjB,GAAAA,CAAIM,MAAM,CAAC,OAAO;AAAE,6DAAA,CAAA;4DAEnCY,OAAAA,EAAQ,OAAA;AAER,4DAAA,QAAA,gBAAAjD,GAAA,CAACkD,GAAAA,EAAAA,EAAAA;;;;;AAzDOnB,yCAAAA,EAAAA,GAAAA,CAAIrC,EAAE,CAAA;;;;;AAmE9B,kCAAAU,IAAA,CAAC+C,WAAWpC,IAAI,EAAA;AAAE,wBAAA,GAAGtC,WAAW2E,UAAU;;AACxC,0CAAApD,GAAA,CAACmD,WAAWE,QAAQ,EAAA,EAAA,CAAA;AACpB,0CAAArD,GAAA,CAACmD,WAAWG,KAAK,EAAA,EAAA;;;;;AAGpBzE,YAAAA,KAAAA,EAAOa,oBACNM,GAAA,CAACuD,KAAAA,EAAAA;AACCC,gBAAAA,WAAAA,EAAa,IAAM1E,QAAAA,CAAS;wBAAEY,EAAAA,EAAI;AAAG,qBAAA,EAAG,QAAA,EAAU,IAAA,CAAA;gBAClD+D,KAAAA,EAAO5E,KAAAA,CAAMa,EAAE,CAACgE,QAAQ;;;;AAKlC;AAEA,MAAMC,iBAAAA,GAAoB,IAAA;IACxB,MAAM9F,WAAAA,GAAcC,gBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,SAAS,CAACH,WAAW,CAACI,QAAQ,EAAEQ,SAAAA,EAAWmF,IAAAA,CAAAA;IAG9D,qBACE5D,GAAA,CAACC,KAAK4D,OAAO,EAAA;QAAChG,WAAAA,EAAaA,WAAAA;AACzB,QAAA,QAAA,gBAAAmC,GAAA,CAACtC,QAAAA,EAAAA,EAAAA;;AAGP;;;;"}
|
|
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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"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js
CHANGED
|
@@ -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;
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js.map
CHANGED
|
@@ -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:
|
|
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;;;;"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs
CHANGED
|
@@ -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;
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map
CHANGED
|
@@ -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:
|
|
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;;;;"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js
CHANGED
|
@@ -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,
|
|
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 } =
|
|
35
|
-
|
|
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:
|
|
69
|
-
|
|
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
|
};
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map
CHANGED
|
@@ -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 {
|
|
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;;;;"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs
CHANGED
|
@@ -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 {
|
|
6
|
-
import { useGetAuditLogsQuery } from '../../../../../services/auditLogs.mjs';
|
|
5
|
+
import { useGetAuditLogUsersQuery, useGetAuditLogsQuery } from '../../../../../services/auditLogs.mjs';
|
|
7
6
|
|
|
8
|
-
const useAuditLogsData = ({ canReadAuditLogs,
|
|
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 } =
|
|
13
|
-
|
|
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:
|
|
47
|
-
|
|
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
|
};
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs.map
CHANGED
|
@@ -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 {
|
|
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;;;;"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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;
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map
CHANGED
|
@@ -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 {
|
|
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;;;;"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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 };
|