diff --git a/examples/getstarted/plugins/myplugin/admin/src/index.js b/examples/getstarted/plugins/myplugin/admin/src/index.js index a55b7faab1..d544d01921 100644 --- a/examples/getstarted/plugins/myplugin/admin/src/index.js +++ b/examples/getstarted/plugins/myplugin/admin/src/index.js @@ -1,9 +1,6 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin'; import pluginPkg from '../../package.json'; import pluginId from './pluginId'; - -import App from './pages/App'; - const pluginDescription = pluginPkg.strapi.description || pluginPkg.description; const icon = pluginPkg.strapi.icon; const name = pluginPkg.strapi.name; @@ -17,7 +14,11 @@ export default { id: `${pluginId}.plugin.name`, defaultMessage: 'My plugin', }, - Component: App, + Component: async () => { + const component = await import(/* webpackChunkName: "my-plugin" */ './pages/App'); + + return component; + }, permissions: [], }); app.registerPlugin({ diff --git a/packages/core/admin/admin/src/components/GlobalStyle/index.js b/packages/core/admin/admin/src/components/GlobalStyle/index.js index 6a588ba689..71333a911d 100644 --- a/packages/core/admin/admin/src/components/GlobalStyle/index.js +++ b/packages/core/admin/admin/src/components/GlobalStyle/index.js @@ -1,11 +1,17 @@ -import 'sanitize.css/sanitize.css'; -import 'bootstrap/dist/css/bootstrap.css'; -import 'font-awesome/css/font-awesome.min.css'; -import '@fortawesome/fontawesome-free/css/all.css'; -// eslint-disable-next-line import/extensions -import '@fortawesome/fontawesome-free/js/all.min.js'; import { createGlobalStyle } from 'styled-components'; +const loadCss = async () => { + await import(/* webpackChunkName: "sanitize-css" */ 'sanitize.css/sanitize.css'); + await import(/* webpackChunkName: "fontawesome-css" */ 'font-awesome/css/font-awesome.min.css'); + await import( + /* webpackChunkName: "fontawesome-css-all" */ '@fortawesome/fontawesome-free/css/all.css' + ); + await import(/* webpackChunkName: "fontawesome-js" */ '@fortawesome/fontawesome-free/js/all.min'); + await import(/* webpackChunkName: "bootstrap" */ 'bootstrap/dist/css/bootstrap.css'); +}; + +loadCss(); + const GlobalStyle = createGlobalStyle` html { font-size: 62.5%; diff --git a/packages/core/admin/admin/src/content-manager/components/InputJSON/index.js b/packages/core/admin/admin/src/content-manager/components/InputJSON/index.js index 5f492f2909..a3f849c2fd 100644 --- a/packages/core/admin/admin/src/content-manager/components/InputJSON/index.js +++ b/packages/core/admin/admin/src/content-manager/components/InputJSON/index.js @@ -7,13 +7,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import cm from 'codemirror'; -import 'codemirror/mode/javascript/javascript'; -import 'codemirror/addon/lint/lint'; -import 'codemirror/addon/lint/javascript-lint'; -import 'codemirror/addon/edit/closebrackets'; -import 'codemirror/addon/selection/mark-selection'; -import 'codemirror/lib/codemirror.css'; -import 'codemirror/theme/solarized.css'; import { trimStart } from 'lodash'; import jsonlint from './jsonlint'; @@ -23,6 +16,26 @@ const WAIT = 600; const stringify = JSON.stringify; const DEFAULT_THEME = 'solarized dark'; +const loadCss = async () => { + await import( + /* webpackChunkName: "codemirror-javacript" */ 'codemirror/mode/javascript/javascript' + ); + await import(/* webpackChunkName: "codemirror-addon-lint" */ 'codemirror/addon/lint/lint'); + await import( + /* webpackChunkName: "codemirror-addon-lint-js" */ 'codemirror/addon/lint/javascript-lint' + ); + await import( + /* webpackChunkName: "codemirror-addon-closebrackets" */ 'codemirror/addon/edit/closebrackets' + ); + await import( + /* webpackChunkName: "codemirror-addon-mark-selection" */ 'codemirror/addon/selection/mark-selection' + ); + await import(/* webpackChunkName: "codemirror-css" */ 'codemirror/lib/codemirror.css'); + await import(/* webpackChunkName: "codemirror-theme" */ 'codemirror/theme/solarized.css'); +}; + +loadCss(); + class InputJSON extends React.Component { timer = null; diff --git a/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js b/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js index e78373284c..17bc08d492 100644 --- a/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js +++ b/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js @@ -1,6 +1,5 @@ /* eslint-disable prefer-template */ import Markdown from 'markdown-it'; -import 'highlight.js/styles/solarized-dark.css'; import { getLanguage, highlightAuto, highlight } from 'highlight.js'; import abbr from 'markdown-it-abbr'; import container from 'markdown-it-container'; @@ -12,6 +11,12 @@ import mark from 'markdown-it-mark'; import sub from 'markdown-it-sub'; import sup from 'markdown-it-sup'; +const loadCss = async () => { + await import(/* webpackChunkName: "highlight.js" */ 'highlight.js/styles/solarized-dark.css'); +}; + +loadCss(); + const md = new Markdown({ html: true, // Enable HTML tags in source xhtmlOut: false, diff --git a/packages/core/admin/admin/src/pages/Admin/tests/index.test.js b/packages/core/admin/admin/src/pages/Admin/tests/index.test.js index 680e172006..bfba9eaeb7 100644 --- a/packages/core/admin/admin/src/pages/Admin/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/Admin/tests/index.test.js @@ -59,7 +59,7 @@ describe('', () => { }, { to: '/plugins/documentation', - Component: () =>
DOCUMENTATION PLUGIN
, + Component: () => ({ default: () =>
DOCUMENTATION PLUGIN
}), }, ], })); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/index.js index abbf2f6793..76cfd9e8d2 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/index.js @@ -45,7 +45,7 @@ function SettingsPage() { ); }, []); - const pluginsRoutes = useMemo(() => createSectionsRoutes(settings), [settings]); + const pluginsRoutes = createSectionsRoutes(settings); // Only display accessible sections const filteredMenu = useMemo(() => getSectionsToDisplay(menu), [menu]); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/tests/index.test.js index 8e6d141276..70f40dd06e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/tests/index.test.js @@ -2,7 +2,7 @@ import React from 'react'; import { Router, Route } from 'react-router-dom'; import { ThemeProvider } from 'styled-components'; import { StrapiAppProvider, AppInfosContext } from '@strapi/helper-plugin'; -import { render, screen } from '@testing-library/react'; +import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { createMemoryHistory } from 'history'; import { SettingsPage } from '..'; @@ -248,7 +248,7 @@ describe('ADMIN | pages | SettingsPage', () => { expect(screen.getByText(/App infos/)).toBeInTheDocument(); }); - it('should create the plugins routes correctly', () => { + it('should create the plugins routes correctly', async () => { useSettingsMenu.mockImplementation(() => ({ isLoading: false, menu: [ @@ -265,7 +265,7 @@ describe('ADMIN | pages | SettingsPage', () => { isDisplayed: true, permissions: [], to: '/settings/internationalization', - Component: () =>
i18n settings
, + Component: () => ({ default: () =>
i18n settings
}), }, ], }, @@ -279,7 +279,7 @@ describe('ADMIN | pages | SettingsPage', () => { isDisplayed: true, permissions: [], to: '/settings/email-settings', - Component: () =>
email settings
, + Component: () => ({ default: () =>
email settings
}), }, ], }, @@ -301,7 +301,7 @@ describe('ADMIN | pages | SettingsPage', () => { isDisplayed: true, permissions: [], to: '/settings/internationalization', - Component: () =>
i18n settings
, + Component: () => ({ default: () =>
i18n settings
}), }, ], }, @@ -315,7 +315,7 @@ describe('ADMIN | pages | SettingsPage', () => { isDisplayed: true, permissions: [], to: '/settings/email-settings', - Component: () =>
email settings
, + Component: () => ({ default: () =>
email settings
}), }, ], }, @@ -329,10 +329,14 @@ describe('ADMIN | pages | SettingsPage', () => { userEvent.click(screen.getByText('i18n.plugin.name')); - expect(screen.getByText(/i18n settings/)).toBeInTheDocument(); + await waitFor(() => { + expect(screen.getByText(/i18n settings/)).toBeInTheDocument(); + }); userEvent.click(screen.getByText('email')); - expect(screen.getByText(/email settings/)).toBeInTheDocument(); + await waitFor(() => { + expect(screen.getByText(/email settings/)).toBeInTheDocument(); + }); }); }); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/utils/defaultRoutes.js b/packages/core/admin/admin/src/pages/SettingsPage/utils/defaultRoutes.js index 0c370f781c..194ad89be3 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/utils/defaultRoutes.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/utils/defaultRoutes.js @@ -1,55 +1,92 @@ import RolesCreatePage from 'ee_else_ce/pages/Roles/CreatePage'; import ProtectedRolesListPage from 'ee_else_ce/pages/Roles/ProtectedListPage'; -import UsersEditPage from '../../Users/ProtectedEditPage'; -import UsersListPage from '../../Users/ProtectedListPage'; -import RolesEditPage from '../../Roles/ProtectedEditPage'; -import WebhooksCreateView from '../../Webhooks/ProtectedCreateView'; -import WebhooksEditView from '../../Webhooks/ProtectedEditView'; -import WebhooksListView from '../../Webhooks/ProtectedListView'; const defaultRoutes = [ { - Component: ProtectedRolesListPage, + Component: () => { + return { default: ProtectedRolesListPage }; + }, + to: '/settings/roles', exact: true, }, { - Component: RolesCreatePage, + Component: () => { + return { default: RolesCreatePage }; + }, to: '/settings/roles/duplicate/:id', exact: true, }, { - Component: RolesCreatePage, + Component: () => { + return { default: RolesCreatePage }; + }, to: '/settings/roles/new', exact: true, }, { - Component: RolesEditPage, + Component: async () => { + const component = await import( + /* webpackChunkName: "admin-edit-roles-page" */ '../../Roles/ProtectedEditPage' + ); + + return component; + }, to: '/settings/roles/:id', exact: true, }, { - Component: UsersListPage, + Component: async () => { + const component = await import( + /* webpackChunkName: "admin-users" */ '../../Users/ProtectedListPage' + ); + + return component; + }, to: '/settings/users', exact: true, }, { - Component: UsersEditPage, + Component: async () => { + const component = await import( + /* webpackChunkName: "admin-edit-users" */ '../../Users/ProtectedEditPage' + ); + + return component; + }, to: '/settings/users/:id', exact: true, }, { - Component: WebhooksCreateView, + Component: async () => { + const component = await import( + /* webpackChunkName: "webhook-edit-page" */ '../../Webhooks/ProtectedCreateView' + ); + + return component; + }, to: '/settings/webhooks/create', exact: true, }, { - Component: WebhooksEditView, + Component: async () => { + const component = await import( + /* webpackChunkName: "webhook-edit-page" */ '../../Webhooks/ProtectedEditView' + ); + + return component; + }, to: '/settings/webhooks/:id', exact: true, }, { - Component: WebhooksListView, + Component: async () => { + const component = await import( + /* webpackChunkName: "webhook-list-page" */ '../../Webhooks/ProtectedListView' + ); + + return component; + }, to: '/settings/webhooks', exact: true, }, diff --git a/packages/core/admin/admin/src/utils/createRoute.js b/packages/core/admin/admin/src/utils/createRoute.js index 841a9dc902..e39d819349 100644 --- a/packages/core/admin/admin/src/utils/createRoute.js +++ b/packages/core/admin/admin/src/utils/createRoute.js @@ -1,8 +1,45 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; +import PropTypes from 'prop-types'; import { Route } from 'react-router-dom'; +import { LoadingIndicatorPage } from '@strapi/helper-plugin'; + +const LazyCompo = ({ loadComponent }) => { + const [Compo, setCompo] = useState(null); + + useEffect(() => { + const loadCompo = async () => { + try { + const loadedCompo = await loadComponent(); + + setCompo(() => loadedCompo.default); + } catch (err) { + console.log(err); + } + }; + + loadCompo(); + }, [loadComponent]); + + if (Compo) { + return ; + } + + return ; +}; const createRoute = (Component, to, exact) => { - return ; + return ( + } + key={to} + path={to} + exact={exact || false} + /> + ); +}; + +LazyCompo.propTypes = { + loadComponent: PropTypes.func.isRequired, }; export default createRoute; diff --git a/packages/core/admin/admin/src/utils/tests/createRoute.test.js b/packages/core/admin/admin/src/utils/tests/createRoute.test.js index f4dc39ffdb..de58b514b6 100644 --- a/packages/core/admin/admin/src/utils/tests/createRoute.test.js +++ b/packages/core/admin/admin/src/utils/tests/createRoute.test.js @@ -5,12 +5,11 @@ describe('ADMIN | CONTAINER | SettingsPage | utils | createRoute', () => { const compo = () => 'test'; const { - props: { component, path, exact }, + props: { path, exact }, key, } = createRoute(compo, '/test', true); expect(key).toEqual('/test'); - expect(component()).toEqual('test'); expect(exact).toBeTruthy(); expect(path).toEqual('/test'); }); diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/utils/customRoutes.js b/packages/core/admin/ee/admin/pages/SettingsPage/utils/customRoutes.js index 10ebd519a4..a7f6485a9d 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/utils/customRoutes.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/utils/customRoutes.js @@ -1,9 +1,13 @@ -import SingleSignOn from '../SingleSignOn'; - const ssoRoutes = strapi.features.isEnabled(strapi.features.SSO) ? [ { - Component: SingleSignOn, + Component: async () => { + const component = await import( + /* webpackChunkName: "sso-settings-page" */ '../SingleSignOn' + ); + + return component; + }, to: '/settings/single-sign-on', exact: true, }, diff --git a/packages/core/email/admin/src/index.js b/packages/core/email/admin/src/index.js index 2126c2eed1..9bcfe7d1de 100644 --- a/packages/core/email/admin/src/index.js +++ b/packages/core/email/admin/src/index.js @@ -5,14 +5,12 @@ // Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated // IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED -import React from 'react'; -import { CheckPagePermissions, prefixPluginTranslations } from '@strapi/helper-plugin'; +import { prefixPluginTranslations } from '@strapi/helper-plugin'; import pluginPkg from '../../package.json'; import pluginId from './pluginId'; import pluginLogo from './assets/images/logo.svg'; import pluginPermissions from './permissions'; import getTrad from './utils/getTrad'; -import SettingsPage from './pages/Settings'; const pluginDescription = pluginPkg.strapi.description || pluginPkg.description; const icon = pluginPkg.strapi.icon; @@ -34,12 +32,13 @@ export default { }, id: 'settings', to: `/settings/${pluginId}`, - Component: () => ( - - - - ), + Component: async () => { + const component = await import( + /* webpackChunkName: "email-settings-page" */ './pages/Settings' + ); + return component; + }, permissions: pluginPermissions.settings, }, ] diff --git a/packages/core/email/admin/src/pages/Settings/index.js b/packages/core/email/admin/src/pages/Settings/index.js index baedd23eae..d6d59214b8 100644 --- a/packages/core/email/admin/src/pages/Settings/index.js +++ b/packages/core/email/admin/src/pages/Settings/index.js @@ -20,6 +20,12 @@ import { AlignedButton, Text } from './components'; import schema from '../../utils/schema'; import pluginPermissions from '../../permissions'; +const ProtectedSettingsPage = () => ( + + + +); + const SettingsPage = () => { const toggleNotification = useNotification(); const { formatMessage } = useIntl(); @@ -205,4 +211,4 @@ const SettingsPage = () => { ); }; -export default SettingsPage; +export default ProtectedSettingsPage; diff --git a/packages/core/strapi/lib/services/core-store.js b/packages/core/strapi/lib/services/core-store.js index 76aadefc43..40499bdb04 100644 --- a/packages/core/strapi/lib/services/core-store.js +++ b/packages/core/strapi/lib/services/core-store.js @@ -86,8 +86,6 @@ const createCoreStore = ({ environment: defaultEnv, db }) => { type: (typeof value).toString(), }); - - await db.query('strapi::core-store').update({ where: { id: data.id }, data }); } else { const data = Object.assign({}, where, { diff --git a/packages/core/upload/admin/src/index.js b/packages/core/upload/admin/src/index.js index a48cba5720..f784d02912 100644 --- a/packages/core/upload/admin/src/index.js +++ b/packages/core/upload/admin/src/index.js @@ -4,15 +4,13 @@ // Here's the file: strapi/docs/3.0.0-beta.x/guides/registering-a-field-in-admin.md // Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated // IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED -import React from 'react'; -import { CheckPagePermissions, prefixPluginTranslations } from '@strapi/helper-plugin'; +import { prefixPluginTranslations } from '@strapi/helper-plugin'; import pluginPkg from '../../package.json'; import pluginLogo from './assets/images/logo.svg'; import pluginPermissions from './permissions'; import Initializer from './components/Initializer'; import InputMedia from './components/InputMedia'; import InputModalStepper from './components/InputModalStepper'; -import SettingsPage from './pages/SettingsPage'; import reducers from './reducers'; import pluginId from './pluginId'; import { getTrad } from './utils'; @@ -61,11 +59,13 @@ export default { defaultMessage: 'Media Library', }, to: '/settings/media-library', - Component: () => ( - - - - ), + Component: async () => { + const component = await import( + /* webpackChunkName: "upload-settings" */ './pages/SettingsPage' + ); + + return component; + }, permissions: pluginPermissions.settings, }); }, diff --git a/packages/core/upload/admin/src/pages/SettingsPage/index.js b/packages/core/upload/admin/src/pages/SettingsPage/index.js index 542a9a7b87..18ee77a6e2 100644 --- a/packages/core/upload/admin/src/pages/SettingsPage/index.js +++ b/packages/core/upload/admin/src/pages/SettingsPage/index.js @@ -4,13 +4,24 @@ import { Helmet } from 'react-helmet'; import { Text } from '@buffetjs/core'; import { isEqual } from 'lodash'; import { useIntl } from 'react-intl'; -import { LoadingIndicatorPage, useNotification, request } from '@strapi/helper-plugin'; - +import { + CheckPagePermissions, + LoadingIndicatorPage, + useNotification, + request, +} from '@strapi/helper-plugin'; import { getRequestUrl, getTrad } from '../../utils'; import SectionTitleWrapper from './SectionTitleWrapper'; import Wrapper from './Wrapper'; import init from './init'; import reducer, { initialState } from './reducer'; +import pluginPermissions from '../../permissions'; + +const ProtectedSettingsPage = () => ( + + + +); const SettingsPage = () => { const { formatMessage } = useIntl(); @@ -202,4 +213,4 @@ const SettingsPage = () => { ); }; -export default SettingsPage; +export default ProtectedSettingsPage; diff --git a/packages/generators/plugin/files/admin/src/containers/Initializer/index.js b/packages/generators/plugin/files/admin/src/components/Initializer/index.js similarity index 100% rename from packages/generators/plugin/files/admin/src/containers/Initializer/index.js rename to packages/generators/plugin/files/admin/src/components/Initializer/index.js diff --git a/packages/generators/plugin/files/admin/src/index.js b/packages/generators/plugin/files/admin/src/index.js index ebacea2e5e..e673fe096f 100644 --- a/packages/generators/plugin/files/admin/src/index.js +++ b/packages/generators/plugin/files/admin/src/index.js @@ -1,9 +1,7 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin'; import pluginPkg from '../../package.json'; import pluginId from './pluginId'; -import App from './containers/App'; -import Initializer from './containers/Initializer'; - +import Initializer from './components/Initializer'; const pluginDescription = pluginPkg.strapi.description || pluginPkg.description; const icon = pluginPkg.strapi.icon; const name = pluginPkg.strapi.name; @@ -17,7 +15,11 @@ export default { id: `${pluginId}.plugin.name`, defaultMessage: name, }, - Component: App, + Component: async () => { + const component = await import(/* webpackChunkName: "[request]" */ './pages/App'); + + return component; + }, permissions: [ // Uncomment to set the permissions of the plugin here // { diff --git a/packages/generators/plugin/files/admin/src/containers/App/index.js b/packages/generators/plugin/files/admin/src/pages/App/index.js similarity index 100% rename from packages/generators/plugin/files/admin/src/containers/App/index.js rename to packages/generators/plugin/files/admin/src/pages/App/index.js diff --git a/packages/generators/plugin/files/admin/src/containers/HomePage/index.js b/packages/generators/plugin/files/admin/src/pages/HomePage/index.js similarity index 100% rename from packages/generators/plugin/files/admin/src/containers/HomePage/index.js rename to packages/generators/plugin/files/admin/src/pages/HomePage/index.js diff --git a/packages/plugins/documentation/admin/src/index.js b/packages/plugins/documentation/admin/src/index.js index b0c61fa15d..66c12f66c2 100644 --- a/packages/plugins/documentation/admin/src/index.js +++ b/packages/plugins/documentation/admin/src/index.js @@ -9,7 +9,6 @@ import pluginPkg from '../../package.json'; import pluginPermissions from './permissions'; import pluginId from './pluginId'; import pluginLogo from './assets/images/logo.svg'; -import App from './pages/App'; const pluginDescription = pluginPkg.strapi.description || pluginPkg.description; const icon = pluginPkg.strapi.icon; @@ -25,7 +24,11 @@ export default { defaultMessage: 'Documentation', }, permissions: pluginPermissions.main, - Component: App, + Component: async () => { + const component = await import(/* webpackChunkName: "documentation-page" */ './pages/App'); + + return component; + }, }); app.registerPlugin({ diff --git a/packages/plugins/documentation/admin/src/pages/HomePage/index.js b/packages/plugins/documentation/admin/src/pages/HomePage/index.js index 8816155fd2..1eedc0c039 100755 --- a/packages/plugins/documentation/admin/src/pages/HomePage/index.js +++ b/packages/plugins/documentation/admin/src/pages/HomePage/index.js @@ -90,10 +90,17 @@ const HomePage = () => { setVersionToDelete(null); }; + console.log(data); + if (isLoading) { return ; } + // FIXME + if (!data) { + return null; + } + return ( { + const component = await import( + /* webpackChunkName: "i18n-settings-page" */ './pages/SettingsPage' + ); + + return component; + }, permissions: pluginPermissions.accessMain, }); diff --git a/packages/plugins/users-permissions/admin/src/index.js b/packages/plugins/users-permissions/admin/src/index.js index d8311fbeea..76bf874e7e 100644 --- a/packages/plugins/users-permissions/admin/src/index.js +++ b/packages/plugins/users-permissions/admin/src/index.js @@ -4,16 +4,11 @@ // Here's the file: strapi/docs/3.0.0-beta.x/guides/registering-a-field-in-admin.md // Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated // IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED -import React from 'react'; -import { CheckPagePermissions, prefixPluginTranslations } from '@strapi/helper-plugin'; +import { prefixPluginTranslations } from '@strapi/helper-plugin'; import pluginPkg from '../../package.json'; import pluginLogo from './assets/images/logo.svg'; import pluginPermissions from './permissions'; import pluginId from './pluginId'; -import RolesPage from './pages/Roles'; -import ProvidersPage from './pages/Providers'; -import EmailTemplatesPage from './pages/EmailTemplates'; -import AdvancedSettingsPage from './pages/AdvancedSettings'; import getTrad from './utils/getTrad'; const pluginDescription = pluginPkg.strapi.description || pluginPkg.description; @@ -39,11 +34,13 @@ export default { }, id: 'roles', to: `/settings/${pluginId}/roles`, - Component: () => ( - - - - ), + Component: async () => { + const component = await import( + /* webpackChunkName: "users-roles-settings-page" */ './pages/Roles' + ); + + return component; + }, permissions: pluginPermissions.accessRoles, }, { @@ -53,11 +50,13 @@ export default { }, id: 'providers', to: `/settings/${pluginId}/providers`, - Component: () => ( - - - - ), + Component: async () => { + const component = await import( + /* webpackChunkName: "users-providers-settings-page" */ './pages/Providers' + ); + + return component; + }, permissions: pluginPermissions.readProviders, }, { @@ -67,11 +66,13 @@ export default { }, id: 'email-templates', to: `/settings/${pluginId}/email-templates`, - Component: () => ( - - - - ), + Component: async () => { + const component = await import( + /* webpackChunkName: "users-email-settings-page" */ './pages/EmailTemplates' + ); + + return component; + }, permissions: pluginPermissions.readEmailTemplates, }, { @@ -81,11 +82,13 @@ export default { }, id: 'advanced-settings', to: `/settings/${pluginId}/advanced-settings`, - Component: () => ( - - - - ), + Component: async () => { + const component = await import( + /* webpackChunkName: "users-advanced-settings-page" */ './pages/AdvancedSettings' + ); + + return component; + }, permissions: pluginPermissions.readAdvancedSettings, }, ] diff --git a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/index.js b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/index.js index 79872a78d0..43f733a830 100644 --- a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/index.js @@ -11,6 +11,7 @@ import { request, useNotification, useOverlayBlocker, + CheckPagePermissions, } from '@strapi/helper-plugin'; import pluginPermissions from '../../permissions'; import { getTrad, getRequestURL } from '../../utils'; @@ -18,6 +19,12 @@ import ListBaselineAlignment from '../../components/ListBaselineAlignment'; import form from './utils/form'; import reducer, { initialState } from './reducer'; +const ProtectedAdvancedSettingsPage = () => ( + + + +); + const AdvancedSettingsPage = () => { const { formatMessage } = useIntl(); const toggleNotification = useNotification(); @@ -217,4 +224,4 @@ const AdvancedSettingsPage = () => { ); }; -export default AdvancedSettingsPage; +export default ProtectedAdvancedSettingsPage; diff --git a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/index.js b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/index.js index 8fb474b8cb..fc320b5245 100644 --- a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/index.js @@ -11,6 +11,7 @@ import { getYupInnerErrors, useNotification, useOverlayBlocker, + CheckPagePermissions, } from '@strapi/helper-plugin'; import { Row } from 'reactstrap'; import pluginPermissions from '../../permissions'; @@ -22,6 +23,12 @@ import { getRequestURL, getTrad } from '../../utils'; import forms from './utils/forms'; import schema from './utils/schema'; +const ProtectedEmailTemplatesPage = () => ( + + + +); + const EmailTemplatesPage = () => { const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); @@ -232,4 +239,4 @@ const EmailTemplatesPage = () => { ); }; -export default EmailTemplatesPage; +export default ProtectedEmailTemplatesPage; diff --git a/packages/plugins/users-permissions/admin/src/pages/Providers/index.js b/packages/plugins/users-permissions/admin/src/pages/Providers/index.js index dd1d3f39d9..80ececb67c 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Providers/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/Providers/index.js @@ -11,6 +11,7 @@ import { request, useNotification, useOverlayBlocker, + CheckPagePermissions, } from '@strapi/helper-plugin'; import { get, upperFirst, has } from 'lodash'; import { Row } from 'reactstrap'; @@ -23,6 +24,12 @@ import ModalForm from '../../components/ModalForm'; import createProvidersArray from './utils/createProvidersArray'; import forms from './utils/forms'; +const ProtectedProvidersPage = () => ( + + + +); + const ProvidersPage = () => { const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); @@ -279,4 +286,4 @@ const ProvidersPage = () => { ); }; -export default ProvidersPage; +export default ProtectedProvidersPage; diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/index.js b/packages/plugins/users-permissions/admin/src/pages/Roles/index.js index 91bd1ddf70..9087ee2b7b 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/index.js @@ -1,20 +1,26 @@ import React from 'react'; import { Switch, Route } from 'react-router-dom'; -import { NotFound } from '@strapi/helper-plugin'; +import { CheckPagePermissions, NotFound } from '@strapi/helper-plugin'; import pluginId from '../../pluginId'; - +import pluginPermissions from '../../permissions'; import ProtectedRolesListPage from './ProtectedListPage'; import ProtectedRolesEditPage from './ProtectedEditPage'; import ProtectedRolesCreatePage from './ProtectedCreatePage'; const Roles = () => { return ( - - - - - - + + + + + + + + ); };