Remove old components

Signed-off-by: soupette <cyril@strapi.io>
This commit is contained in:
soupette 2021-09-06 11:20:13 +02:00
parent 42534d3007
commit e0aa76e435
22 changed files with 161 additions and 785 deletions

View File

@ -1,33 +0,0 @@
import PropTypes from 'prop-types';
import styled from 'styled-components';
// You can see in the index.js file that I used the design system to do the UI integration but
// sometimes, we need to create some "temporary" custom style to fix the baseline alignment.
// -----
// TODO : remove this component. I think that this kind components should not exist in Strapi.
// I create it to temporary fix the baseline alignment until we have the design system.
const BaselineAlignment = styled.div`
padding-top: ${({ size, top }) => top && size};
padding-right: ${({ size, right }) => right && size};
padding-bottom: ${({ size, bottom }) => bottom && size};
padding-left: ${({ size, left }) => left && size};
`;
BaselineAlignment.defaultProps = {
bottom: false,
left: false,
right: false,
size: '0',
top: false,
};
BaselineAlignment.propTypes = {
bottom: PropTypes.bool,
left: PropTypes.bool,
right: PropTypes.bool,
size: PropTypes.string,
top: PropTypes.bool,
};
export default BaselineAlignment;

View File

@ -1,9 +0,0 @@
import styled from 'styled-components';
const Bloc = styled.div`
background: ${({ theme }) => theme.main.colors.white};
border-radius: ${({ theme }) => theme.main.sizes.borderRadius};
box-shadow: 0 2px 4px #e3e9f3;
`;
export default Bloc;

View File

@ -1,13 +0,0 @@
import styled from 'styled-components';
import { Container } from 'reactstrap';
const ContainerFluid = styled(Container)`
padding: ${({ padding }) => padding};
`;
ContainerFluid.defaultProps = {
fluid: true,
padding: '18px 30px 60px 30px !important',
};
export default ContainerFluid;

View File

@ -1,60 +0,0 @@
import React from 'react';
import { Flex, Padded, Text } from '@buffetjs/core';
import { BaselineAlignment, LoadingIndicator, Row } from '@strapi/helper-plugin';
import PropTypes from 'prop-types';
import Bloc from '../Bloc';
const FormBloc = ({ children, actions, isLoading, title, subtitle }) => (
<Bloc>
<BaselineAlignment top size={title ? '18px' : '22px'} />
<Padded left right size="sm">
{isLoading ? (
<>
<LoadingIndicator />
<BaselineAlignment bottom size="22px" />
</>
) : (
<>
{title && (
<>
<Padded left right size="xs">
<Flex justifyContent="space-between">
<Padded left right size="sm">
<Text fontSize="lg" fontWeight="bold">
{title}
</Text>
{subtitle && (
<Text color="grey" lineHeight="1.8rem">
{subtitle}
</Text>
)}
</Padded>
{actions}
</Flex>
</Padded>
<BaselineAlignment top size="18px" />
</>
)}
<Row>{children}</Row>
</>
)}
</Padded>
</Bloc>
);
FormBloc.defaultProps = {
actions: null,
isLoading: false,
subtitle: null,
title: null,
};
FormBloc.propTypes = {
actions: PropTypes.any,
children: PropTypes.node.isRequired,
isLoading: PropTypes.bool,
subtitle: PropTypes.string,
title: PropTypes.string,
};
export default FormBloc;

View File

@ -1,15 +0,0 @@
import styled from 'styled-components';
import { Button as Base } from '@buffetjs/core';
const Button = styled(Base)`
width: 100%;
text-transform: ${({ textTransform }) => textTransform};
`;
Button.defaultProps = {
color: 'primary',
type: 'button',
textTransform: 'none',
};
export default Button;

View File

@ -1,40 +0,0 @@
/**
*
* Header
*
*/
import styled from 'styled-components';
import PropTypes from 'prop-types';
const Header = styled.div`
width: 100%;
height: ${props => props.theme.main.sizes.header.height};
position: fixed;
z-index: 1040;
left: ${props => props.theme.main.sizes.leftMenu.width};
box-shadow: 0 1px 2px 0 rgba(40, 42, 49, 0.16);
background-color: ${props => props.theme.main.colors.white};
line-height: ${props => props.theme.main.sizes.header.height};
`;
Header.defaultProps = {
theme: {
main: {
colors: {},
sizes: {
header: {},
leftMenu: {},
},
},
},
};
Header.propTypes = {
theme: PropTypes.object,
};
export default Header;

View File

@ -1,8 +0,0 @@
import styled from 'styled-components';
import { HeaderSearch as Base } from '@strapi/helper-plugin';
const HeaderSearch = styled(Base)`
left: 32rem;
`;
export default HeaderSearch;

View File

@ -1,99 +0,0 @@
import React, { useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import upperFirst from 'lodash/upperFirst';
import { useHistory } from 'react-router-dom';
import { useIntl } from 'react-intl';
import { useQuery } from '@strapi/helper-plugin';
import StyledHeaderSearch from './HeaderSearch';
const HeaderSearch = ({ label, queryParameter }) => {
const { formatMessage } = useIntl();
const query = useQuery();
const searchValue = query.get(queryParameter) || '';
const [value, setValue] = useState(searchValue);
const { push } = useHistory();
const displayedLabel =
typeof label === 'object'
? formatMessage({ ...label, defaultMessage: label.defaultMessage || label.id })
: label;
const capitalizedLabel = upperFirst(displayedLabel);
useEffect(() => {
if (searchValue === '') {
// Synchronise the search
handleClear();
}
}, [searchValue]);
useEffect(() => {
const handler = setTimeout(() => {
let currentSearch = query;
if (value) {
// Create a new search in order to remove the filters
currentSearch = new URLSearchParams('');
// Keep the previous params sort, pageSize, page
const pageSize = query.get('pageSize');
const page = query.get('page');
const sort = query.get('sort');
if (page) {
currentSearch.set('page', page);
}
if (pageSize) {
currentSearch.set('pageSize', pageSize);
}
if (sort) {
currentSearch.set('sort', sort);
}
currentSearch.set(queryParameter, encodeURIComponent(value));
} else {
currentSearch.delete(queryParameter);
}
push({ search: currentSearch.toString() });
}, 300);
return () => clearTimeout(handler);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [value]);
const handleChange = ({ target: { value } }) => {
setValue(value);
};
const handleClear = () => {
setValue('');
};
return (
<StyledHeaderSearch
label={capitalizedLabel}
name={queryParameter}
value={value}
onChange={handleChange}
onClear={handleClear}
/>
);
};
HeaderSearch.defaultProps = {
queryParameter: '_q',
};
HeaderSearch.propTypes = {
label: PropTypes.oneOfType([
PropTypes.string,
PropTypes.shape({
id: PropTypes.string.isRequired,
defaultMessage: PropTypes.string,
}),
]).isRequired,
queryParameter: PropTypes.string,
};
export default HeaderSearch;

View File

@ -1,38 +0,0 @@
import React, { useMemo } from 'react';
import { translatedErrors } from '@strapi/helper-plugin';
import { useIntl } from 'react-intl';
import { Inputs } from '@buffetjs/custom';
import PropTypes from 'prop-types';
const IntlInput = ({ label: labelId, defaultMessage, error, ...rest }) => {
const { formatMessage } = useIntl();
const label = formatMessage({ id: labelId, defaultMessage: defaultMessage || labelId });
const translatedError = error ? formatMessage(error) : null;
const formattedErrors = useMemo(() => {
return Object.keys(translatedErrors).reduce((acc, current) => {
acc[current] = formatMessage({ id: translatedErrors[current] });
return acc;
}, {});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<Inputs {...rest} label={label} error={translatedError} translatedErrors={formattedErrors} />
);
};
IntlInput.defaultProps = {
defaultMessage: null,
error: null,
};
IntlInput.propTypes = {
defaultMessage: PropTypes.string,
error: PropTypes.shape({
id: PropTypes.string,
}),
label: PropTypes.string.isRequired,
};
export default IntlInput;

View File

@ -1,147 +0,0 @@
import styled from 'styled-components';
const Wrapper = styled.div`
-webkit-font-smoothing: antialiased;
> div {
height: 6rem;
line-height: 5.8rem;
z-index: 999;
> button {
width: 100%;
padding: 0 30px;
background: transparent;
border: none;
border-radius: 0;
color: #333740;
font-weight: 500;
text-align: right;
cursor: pointer;
transition: background 0.2s ease-out;
&:hover,
&:focus,
&:active {
color: #333740;
background-color: #fafafb !important;
}
> i,
> svg {
margin-left: 10px;
transition: transform 0.3s ease-out;
&[alt='true'] {
transform: rotateX(180deg);
}
}
}
}
.localeDropdownContent {
-webkit-font-smoothing: antialiased;
span {
color: #333740;
font-size: 13px;
font-family: Lato;
font-weight: 500;
letter-spacing: 0.5;
vertical-align: baseline;
}
}
.localeDropdownMenu {
min-width: 90px !important;
max-height: 162px !important;
overflow: auto !important;
margin: 0 !important;
padding: 0;
line-height: 1.8rem;
border: none !important;
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
box-shadow: 0 1px 4px 0px rgba(40, 42, 49, 0.05);
&:before {
content: '';
position: absolute;
top: -3px;
left: -1px;
width: calc(100% + 1px);
height: 3px;
box-shadow: 0 1px 2px 0 rgba(40, 42, 49, 0.16);
}
> button {
height: 40px;
padding: 0px 15px;
line-height: 40px;
color: #f75b1d;
font-size: 13px;
font-weight: 500;
letter-spacing: 0.5;
&:hover,
&:focus,
&:active {
background-color: #fafafb !important;
border-radius: 0px;
cursor: pointer;
}
}
> button:first-child {
line-height: 50px;
margin-bottom: 4px;
&:hover,
&:active {
color: #333740;
}
}
> button:not(:first-child) {
height: 36px;
line-height: 36px;
> i,
> svg {
margin-left: 10px;
}
}
}
.localeDropdownMenuNotLogged {
background: transparent !important;
box-shadow: none !important;
border: 1px solid #e3e9f3 !important;
border-top: 0px !important;
button {
padding-left: 17px;
&:hover {
background-color: #f7f8f8 !important;
}
}
&:before {
box-shadow: none !important;
}
}
.localeToggleItem {
img {
max-height: 13.37px;
margin-left: 9px;
}
&:active {
color: black;
}
&:hover {
background-color: #fafafb !important;
}
}
.localeToggleItemActive {
color: #333740 !important;
}
`;
export default Wrapper;

View File

@ -1,11 +0,0 @@
import styled from 'styled-components';
const NavTopRightWrapper = styled.div`
position: fixed;
top: 0;
right: 0;
display: flex;
z-index: 1050;
`;
export default NavTopRightWrapper;

View File

@ -1,71 +0,0 @@
import React, { useMemo } from 'react';
import { Header as PluginHeader } from '@buffetjs/custom';
import { isEqual } from 'lodash';
import { useIntl } from 'react-intl';
import PropTypes from 'prop-types';
const Header = ({
content,
initialData,
isLoading,
label,
modifiedData,
onCancel,
showHeaderButtonLoader,
}) => {
const { formatMessage } = useIntl();
const areButtonsDisabled = useMemo(() => {
return isEqual(modifiedData, initialData);
}, [initialData, modifiedData]);
/* eslint-disable indent */
const headerProps = {
actions: isLoading
? []
: [
{
onClick: onCancel,
disabled: areButtonsDisabled,
color: 'cancel',
label: formatMessage({
id: 'app.components.Button.reset',
}),
type: 'button',
},
{
disabled: areButtonsDisabled,
color: 'success',
label: formatMessage({
id: 'app.components.Button.save',
}),
type: 'submit',
isLoading: showHeaderButtonLoader,
},
],
title: {
label,
},
content,
};
/* eslint-enable indent */
return <PluginHeader {...headerProps} isLoading={isLoading} />;
};
Header.defaultProps = {
content: null,
label: '',
showHeaderButtonLoader: false,
};
Header.propTypes = {
content: PropTypes.string,
initialData: PropTypes.object.isRequired,
isLoading: PropTypes.bool.isRequired,
label: PropTypes.string,
modifiedData: PropTypes.object.isRequired,
onCancel: PropTypes.func.isRequired,
showHeaderButtonLoader: PropTypes.bool,
};
export default Header;

View File

@ -1,2 +0,0 @@
/* eslint-disable import/prefer-default-export */
export { default as Header } from './Header';

View File

@ -1,17 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import SettingsHeaderSearchContext from '../../contexts/SettingsHeaderSearchContext';
const SettingsHeaderSearchContextProvider = ({ children, ...rest }) => {
return (
<SettingsHeaderSearchContext.Provider value={rest.value}>
{children}
</SettingsHeaderSearchContext.Provider>
);
};
SettingsHeaderSearchContextProvider.propTypes = {
children: PropTypes.node.isRequired,
};
export default SettingsHeaderSearchContextProvider;

View File

@ -1,25 +0,0 @@
import React from 'react';
import { Col } from 'reactstrap';
import PropTypes from 'prop-types';
import IntlInput from '../IntlInput';
// TODO: remove this component
const SizedInput = ({ size, ...rest }) => {
return (
<Col {...size}>
<IntlInput {...rest} />
</Col>
);
};
SizedInput.defaultProps = {
size: {
xs: '6',
},
};
SizedInput.propTypes = {
size: PropTypes.object,
};
export default SizedInput;

View File

@ -1,5 +0,0 @@
import { createContext } from 'react';
const SettingsHeaderSearchContext = createContext({});
export default SettingsHeaderSearchContext;

View File

@ -5,7 +5,6 @@ export { default as useFetchPluginsFromMarketPlace } from './useFetchPluginsFrom
export { default as useFetchRole } from './useFetchRole'; export { default as useFetchRole } from './useFetchRole';
export { default as useMenu } from './useMenu'; export { default as useMenu } from './useMenu';
export { default as useRolesList } from './useRolesList'; export { default as useRolesList } from './useRolesList';
export { default as useSettingsHeaderSearchContext } from './useSettingsHeaderSearchContext';
export { default as useSettingsMenu } from './useSettingsMenu'; export { default as useSettingsMenu } from './useSettingsMenu';
export { default as useSettingsForm } from './useSettingsForm'; export { default as useSettingsForm } from './useSettingsForm';
export { default as usePermissionsDataManager } from './usePermissionsDataManager'; export { default as usePermissionsDataManager } from './usePermissionsDataManager';

View File

@ -1,6 +0,0 @@
import { useContext } from 'react';
import SettingsHeaderSearchContext from '../../contexts/SettingsHeaderSearchContext';
const useSettingsHeaderSearchContext = () => useContext(SettingsHeaderSearchContext);
export default useSettingsHeaderSearchContext;

View File

@ -28,9 +28,9 @@ const MarketplacePage = lazy(() =>
); );
const NotFoundPage = lazy(() => import('../NotFoundPage')); const NotFoundPage = lazy(() => import('../NotFoundPage'));
// const ProfilePage = lazy(() => const ProfilePage = lazy(() =>
// import(/* webpackChunkName: "Admin_profilePage" */ '../ProfilePage') import(/* webpackChunkName: "Admin_profilePage" */ '../ProfilePage')
// ); );
const SettingsPage = lazy(() => const SettingsPage = lazy(() =>
import(/* webpackChunkName: "Admin_settingsPage" */ '../SettingsPage') import(/* webpackChunkName: "Admin_settingsPage" */ '../SettingsPage')
); );
@ -84,8 +84,9 @@ const Admin = () => {
<Suspense fallback={<LoadingIndicatorPage />}> <Suspense fallback={<LoadingIndicatorPage />}>
<Switch> <Switch>
<Route path="/" component={HomePage} exact /> <Route path="/" component={HomePage} exact />
<Route path="/me" component={ProfilePage} exact />
{/* TODO */} {/* TODO */}
{/* <Route path="/me" component={ProfilePage} exact /> {/* <
<Route path="/content-manager" component={CM} /> <Route path="/content-manager" component={CM} />
<Route path="/plugins/content-type-builder" component={CTB} /> <Route path="/plugins/content-type-builder" component={CTB} />

View File

@ -1,10 +1,5 @@
import styled from 'styled-components'; import styled from 'styled-components';
import ContainerFluid from '../../components/ContainerFluid';
const Wrapper = styled(ContainerFluid)` const Wrapper = styled.div``;
> div:first-child {
margin-bottom: 11px;
}
`;
export default Wrapper; export default Wrapper;

View File

@ -1,159 +1,160 @@
import React, { useMemo } from 'react'; // import React, { useMemo } from 'react';
import { BaselineAlignment, auth, Select, Option } from '@strapi/helper-plugin'; // import { BaselineAlignment, auth, Select, Option } from '@strapi/helper-plugin';
import { Padded, Text } from '@buffetjs/core'; // import { Padded, Text } from '@buffetjs/core';
import { Col } from 'reactstrap'; // import { Col } from 'reactstrap';
import { get } from 'lodash'; // import { get } from 'lodash';
import { useIntl } from 'react-intl'; // import { useIntl } from 'react-intl';
import ContainerFluid from '../../components/ContainerFluid'; // import ContainerFluid from '../../components/ContainerFluid';
import useLocalesProvider from '../../components/LocalesProvider/useLocalesProvider'; // import useLocalesProvider from '../../components/LocalesProvider/useLocalesProvider';
import PageTitle from '../../components/PageTitle'; // import PageTitle from '../../components/PageTitle';
import SizedInput from '../../components/SizedInput'; // import SizedInput from '../../components/SizedInput';
import { Header } from '../../components/Settings'; // import FormBloc from '../../components/FormBloc';
import FormBloc from '../../components/FormBloc'; // import { useSettingsForm } from '../../hooks';
import { useSettingsForm } from '../../hooks'; // import ProfilePageLabel from './components';
import ProfilePageLabel from './components'; // import { form, schema } from './utils';
import { form, schema } from './utils';
const ProfilePage = () => { // const ProfilePage = () => {
const { changeLocale, localeNames } = useLocalesProvider(); // const { changeLocale, localeNames } = useLocalesProvider();
const { formatMessage } = useIntl(); // const { formatMessage } = useIntl();
const onSubmitSuccessCb = data => { // const onSubmitSuccessCb = data => {
changeLocale(data.preferedLanguage); // changeLocale(data.preferedLanguage);
auth.setUserInfo(data); // auth.setUserInfo(data);
}; // };
const [ // const [
{ formErrors, initialData, isLoading, modifiedData, showHeaderLoader, showHeaderButtonLoader }, // { formErrors, initialData, isLoading, modifiedData, showHeaderLoader, showHeaderButtonLoader },
// eslint-disable-next-line no-unused-vars // // eslint-disable-next-line no-unused-vars
_, // _,
{ handleCancel, handleChange, handleSubmit, setField }, // { handleCancel, handleChange, handleSubmit, setField },
] = useSettingsForm('/admin/users/me', schema, onSubmitSuccessCb, [ // ] = useSettingsForm('/admin/users/me', schema, onSubmitSuccessCb, [
'email', // 'email',
'firstname', // 'firstname',
'lastname', // 'lastname',
'username', // 'username',
'preferedLanguage', // 'preferedLanguage',
]); // ]);
const headerLabel = useMemo(() => { // const headerLabel = useMemo(() => {
const userInfos = auth.getUserInfo(); // const userInfos = auth.getUserInfo();
if (modifiedData) { // if (modifiedData) {
return modifiedData.username || `${modifiedData.firstname} ${modifiedData.lastname}`; // return modifiedData.username || `${modifiedData.firstname} ${modifiedData.lastname}`;
} // }
return userInfos.username || `${userInfos.firstname} ${userInfos.lastname}`; // return userInfos.username || `${userInfos.firstname} ${userInfos.lastname}`;
}, [modifiedData]); // }, [modifiedData]);
return ( // return (
<> // <>
<PageTitle title="User profile" /> // <PageTitle title="User profile" />
<form onSubmit={handleSubmit}> // <form onSubmit={handleSubmit}>
<ContainerFluid padding="18px 30px 0 30px"> // <ContainerFluid padding="18px 30px 0 30px">
<Header // <Header
isLoading={showHeaderLoader} // isLoading={showHeaderLoader}
initialData={initialData} // initialData={initialData}
label={headerLabel} // label={headerLabel}
modifiedData={modifiedData} // modifiedData={modifiedData}
onCancel={handleCancel} // onCancel={handleCancel}
showHeaderButtonLoader={showHeaderButtonLoader} // showHeaderButtonLoader={showHeaderButtonLoader}
/> // />
<BaselineAlignment top size="3px" /> // <BaselineAlignment top size="3px" />
{/* Experience block */} // {/* Experience block */}
<FormBloc // <FormBloc
isLoading={isLoading} // isLoading={isLoading}
title={formatMessage({ id: 'Settings.profile.form.section.profile.title' })} // title={formatMessage({ id: 'Settings.profile.form.section.profile.title' })}
> // >
{Object.keys(form).map(key => ( // {Object.keys(form).map(key => (
<SizedInput // <SizedInput
{...form[key]} // {...form[key]}
key={key} // key={key}
error={formErrors[key]} // error={formErrors[key]}
name={key} // name={key}
onChange={handleChange} // onChange={handleChange}
value={get(modifiedData, key, '')} // value={get(modifiedData, key, '')}
/> // />
))} // ))}
</FormBloc> // </FormBloc>
<BaselineAlignment top size="2px" /> // <BaselineAlignment top size="2px" />
{/* Password block */} // {/* Password block */}
{!isLoading && ( // {!isLoading && (
<> // <>
<Padded top size="md"> // <Padded top size="md">
<FormBloc // <FormBloc
title={formatMessage({ id: 'Settings.profile.form.section.password.title' })} // title={formatMessage({ id: 'Settings.profile.form.section.password.title' })}
> // >
<SizedInput // <SizedInput
label="Auth.form.password.label" // label="Auth.form.password.label"
type="password" // type="password"
autoComplete="new-password" // autoComplete="new-password"
validations={{}} // validations={{}}
error={formErrors.password} // error={formErrors.password}
name="password" // name="password"
onChange={handleChange} // onChange={handleChange}
value={get(modifiedData, 'password', '')} // value={get(modifiedData, 'password', '')}
/> // />
<SizedInput // <SizedInput
label="Auth.form.confirmPassword.label" // label="Auth.form.confirmPassword.label"
type="password" // type="password"
validations={{}} // validations={{}}
error={formErrors.confirmPassword} // error={formErrors.confirmPassword}
name="confirmPassword" // name="confirmPassword"
onChange={handleChange} // onChange={handleChange}
value={get(modifiedData, 'confirmPassword', '')} // value={get(modifiedData, 'confirmPassword', '')}
/> // />
</FormBloc> // </FormBloc>
</Padded> // </Padded>
<BaselineAlignment top size="13px" /> // <BaselineAlignment top size="13px" />
{/* Interface block */} // {/* Interface block */}
<Padded top size="smd"> // <Padded top size="smd">
<FormBloc // <FormBloc
title={formatMessage({ id: 'Settings.profile.form.section.experience.title' })} // title={formatMessage({ id: 'Settings.profile.form.section.experience.title' })}
> // >
<ProfilePageLabel htmlFor=""> // <ProfilePageLabel htmlFor="">
{formatMessage({ // {formatMessage({
id: 'Settings.profile.form.section.experience.interfaceLanguage', // id: 'Settings.profile.form.section.experience.interfaceLanguage',
})} // })}
</ProfilePageLabel> // </ProfilePageLabel>
<Col xs="6"> // <Col xs="6">
<Select // <Select
aria-labelledby="interface-language" // aria-labelledby="interface-language"
selectedValue={get(modifiedData, 'preferedLanguage')} // selectedValue={get(modifiedData, 'preferedLanguage')}
onChange={nextLocaleCode => setField('preferedLanguage', nextLocaleCode)} // onChange={nextLocaleCode => setField('preferedLanguage', nextLocaleCode)}
> // >
{Object.keys(localeNames).map(language => { // {Object.keys(localeNames).map(language => {
const langName = localeNames[language]; // const langName = localeNames[language];
return ( // return (
<Option value={language} key={language}> // <Option value={language} key={language}>
{langName} // {langName}
</Option> // </Option>
); // );
})} // })}
</Select> // </Select>
<Padded size="sm" top bottom> // <Padded size="sm" top bottom>
<Text color="grey"> // <Text color="grey">
{formatMessage({ // {formatMessage({
id: 'Settings.profile.form.section.experience.interfaceLanguage.hint', // id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',
})} // })}
</Text> // </Text>
</Padded> // </Padded>
</Col> // </Col>
</FormBloc> // </FormBloc>
</Padded> // </Padded>
</> // </>
)} // )}
</ContainerFluid> // </ContainerFluid>
</form> // </form>
<BaselineAlignment bottom size="80px" /> // <BaselineAlignment bottom size="80px" />
</> // </>
); // );
}; // };
export default ProfilePage; // export default ProfilePage;
export default () => 'TODO profile page';

View File

@ -9,14 +9,12 @@
// Here's the file: strapi/docs/3.0.0-beta.x/plugin-development/frontend-settings-api.md // Here's the file: strapi/docs/3.0.0-beta.x/plugin-development/frontend-settings-api.md
// IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED // IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED
import React, { memo, useMemo, useState } from 'react'; import React, { memo, useMemo } from 'react';
import { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin'; import { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin';
import { Switch, Redirect, Route, useParams } from 'react-router-dom'; import { Switch, Redirect, Route, useParams } from 'react-router-dom';
import { Layout } from '@strapi/parts/Layout'; import { Layout } from '@strapi/parts/Layout';
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
import HeaderSearch from '../../components/HeaderSearch';
import PageTitle from '../../components/PageTitle'; import PageTitle from '../../components/PageTitle';
import SettingsSearchHeaderProvider from '../../components/SettingsHeaderSearchContextProvider';
import { useSettingsMenu } from '../../hooks'; import { useSettingsMenu } from '../../hooks';
import { createRoute, makeUniqueRoutes } from '../../utils'; import { createRoute, makeUniqueRoutes } from '../../utils';
import ApplicationInfosPage from '../ApplicationInfosPage'; import ApplicationInfosPage from '../ApplicationInfosPage';
@ -27,9 +25,6 @@ function SettingsPage() {
const { settingId } = useParams(); const { settingId } = useParams();
const { settings } = useStrapiApp(); const { settings } = useStrapiApp();
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();
// TODO
const [headerSearchState, setShowHeaderSearchState] = useState({ show: false, label: '' });
const { isLoading, menu } = useSettingsMenu(); const { isLoading, menu } = useSettingsMenu();
// Creates the admin routes // Creates the admin routes
@ -41,18 +36,6 @@ function SettingsPage() {
const pluginsRoutes = createSectionsRoutes(settings); const pluginsRoutes = createSectionsRoutes(settings);
const toggleHeaderSearch = label =>
setShowHeaderSearchState(prev => {
if (prev.show) {
return {
show: false,
label: '',
};
}
return { label, show: true };
});
// Since the useSettingsMenu hook can make API calls in order to check the links permissions // Since the useSettingsMenu hook can make API calls in order to check the links permissions
// We need to add a loading state to prevent redirecting the user while permissions are being checked // We need to add a loading state to prevent redirecting the user while permissions are being checked
if (isLoading) { if (isLoading) {
@ -69,19 +52,15 @@ function SettingsPage() {
}); });
return ( return (
<SettingsSearchHeaderProvider value={{ toggleHeaderSearch }}> <Layout sideNav={<SettingsNav menu={menu} />}>
<Layout sideNav={<SettingsNav menu={menu} />}> <PageTitle title={settingTitle} />
<PageTitle title={settingTitle} />
<Switch> <Switch>
<Route path="/settings/application-infos" component={ApplicationInfosPage} exact /> <Route path="/settings/application-infos" component={ApplicationInfosPage} exact />
{adminRoutes} {adminRoutes}
{pluginsRoutes} {pluginsRoutes}
</Switch> </Switch>
</Layout>
{headerSearchState.show && <HeaderSearch label={headerSearchState.label} />}
</Layout>
</SettingsSearchHeaderProvider>
); );
} }