@strapi/admin 5.52.3 → 5.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/translations/en.json.js +18 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +18 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +118 -43
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +118 -45
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/ee/admin/src/constants.js +6 -0
- package/dist/admin/ee/admin/src/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/constants.mjs +6 -0
- package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +31 -3
- 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 +33 -5
- 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/ExportCard.js +177 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.js.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.mjs +175 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.mjs.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js +173 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs +151 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +10 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +10 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/shared/utils/audit-log-export.js +16 -0
- package/dist/admin/shared/utils/audit-log-export.js.map +1 -0
- package/dist/admin/shared/utils/audit-log-export.mjs +9 -0
- package/dist/admin/shared/utils/audit-log-export.mjs.map +1 -0
- package/dist/admin/src/utils/getFetchClient.d.ts +9 -2
- package/dist/admin/tests/store.d.ts +4 -0
- package/dist/admin/tests/utils.d.ts +4 -0
- package/dist/ee/admin/src/constants.d.ts +4 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.d.ts +10 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.d.ts +18 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +9 -0
- 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 +24 -3
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +8 -2
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/utils/csv.d.ts +5 -0
- package/dist/ee/server/src/audit-logs/utils/csv.d.ts.map +1 -0
- package/dist/ee/server/src/audit-logs/utils/export-token.d.ts +5 -0
- package/dist/ee/server/src/audit-logs/utils/export-token.d.ts.map +1 -0
- package/dist/ee/server/src/audit-logs/utils.d.ts +10 -0
- package/dist/ee/server/src/audit-logs/utils.d.ts.map +1 -0
- 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/config/admin-actions.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 +50 -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 +51 -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 +13 -4
- 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 +13 -4
- 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 +201 -7
- 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 +201 -8
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +119 -34
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +119 -34
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.js +33 -0
- package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +29 -0
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils/export-token.js +33 -0
- package/dist/server/ee/server/src/audit-logs/utils/export-token.js.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils/export-token.mjs +29 -0
- package/dist/server/ee/server/src/audit-logs/utils/export-token.mjs.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils.js +14 -0
- package/dist/server/ee/server/src/audit-logs/utils.js.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils.mjs +12 -0
- package/dist/server/ee/server/src/audit-logs/utils.mjs.map +1 -0
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js +11 -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 +11 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/config/admin-actions.js +8 -0
- package/dist/server/ee/server/src/config/admin-actions.js.map +1 -1
- package/dist/server/ee/server/src/config/admin-actions.mjs +8 -0
- package/dist/server/ee/server/src/config/admin-actions.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +10 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +10 -0
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/shared/utils/audit-log-export.js +22 -0
- package/dist/server/shared/utils/audit-log-export.js.map +1 -0
- package/dist/server/shared/utils/audit-log-export.mjs +12 -0
- package/dist/server/shared/utils/audit-log-export.mjs.map +1 -0
- package/dist/shared/contracts/audit-logs.d.ts +15 -1
- package/dist/shared/contracts/audit-logs.d.ts.map +1 -1
- package/dist/shared/utils/audit-log-export.d.ts +9 -0
- package/dist/shared/utils/audit-log-export.d.ts.map +1 -0
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPage.js","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport {\n useQueryParams,\n withEncodedUserParams,\n} from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst USERS_PAGE_SIZE = 10;\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs },\n isLoading: isLoadingRBAC,\n } = useRBAC(permissions?.auditLogs?.read || []);\n\n const [{ query }, setQuery] = useQueryParams<{\n id?: AuditLog['id'];\n filters?: unknown;\n _q?: unknown;\n }>();\n\n const openLog = (id: AuditLog['id']) =>\n setQuery(withEncodedUserParams(query, { id }), 'push', true);\n const closeLog = () => setQuery(withEncodedUserParams(query, { id: undefined }), 'push', true);\n const [usersPageSize, setUsersPageSize] = React.useState(USERS_PAGE_SIZE);\n const {\n auditLogs,\n users,\n usersPagination,\n isLoadingUsers,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n usersPageSize,\n });\n\n const { page = 1, pageCount = 1 } = usersPagination ?? {};\n const hasMoreUsers = page < pageCount;\n\n const handleLoadMoreUsers = () => {\n if (hasMoreUsers) {\n setUsersPageSize((prevPageSize) => prevPageSize + USERS_PAGE_SIZE);\n }\n };\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({\n formatMessage,\n users,\n usersFilter: {\n loading: isLoadingUsers,\n hasMoreItems: hasMoreUsers,\n onLoadMore: handleLoadMoreUsers,\n },\n });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => openLog(log.id)}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => openLog(log.id)}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && <Modal handleClose={closeLog} logId={query.id.toString()} />}\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["USERS_PAGE_SIZE","ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canReadAuditLogs","isLoading","isLoadingRBAC","useRBAC","auditLogs","read","query","setQuery","useQueryParams","openLog","id","withEncodedUserParams","closeLog","undefined","usersPageSize","setUsersPageSize","React","useState","users","usersPagination","isLoadingUsers","isLoadingData","hasError","useAuditLogsData","page","pageCount","hasMoreUsers","handleLoadMoreUsers","prevPageSize","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","usersFilter","loading","hasMoreItems","onLoadMore","headers","name","label","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","Action","startActions","Filters","Root","options","Trigger","Popover","zIndex","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","onClick","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","pagination","PageSize","Links","Modal","handleClose","logId","toString","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListPage.js","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Download, Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport {\n useQueryParams,\n withEncodedUserParams,\n} from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { ExportCard } from './components/ExportCard';\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useExportAuditLogs } from './hooks/useExportAuditLogs';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst USERS_PAGE_SIZE = 10;\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const readPermissions = permissions?.auditLogs?.read;\n const exportPermissions = permissions?.auditLogs?.export;\n const {\n allowedActions: { canRead: canReadAuditLogs, canExport: canExportAuditLogs },\n isLoading: isLoadingRBAC,\n } = useRBAC(\n React.useMemo(\n () => [...(readPermissions ?? []), ...(exportPermissions ?? [])],\n [readPermissions, exportPermissions]\n )\n );\n\n const [{ query }, setQuery] = useQueryParams<{\n id?: AuditLog['id'];\n filters?: unknown;\n _q?: unknown;\n }>();\n\n const openLog = (id: AuditLog['id']) =>\n setQuery(withEncodedUserParams(query, { id }), 'push', true);\n const closeLog = () => setQuery(withEncodedUserParams(query, { id: undefined }), 'push', true);\n const { exportAuditLogs, downloadExport, dismissExport, isExporting, progress, exportResult } =\n useExportAuditLogs();\n\n const [usersPageSize, setUsersPageSize] = React.useState(USERS_PAGE_SIZE);\n const {\n auditLogs,\n users,\n usersPagination,\n isLoadingUsers,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n usersPageSize,\n });\n\n const { page = 1, pageCount = 1 } = usersPagination ?? {};\n const hasMoreUsers = page < pageCount;\n\n const handleLoadMoreUsers = () => {\n if (hasMoreUsers) {\n setUsersPageSize((prevPageSize) => prevPageSize + USERS_PAGE_SIZE);\n }\n };\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({\n formatMessage,\n users,\n usersFilter: {\n loading: isLoadingUsers,\n hasMoreItems: hasMoreUsers,\n onLoadMore: handleLoadMoreUsers,\n },\n });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // System actions, such as a scheduled release publish, have no user\n cellFormatter: ({ user }) => (user ? user.displayName : '-'),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n const totalEntries = auditLogs?.pagination?.total;\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n primaryAction={\n canExportAuditLogs && (\n <Button\n startIcon={<Download />}\n loading={isExporting}\n disabled={isLoading || totalEntries === 0}\n onClick={() => exportAuditLogs(query?.filters, totalEntries ?? 0)}\n >\n {formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export',\n defaultMessage: 'Export as CSV',\n })}\n </Button>\n )\n }\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => openLog(log.id)}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => openLog(log.id)}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && <Modal handleClose={closeLog} logId={query.id.toString()} />}\n <ExportCard\n progress={progress}\n exportResult={exportResult}\n onDownload={downloadExport}\n onDismiss={dismissExport}\n />\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["USERS_PAGE_SIZE","ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","readPermissions","auditLogs","read","exportPermissions","export","allowedActions","canRead","canReadAuditLogs","canExport","canExportAuditLogs","isLoading","isLoadingRBAC","useRBAC","React","useMemo","query","setQuery","useQueryParams","openLog","id","withEncodedUserParams","closeLog","undefined","exportAuditLogs","downloadExport","dismissExport","isExporting","progress","exportResult","useExportAuditLogs","usersPageSize","setUsersPageSize","useState","users","usersPagination","isLoadingUsers","isLoadingData","hasError","useAuditLogsData","page","pageCount","hasMoreUsers","handleLoadMoreUsers","prevPageSize","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","usersFilter","loading","hasMoreItems","onLoadMore","headers","name","label","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","totalEntries","pagination","total","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","primaryAction","Button","startIcon","Download","disabled","onClick","filters","Action","startActions","Filters","Root","options","Trigger","Popover","zIndex","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","PageSize","Links","Modal","handleClose","logId","toString","ExportCard","onDownload","onDismiss","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Typography, Flex, IconButton } from '@strapi/design-system';
|
|
4
|
-
import { Eye } from '@strapi/icons';
|
|
3
|
+
import { Button, Typography, Flex, IconButton } from '@strapi/design-system';
|
|
4
|
+
import { Download, Eye } from '@strapi/icons';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
6
|
import { Filters } from '../../../../../../../admin/src/components/Filters.mjs';
|
|
7
7
|
import { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout.mjs';
|
|
@@ -11,8 +11,10 @@ import { Table } from '../../../../../../../admin/src/components/Table.mjs';
|
|
|
11
11
|
import { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks.mjs';
|
|
12
12
|
import { useQueryParams, withEncodedUserParams } from '../../../../../../../admin/src/hooks/useQueryParams.mjs';
|
|
13
13
|
import { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC.mjs';
|
|
14
|
+
import { ExportCard } from './components/ExportCard.mjs';
|
|
14
15
|
import { Modal } from './components/Modal.mjs';
|
|
15
16
|
import { useAuditLogsData } from './hooks/useAuditLogsData.mjs';
|
|
17
|
+
import { useExportAuditLogs } from './hooks/useExportAuditLogs.mjs';
|
|
16
18
|
import { useFormatTimeStamp } from './hooks/useFormatTimeStamp.mjs';
|
|
17
19
|
import { getDefaultMessage } from './utils/getActionTypesDefaultMessages.mjs';
|
|
18
20
|
import { getDisplayedFilters } from './utils/getDisplayedFilters.mjs';
|
|
@@ -21,7 +23,15 @@ const USERS_PAGE_SIZE = 10;
|
|
|
21
23
|
const ListPage = ()=>{
|
|
22
24
|
const { formatMessage } = useIntl();
|
|
23
25
|
const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings);
|
|
24
|
-
const
|
|
26
|
+
const readPermissions = permissions?.auditLogs?.read;
|
|
27
|
+
const exportPermissions = permissions?.auditLogs?.export;
|
|
28
|
+
const { allowedActions: { canRead: canReadAuditLogs, canExport: canExportAuditLogs }, isLoading: isLoadingRBAC } = useRBAC(React.useMemo(()=>[
|
|
29
|
+
...readPermissions ?? [],
|
|
30
|
+
...exportPermissions ?? []
|
|
31
|
+
], [
|
|
32
|
+
readPermissions,
|
|
33
|
+
exportPermissions
|
|
34
|
+
]));
|
|
25
35
|
const [{ query }, setQuery] = useQueryParams();
|
|
26
36
|
const openLog = (id)=>setQuery(withEncodedUserParams(query, {
|
|
27
37
|
id
|
|
@@ -29,6 +39,7 @@ const ListPage = ()=>{
|
|
|
29
39
|
const closeLog = ()=>setQuery(withEncodedUserParams(query, {
|
|
30
40
|
id: undefined
|
|
31
41
|
}), 'push', true);
|
|
42
|
+
const { exportAuditLogs, downloadExport, dismissExport, isExporting, progress, exportResult } = useExportAuditLogs();
|
|
32
43
|
const [usersPageSize, setUsersPageSize] = React.useState(USERS_PAGE_SIZE);
|
|
33
44
|
const { auditLogs, users, usersPagination, isLoadingUsers, isLoading: isLoadingData, hasError } = useAuditLogsData({
|
|
34
45
|
canReadAuditLogs,
|
|
@@ -75,8 +86,8 @@ const ListPage = ()=>{
|
|
|
75
86
|
defaultMessage: 'User'
|
|
76
87
|
}),
|
|
77
88
|
sortable: false,
|
|
78
|
-
//
|
|
79
|
-
cellFormatter: ({ user })=>user ? user.displayName : ''
|
|
89
|
+
// System actions, such as a scheduled release publish, have no user
|
|
90
|
+
cellFormatter: ({ user })=>user ? user.displayName : '-'
|
|
80
91
|
}
|
|
81
92
|
];
|
|
82
93
|
if (hasError) {
|
|
@@ -84,6 +95,7 @@ const ListPage = ()=>{
|
|
|
84
95
|
}
|
|
85
96
|
const isLoading = isLoadingData || isLoadingRBAC;
|
|
86
97
|
const { results = [] } = auditLogs ?? {};
|
|
98
|
+
const totalEntries = auditLogs?.pagination?.total;
|
|
87
99
|
return /*#__PURE__*/ jsxs(Page.Main, {
|
|
88
100
|
"aria-busy": isLoading,
|
|
89
101
|
children: [
|
|
@@ -106,6 +118,16 @@ const ListPage = ()=>{
|
|
|
106
118
|
subtitle: formatMessage({
|
|
107
119
|
id: 'Settings.permissions.auditLogs.listview.header.subtitle',
|
|
108
120
|
defaultMessage: 'Logs of all the activities that happened in your environment'
|
|
121
|
+
}),
|
|
122
|
+
primaryAction: canExportAuditLogs && /*#__PURE__*/ jsx(Button, {
|
|
123
|
+
startIcon: /*#__PURE__*/ jsx(Download, {}),
|
|
124
|
+
loading: isExporting,
|
|
125
|
+
disabled: isLoading || totalEntries === 0,
|
|
126
|
+
onClick: ()=>exportAuditLogs(query?.filters, totalEntries ?? 0),
|
|
127
|
+
children: formatMessage({
|
|
128
|
+
id: 'Settings.permissions.auditLogs.listview.export',
|
|
129
|
+
defaultMessage: 'Export as CSV'
|
|
130
|
+
})
|
|
109
131
|
})
|
|
110
132
|
}),
|
|
111
133
|
/*#__PURE__*/ jsx(Layouts.Action, {
|
|
@@ -214,6 +236,12 @@ const ListPage = ()=>{
|
|
|
214
236
|
query?.id && /*#__PURE__*/ jsx(Modal, {
|
|
215
237
|
handleClose: closeLog,
|
|
216
238
|
logId: query.id.toString()
|
|
239
|
+
}),
|
|
240
|
+
/*#__PURE__*/ jsx(ExportCard, {
|
|
241
|
+
progress: progress,
|
|
242
|
+
exportResult: exportResult,
|
|
243
|
+
onDownload: downloadExport,
|
|
244
|
+
onDismiss: dismissExport
|
|
217
245
|
})
|
|
218
246
|
]
|
|
219
247
|
});
|
|
@@ -1 +1 @@
|
|
|
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 {\n useQueryParams,\n withEncodedUserParams,\n} from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst USERS_PAGE_SIZE = 10;\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs },\n isLoading: isLoadingRBAC,\n } = useRBAC(permissions?.auditLogs?.read || []);\n\n const [{ query }, setQuery] = useQueryParams<{\n id?: AuditLog['id'];\n filters?: unknown;\n _q?: unknown;\n }>();\n\n const openLog = (id: AuditLog['id']) =>\n setQuery(withEncodedUserParams(query, { id }), 'push', true);\n const closeLog = () => setQuery(withEncodedUserParams(query, { id: undefined }), 'push', true);\n const [usersPageSize, setUsersPageSize] = React.useState(USERS_PAGE_SIZE);\n const {\n auditLogs,\n users,\n usersPagination,\n isLoadingUsers,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n usersPageSize,\n });\n\n const { page = 1, pageCount = 1 } = usersPagination ?? {};\n const hasMoreUsers = page < pageCount;\n\n const handleLoadMoreUsers = () => {\n if (hasMoreUsers) {\n setUsersPageSize((prevPageSize) => prevPageSize + USERS_PAGE_SIZE);\n }\n };\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({\n formatMessage,\n users,\n usersFilter: {\n loading: isLoadingUsers,\n hasMoreItems: hasMoreUsers,\n onLoadMore: handleLoadMoreUsers,\n },\n });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => openLog(log.id)}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => openLog(log.id)}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && <Modal handleClose={closeLog} logId={query.id.toString()} />}\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["USERS_PAGE_SIZE","ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canReadAuditLogs","isLoading","isLoadingRBAC","useRBAC","auditLogs","read","query","setQuery","useQueryParams","openLog","id","withEncodedUserParams","closeLog","undefined","usersPageSize","setUsersPageSize","React","useState","users","usersPagination","isLoadingUsers","isLoadingData","hasError","useAuditLogsData","page","pageCount","hasMoreUsers","handleLoadMoreUsers","prevPageSize","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","usersFilter","loading","hasMoreItems","onLoadMore","headers","name","label","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","Action","startActions","Filters","Root","options","Trigger","Popover","zIndex","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","onClick","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","pagination","PageSize","Links","Modal","handleClose","logId","toString","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Download, Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport {\n useQueryParams,\n withEncodedUserParams,\n} from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { ExportCard } from './components/ExportCard';\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useExportAuditLogs } from './hooks/useExportAuditLogs';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst USERS_PAGE_SIZE = 10;\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const readPermissions = permissions?.auditLogs?.read;\n const exportPermissions = permissions?.auditLogs?.export;\n const {\n allowedActions: { canRead: canReadAuditLogs, canExport: canExportAuditLogs },\n isLoading: isLoadingRBAC,\n } = useRBAC(\n React.useMemo(\n () => [...(readPermissions ?? []), ...(exportPermissions ?? [])],\n [readPermissions, exportPermissions]\n )\n );\n\n const [{ query }, setQuery] = useQueryParams<{\n id?: AuditLog['id'];\n filters?: unknown;\n _q?: unknown;\n }>();\n\n const openLog = (id: AuditLog['id']) =>\n setQuery(withEncodedUserParams(query, { id }), 'push', true);\n const closeLog = () => setQuery(withEncodedUserParams(query, { id: undefined }), 'push', true);\n const { exportAuditLogs, downloadExport, dismissExport, isExporting, progress, exportResult } =\n useExportAuditLogs();\n\n const [usersPageSize, setUsersPageSize] = React.useState(USERS_PAGE_SIZE);\n const {\n auditLogs,\n users,\n usersPagination,\n isLoadingUsers,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n usersPageSize,\n });\n\n const { page = 1, pageCount = 1 } = usersPagination ?? {};\n const hasMoreUsers = page < pageCount;\n\n const handleLoadMoreUsers = () => {\n if (hasMoreUsers) {\n setUsersPageSize((prevPageSize) => prevPageSize + USERS_PAGE_SIZE);\n }\n };\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({\n formatMessage,\n users,\n usersFilter: {\n loading: isLoadingUsers,\n hasMoreItems: hasMoreUsers,\n onLoadMore: handleLoadMoreUsers,\n },\n });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // System actions, such as a scheduled release publish, have no user\n cellFormatter: ({ user }) => (user ? user.displayName : '-'),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n const totalEntries = auditLogs?.pagination?.total;\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n primaryAction={\n canExportAuditLogs && (\n <Button\n startIcon={<Download />}\n loading={isExporting}\n disabled={isLoading || totalEntries === 0}\n onClick={() => exportAuditLogs(query?.filters, totalEntries ?? 0)}\n >\n {formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export',\n defaultMessage: 'Export as CSV',\n })}\n </Button>\n )\n }\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => openLog(log.id)}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => openLog(log.id)}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && <Modal handleClose={closeLog} logId={query.id.toString()} />}\n <ExportCard\n progress={progress}\n exportResult={exportResult}\n onDownload={downloadExport}\n onDismiss={dismissExport}\n />\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["USERS_PAGE_SIZE","ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","readPermissions","auditLogs","read","exportPermissions","export","allowedActions","canRead","canReadAuditLogs","canExport","canExportAuditLogs","isLoading","isLoadingRBAC","useRBAC","React","useMemo","query","setQuery","useQueryParams","openLog","id","withEncodedUserParams","closeLog","undefined","exportAuditLogs","downloadExport","dismissExport","isExporting","progress","exportResult","useExportAuditLogs","usersPageSize","setUsersPageSize","useState","users","usersPagination","isLoadingUsers","isLoadingData","hasError","useAuditLogsData","page","pageCount","hasMoreUsers","handleLoadMoreUsers","prevPageSize","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","usersFilter","loading","hasMoreItems","onLoadMore","headers","name","label","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","totalEntries","pagination","total","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","primaryAction","Button","startIcon","Download","disabled","onClick","filters","Action","startActions","Filters","Root","options","Trigger","Popover","zIndex","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","PageSize","Links","Modal","handleClose","logId","toString","ExportCard","onDownload","onDismiss","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var designSystem = require('@strapi/design-system');
|
|
5
|
+
var icons = require('@strapi/icons');
|
|
6
|
+
var reactIntl = require('react-intl');
|
|
7
|
+
var reactRouterDom = require('react-router-dom');
|
|
8
|
+
var styledComponents = require('styled-components');
|
|
9
|
+
var useWarnIfUnsavedChanges = require('../../../../../../../../admin/src/hooks/useWarnIfUnsavedChanges.js');
|
|
10
|
+
|
|
11
|
+
const ExportProgressBar = styledComponents.styled(designSystem.ProgressBar)`
|
|
12
|
+
width: 100%;
|
|
13
|
+
background-color: ${({ theme })=>theme.colors.neutral150};
|
|
14
|
+
|
|
15
|
+
> div {
|
|
16
|
+
background-color: ${({ theme })=>theme.colors.primary600};
|
|
17
|
+
}
|
|
18
|
+
`;
|
|
19
|
+
const ExportCard = ({ progress, exportResult, onDownload, onDismiss })=>{
|
|
20
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
21
|
+
const isExportPending = Boolean(progress || exportResult);
|
|
22
|
+
useWarnIfUnsavedChanges.useWarnIfUnsavedChanges(isExportPending);
|
|
23
|
+
const blocker = reactRouterDom.useBlocker(({ currentLocation, nextLocation })=>isExportPending && currentLocation.pathname !== nextLocation.pathname);
|
|
24
|
+
if (!progress && !exportResult) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const progressCaption = progress ? formatMessage({
|
|
28
|
+
id: 'Settings.permissions.auditLogs.listview.export.progress.caption',
|
|
29
|
+
defaultMessage: 'Preparing your export - {fetched, number} out of {total, plural, one {# event} other {# events}}'
|
|
30
|
+
}, {
|
|
31
|
+
fetched: progress.fetched,
|
|
32
|
+
total: progress.total
|
|
33
|
+
}) : null;
|
|
34
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Portal, {
|
|
35
|
+
children: [
|
|
36
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
37
|
+
position: "fixed",
|
|
38
|
+
bottom: 4,
|
|
39
|
+
right: 4,
|
|
40
|
+
zIndex: 200,
|
|
41
|
+
width: "32rem",
|
|
42
|
+
role: "status",
|
|
43
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
44
|
+
direction: "column",
|
|
45
|
+
alignItems: "stretch",
|
|
46
|
+
gap: 2,
|
|
47
|
+
padding: 4,
|
|
48
|
+
hasRadius: true,
|
|
49
|
+
background: "neutral0",
|
|
50
|
+
borderColor: "neutral150",
|
|
51
|
+
shadow: "popupShadow",
|
|
52
|
+
children: progress ? /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
53
|
+
children: [
|
|
54
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
55
|
+
fontWeight: "bold",
|
|
56
|
+
children: formatMessage({
|
|
57
|
+
id: 'Settings.permissions.auditLogs.listview.export.progress.title',
|
|
58
|
+
defaultMessage: 'Exporting audit logs'
|
|
59
|
+
})
|
|
60
|
+
}),
|
|
61
|
+
/*#__PURE__*/ jsxRuntime.jsx(ExportProgressBar, {
|
|
62
|
+
size: "S",
|
|
63
|
+
value: progress.total > 0 ? Math.round(progress.fetched / progress.total * 100) : 0,
|
|
64
|
+
"aria-label": progressCaption ?? undefined
|
|
65
|
+
}),
|
|
66
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
67
|
+
variant: "pi",
|
|
68
|
+
textColor: "neutral600",
|
|
69
|
+
children: progressCaption
|
|
70
|
+
})
|
|
71
|
+
]
|
|
72
|
+
}) : exportResult && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
73
|
+
children: [
|
|
74
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
75
|
+
gap: 2,
|
|
76
|
+
children: [
|
|
77
|
+
/*#__PURE__*/ jsxRuntime.jsx(icons.CheckCircle, {
|
|
78
|
+
fill: "success500"
|
|
79
|
+
}),
|
|
80
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
81
|
+
fontWeight: "bold",
|
|
82
|
+
children: formatMessage({
|
|
83
|
+
id: 'Settings.permissions.auditLogs.listview.export.ready.title',
|
|
84
|
+
defaultMessage: 'Export ready'
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
]
|
|
88
|
+
}),
|
|
89
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
90
|
+
variant: "pi",
|
|
91
|
+
textColor: "neutral600",
|
|
92
|
+
children: exportResult.fileName
|
|
93
|
+
}),
|
|
94
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
95
|
+
gap: 2,
|
|
96
|
+
children: [
|
|
97
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
98
|
+
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Download, {}),
|
|
99
|
+
onClick: onDownload,
|
|
100
|
+
children: formatMessage({
|
|
101
|
+
id: 'Settings.permissions.auditLogs.listview.export.ready.download',
|
|
102
|
+
defaultMessage: 'Download CSV'
|
|
103
|
+
})
|
|
104
|
+
}),
|
|
105
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
106
|
+
variant: "tertiary",
|
|
107
|
+
onClick: onDismiss,
|
|
108
|
+
children: formatMessage({
|
|
109
|
+
id: 'app.components.Button.cancel',
|
|
110
|
+
defaultMessage: 'Cancel'
|
|
111
|
+
})
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
})
|
|
115
|
+
]
|
|
116
|
+
})
|
|
117
|
+
})
|
|
118
|
+
}),
|
|
119
|
+
blocker.state === 'blocked' && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
|
|
120
|
+
open: true,
|
|
121
|
+
onOpenChange: (isOpen)=>{
|
|
122
|
+
if (!isOpen) {
|
|
123
|
+
blocker.reset();
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Content, {
|
|
127
|
+
children: [
|
|
128
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Header, {
|
|
129
|
+
children: formatMessage({
|
|
130
|
+
id: 'app.components.ConfirmDialog.title',
|
|
131
|
+
defaultMessage: 'Confirmation'
|
|
132
|
+
})
|
|
133
|
+
}),
|
|
134
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Body, {
|
|
135
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(icons.WarningCircle, {
|
|
136
|
+
width: "24px",
|
|
137
|
+
height: "24px",
|
|
138
|
+
fill: "danger600"
|
|
139
|
+
}),
|
|
140
|
+
textAlign: "center",
|
|
141
|
+
children: formatMessage({
|
|
142
|
+
id: 'Settings.permissions.auditLogs.listview.export.leave',
|
|
143
|
+
defaultMessage: 'Are you sure you want to leave? Your ongoing export will be canceled.'
|
|
144
|
+
})
|
|
145
|
+
}),
|
|
146
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Footer, {
|
|
147
|
+
children: [
|
|
148
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Cancel, {
|
|
149
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
150
|
+
variant: "tertiary",
|
|
151
|
+
fullWidth: true,
|
|
152
|
+
children: formatMessage({
|
|
153
|
+
id: 'app.components.Button.cancel',
|
|
154
|
+
defaultMessage: 'Cancel'
|
|
155
|
+
})
|
|
156
|
+
})
|
|
157
|
+
}),
|
|
158
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
159
|
+
onClick: ()=>blocker.proceed(),
|
|
160
|
+
variant: "danger-light",
|
|
161
|
+
fullWidth: true,
|
|
162
|
+
children: formatMessage({
|
|
163
|
+
id: 'app.components.Button.confirm',
|
|
164
|
+
defaultMessage: 'Confirm'
|
|
165
|
+
})
|
|
166
|
+
})
|
|
167
|
+
]
|
|
168
|
+
})
|
|
169
|
+
]
|
|
170
|
+
})
|
|
171
|
+
})
|
|
172
|
+
]
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
exports.ExportCard = ExportCard;
|
|
177
|
+
//# sourceMappingURL=ExportCard.js.map
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportCard.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.tsx"],"sourcesContent":["import { Box, Button, Dialog, Flex, Portal, ProgressBar, Typography } from '@strapi/design-system';\nimport { CheckCircle, Download, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useBlocker } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useWarnIfUnsavedChanges } from '../../../../../../../../admin/src/hooks/useWarnIfUnsavedChanges';\n\nimport type { ExportProgress, ExportResult } from '../hooks/useExportAuditLogs';\n\nconst ExportProgressBar = styled(ProgressBar)`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral150};\n\n > div {\n background-color: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\ninterface ExportCardProps {\n progress: ExportProgress | null;\n exportResult: ExportResult | null;\n onDownload: () => void;\n onDismiss: () => void;\n}\n\nconst ExportCard = ({ progress, exportResult, onDownload, onDismiss }: ExportCardProps) => {\n const { formatMessage } = useIntl();\n\n const isExportPending = Boolean(progress || exportResult);\n\n useWarnIfUnsavedChanges(isExportPending);\n\n const blocker = useBlocker(\n ({ currentLocation, nextLocation }) =>\n isExportPending && currentLocation.pathname !== nextLocation.pathname\n );\n\n if (!progress && !exportResult) {\n return null;\n }\n\n const progressCaption = progress\n ? formatMessage(\n {\n id: 'Settings.permissions.auditLogs.listview.export.progress.caption',\n defaultMessage:\n 'Preparing your export - {fetched, number} out of {total, plural, one {# event} other {# events}}',\n },\n { fetched: progress.fetched, total: progress.total }\n )\n : null;\n\n return (\n <Portal>\n <Box position=\"fixed\" bottom={4} right={4} zIndex={200} width=\"32rem\" role=\"status\">\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={2}\n padding={4}\n hasRadius\n background=\"neutral0\"\n borderColor=\"neutral150\"\n shadow=\"popupShadow\"\n >\n {progress ? (\n <>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.progress.title',\n defaultMessage: 'Exporting audit logs',\n })}\n </Typography>\n <ExportProgressBar\n size=\"S\"\n value={\n progress.total > 0 ? Math.round((progress.fetched / progress.total) * 100) : 0\n }\n aria-label={progressCaption ?? undefined}\n />\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {progressCaption}\n </Typography>\n </>\n ) : (\n exportResult && (\n <>\n <Flex gap={2}>\n <CheckCircle fill=\"success500\" />\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.ready.title',\n defaultMessage: 'Export ready',\n })}\n </Typography>\n </Flex>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {exportResult.fileName}\n </Typography>\n <Flex gap={2}>\n <Button startIcon={<Download />} onClick={onDownload}>\n {formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.ready.download',\n defaultMessage: 'Download CSV',\n })}\n </Button>\n <Button variant=\"tertiary\" onClick={onDismiss}>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Flex>\n </>\n )\n )}\n </Flex>\n </Box>\n {blocker.state === 'blocked' && (\n <Dialog.Root\n open\n onOpenChange={(isOpen) => {\n if (!isOpen) {\n blocker.reset();\n }\n }}\n >\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n {formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.leave',\n defaultMessage:\n 'Are you sure you want to leave? Your ongoing export will be canceled.',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button onClick={() => blocker.proceed()} variant=\"danger-light\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n )}\n </Portal>\n );\n};\n\nexport { ExportCard };\nexport type { ExportCardProps };\n"],"names":["ExportProgressBar","styled","ProgressBar","theme","colors","neutral150","primary600","ExportCard","progress","exportResult","onDownload","onDismiss","formatMessage","useIntl","isExportPending","Boolean","useWarnIfUnsavedChanges","blocker","useBlocker","currentLocation","nextLocation","pathname","progressCaption","id","defaultMessage","fetched","total","_jsxs","Portal","_jsx","Box","position","bottom","right","zIndex","width","role","Flex","direction","alignItems","gap","padding","hasRadius","background","borderColor","shadow","_Fragment","Typography","fontWeight","size","value","Math","round","aria-label","undefined","variant","textColor","CheckCircle","fill","fileName","Button","startIcon","Download","onClick","state","Dialog","Root","open","onOpenChange","isOpen","reset","Content","Header","Body","icon","WarningCircle","height","textAlign","Footer","Cancel","fullWidth","proceed"],"mappings":";;;;;;;;;;AAUA,MAAMA,iBAAAA,GAAoBC,uBAAAA,CAAOC,wBAAAA,CAAY;;oBAEzB,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;;sBAGvC,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACE,UAAU,CAAC;;AAE/D,CAAC;AASD,MAAMC,UAAAA,GAAa,CAAC,EAAEC,QAAQ,EAAEC,YAAY,EAAEC,UAAU,EAAEC,SAAS,EAAmB,GAAA;IACpF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,MAAMC,eAAAA,GAAkBC,QAAQP,QAAAA,IAAYC,YAAAA,CAAAA;IAE5CO,+CAAAA,CAAwBF,eAAAA,CAAAA;AAExB,IAAA,MAAMG,OAAAA,GAAUC,yBAAAA,CACd,CAAC,EAAEC,eAAe,EAAEC,YAAY,EAAE,GAChCN,eAAAA,IAAmBK,eAAAA,CAAgBE,QAAQ,KAAKD,aAAaC,QAAQ,CAAA;IAGzE,IAAI,CAACb,QAAAA,IAAY,CAACC,YAAAA,EAAc;QAC9B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMa,eAAAA,GAAkBd,WACpBI,aAAAA,CACE;QACEW,EAAAA,EAAI,iEAAA;QACJC,cAAAA,EACE;KACJ,EACA;AAAEC,QAAAA,OAAAA,EAASjB,SAASiB,OAAO;AAAEC,QAAAA,KAAAA,EAAOlB,SAASkB;KAAM,CAAA,GAErD,IAAA;AAEJ,IAAA,qBACEC,eAAA,CAACC,mBAAAA,EAAAA;;0BACCC,cAAA,CAACC,gBAAAA,EAAAA;gBAAIC,QAAAA,EAAS,OAAA;gBAAQC,MAAAA,EAAQ,CAAA;gBAAGC,KAAAA,EAAO,CAAA;gBAAGC,MAAAA,EAAQ,GAAA;gBAAKC,KAAAA,EAAM,OAAA;gBAAQC,IAAAA,EAAK,QAAA;AACzE,gBAAA,QAAA,gBAAAP,cAAA,CAACQ,iBAAAA,EAAAA;oBACCC,SAAAA,EAAU,QAAA;oBACVC,UAAAA,EAAW,SAAA;oBACXC,GAAAA,EAAK,CAAA;oBACLC,OAAAA,EAAS,CAAA;oBACTC,SAAS,EAAA,IAAA;oBACTC,UAAAA,EAAW,UAAA;oBACXC,WAAAA,EAAY,YAAA;oBACZC,MAAAA,EAAO,aAAA;8BAENrC,QAAAA,iBACCmB,eAAA,CAAAmB,mBAAA,EAAA;;0CACEjB,cAAA,CAACkB,uBAAAA,EAAAA;gCAAWC,UAAAA,EAAW,MAAA;0CACpBpC,aAAAA,CAAc;oCACbW,EAAAA,EAAI,+DAAA;oCACJC,cAAAA,EAAgB;AAClB,iCAAA;;0CAEFK,cAAA,CAAC7B,iBAAAA,EAAAA;gCACCiD,IAAAA,EAAK,GAAA;AACLC,gCAAAA,KAAAA,EACE1C,QAAAA,CAASkB,KAAK,GAAG,CAAA,GAAIyB,KAAKC,KAAK,CAAC,QAAC5C,CAASiB,OAAO,GAAGjB,QAAAA,CAASkB,KAAK,GAAI,GAAA,CAAA,GAAO,CAAA;AAE/E2B,gCAAAA,YAAAA,EAAY/B,eAAAA,IAAmBgC;;0CAEjCzB,cAAA,CAACkB,uBAAAA,EAAAA;gCAAWQ,OAAAA,EAAQ,IAAA;gCAAKC,SAAAA,EAAU,YAAA;AAChClC,gCAAAA,QAAAA,EAAAA;;;yBAILb,YAAAA,kBACEkB,eAAA,CAAAmB,mBAAA,EAAA;;0CACEnB,eAAA,CAACU,iBAAAA,EAAAA;gCAAKG,GAAAA,EAAK,CAAA;;kDACTX,cAAA,CAAC4B,iBAAAA,EAAAA;wCAAYC,IAAAA,EAAK;;kDAClB7B,cAAA,CAACkB,uBAAAA,EAAAA;wCAAWC,UAAAA,EAAW,MAAA;kDACpBpC,aAAAA,CAAc;4CACbW,EAAAA,EAAI,4DAAA;4CACJC,cAAAA,EAAgB;AAClB,yCAAA;;;;0CAGJK,cAAA,CAACkB,uBAAAA,EAAAA;gCAAWQ,OAAAA,EAAQ,IAAA;gCAAKC,SAAAA,EAAU,YAAA;AAChC/C,gCAAAA,QAAAA,EAAAA,YAAAA,CAAakD;;0CAEhBhC,eAAA,CAACU,iBAAAA,EAAAA;gCAAKG,GAAAA,EAAK,CAAA;;kDACTX,cAAA,CAAC+B,mBAAAA,EAAAA;AAAOC,wCAAAA,SAAAA,gBAAWhC,cAAA,CAACiC,cAAAA,EAAAA,EAAAA,CAAAA;wCAAaC,OAAAA,EAASrD,UAAAA;kDACvCE,aAAAA,CAAc;4CACbW,EAAAA,EAAI,+DAAA;4CACJC,cAAAA,EAAgB;AAClB,yCAAA;;kDAEFK,cAAA,CAAC+B,mBAAAA,EAAAA;wCAAOL,OAAAA,EAAQ,UAAA;wCAAWQ,OAAAA,EAASpD,SAAAA;kDACjCC,aAAAA,CAAc;4CACbW,EAAAA,EAAI,8BAAA;4CACJC,cAAAA,EAAgB;AAClB,yCAAA;;;;;;;;AAQbP,YAAAA,OAAAA,CAAQ+C,KAAK,KAAK,SAAA,kBACjBnC,cAAA,CAACoC,oBAAOC,IAAI,EAAA;gBACVC,IAAI,EAAA,IAAA;AACJC,gBAAAA,YAAAA,EAAc,CAACC,MAAAA,GAAAA;AACb,oBAAA,IAAI,CAACA,MAAAA,EAAQ;AACXpD,wBAAAA,OAAAA,CAAQqD,KAAK,EAAA;AACf,oBAAA;AACF,gBAAA,CAAA;wCAEA3C,eAAA,CAACsC,oBAAOM,OAAO,EAAA;;AACb,sCAAA1C,cAAA,CAACoC,oBAAOO,MAAM,EAAA;sCACX5D,aAAAA,CAAc;gCACbW,EAAAA,EAAI,oCAAA;gCACJC,cAAAA,EAAgB;AAClB,6BAAA;;AAEF,sCAAAK,cAAA,CAACoC,oBAAOQ,IAAI,EAAA;AACVC,4BAAAA,IAAAA,gBAAM7C,cAAA,CAAC8C,mBAAAA,EAAAA;gCAAcxC,KAAAA,EAAM,MAAA;gCAAOyC,MAAAA,EAAO,MAAA;gCAAOlB,IAAAA,EAAK;;4BACrDmB,SAAAA,EAAU,QAAA;sCAETjE,aAAAA,CAAc;gCACbW,EAAAA,EAAI,sDAAA;gCACJC,cAAAA,EACE;AACJ,6BAAA;;AAEF,sCAAAG,eAAA,CAACsC,oBAAOa,MAAM,EAAA;;AACZ,8CAAAjD,cAAA,CAACoC,oBAAOc,MAAM,EAAA;AACZ,oCAAA,QAAA,gBAAAlD,cAAA,CAAC+B,mBAAAA,EAAAA;wCAAOL,OAAAA,EAAQ,UAAA;wCAAWyB,SAAS,EAAA,IAAA;kDACjCpE,aAAAA,CAAc;4CACbW,EAAAA,EAAI,8BAAA;4CACJC,cAAAA,EAAgB;AAClB,yCAAA;;;8CAGJK,cAAA,CAAC+B,mBAAAA,EAAAA;oCAAOG,OAAAA,EAAS,IAAM9C,QAAQgE,OAAO,EAAA;oCAAI1B,OAAAA,EAAQ,cAAA;oCAAeyB,SAAS,EAAA,IAAA;8CACvEpE,aAAAA,CAAc;wCACbW,EAAAA,EAAI,+BAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA;;;;;;;;;AAQhB;;;;"}
|