Move the general section in its own

Signed-off-by: soupette <cyril.lpz@gmail.com>
This commit is contained in:
soupette 2020-06-08 11:25:05 +02:00 committed by Alexandre Bodin
parent 92c3d2ee1f
commit 30d8d08cc4
9 changed files with 571 additions and 277 deletions

View File

@ -1,18 +0,0 @@
// I am keeping this file if we want to join the scrollbars again
import styled from 'styled-components';
const LeftMenuSection = styled.div`
box-sizing: border-box;
display: flex;
flex-direction: column;
flex: 1;
&:first-child {
overflow: hidden;
max-height: 180px;
height: auto;
flex: 0 1 auto;
}
`;
export default LeftMenuSection;

View File

@ -4,8 +4,6 @@ import { useLocation } from 'react-router-dom';
import PropTypes from 'prop-types';
import { get, snakeCase, isEmpty } from 'lodash';
import { SETTINGS_BASE_URL } from '../../../config';
import Wrapper from './Wrapper';
import messages from './messages.json';
import LeftMenuLinkSection from '../LeftMenuLinkSection';
@ -59,43 +57,39 @@ const LeftMenuLinkContainer = ({ plugins }) => {
emptyLinksListMessage: messages.noPluginsInstalled.id,
links: pluginsLinks,
},
general: {
searchable: false,
name: 'general',
links: [
{
icon: 'list',
label: messages.listPlugins.id,
destination: '/list-plugins',
},
{
icon: 'shopping-basket',
label: messages.installNewPlugin.id,
destination: '/marketplace',
},
{
icon: 'cog',
label: messages.settings.id,
destination: SETTINGS_BASE_URL,
},
],
},
// general: {
// searchable: false,
// name: 'general',
// links: [
// {
// icon: 'list',
// label: messages.listPlugins.id,
// destination: '/list-plugins',
// },
// {
// icon: 'shopping-basket',
// label: messages.installNewPlugin.id,
// destination: '/marketplace',
// },
// {
// icon: 'cog',
// label: messages.settings.id,
// destination: SETTINGS_BASE_URL,
// },
// ],
// },
};
return (
<Wrapper>
{Object.keys(menu).map(current => (
<LeftMenuLinkSection
key={current}
links={menu[current].links}
section={current}
location={location}
searchable={menu[current].searchable}
emptyLinksListMessage={menu[current].emptyLinksListMessage}
/>
))}
</Wrapper>
);
return Object.keys(menu).map(current => (
<LeftMenuLinkSection
key={current}
links={menu[current].links}
section={current}
location={location}
searchable={menu[current].searchable}
emptyLinksListMessage={menu[current].emptyLinksListMessage}
/>
));
};
LeftMenuLinkContainer.propTypes = {

View File

@ -0,0 +1,31 @@
import styled from 'styled-components';
import PropTypes from 'prop-types';
const LinksContainer = styled.div`
padding-top: 0.7rem;
position: absolute;
top: ${props => props.theme.main.sizes.leftMenu.height};
right: 0;
bottom: 0;
left: 0;
overflow-y: auto;
height: calc(100vh - (${props => props.theme.main.sizes.leftMenu.height} + 3rem));
box-sizing: border-box;
`;
LinksContainer.defaultProps = {
theme: {
main: {
sizes: {
header: {},
leftMenu: {},
},
},
},
};
LinksContainer.propTypes = {
theme: PropTypes.object,
};
export default LinksContainer;

View File

@ -1,3 +1,5 @@
export { default as LeftMenuFooter } from './LeftMenuFooter';
export { default as LeftMenuHeader } from './LeftMenuHeader';
export { default as LeftMenuLinkContainer } from './LeftMenuLinkContainer';
export { default as LinksContainer } from './LinksContainer';
export { default as LeftMenuLinksSection } from './LeftMenuLinkSection';

View File

@ -6,17 +6,53 @@
import React from 'react';
import PropTypes from 'prop-types';
import { LeftMenuFooter, LeftMenuHeader, LeftMenuLinkContainer } from '../../components/LeftMenu';
import { useLocation } from 'react-router-dom';
import {
LeftMenuLinksSection,
LeftMenuFooter,
LeftMenuHeader,
LeftMenuLinkContainer,
LinksContainer,
} from '../../components/LeftMenu';
import { SETTINGS_BASE_URL } from '../../config';
import Wrapper from './Wrapper';
const LeftMenu = ({ version, plugins }) => (
<Wrapper>
<LeftMenuHeader />
<LeftMenuLinkContainer plugins={plugins} />
<LeftMenuFooter key="footer" version={version} />
</Wrapper>
);
const LeftMenu = ({ version, plugins }) => {
const location = useLocation();
const general = {
searchable: false,
name: 'general',
links: [
{
icon: 'list',
label: 'app.components.LeftMenuLinkContainer.listPlugins',
destination: '/list-plugins',
},
{
icon: 'shopping-basket',
label: 'app.components.LeftMenuLinkContainer.installNewPlugin',
destination: '/marketplace',
},
{
icon: 'cog',
label: 'app.components.LeftMenuLinkContainer.settings',
destination: SETTINGS_BASE_URL,
},
],
};
return (
<Wrapper>
<LeftMenuHeader />
<LinksContainer>
<LeftMenuLinkContainer plugins={plugins} />
<LeftMenuLinksSection section="general" {...general} location={location} />
</LinksContainer>
<LeftMenuFooter key="footer" version={version} />
</Wrapper>
);
};
LeftMenu.propTypes = {
version: PropTypes.string.isRequired,

View File

@ -1,223 +1,446 @@
const data = [
// Admin marketplace
{
action: 'admin::marketplace.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::marketplace.plugins.install',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::marketplace.plugins.uninstall',
subject: null,
fields: null,
conditions: [],
},
const data = {
user1: [
// Admin marketplace
{
action: 'admin::marketplace.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::marketplace.plugins.install',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::marketplace.plugins.uninstall',
subject: null,
fields: null,
conditions: [],
},
// Admin webhooks
{
action: 'admin::webhooks.create',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::webhooks.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::webhooks.update',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::webhooks.delete',
subject: null,
fields: null,
conditions: [],
},
// Admin webhooks
{
action: 'admin::webhooks.create',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::webhooks.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::webhooks.update',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::webhooks.delete',
subject: null,
fields: null,
conditions: [],
},
// Admin users
{
action: 'admin::users.create',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::users.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::users.update',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::users.delete',
subject: null,
fields: null,
conditions: [],
},
// Admin users
{
action: 'admin::users.create',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::users.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::users.update',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::users.delete',
subject: null,
fields: null,
conditions: [],
},
// Admin roles
{
action: 'admin::roles.create',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::roles.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::roles.update',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::roles.delete',
subject: null,
fields: null,
conditions: [],
},
// Admin roles
{
action: 'admin::roles.create',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::roles.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::roles.update',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::roles.delete',
subject: null,
fields: null,
conditions: [],
},
// Content type builder
{
action: 'plugins::content-type-builder.read',
subject: null,
fields: null,
conditions: null,
},
// Content type builder
{
action: 'plugins::content-type-builder.read',
subject: null,
fields: null,
conditions: null,
},
// Documentation plugin
{
action: 'plugins::documentation.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::documentation.settings.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::documentation.settings.regenerate',
subject: null,
fields: null,
conditions: null,
},
// Documentation plugin
{
action: 'plugins::documentation.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::documentation.settings.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::documentation.settings.regenerate',
subject: null,
fields: null,
conditions: null,
},
// Upload plugin
{
action: 'plugins::upload.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.create',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.dowload',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.copy-link',
subject: null,
fields: null,
conditions: null,
},
// Upload plugin
{
action: 'plugins::upload.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.create',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.dowload',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.copy-link',
subject: null,
fields: null,
conditions: null,
},
// Users-permissions
{
action: 'plugins::users-permissions.roles.create',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.roles.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.roles.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.roles.delete',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.email-templates.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.email-templates.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.providers.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.providers.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.advanced-settings.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.advanced-settings.update',
subject: null,
fields: null,
conditions: null,
},
];
// Users-permissions
{
action: 'plugins::users-permissions.roles.create',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.roles.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.roles.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.roles.delete',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.email-templates.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.email-templates.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.providers.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.providers.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.advanced-settings.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.advanced-settings.update',
subject: null,
fields: null,
conditions: null,
},
],
user2: [
// Admin marketplace
{
action: 'admin::marketplace.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::marketplace.plugins.install',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::marketplace.plugins.uninstall',
subject: null,
fields: null,
conditions: [],
},
// Admin webhooks
{
action: 'admin::webhooks.create',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::webhooks.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::webhooks.update',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::webhooks.delete',
subject: null,
fields: null,
conditions: [],
},
// Admin users
{
action: 'admin::users.create',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::users.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::users.update',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::users.delete',
subject: null,
fields: null,
conditions: [],
},
// Admin roles
{
action: 'admin::roles.create',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::roles.read',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::roles.update',
subject: null,
fields: null,
conditions: [],
},
{
action: 'admin::roles.delete',
subject: null,
fields: null,
conditions: [],
},
// Content type builder
{
action: 'plugins::content-type-builder.read',
subject: null,
fields: null,
conditions: null,
},
// Documentation plugin
// {
// action: 'plugins::documentation.read',
// subject: null,
// fields: null,
// conditions: null,
// },
// {
// action: 'plugins::documentation.settings.update',
// subject: null,
// fields: null,
// conditions: null,
// },
// {
// action: 'plugins::documentation.settings.regenerate',
// subject: null,
// fields: null,
// conditions: null,
// },
// Upload plugin
{
action: 'plugins::upload.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.create',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.dowload',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::upload.assets.copy-link',
subject: null,
fields: null,
conditions: null,
},
// Users-permissions
{
action: 'plugins::users-permissions.roles.create',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.roles.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.roles.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.roles.delete',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.email-templates.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.email-templates.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.providers.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.providers.update',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.advanced-settings.read',
subject: null,
fields: null,
conditions: null,
},
{
action: 'plugins::users-permissions.advanced-settings.update',
subject: null,
fields: null,
conditions: null,
},
],
};
export default data;

View File

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

View File

@ -0,0 +1,11 @@
/**
*
* UserContext
*
*/
import { createContext } from 'react';
const UserContext = createContext();
export default UserContext;

View File

@ -77,10 +77,12 @@ export { default as Row } from './components/Row';
export { default as SearchInfo } from './components/SearchInfo';
export { default as SelectNav } from './components/SelectNav';
export { default as SelectWrapper } from './components/SelectWrapper';
export { default as UserProvider } from './components/UserProvider';
export { default as ViewContainer } from './components/ViewContainer';
// Contexts
export { GlobalContext, GlobalContextProvider, useGlobalContext } from './contexts/GlobalContext';
export { default as UserContext } from './contexts/UserContext';
// Hooks
export { default as useQuery } from './hooks/useQuery';