From 30d8d08cc4ef1ca3c3d63ed441d8ee6708570fd5 Mon Sep 17 00:00:00 2001 From: soupette Date: Mon, 8 Jun 2020 11:25:05 +0200 Subject: [PATCH] Move the general section in its own Signed-off-by: soupette --- .../LeftMenuLinkContainer/MenuSection.js | 18 - .../LeftMenu/LeftMenuLinkContainer/index.js | 68 +- .../LeftMenu/LinksContainer/index.js | 31 + .../admin/src/components/LeftMenu/index.js | 2 + .../admin/src/containers/LeftMenu/index.js | 52 +- .../admin/src/utils/fakePermissionsData.js | 651 ++++++++++++------ .../lib/src/components/UserProvider/index.js | 13 + .../lib/src/contexts/UserContext.js | 11 + .../strapi-helper-plugin/lib/src/index.js | 2 + 9 files changed, 571 insertions(+), 277 deletions(-) delete mode 100644 packages/strapi-admin/admin/src/components/LeftMenu/LeftMenuLinkContainer/MenuSection.js create mode 100644 packages/strapi-admin/admin/src/components/LeftMenu/LinksContainer/index.js create mode 100644 packages/strapi-helper-plugin/lib/src/components/UserProvider/index.js create mode 100644 packages/strapi-helper-plugin/lib/src/contexts/UserContext.js diff --git a/packages/strapi-admin/admin/src/components/LeftMenu/LeftMenuLinkContainer/MenuSection.js b/packages/strapi-admin/admin/src/components/LeftMenu/LeftMenuLinkContainer/MenuSection.js deleted file mode 100644 index 401334387d..0000000000 --- a/packages/strapi-admin/admin/src/components/LeftMenu/LeftMenuLinkContainer/MenuSection.js +++ /dev/null @@ -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; diff --git a/packages/strapi-admin/admin/src/components/LeftMenu/LeftMenuLinkContainer/index.js b/packages/strapi-admin/admin/src/components/LeftMenu/LeftMenuLinkContainer/index.js index beb3a128a4..b3ed1f9449 100644 --- a/packages/strapi-admin/admin/src/components/LeftMenu/LeftMenuLinkContainer/index.js +++ b/packages/strapi-admin/admin/src/components/LeftMenu/LeftMenuLinkContainer/index.js @@ -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 ( - - {Object.keys(menu).map(current => ( - - ))} - - ); + return Object.keys(menu).map(current => ( + + )); }; LeftMenuLinkContainer.propTypes = { diff --git a/packages/strapi-admin/admin/src/components/LeftMenu/LinksContainer/index.js b/packages/strapi-admin/admin/src/components/LeftMenu/LinksContainer/index.js new file mode 100644 index 0000000000..0e95145ebf --- /dev/null +++ b/packages/strapi-admin/admin/src/components/LeftMenu/LinksContainer/index.js @@ -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; diff --git a/packages/strapi-admin/admin/src/components/LeftMenu/index.js b/packages/strapi-admin/admin/src/components/LeftMenu/index.js index 2dd0ba89c5..63e13aec39 100644 --- a/packages/strapi-admin/admin/src/components/LeftMenu/index.js +++ b/packages/strapi-admin/admin/src/components/LeftMenu/index.js @@ -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'; diff --git a/packages/strapi-admin/admin/src/containers/LeftMenu/index.js b/packages/strapi-admin/admin/src/containers/LeftMenu/index.js index 312669fb51..f008f81037 100644 --- a/packages/strapi-admin/admin/src/containers/LeftMenu/index.js +++ b/packages/strapi-admin/admin/src/containers/LeftMenu/index.js @@ -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 }) => ( - - - - - -); +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 ( + + + + + + + + + ); +}; LeftMenu.propTypes = { version: PropTypes.string.isRequired, diff --git a/packages/strapi-admin/admin/src/utils/fakePermissionsData.js b/packages/strapi-admin/admin/src/utils/fakePermissionsData.js index d039ad09af..cfc1730021 100644 --- a/packages/strapi-admin/admin/src/utils/fakePermissionsData.js +++ b/packages/strapi-admin/admin/src/utils/fakePermissionsData.js @@ -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; diff --git a/packages/strapi-helper-plugin/lib/src/components/UserProvider/index.js b/packages/strapi-helper-plugin/lib/src/components/UserProvider/index.js new file mode 100644 index 0000000000..0a6ff3d549 --- /dev/null +++ b/packages/strapi-helper-plugin/lib/src/components/UserProvider/index.js @@ -0,0 +1,13 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import UserContext from '../../contexts/UserContext'; + +const UserProvider = ({ children, value }) => { + return {children}; +}; + +UserProvider.propTypes = { + children: PropTypes.node.isRequired, +}; + +export default UserProvider; diff --git a/packages/strapi-helper-plugin/lib/src/contexts/UserContext.js b/packages/strapi-helper-plugin/lib/src/contexts/UserContext.js new file mode 100644 index 0000000000..05f7a173d5 --- /dev/null +++ b/packages/strapi-helper-plugin/lib/src/contexts/UserContext.js @@ -0,0 +1,11 @@ +/** + * + * UserContext + * + */ + +import { createContext } from 'react'; + +const UserContext = createContext(); + +export default UserContext; diff --git a/packages/strapi-helper-plugin/lib/src/index.js b/packages/strapi-helper-plugin/lib/src/index.js index 8ba4bae7c2..c6e2a99683 100644 --- a/packages/strapi-helper-plugin/lib/src/index.js +++ b/packages/strapi-helper-plugin/lib/src/index.js @@ -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';