@strapi/admin 4.5.4 → 4.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/admin/src/components/AuthenticatedApp/index.js +2 -13
  2. package/admin/src/content-manager/components/DynamicZone/components/DynamicComponent.js +1 -1
  3. package/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +3 -39
  4. package/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js +1 -5
  5. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/recursivelyFindPathsBasedOnCondition.js +1 -8
  6. package/admin/src/content-manager/components/NonRepeatableComponent/index.js +0 -4
  7. package/admin/src/content-manager/components/RelationInput/RelationInput.js +9 -4
  8. package/admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js +1 -1
  9. package/admin/src/content-manager/components/RepeatableComponent/DraggedItem/index.js +0 -4
  10. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +1 -1
  11. package/admin/src/content-manager/components/Wysiwyg/Editor.js +1 -1
  12. package/admin/src/content-manager/hooks/useLazyComponents/index.js +15 -40
  13. package/admin/src/content-manager/sharedReducers/crudReducer/actions.js +0 -5
  14. package/admin/src/content-manager/sharedReducers/crudReducer/constants.js +0 -2
  15. package/admin/src/content-manager/sharedReducers/crudReducer/reducer.js +0 -7
  16. package/admin/src/core/utils/axiosInstance.js +2 -4
  17. package/admin/src/hooks/index.js +0 -1
  18. package/admin/src/hooks/useSettingsMenu/init.js +7 -0
  19. package/admin/src/pages/App/index.js +13 -20
  20. package/admin/src/pages/HomePage/SocialLinks.js +4 -4
  21. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +3 -2
  22. package/admin/src/pages/SettingsPage/pages/AuditLogs/ListView/DynamicTable/TableRows/CellValue.js +19 -0
  23. package/admin/src/pages/SettingsPage/pages/AuditLogs/ListView/DynamicTable/TableRows/index.js +65 -0
  24. package/admin/src/pages/SettingsPage/pages/AuditLogs/ListView/ModalDialog/ActionItem.js +25 -0
  25. package/admin/src/pages/SettingsPage/pages/AuditLogs/ListView/ModalDialog/index.js +76 -0
  26. package/admin/src/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useFormatTimeStamp.js +24 -0
  27. package/admin/src/pages/SettingsPage/pages/AuditLogs/ListView/index.js +84 -0
  28. package/admin/src/pages/SettingsPage/pages/AuditLogs/ListView/utils/tableHeaders.js +37 -0
  29. package/admin/src/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js +12 -0
  30. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +18 -23
  31. package/admin/src/pages/SettingsPage/utils/defaultRoutes.js +11 -0
  32. package/admin/src/permissions/defaultPermissions.js +4 -0
  33. package/admin/src/translations/en.json +7 -0
  34. package/admin/src/translations/tr.json +5 -485
  35. package/admin/src/utils/index.js +0 -1
  36. package/build/{1233.802422fa.chunk.js → 1233.80b05d66.chunk.js} +61 -61
  37. package/build/1920.74a262e7.chunk.js +245 -0
  38. package/build/2438.61291207.chunk.js +2183 -0
  39. package/build/2517.9b4940f3.chunk.js +117 -0
  40. package/build/4306.f03c2b46.chunk.js +98 -0
  41. package/build/4318.7931eee7.chunk.js +30 -0
  42. package/build/{8176.e929d326.chunk.js → 4986.3820d11d.chunk.js} +3 -3
  43. package/build/{8633.43ec9042.chunk.js → 8633.8da5488a.chunk.js} +1 -1
  44. package/build/Admin-authenticatedApp.ac85652e.chunk.js +80 -0
  45. package/build/{Admin_homePage.8945f71a.chunk.js → Admin_homePage.54e33c2d.chunk.js} +5 -5
  46. package/build/{Admin_marketplace.ed754a4a.chunk.js → Admin_marketplace.8219fda6.chunk.js} +1 -1
  47. package/build/{Admin_profilePage.60ab80bb.chunk.js → Admin_profilePage.e9fcce92.chunk.js} +1 -1
  48. package/build/{Admin_settingsPage.6ef8acc9.chunk.js → Admin_settingsPage.d3f48e9e.chunk.js} +15 -15
  49. package/build/admin-app.77179e07.chunk.js +112 -0
  50. package/build/admin-audit-logs.334ee871.chunk.js +1 -0
  51. package/build/admin-edit-roles-page.23f15909.chunk.js +1 -0
  52. package/build/admin-edit-users.283b49ed.chunk.js +10 -0
  53. package/build/{admin-users.e64fb0f1.chunk.js → admin-users.a0748674.chunk.js} +1 -1
  54. package/build/content-manager.01e04e11.chunk.js +1200 -0
  55. package/build/content-type-builder-translation-tr-json.2e52bc60.chunk.js +1 -0
  56. package/build/content-type-builder.aa4ec633.chunk.js +145 -0
  57. package/build/email-settings-page.d44a57cb.chunk.js +15 -0
  58. package/build/email-translation-tr-json.87f2feb3.chunk.js +1 -0
  59. package/build/en-json.57917cb1.chunk.js +1 -0
  60. package/build/index.html +1 -1
  61. package/build/{main.71f24343.js → main.f31112a5.js} +371 -371
  62. package/build/runtime~main.81f05721.js +2 -0
  63. package/build/sso-settings-page.9f091262.chunk.js +1 -0
  64. package/build/tr-json.9c44ea0c.chunk.js +1 -0
  65. package/build/upload.a73936d9.chunk.js +64 -0
  66. package/build/users-advanced-settings-page.dc23bc56.chunk.js +13 -0
  67. package/build/users-email-settings-page.6541d372.chunk.js +28 -0
  68. package/build/users-permissions-translation-tr-json.cdc49a3c.chunk.js +1 -0
  69. package/build/users-providers-settings-page.e11a2f64.chunk.js +33 -0
  70. package/build/users-roles-settings-page.445e5e16.chunk.js +30 -0
  71. package/build/{webhook-edit-page.1215a6b7.chunk.js → webhook-edit-page.14ad1e6e.chunk.js} +1 -1
  72. package/package.json +11 -11
  73. package/server/controllers/admin.js +0 -2
  74. package/server/routes/admin.js +1 -1
  75. package/server/services/metrics.js +2 -5
  76. package/utils/get-plugins-path.js +3 -17
  77. package/admin/src/hooks/useFetchClient/index.js +0 -23
  78. package/admin/src/utils/fetchClient.js +0 -45
  79. package/admin/src/utils/getFetchClient.js +0 -10
  80. package/admin/src/utils/uniqueAdminHash.js +0 -22
  81. package/build/4306.df40a798.chunk.js +0 -98
  82. package/build/4318.9283c350.chunk.js +0 -30
  83. package/build/5057.195a59ff.chunk.js +0 -65
  84. package/build/8881.c693411a.chunk.js +0 -245
  85. package/build/9161.4a0ab137.chunk.js +0 -2119
  86. package/build/9279.6290c87a.chunk.js +0 -117
  87. package/build/Admin-authenticatedApp.0da578b8.chunk.js +0 -80
  88. package/build/admin-app.a3277e72.chunk.js +0 -112
  89. package/build/admin-edit-roles-page.f407538c.chunk.js +0 -1
  90. package/build/admin-edit-users.5547b126.chunk.js +0 -10
  91. package/build/content-manager.f9630c3b.chunk.js +0 -1197
  92. package/build/content-type-builder-translation-tr-json.949e22eb.chunk.js +0 -1
  93. package/build/content-type-builder.b132b5f4.chunk.js +0 -145
  94. package/build/email-settings-page.c6e62f6b.chunk.js +0 -15
  95. package/build/email-translation-tr-json.8aa034bb.chunk.js +0 -1
  96. package/build/en-json.7dd57947.chunk.js +0 -1
  97. package/build/i18n-translation-tr-json.34ca9d61.chunk.js +0 -1
  98. package/build/runtime~main.1115f82b.js +0 -2
  99. package/build/sso-settings-page.feed2f45.chunk.js +0 -1
  100. package/build/tr-json.eac8bd79.chunk.js +0 -1
  101. package/build/upload-translation-tr-json.b173223a.chunk.js +0 -1
  102. package/build/upload.74540aab.chunk.js +0 -64
  103. package/build/users-advanced-settings-page.0c0b8230.chunk.js +0 -13
  104. package/build/users-email-settings-page.3126ff8c.chunk.js +0 -28
  105. package/build/users-permissions-translation-tr-json.9bebc250.chunk.js +0 -1
  106. package/build/users-providers-settings-page.b7b602e2.chunk.js +0 -33
  107. package/build/users-roles-settings-page.ce5b582d.chunk.js +0 -30
@@ -0,0 +1,65 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useIntl } from 'react-intl';
4
+ import { IconButton } from '@strapi/design-system/IconButton';
5
+ import { Flex } from '@strapi/design-system/Flex';
6
+ import { Typography } from '@strapi/design-system/Typography';
7
+ import { Tbody, Td, Tr } from '@strapi/design-system/Table';
8
+ import Eye from '@strapi/icons/Eye';
9
+ import { onRowClick, stopPropagation } from '@strapi/helper-plugin';
10
+ import CellValue from './CellValue';
11
+
12
+ const TableRows = ({ headers, rows, onModalToggle }) => {
13
+ const { formatMessage } = useIntl();
14
+
15
+ return (
16
+ <Tbody>
17
+ {rows.map((data) => {
18
+ return (
19
+ <Tr
20
+ key={data.id}
21
+ {...onRowClick({
22
+ fn: () => onModalToggle(data.id),
23
+ })}
24
+ >
25
+ {headers.map(({ key, name }) => {
26
+ return (
27
+ <Td key={key}>
28
+ <Typography textColor="neutral800">
29
+ <CellValue type={key} value={data[name]} />
30
+ </Typography>
31
+ </Td>
32
+ );
33
+ })}
34
+
35
+ <Td {...stopPropagation}>
36
+ <Flex justifyContent="end">
37
+ <IconButton
38
+ onClick={() => onModalToggle(data.id)}
39
+ aria-label={formatMessage(
40
+ { id: 'app.component.table.view', defaultMessage: '{target} details' },
41
+ { target: `${data.action} action` }
42
+ )}
43
+ noBorder
44
+ icon={<Eye />}
45
+ />
46
+ </Flex>
47
+ </Td>
48
+ </Tr>
49
+ );
50
+ })}
51
+ </Tbody>
52
+ );
53
+ };
54
+
55
+ TableRows.defaultProps = {
56
+ rows: [],
57
+ };
58
+
59
+ TableRows.propTypes = {
60
+ headers: PropTypes.array.isRequired,
61
+ rows: PropTypes.array,
62
+ onModalToggle: PropTypes.func.isRequired,
63
+ };
64
+
65
+ export default TableRows;
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useIntl } from 'react-intl';
4
+ import { Flex } from '@strapi/design-system/Flex';
5
+ import { Typography } from '@strapi/design-system/Typography';
6
+
7
+ const ActionItem = ({ actionLabel, actionName }) => {
8
+ const { formatMessage } = useIntl();
9
+
10
+ return (
11
+ <Flex direction="column" alignItems="baseline" gap={1}>
12
+ <Typography textColor="neutral600" variant="sigma">
13
+ {formatMessage(actionLabel)}
14
+ </Typography>
15
+ <Typography textColor="neutral600">{actionName}</Typography>
16
+ </Flex>
17
+ );
18
+ };
19
+
20
+ ActionItem.propTypes = {
21
+ actionLabel: PropTypes.object.isRequired,
22
+ actionName: PropTypes.string.isRequired,
23
+ };
24
+
25
+ export default ActionItem;
@@ -0,0 +1,76 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useIntl } from 'react-intl';
4
+ import { ModalLayout, ModalHeader, ModalBody } from '@strapi/design-system/ModalLayout';
5
+ import { Breadcrumbs, Crumb } from '@strapi/design-system/Breadcrumbs';
6
+ import { Grid } from '@strapi/design-system/Grid';
7
+ import { Box } from '@strapi/design-system/Box';
8
+ import { Typography } from '@strapi/design-system/Typography';
9
+ import { pxToRem } from '@strapi/helper-plugin';
10
+ import useFormatTimeStamp from '../hooks/useFormatTimeStamp';
11
+ import ActionItem from './ActionItem';
12
+
13
+ const ModalDialog = ({ onToggle, data: { date, user, action } }) => {
14
+ const { formatMessage } = useIntl();
15
+ const formatTimeStamp = useFormatTimeStamp();
16
+ const formattedDate = formatTimeStamp(date);
17
+
18
+ return (
19
+ <ModalLayout onClose={onToggle} labelledBy="title">
20
+ <ModalHeader>
21
+ <Breadcrumbs label={formattedDate}>
22
+ <Crumb>{formattedDate}</Crumb>
23
+ </Breadcrumbs>
24
+ </ModalHeader>
25
+ <ModalBody>
26
+ <Box marginBottom={pxToRem(12)}>
27
+ <Typography variant="delta" id="title">
28
+ {formatMessage({
29
+ id: 'Settings.permissions.auditLogs.details',
30
+ defaultMessage: 'Log Details',
31
+ })}
32
+ </Typography>
33
+ </Box>
34
+ <Grid
35
+ gap={4}
36
+ gridCols={2}
37
+ paddingTop={4}
38
+ paddingBottom={4}
39
+ paddingLeft={6}
40
+ paddingRight={6}
41
+ background="neutral100"
42
+ hasRadius
43
+ >
44
+ <ActionItem
45
+ actionLabel={{
46
+ id: 'Settings.permissions.auditLogs.action',
47
+ defaultMessage: 'Action',
48
+ }}
49
+ actionName={action}
50
+ />
51
+ <ActionItem
52
+ actionLabel={{
53
+ id: 'Settings.permissions.auditLogs.date',
54
+ defaultMessage: 'Date',
55
+ }}
56
+ actionName={formattedDate}
57
+ />
58
+ <ActionItem
59
+ actionLabel={{
60
+ id: 'Settings.permissions.auditLogs.user',
61
+ defaultMessage: 'User',
62
+ }}
63
+ actionName={user}
64
+ />
65
+ </Grid>
66
+ </ModalBody>
67
+ </ModalLayout>
68
+ );
69
+ };
70
+
71
+ ModalDialog.propTypes = {
72
+ onToggle: PropTypes.func.isRequired,
73
+ data: PropTypes.object.isRequired,
74
+ };
75
+
76
+ export default ModalDialog;
@@ -0,0 +1,24 @@
1
+ import { useIntl } from 'react-intl';
2
+ import parseISO from 'date-fns/parseISO';
3
+
4
+ const useFormatTimeStamp = () => {
5
+ const { formatDate } = useIntl();
6
+
7
+ const formatTimeStamp = (value) => {
8
+ const date = parseISO(value);
9
+
10
+ const formattedDate = formatDate(date, {
11
+ dateStyle: 'long',
12
+ });
13
+ const formattedTime = formatDate(date, {
14
+ timeStyle: 'medium',
15
+ hourCycle: 'h24',
16
+ });
17
+
18
+ return `${formattedDate}, ${formattedTime}`;
19
+ };
20
+
21
+ return formatTimeStamp;
22
+ };
23
+
24
+ export default useFormatTimeStamp;
@@ -0,0 +1,84 @@
1
+ import React, { useState } from 'react';
2
+ import { SettingsPageTitle, DynamicTable } from '@strapi/helper-plugin';
3
+ import { HeaderLayout, ContentLayout } from '@strapi/design-system/Layout';
4
+ import { Main } from '@strapi/design-system/Main';
5
+ import { useIntl } from 'react-intl';
6
+ import TableRows from './DynamicTable/TableRows';
7
+ import tableHeaders from './utils/tableHeaders';
8
+ import ModalDialog from './ModalDialog';
9
+
10
+ const data = [
11
+ {
12
+ id: 1,
13
+ action: 'Update',
14
+ date: '2022-11-14T23:04:00.000Z',
15
+ user: 'John Doe',
16
+ },
17
+ {
18
+ id: 2,
19
+ action: 'Create',
20
+ date: '2022-11-04T18:24:00.000Z',
21
+ user: 'Kai Doe',
22
+ },
23
+ {
24
+ id: 3,
25
+ action: 'Delete',
26
+ date: '2022-10-09T11:26:00.000Z',
27
+ user: 'John Doe',
28
+ },
29
+ {
30
+ id: 4,
31
+ action: 'Log in',
32
+ date: '2022-10-09T11:24:00.000Z',
33
+ user: 'Kai Doe',
34
+ },
35
+ ];
36
+
37
+ const ListView = () => {
38
+ const { formatMessage } = useIntl();
39
+ const [isModalOpen, setIsModalOpen] = useState(false);
40
+ const [detailsActionData, setDetailsActionData] = useState(null);
41
+
42
+ const title = formatMessage({
43
+ id: 'global.auditLogs',
44
+ defaultMessage: 'Audit Logs',
45
+ });
46
+
47
+ const headers = tableHeaders.map((header) => ({
48
+ ...header,
49
+ metadatas: {
50
+ ...header.metadatas,
51
+ label: formatMessage(header.metadatas.label),
52
+ },
53
+ }));
54
+
55
+ const handleToggle = (id) => {
56
+ setIsModalOpen((prev) => !prev);
57
+
58
+ if (id) {
59
+ const actionData = data.find((action) => action.id === id);
60
+ setDetailsActionData(actionData);
61
+ }
62
+ };
63
+
64
+ return (
65
+ <Main>
66
+ <SettingsPageTitle name={title} />
67
+ <HeaderLayout
68
+ title={title}
69
+ subtitle={formatMessage({
70
+ id: 'Settings.permissions.auditLogs.listview.header.subtitle',
71
+ defaultMessage: 'Logs of all the activities that happened on your environment',
72
+ })}
73
+ />
74
+ <ContentLayout>
75
+ <DynamicTable contentType="Audit logs" headers={headers} rows={data} withBulkActions>
76
+ <TableRows headers={headers} rows={data} onModalToggle={handleToggle} />
77
+ </DynamicTable>
78
+ </ContentLayout>
79
+ {isModalOpen && <ModalDialog onToggle={handleToggle} data={detailsActionData} />}
80
+ </Main>
81
+ );
82
+ };
83
+
84
+ export default ListView;
@@ -0,0 +1,37 @@
1
+ const tableHeaders = [
2
+ {
3
+ name: 'action',
4
+ key: 'action',
5
+ metadatas: {
6
+ label: {
7
+ id: 'Settings.permissions.auditLogs.action',
8
+ defaultMessage: 'Action',
9
+ },
10
+ sortable: true,
11
+ },
12
+ },
13
+ {
14
+ name: 'date',
15
+ key: 'date',
16
+ metadatas: {
17
+ label: {
18
+ id: 'Settings.permissions.auditLogs.date',
19
+ defaultMessage: 'Date',
20
+ },
21
+ sortable: true,
22
+ },
23
+ },
24
+ {
25
+ key: 'user',
26
+ name: 'user',
27
+ metadatas: {
28
+ label: {
29
+ id: 'Settings.permissions.auditLogs.user',
30
+ defaultMessage: 'User',
31
+ },
32
+ sortable: true,
33
+ },
34
+ },
35
+ ];
36
+
37
+ export default tableHeaders;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { CheckPagePermissions } from '@strapi/helper-plugin';
3
+ import adminPermissions from '../../../../../permissions';
4
+ import ListView from '../ListView';
5
+
6
+ const ProtectedListPage = () => (
7
+ <CheckPagePermissions permissions={adminPermissions.settings.auditLogs.main}>
8
+ <ListView />
9
+ </CheckPagePermissions>
10
+ );
11
+
12
+ export default ProtectedListPage;
@@ -34,32 +34,27 @@ const ModalForm = ({ queryName, onToggle }) => {
34
34
  const { formatMessage } = useIntl();
35
35
  const toggleNotification = useNotification();
36
36
  const { lockApp, unlockApp } = useOverlayBlocker();
37
- const postMutation = useMutation(
38
- (body) => {
39
- return axiosInstance.post('/admin/users', body);
37
+ const postMutation = useMutation((body) => axiosInstance.post('/admin/users', body), {
38
+ async onSuccess({ data }) {
39
+ setRegistrationToken(data.data.registrationToken);
40
+ await queryClient.invalidateQueries(queryName);
41
+ goNext();
42
+ setIsSubmitting(false);
40
43
  },
41
- {
42
- async onSuccess({ data }) {
43
- setRegistrationToken(data.data.registrationToken);
44
- await queryClient.invalidateQueries(queryName);
45
- goNext();
46
- setIsSubmitting(false);
47
- },
48
- onError(err) {
49
- setIsSubmitting(false);
44
+ onError(err) {
45
+ setIsSubmitting(false);
50
46
 
51
- toggleNotification({
52
- type: 'warning',
53
- message: { id: 'notification.error', defaultMessage: 'An error occured' },
54
- });
47
+ toggleNotification({
48
+ type: 'warning',
49
+ message: { id: 'notification.error', defaultMessage: 'An error occured' },
50
+ });
55
51
 
56
- throw err;
57
- },
58
- onSettled() {
59
- unlockApp();
60
- },
61
- }
62
- );
52
+ throw err;
53
+ },
54
+ onSettled() {
55
+ unlockApp();
56
+ },
57
+ });
63
58
 
64
59
  const headerTitle = formatMessage({
65
60
  id: 'Settings.permissions.users.create',
@@ -57,6 +57,17 @@ const defaultRoutes = [
57
57
  to: '/settings/users/:id',
58
58
  exact: true,
59
59
  },
60
+ {
61
+ async Component() {
62
+ const component = await import(
63
+ /* webpackChunkName: "admin-audit-logs" */ '../pages/AuditLogs/ProtectedListPage'
64
+ );
65
+
66
+ return component;
67
+ },
68
+ to: '/settings/audit-logs',
69
+ exact: true,
70
+ },
60
71
  {
61
72
  async Component() {
62
73
  const component = await import(
@@ -34,6 +34,10 @@ const permissions = {
34
34
  uninstall: [{ action: 'admin::marketplace.plugins.uninstall', subject: null }],
35
35
  },
36
36
  settings: {
37
+ auditLogs: {
38
+ // Note:update to admin::auditLogs permissions when set in BE
39
+ main: [{ action: 'admin::roles.create', subject: null }],
40
+ },
37
41
  roles: {
38
42
  main: [
39
43
  { action: 'admin::roles.create', subject: null },
@@ -175,6 +175,11 @@
175
175
  "Settings.permissions.users.strapi-super-admin": "Super Admin",
176
176
  "Settings.permissions.users.strapi-editor": "Editor",
177
177
  "Settings.permissions.users.strapi-author": "Author",
178
+ "Settings.permissions.auditLogs.action": "Action",
179
+ "Settings.permissions.auditLogs.date": "Date",
180
+ "Settings.permissions.auditLogs.user": "User",
181
+ "Settings.permissions.auditLogs.details": "Log Details",
182
+ "Settings.permissions.auditLogs.listview.header.subtitle": "Logs of all the activities that happened on your environment",
178
183
  "Settings.profile.form.notify.data.loaded": "Your profile data has been loaded",
179
184
  "Settings.profile.form.section.experience.clear.select": "Clear the interface language selected",
180
185
  "Settings.profile.form.section.experience.here": "here",
@@ -303,6 +308,7 @@
303
308
  "app.component.search.label": "Search for {target}",
304
309
  "app.component.table.duplicate": "Duplicate {target}",
305
310
  "app.component.table.edit": "Edit {target}",
311
+ "app.component.table.view": "{target} details",
306
312
  "app.component.table.select.one-entry": "Select {target}",
307
313
  "app.components.BlockLink.blog": "Blog",
308
314
  "app.components.BlockLink.blog.content": "Read the latest news about Strapi and the ecosystem.",
@@ -772,6 +778,7 @@
772
778
  "global.settings": "Settings",
773
779
  "global.type": "Type",
774
780
  "global.users": "Users",
781
+ "global.auditLogs": "Audit Logs",
775
782
  "notification.contentType.relations.conflict": "Content type has conflicting relations",
776
783
  "notification.default.title": "Information:",
777
784
  "notification.error": "An error occurred",