@strapi/admin 4.1.10-beta.0 → 4.1.10
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/admin/src/assets/images/homepage-logo.png +0 -0
- package/admin/src/components/AutoReloadOverlayBlockerProvider/Blocker.js +2 -6
- package/admin/src/components/GuidedTour/Homepage/index.js +1 -2
- package/admin/src/components/GuidedTour/Modal/components/Stepper.js +1 -2
- package/admin/src/components/LeftMenu/index.js +9 -9
- package/admin/src/components/Notifications/Notification/index.js +2 -2
- package/admin/src/components/Providers/index.js +4 -8
- package/admin/src/components/UnauthenticatedLogo/index.js +2 -4
- package/admin/src/components/UpgradePlanModal/index.js +6 -2
- package/admin/src/content-manager/components/SelectMany/ListItem.js +1 -2
- package/admin/src/content-manager/components/SelectWrapper/index.js +8 -7
- package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +2 -2
- package/admin/src/content-manager/components/Wysiwyg/Editor.js +2 -0
- package/admin/src/content-manager/pages/App/LeftMenu/index.js +8 -7
- package/admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js +1 -1
- package/admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js +1 -2
- package/admin/src/content-manager/pages/EditSettingsView/index.js +1 -2
- package/admin/src/content-manager/pages/EditView/Header/index.js +3 -3
- package/admin/src/content-manager/pages/EditView/index.js +1 -4
- package/admin/src/content-manager/pages/ListSettingsView/index.js +1 -2
- package/admin/src/content-manager/pages/ListView/index.js +1 -1
- package/admin/src/content-manager/pages/NoContentType/index.js +1 -2
- package/admin/src/pages/App/index.js +2 -7
- package/admin/src/pages/AuthPage/components/ForgotPassword/index.js +1 -2
- package/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js +1 -1
- package/admin/src/pages/AuthPage/components/Login/BaseLogin.js +1 -2
- package/admin/src/pages/AuthPage/components/Oops/index.js +1 -2
- package/admin/src/pages/AuthPage/components/Register/index.js +12 -12
- package/admin/src/pages/AuthPage/components/ResetPassword/index.js +3 -4
- package/admin/src/pages/HomePage/HomeHeader.js +2 -2
- package/admin/src/pages/HomePage/SocialLinks.js +4 -3
- package/admin/src/pages/InternalErrorPage/index.js +1 -2
- package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +2 -1
- package/admin/src/pages/MarketplacePage/components/PluginCard/index.js +4 -3
- package/admin/src/pages/NotFoundPage/index.js +1 -2
- package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +5 -4
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/UpdateButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +94 -150
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +1 -2
- package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +1 -1
- package/admin/src/translations/ca.json +699 -0
- package/admin/src/translations/en.json +0 -25
- package/admin/src/translations/languageNativeNames.js +1 -0
- package/admin/src/translations/ru.json +34 -0
- package/build/2077.51485bfb.chunk.js +194 -0
- package/build/6706.7f57cb76.chunk.js +113 -0
- package/build/7589.95466f9a.chunk.js +194 -0
- package/build/{5289.0341db2d.chunk.js → 7757.6d20cfe0.chunk.js} +89 -87
- package/build/8681.96961454.chunk.js +163 -0
- package/build/9066.118ecccd.chunk.js +101 -0
- package/build/9115.abdf4e3b.chunk.js +1 -0
- package/build/9158.60fcd720.chunk.js +503 -0
- package/build/{9298.f97fcef0.chunk.js → 9298.5b5c6ea1.chunk.js} +2 -2
- package/build/9420.cb0b75e8.chunk.js +508 -0
- package/build/Admin-authenticatedApp.ec0f0834.chunk.js +80 -0
- package/build/Admin_homePage.e6d4d977.chunk.js +71 -0
- package/build/Admin_marketplace.25133b64.chunk.js +11 -0
- package/build/Admin_settingsPage.e1dfbb1d.chunk.js +172 -0
- package/build/admin-edit-roles-page.e77a2acc.chunk.js +1 -0
- package/build/admin-edit-users.4c49fe98.chunk.js +11 -0
- package/build/api-tokens-create-page.618b3e40.chunk.js +1 -0
- package/build/api-tokens-edit-page.8d19dfe1.chunk.js +1 -0
- package/build/api-tokens-list-page.274e1c80.chunk.js +15 -0
- package/build/ca-json.0097e443.chunk.js +1 -0
- package/build/content-manager.d6449678.chunk.js +1204 -0
- package/build/{content-type-builder.0d8729ad.chunk.js → content-type-builder.a9554707.chunk.js} +8 -8
- package/build/en-json.3e1a222e.chunk.js +1 -0
- package/build/fb376b132d18bf4522ca.png +0 -0
- package/build/index.html +1 -1
- package/build/main.6dad6108.js +8404 -0
- package/build/ru-json.28147733.chunk.js +1 -0
- package/build/runtime~main.26528011.js +2 -0
- package/build/users-roles-settings-page.28bf6bdc.chunk.js +30 -0
- package/build/{webhook-edit-page.2e6727ab.chunk.js → webhook-edit-page.ca670f8d.chunk.js} +3 -3
- package/build/webhook-list-page.ce1fa92f.chunk.js +133 -0
- package/ee/admin/pages/AuthPage/components/Providers/index.js +1 -1
- package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +1 -1
- package/package.json +5 -5
- package/server/config/admin-actions.js +0 -14
- package/server/controllers/admin.js +1 -33
- package/server/routes/admin.js +0 -28
- package/server/services/index.js +0 -1
- package/server/services/permission/permissions-manager/sanitize.js +22 -0
- package/server/services/user.js +1 -1
- package/server/utils/index.d.ts +0 -2
- package/admin/src/components/ConfigurationsProvider/index.js +0 -51
- package/admin/src/components/ConfigurationsProvider/reducer.js +0 -28
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/index.js +0 -85
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/init.js +0 -13
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/reducer.js +0 -43
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js +0 -116
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/reducer.js +0 -28
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/stepper.js +0 -25
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js +0 -67
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js +0 -176
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js +0 -82
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js +0 -51
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js +0 -97
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js +0 -85
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/reducer.js +0 -28
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js +0 -16
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/constants.js +0 -3
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/getFormData.js +0 -17
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js +0 -76
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/prefixAllUrls.js +0 -17
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/urlToFile.js +0 -21
- package/build/2481.7ba28142.chunk.js +0 -184
- package/build/2a9e9ef5c4c775bb7c7b.png +0 -0
- package/build/372.3720845e.chunk.js +0 -899
- package/build/497.fbd75558.chunk.js +0 -284
- package/build/6404.80bf5858.chunk.js +0 -506
- package/build/7197.959bbe97.chunk.js +0 -113
- package/build/7589.f3b26345.chunk.js +0 -194
- package/build/9115.318a6841.chunk.js +0 -1
- package/build/9853.d96fbc67.chunk.js +0 -356
- package/build/Admin-authenticatedApp.d8767873.chunk.js +0 -80
- package/build/Admin_homePage.50b6c129.chunk.js +0 -71
- package/build/Admin_marketplace.514ace37.chunk.js +0 -11
- package/build/Admin_settingsPage.0d94a598.chunk.js +0 -180
- package/build/admin-edit-roles-page.06f3d288.chunk.js +0 -1
- package/build/admin-edit-users.6a325cca.chunk.js +0 -11
- package/build/api-tokens-create-page.635e20c8.chunk.js +0 -1
- package/build/api-tokens-edit-page.db07253e.chunk.js +0 -1
- package/build/api-tokens-list-page.346c2149.chunk.js +0 -15
- package/build/content-manager.78e3f35c.chunk.js +0 -1204
- package/build/en-json.ca572384.chunk.js +0 -1
- package/build/main.06f66609.js +0 -7909
- package/build/ru-json.4560906c.chunk.js +0 -1
- package/build/runtime~main.dc1c7ef6.js +0 -2
- package/build/users-roles-settings-page.97d7092d.chunk.js +0 -30
- package/build/webhook-list-page.927257b5.chunk.js +0 -133
- package/server/services/project-settings.js +0 -173
- package/server/validation/project-settings.js +0 -39
|
Binary file
|
|
@@ -6,7 +6,7 @@ import styled, { keyframes } from 'styled-components';
|
|
|
6
6
|
import { pxToRem } from '@strapi/helper-plugin';
|
|
7
7
|
import Clock from '@strapi/icons/Clock';
|
|
8
8
|
import Refresh from '@strapi/icons/Refresh';
|
|
9
|
-
import { Link } from '@strapi/design-system/Link';
|
|
9
|
+
import { Link } from '@strapi/design-system/v2/Link';
|
|
10
10
|
import { Box } from '@strapi/design-system/Box';
|
|
11
11
|
import { Stack } from '@strapi/design-system/Stack';
|
|
12
12
|
import { Flex } from '@strapi/design-system/Flex';
|
|
@@ -72,11 +72,7 @@ const Blocker = ({ displayedIcon, description, title, isOpen }) => {
|
|
|
72
72
|
</Flex>
|
|
73
73
|
<Flex justifyContent="center">
|
|
74
74
|
<Box paddingTop={2}>
|
|
75
|
-
<Link
|
|
76
|
-
href="https://docs.strapi.io"
|
|
77
|
-
target="_blank"
|
|
78
|
-
rel="noopener noreferrer nofollow"
|
|
79
|
-
>
|
|
75
|
+
<Link href="https://docs.strapi.io" isExternal>
|
|
80
76
|
{formatMessage({
|
|
81
77
|
id: 'global.documentation',
|
|
82
78
|
defaultMessage: 'Read the documentation',
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { useGuidedTour, useTracking } from '@strapi/helper-plugin';
|
|
2
|
+
import { useGuidedTour, useTracking, LinkButton } from '@strapi/helper-plugin';
|
|
3
3
|
import { useIntl } from 'react-intl';
|
|
4
4
|
import { Stack } from '@strapi/design-system/Stack';
|
|
5
5
|
import { Flex } from '@strapi/design-system/Flex';
|
|
6
6
|
import { Box } from '@strapi/design-system/Box';
|
|
7
7
|
import { Typography } from '@strapi/design-system/Typography';
|
|
8
|
-
import { LinkButton } from '@strapi/design-system/LinkButton';
|
|
9
8
|
import { Button } from '@strapi/design-system/Button';
|
|
10
9
|
import ArrowRight from '@strapi/icons/ArrowRight';
|
|
11
10
|
import StepperHomepage from './components/Stepper';
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { useIntl } from 'react-intl';
|
|
4
|
-
import { pxToRem } from '@strapi/helper-plugin';
|
|
4
|
+
import { pxToRem, LinkButton } from '@strapi/helper-plugin';
|
|
5
5
|
import { Typography } from '@strapi/design-system/Typography';
|
|
6
6
|
import { Button } from '@strapi/design-system/Button';
|
|
7
|
-
import { LinkButton } from '@strapi/design-system/LinkButton';
|
|
8
7
|
import { Box } from '@strapi/design-system/Box';
|
|
9
8
|
import { Flex } from '@strapi/design-system/Flex';
|
|
10
9
|
import ArrowRight from '@strapi/icons/ArrowRight';
|
|
@@ -2,7 +2,7 @@ import React, { useRef, useState } from 'react';
|
|
|
2
2
|
import styled from 'styled-components';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { useIntl } from 'react-intl';
|
|
5
|
-
import { NavLink as
|
|
5
|
+
import { NavLink as RouterNavLink } from 'react-router-dom';
|
|
6
6
|
import { Divider } from '@strapi/design-system/Divider';
|
|
7
7
|
import {
|
|
8
8
|
MainNav,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
NavSection,
|
|
13
13
|
NavUser,
|
|
14
14
|
NavCondense,
|
|
15
|
-
} from '@strapi/design-system/MainNav';
|
|
15
|
+
} from '@strapi/design-system/v2/MainNav';
|
|
16
16
|
import { FocusTrap } from '@strapi/design-system/FocusTrap';
|
|
17
17
|
import { Box } from '@strapi/design-system/Box';
|
|
18
18
|
import { Typography } from '@strapi/design-system/Typography';
|
|
@@ -29,7 +29,7 @@ const LinkUserWrapper = styled(Box)`
|
|
|
29
29
|
left: ${({ theme }) => theme.spaces[5]};
|
|
30
30
|
`;
|
|
31
31
|
|
|
32
|
-
const LinkUser = styled(
|
|
32
|
+
const LinkUser = styled(RouterNavLink)`
|
|
33
33
|
display: flex;
|
|
34
34
|
justify-content: space-between;
|
|
35
35
|
align-items: center;
|
|
@@ -53,9 +53,7 @@ const LinkUser = styled(Link)`
|
|
|
53
53
|
const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
|
|
54
54
|
const buttonRef = useRef();
|
|
55
55
|
const [userLinksVisible, setUserLinksVisible] = useState(false);
|
|
56
|
-
const {
|
|
57
|
-
logos: { menu },
|
|
58
|
-
} = useConfigurations();
|
|
56
|
+
const { menuLogo } = useConfigurations();
|
|
59
57
|
const [condensed, setCondensed] = usePersistentState('navbar-condensed', false);
|
|
60
58
|
const { userDisplayName } = useAppInfos();
|
|
61
59
|
const { formatMessage } = useIntl();
|
|
@@ -90,18 +88,19 @@ const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
|
|
|
90
88
|
return (
|
|
91
89
|
<MainNav condensed={condensed}>
|
|
92
90
|
<NavBrand
|
|
91
|
+
as={RouterNavLink}
|
|
93
92
|
workplace={formatMessage({
|
|
94
93
|
id: 'app.components.LeftMenu.navbrand.workplace',
|
|
95
94
|
defaultMessage: 'Workplace',
|
|
96
95
|
})}
|
|
97
96
|
title={menuTitle}
|
|
98
|
-
icon={<img src={
|
|
97
|
+
icon={<img src={menuLogo} alt={menuTitle} />}
|
|
99
98
|
/>
|
|
100
99
|
|
|
101
100
|
<Divider />
|
|
102
101
|
|
|
103
102
|
<NavSections>
|
|
104
|
-
<NavLink to="/content-manager" icon={<Write />}>
|
|
103
|
+
<NavLink as={RouterNavLink} to="/content-manager" icon={<Write />}>
|
|
105
104
|
{formatMessage({ id: 'global.content-manager', defaultMessage: 'Content manager' })}
|
|
106
105
|
</NavLink>
|
|
107
106
|
|
|
@@ -111,7 +110,7 @@ const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
|
|
|
111
110
|
const Icon = link.icon;
|
|
112
111
|
|
|
113
112
|
return (
|
|
114
|
-
<NavLink to={link.to} key={link.to} icon={<Icon />}>
|
|
113
|
+
<NavLink as={RouterNavLink} to={link.to} key={link.to} icon={<Icon />}>
|
|
115
114
|
{formatMessage(link.intlLabel)}
|
|
116
115
|
</NavLink>
|
|
117
116
|
);
|
|
@@ -126,6 +125,7 @@ const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
|
|
|
126
125
|
|
|
127
126
|
return (
|
|
128
127
|
<NavLink
|
|
128
|
+
as={RouterNavLink}
|
|
129
129
|
badgeContent={
|
|
130
130
|
(link.notificationsCount > 0 && link.notificationsCount.toString()) || undefined
|
|
131
131
|
}
|
|
@@ -2,7 +2,7 @@ import React, { useEffect, useCallback } from 'react';
|
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { useIntl } from 'react-intl';
|
|
4
4
|
import { Alert } from '@strapi/design-system/Alert';
|
|
5
|
-
import { Link } from '@strapi/design-system/Link';
|
|
5
|
+
import { Link } from '@strapi/design-system/v2/Link';
|
|
6
6
|
|
|
7
7
|
const Notification = ({ dispatch, notification }) => {
|
|
8
8
|
const { formatMessage } = useIntl();
|
|
@@ -60,7 +60,7 @@ const Notification = ({ dispatch, notification }) => {
|
|
|
60
60
|
<Alert
|
|
61
61
|
action={
|
|
62
62
|
link ? (
|
|
63
|
-
<Link href={link.url}
|
|
63
|
+
<Link href={link.url} isExternal>
|
|
64
64
|
{formatMessage({
|
|
65
65
|
id: link.label?.id || link.label,
|
|
66
66
|
defaultMessage: link.label?.defaultMessage || link.label?.id || link.label,
|
|
@@ -3,8 +3,7 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import { QueryClientProvider, QueryClient } from 'react-query';
|
|
4
4
|
import { LibraryProvider, StrapiAppProvider } from '@strapi/helper-plugin';
|
|
5
5
|
import { Provider } from 'react-redux';
|
|
6
|
-
import { AdminContext } from '../../contexts';
|
|
7
|
-
import ConfigurationsProvider from '../ConfigurationsProvider';
|
|
6
|
+
import { AdminContext, ConfigurationsContext } from '../../contexts';
|
|
8
7
|
import LanguageProvider from '../LanguageProvider';
|
|
9
8
|
import GuidedTour from '../GuidedTour';
|
|
10
9
|
import AutoReloadOverlayBlockerProvider from '../AutoReloadOverlayBlockerProvider';
|
|
@@ -48,11 +47,8 @@ const Providers = ({
|
|
|
48
47
|
<QueryClientProvider client={queryClient}>
|
|
49
48
|
<Provider store={store}>
|
|
50
49
|
<AdminContext.Provider value={{ getAdminInjectedComponents }}>
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
menuLogo={menuLogo}
|
|
54
|
-
showReleaseNotification={showReleaseNotification}
|
|
55
|
-
showTutorials={showTutorials}
|
|
50
|
+
<ConfigurationsContext.Provider
|
|
51
|
+
value={{ authLogo, menuLogo, showReleaseNotification, showTutorials }}
|
|
56
52
|
>
|
|
57
53
|
<StrapiAppProvider
|
|
58
54
|
getPlugin={getPlugin}
|
|
@@ -75,7 +71,7 @@ const Providers = ({
|
|
|
75
71
|
</LanguageProvider>
|
|
76
72
|
</LibraryProvider>
|
|
77
73
|
</StrapiAppProvider>
|
|
78
|
-
</
|
|
74
|
+
</ConfigurationsContext.Provider>
|
|
79
75
|
</AdminContext.Provider>
|
|
80
76
|
</Provider>
|
|
81
77
|
</QueryClientProvider>
|
|
@@ -7,11 +7,9 @@ const Img = styled.img`
|
|
|
7
7
|
`;
|
|
8
8
|
|
|
9
9
|
const Logo = () => {
|
|
10
|
-
const {
|
|
11
|
-
logos: { auth },
|
|
12
|
-
} = useConfigurations();
|
|
10
|
+
const { authLogo } = useConfigurations();
|
|
13
11
|
|
|
14
|
-
return <Img src={
|
|
12
|
+
return <Img src={authLogo} aria-hidden alt="" />;
|
|
15
13
|
};
|
|
16
14
|
|
|
17
15
|
export default Logo;
|
|
@@ -5,7 +5,7 @@ import { useIntl } from 'react-intl';
|
|
|
5
5
|
import { Portal } from '@strapi/design-system/Portal';
|
|
6
6
|
import { FocusTrap } from '@strapi/design-system/FocusTrap';
|
|
7
7
|
import { IconButton } from '@strapi/design-system/IconButton';
|
|
8
|
-
import { LinkButton } from '@strapi/design-system/LinkButton';
|
|
8
|
+
import { LinkButton } from '@strapi/design-system/v2/LinkButton';
|
|
9
9
|
import { Box } from '@strapi/design-system/Box';
|
|
10
10
|
import { Flex } from '@strapi/design-system/Flex';
|
|
11
11
|
import { Typography } from '@strapi/design-system/Typography';
|
|
@@ -104,7 +104,11 @@ const UpgradePlanModal = ({ onClose, isOpen }) => {
|
|
|
104
104
|
})}
|
|
105
105
|
</Typography>
|
|
106
106
|
</Stack>
|
|
107
|
-
<LinkButton
|
|
107
|
+
<LinkButton
|
|
108
|
+
href="https://strapi.io/pricing-self-hosted"
|
|
109
|
+
isExternal
|
|
110
|
+
endIcon={<ExternalLink />}
|
|
111
|
+
>
|
|
108
112
|
{formatMessage({
|
|
109
113
|
id: 'app.components.UpgradePlanModal.button',
|
|
110
114
|
defaultMessage: 'Learn more',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { memo } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import styled from 'styled-components';
|
|
4
|
-
import { pxToRem, RemoveRoundedButton } from '@strapi/helper-plugin';
|
|
4
|
+
import { pxToRem, RemoveRoundedButton, Link } from '@strapi/helper-plugin';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
6
|
import { useLocation } from 'react-router-dom';
|
|
7
7
|
import has from 'lodash/has';
|
|
@@ -9,7 +9,6 @@ import isEmpty from 'lodash/isEmpty';
|
|
|
9
9
|
import { Box } from '@strapi/design-system/Box';
|
|
10
10
|
import { Flex } from '@strapi/design-system/Flex';
|
|
11
11
|
import { Typography } from '@strapi/design-system/Typography';
|
|
12
|
-
import { Link } from '@strapi/design-system/Link';
|
|
13
12
|
import { getTrad } from '../../utils';
|
|
14
13
|
|
|
15
14
|
const StyledBullet = styled.div`
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import React, { useCallback, useState, useEffect, useMemo, memo } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import {
|
|
4
|
-
// FormattedMessage,
|
|
5
|
-
useIntl,
|
|
6
|
-
} from 'react-intl';
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
7
4
|
import { useLocation } from 'react-router-dom';
|
|
8
|
-
import { Link } from '@strapi/design-system/Link';
|
|
9
|
-
import { Stack } from '@strapi/design-system/Stack';
|
|
10
5
|
import { useTheme } from 'styled-components';
|
|
11
6
|
import findIndex from 'lodash/findIndex';
|
|
12
7
|
import get from 'lodash/get';
|
|
13
8
|
import isArray from 'lodash/isArray';
|
|
14
9
|
import isEmpty from 'lodash/isEmpty';
|
|
15
10
|
import set from 'lodash/set';
|
|
16
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
NotAllowedInput,
|
|
13
|
+
useCMEditViewDataManager,
|
|
14
|
+
useQueryParams,
|
|
15
|
+
Link,
|
|
16
|
+
} from '@strapi/helper-plugin';
|
|
17
17
|
import { stringify } from 'qs';
|
|
18
18
|
import axios from 'axios';
|
|
19
|
+
import { Stack } from '@strapi/design-system/Stack';
|
|
19
20
|
import { axiosInstance } from '../../../core/utils';
|
|
20
21
|
import { getTrad } from '../../utils';
|
|
21
22
|
import Label from './Label';
|
|
@@ -143,8 +143,8 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
143
143
|
|
|
144
144
|
const displayErrors = useCallback(
|
|
145
145
|
err => {
|
|
146
|
-
const errorPayload = err.response.
|
|
147
|
-
let errorMessage = get(errorPayload, ['message'], 'Bad Request');
|
|
146
|
+
const errorPayload = err.response.data;
|
|
147
|
+
let errorMessage = get(errorPayload, ['error', 'message'], 'Bad Request');
|
|
148
148
|
|
|
149
149
|
// TODO handle errors correctly when back-end ready
|
|
150
150
|
if (Array.isArray(errorMessage)) {
|
|
@@ -5,18 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import React, { useMemo, useState } from 'react';
|
|
8
|
+
import { useSelector, shallowEqual } from 'react-redux';
|
|
9
|
+
import { useIntl } from 'react-intl';
|
|
10
|
+
import matchSorter from 'match-sorter';
|
|
11
|
+
import sortBy from 'lodash/sortBy';
|
|
12
|
+
import toLower from 'lodash/toLower';
|
|
13
|
+
import { NavLink } from 'react-router-dom';
|
|
8
14
|
import {
|
|
9
15
|
SubNav,
|
|
10
16
|
SubNavHeader,
|
|
11
17
|
SubNavSection,
|
|
12
18
|
SubNavSections,
|
|
13
19
|
SubNavLink,
|
|
14
|
-
} from '@strapi/design-system/SubNav';
|
|
15
|
-
import { useSelector, shallowEqual } from 'react-redux';
|
|
16
|
-
import { useIntl } from 'react-intl';
|
|
17
|
-
import matchSorter from 'match-sorter';
|
|
18
|
-
import sortBy from 'lodash/sortBy';
|
|
19
|
-
import toLower from 'lodash/toLower';
|
|
20
|
+
} from '@strapi/design-system/v2/SubNav';
|
|
20
21
|
import getTrad from '../../../utils/getTrad';
|
|
21
22
|
import { makeSelectModelLinks } from '../selectors';
|
|
22
23
|
|
|
@@ -111,7 +112,7 @@ const LeftMenu = () => {
|
|
|
111
112
|
const search = link.search ? `?${link.search}` : '';
|
|
112
113
|
|
|
113
114
|
return (
|
|
114
|
-
<SubNavLink key={link.uid} to={`${link.to}${search}`}>
|
|
115
|
+
<SubNavLink as={NavLink} key={link.uid} to={`${link.to}${search}`}>
|
|
115
116
|
{link.title}
|
|
116
117
|
</SubNavLink>
|
|
117
118
|
);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
+
import { Link } from '@strapi/helper-plugin';
|
|
3
4
|
import { Box } from '@strapi/design-system/Box';
|
|
4
5
|
import { Flex } from '@strapi/design-system/Flex';
|
|
5
|
-
import { Link } from '@strapi/design-system/Link';
|
|
6
6
|
import { Typography } from '@strapi/design-system/Typography';
|
|
7
7
|
import Cog from '@strapi/icons/Cog';
|
|
8
8
|
import { useIntl } from 'react-intl';
|
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import React from 'react';
|
|
8
|
-
import { useTracking, CheckPermissions } from '@strapi/helper-plugin';
|
|
8
|
+
import { useTracking, CheckPermissions, LinkButton } from '@strapi/helper-plugin';
|
|
9
9
|
import { useIntl } from 'react-intl';
|
|
10
10
|
import get from 'lodash/get';
|
|
11
|
-
import { LinkButton } from '@strapi/design-system/LinkButton';
|
|
12
11
|
import Pencil from '@strapi/icons/Pencil';
|
|
13
12
|
import getTrad from '../../../utils/getTrad';
|
|
14
13
|
import useLayoutDnd from '../../../hooks/useLayoutDnd';
|
|
@@ -9,11 +9,10 @@ import flatMap from 'lodash/flatMap';
|
|
|
9
9
|
import isEqual from 'lodash/isEqual';
|
|
10
10
|
import get from 'lodash/get';
|
|
11
11
|
import set from 'lodash/set';
|
|
12
|
-
import { useNotification, useTracking, ConfirmDialog } from '@strapi/helper-plugin';
|
|
12
|
+
import { useNotification, useTracking, ConfirmDialog, Link } from '@strapi/helper-plugin';
|
|
13
13
|
import { useHistory } from 'react-router-dom';
|
|
14
14
|
import { Main } from '@strapi/design-system/Main';
|
|
15
15
|
import { HeaderLayout, ContentLayout } from '@strapi/design-system/Layout';
|
|
16
|
-
import { Link } from '@strapi/design-system/Link';
|
|
17
16
|
import { Button } from '@strapi/design-system/Button';
|
|
18
17
|
import { Box } from '@strapi/design-system/Box';
|
|
19
18
|
import { Typography } from '@strapi/design-system/Typography';
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import React, { memo, useRef, useState } from 'react';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import { useHistory } from 'react-router-dom';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
import isEqualFastCompare from 'react-fast-compare';
|
|
4
6
|
import get from 'lodash/get';
|
|
5
7
|
import isEqual from 'lodash/isEqual';
|
|
6
8
|
import isEmpty from 'lodash/isEmpty';
|
|
7
9
|
import ArrowLeft from '@strapi/icons/ArrowLeft';
|
|
10
|
+
import { Link } from '@strapi/helper-plugin';
|
|
8
11
|
import { HeaderLayout } from '@strapi/design-system/Layout';
|
|
9
12
|
import { Box } from '@strapi/design-system/Box';
|
|
10
13
|
import { Button } from '@strapi/design-system/Button';
|
|
11
14
|
import { Dialog, DialogBody, DialogFooter } from '@strapi/design-system/Dialog';
|
|
12
|
-
import { Link } from '@strapi/design-system/Link';
|
|
13
15
|
import { Flex } from '@strapi/design-system/Flex';
|
|
14
16
|
import { Typography } from '@strapi/design-system/Typography';
|
|
15
17
|
import { Stack } from '@strapi/design-system/Stack';
|
|
16
18
|
import ExclamationMarkCircle from '@strapi/icons/ExclamationMarkCircle';
|
|
17
19
|
import Check from '@strapi/icons/Check';
|
|
18
|
-
import PropTypes from 'prop-types';
|
|
19
|
-
import isEqualFastCompare from 'react-fast-compare';
|
|
20
20
|
import { getTrad } from '../../../utils';
|
|
21
21
|
import { connect, getDraftRelations, select } from './utils';
|
|
22
22
|
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import React, { memo, useCallback, useMemo } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import get from 'lodash/get';
|
|
4
|
-
import { CheckPermissions, useTracking } from '@strapi/helper-plugin';
|
|
4
|
+
import { CheckPermissions, useTracking, LinkButton } from '@strapi/helper-plugin';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
6
|
import { ContentLayout } from '@strapi/design-system/Layout';
|
|
7
7
|
import { Box } from '@strapi/design-system/Box';
|
|
8
8
|
import { Divider } from '@strapi/design-system/Divider';
|
|
9
9
|
import { Grid, GridItem } from '@strapi/design-system/Grid';
|
|
10
|
-
import { LinkButton } from '@strapi/design-system/LinkButton';
|
|
11
10
|
import { Main } from '@strapi/design-system/Main';
|
|
12
11
|
import { Stack } from '@strapi/design-system/Stack';
|
|
13
12
|
import { Typography } from '@strapi/design-system/Typography';
|
|
@@ -15,9 +14,7 @@ import Layer from '@strapi/icons/Layer';
|
|
|
15
14
|
import Pencil from '@strapi/icons/Pencil';
|
|
16
15
|
import { InjectionZone } from '../../../shared/components';
|
|
17
16
|
import permissions from '../../../permissions';
|
|
18
|
-
// import Container from '../../components/Container';
|
|
19
17
|
import DynamicZone from '../../components/DynamicZone';
|
|
20
|
-
// import FormWrapper from '../../components/FormWrapper';
|
|
21
18
|
import FieldComponent from '../../components/FieldComponent';
|
|
22
19
|
import Inputs from '../../components/Inputs';
|
|
23
20
|
import SelectWrapper from '../../components/SelectWrapper';
|
|
@@ -6,12 +6,11 @@ import upperFirst from 'lodash/upperFirst';
|
|
|
6
6
|
import pick from 'lodash/pick';
|
|
7
7
|
import get from 'lodash/get';
|
|
8
8
|
import { stringify } from 'qs';
|
|
9
|
-
import { useNotification, useTracking, ConfirmDialog } from '@strapi/helper-plugin';
|
|
9
|
+
import { useNotification, useTracking, ConfirmDialog, Link } from '@strapi/helper-plugin';
|
|
10
10
|
import { useIntl } from 'react-intl';
|
|
11
11
|
import { Box } from '@strapi/design-system/Box';
|
|
12
12
|
import { Divider } from '@strapi/design-system/Divider';
|
|
13
13
|
import { Layout, HeaderLayout, ContentLayout } from '@strapi/design-system/Layout';
|
|
14
|
-
import { Link } from '@strapi/design-system/Link';
|
|
15
14
|
import { Main } from '@strapi/design-system/Main';
|
|
16
15
|
import { Button } from '@strapi/design-system/Button';
|
|
17
16
|
import Check from '@strapi/icons/Check';
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
useNotification,
|
|
18
18
|
useRBACProvider,
|
|
19
19
|
useTracking,
|
|
20
|
+
Link,
|
|
20
21
|
} from '@strapi/helper-plugin';
|
|
21
22
|
import { IconButton } from '@strapi/design-system/IconButton';
|
|
22
23
|
import { Main } from '@strapi/design-system/Main';
|
|
@@ -24,7 +25,6 @@ import { Box } from '@strapi/design-system/Box';
|
|
|
24
25
|
import { ActionLayout, ContentLayout, HeaderLayout } from '@strapi/design-system/Layout';
|
|
25
26
|
import { useNotifyAT } from '@strapi/design-system/LiveRegions';
|
|
26
27
|
import { Button } from '@strapi/design-system/Button';
|
|
27
|
-
import { Link } from '@strapi/design-system/Link';
|
|
28
28
|
import ArrowLeft from '@strapi/icons/ArrowLeft';
|
|
29
29
|
import Plus from '@strapi/icons/Plus';
|
|
30
30
|
import Cog from '@strapi/icons/Cog';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { useFocusWhenNavigate } from '@strapi/helper-plugin';
|
|
2
|
+
import { useFocusWhenNavigate, LinkButton } from '@strapi/helper-plugin';
|
|
3
3
|
import { Main } from '@strapi/design-system/Main';
|
|
4
|
-
import { LinkButton } from '@strapi/design-system/LinkButton';
|
|
5
4
|
import { ContentLayout, HeaderLayout } from '@strapi/design-system/Layout';
|
|
6
5
|
import { EmptyStateLayout } from '@strapi/design-system/EmptyStateLayout';
|
|
7
6
|
import Plus from '@strapi/icons/Plus';
|
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
request,
|
|
13
13
|
useNotification,
|
|
14
14
|
TrackingContext,
|
|
15
|
-
prefixFileUrlWithBackendUrl,
|
|
16
15
|
} from '@strapi/helper-plugin';
|
|
17
16
|
import { SkipToContent } from '@strapi/design-system/Main';
|
|
18
17
|
import { useIntl } from 'react-intl';
|
|
@@ -23,7 +22,6 @@ import NotFoundPage from '../NotFoundPage';
|
|
|
23
22
|
import UseCasePage from '../UseCasePage';
|
|
24
23
|
import { getUID } from './utils';
|
|
25
24
|
import routes from './utils/routes';
|
|
26
|
-
import { useConfigurations } from '../../hooks';
|
|
27
25
|
|
|
28
26
|
const AuthenticatedApp = lazy(() =>
|
|
29
27
|
import(/* webpackChunkName: "Admin-authenticatedApp" */ '../../components/AuthenticatedApp')
|
|
@@ -31,7 +29,6 @@ const AuthenticatedApp = lazy(() =>
|
|
|
31
29
|
|
|
32
30
|
function App() {
|
|
33
31
|
const toggleNotification = useNotification();
|
|
34
|
-
const { updateProjectSettings } = useConfigurations();
|
|
35
32
|
const { formatMessage } = useIntl();
|
|
36
33
|
const [{ isLoading, hasAdmin, uuid }, setState] = useState({ isLoading: true, hasAdmin: false });
|
|
37
34
|
|
|
@@ -69,11 +66,9 @@ function App() {
|
|
|
69
66
|
const getData = async () => {
|
|
70
67
|
try {
|
|
71
68
|
const {
|
|
72
|
-
data: { hasAdmin, uuid
|
|
69
|
+
data: { hasAdmin, uuid },
|
|
73
70
|
} = await request('/admin/init', { method: 'GET' });
|
|
74
71
|
|
|
75
|
-
updateProjectSettings({ menuLogo: prefixFileUrlWithBackendUrl(menuLogo) });
|
|
76
|
-
|
|
77
72
|
if (uuid) {
|
|
78
73
|
try {
|
|
79
74
|
const deviceId = await getUID();
|
|
@@ -104,7 +99,7 @@ function App() {
|
|
|
104
99
|
};
|
|
105
100
|
|
|
106
101
|
getData();
|
|
107
|
-
}, [toggleNotification
|
|
102
|
+
}, [toggleNotification]);
|
|
108
103
|
|
|
109
104
|
const setHasAdmin = hasAdmin => setState(prev => ({ ...prev, hasAdmin }));
|
|
110
105
|
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import { Form } from '@strapi/helper-plugin';
|
|
4
|
+
import { Form, Link } from '@strapi/helper-plugin';
|
|
5
5
|
import { Box } from '@strapi/design-system/Box';
|
|
6
6
|
import { Stack } from '@strapi/design-system/Stack';
|
|
7
7
|
import { Main } from '@strapi/design-system/Main';
|
|
8
8
|
import { Flex } from '@strapi/design-system/Flex';
|
|
9
|
-
import { Link } from '@strapi/design-system/Link';
|
|
10
9
|
import { Button } from '@strapi/design-system/Button';
|
|
11
10
|
import { TextInput } from '@strapi/design-system/TextInput';
|
|
12
11
|
import { Typography } from '@strapi/design-system/Typography';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
|
+
import { Link } from '@strapi/helper-plugin';
|
|
3
4
|
import { Box } from '@strapi/design-system/Box';
|
|
4
5
|
import { Main } from '@strapi/design-system/Main';
|
|
5
6
|
import { Flex } from '@strapi/design-system/Flex';
|
|
6
|
-
import { Link } from '@strapi/design-system/Link';
|
|
7
7
|
import { Typography } from '@strapi/design-system/Typography';
|
|
8
8
|
import UnauthenticatedLayout, {
|
|
9
9
|
Column,
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
|
+
import { Form, Link } from '@strapi/helper-plugin';
|
|
2
3
|
import EyeStriked from '@strapi/icons/EyeStriked';
|
|
3
4
|
import Eye from '@strapi/icons/Eye';
|
|
4
5
|
import { Box } from '@strapi/design-system/Box';
|
|
5
6
|
import { Stack } from '@strapi/design-system/Stack';
|
|
6
7
|
import { Main } from '@strapi/design-system/Main';
|
|
7
8
|
import { Flex } from '@strapi/design-system/Flex';
|
|
8
|
-
import { Link } from '@strapi/design-system/Link';
|
|
9
9
|
import { Button } from '@strapi/design-system/Button';
|
|
10
10
|
import { TextInput } from '@strapi/design-system/TextInput';
|
|
11
11
|
import { Checkbox } from '@strapi/design-system/Checkbox';
|
|
12
12
|
import { Typography } from '@strapi/design-system/Typography';
|
|
13
|
-
import { Form } from '@strapi/helper-plugin';
|
|
14
13
|
import PropTypes from 'prop-types';
|
|
15
14
|
import { useIntl } from 'react-intl';
|
|
16
15
|
import styled from 'styled-components';
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
|
-
import { useQuery } from '@strapi/helper-plugin';
|
|
3
|
+
import { useQuery, Link } from '@strapi/helper-plugin';
|
|
4
4
|
import { Box } from '@strapi/design-system/Box';
|
|
5
5
|
import { Main } from '@strapi/design-system/Main';
|
|
6
6
|
import { Flex } from '@strapi/design-system/Flex';
|
|
7
|
-
import { Link } from '@strapi/design-system/Link';
|
|
8
7
|
import { Typography } from '@strapi/design-system/Typography';
|
|
9
8
|
import UnauthenticatedLayout, {
|
|
10
9
|
Column,
|
|
@@ -3,11 +3,22 @@ import { useIntl } from 'react-intl';
|
|
|
3
3
|
import styled from 'styled-components';
|
|
4
4
|
import get from 'lodash/get';
|
|
5
5
|
import omit from 'lodash/omit';
|
|
6
|
+
import { useHistory } from 'react-router-dom';
|
|
7
|
+
import PropTypes from 'prop-types';
|
|
8
|
+
import { Formik } from 'formik';
|
|
9
|
+
import axios from 'axios';
|
|
10
|
+
import {
|
|
11
|
+
Form,
|
|
12
|
+
useQuery,
|
|
13
|
+
useNotification,
|
|
14
|
+
useTracking,
|
|
15
|
+
getYupInnerErrors,
|
|
16
|
+
Link,
|
|
17
|
+
} from '@strapi/helper-plugin';
|
|
6
18
|
import { Box } from '@strapi/design-system/Box';
|
|
7
19
|
import { Stack } from '@strapi/design-system/Stack';
|
|
8
20
|
import { Main } from '@strapi/design-system/Main';
|
|
9
21
|
import { Flex } from '@strapi/design-system/Flex';
|
|
10
|
-
import { Link } from '@strapi/design-system/Link';
|
|
11
22
|
import { Button } from '@strapi/design-system/Button';
|
|
12
23
|
import { TextInput } from '@strapi/design-system/TextInput';
|
|
13
24
|
import { Checkbox } from '@strapi/design-system/Checkbox';
|
|
@@ -15,17 +26,6 @@ import { Grid, GridItem } from '@strapi/design-system/Grid';
|
|
|
15
26
|
import { Typography } from '@strapi/design-system/Typography';
|
|
16
27
|
import EyeStriked from '@strapi/icons/EyeStriked';
|
|
17
28
|
import Eye from '@strapi/icons/Eye';
|
|
18
|
-
import {
|
|
19
|
-
Form,
|
|
20
|
-
useQuery,
|
|
21
|
-
useNotification,
|
|
22
|
-
useTracking,
|
|
23
|
-
getYupInnerErrors,
|
|
24
|
-
} from '@strapi/helper-plugin';
|
|
25
|
-
import { useHistory } from 'react-router-dom';
|
|
26
|
-
import PropTypes from 'prop-types';
|
|
27
|
-
import { Formik } from 'formik';
|
|
28
|
-
import axios from 'axios';
|
|
29
29
|
import UnauthenticatedLayout, {
|
|
30
30
|
Column,
|
|
31
31
|
LayoutContent,
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import
|
|
4
|
+
import styled from 'styled-components';
|
|
5
|
+
import { Formik } from 'formik';
|
|
6
|
+
import { Form, Link } from '@strapi/helper-plugin';
|
|
5
7
|
import { Box } from '@strapi/design-system/Box';
|
|
6
8
|
import { Stack } from '@strapi/design-system/Stack';
|
|
7
9
|
import { Main } from '@strapi/design-system/Main';
|
|
8
10
|
import { Flex } from '@strapi/design-system/Flex';
|
|
9
|
-
import { Link } from '@strapi/design-system/Link';
|
|
10
11
|
import { Button } from '@strapi/design-system/Button';
|
|
11
12
|
import { TextInput } from '@strapi/design-system/TextInput';
|
|
12
13
|
import { Typography } from '@strapi/design-system/Typography';
|
|
13
14
|
import EyeStriked from '@strapi/icons/EyeStriked';
|
|
14
15
|
import Eye from '@strapi/icons/Eye';
|
|
15
|
-
import styled from 'styled-components';
|
|
16
|
-
import { Formik } from 'formik';
|
|
17
16
|
import UnauthenticatedLayout, {
|
|
18
17
|
Column,
|
|
19
18
|
LayoutContent,
|