diff --git a/packages/volto/news/8258.bugfix b/packages/volto/news/8258.bugfix new file mode 100644 index 00000000000..4890dde7326 --- /dev/null +++ b/packages/volto/news/8258.bugfix @@ -0,0 +1 @@ +Fixed dispatched async actions for controlpanels on /controlpanels in subpath deployments @nileshgulia1 \ No newline at end of file diff --git a/packages/volto/src/config/index.js b/packages/volto/src/config/index.js index 3fce081f201..73fd4ee07d7 100644 --- a/packages/volto/src/config/index.js +++ b/packages/volto/src/config/index.js @@ -22,7 +22,11 @@ import { installDefaultWidgets } from './Widgets'; import { installDefaultViews } from './Views'; import { installDefaultBlocks } from './Blocks'; -import { getSiteAsyncPropExtender } from '@plone/volto/helpers/Site'; +import { + getSiteAsyncPropExtender, + getSystemInfoAsyncPropExtender, + getControlpanelAsyncPropExtender, +} from '@plone/volto/helpers/Site'; import { registerValidators } from './validation'; import languages from '@plone/volto/constants/Languages.cjs'; @@ -124,7 +128,11 @@ let config = { useEmailAsLogin: false, persistentReducers: ['blocksClipboard.cut', 'blocksClipboard.copy'], initialReducersBlacklist: [], // reducers in this list won't be hydrated in windows.__data - asyncPropsExtenders: [getSiteAsyncPropExtender], // per route asyncConnect customizers + asyncPropsExtenders: [ + getSiteAsyncPropExtender, + getSystemInfoAsyncPropExtender, + getControlpanelAsyncPropExtender, + ], // per route asyncConnect customizers contentIcons: contentIcons, loadables, lazyBundles: { diff --git a/packages/volto/src/helpers/Site/index.js b/packages/volto/src/helpers/Site/index.js index 18c4b0a2633..1eccc4bb4c4 100644 --- a/packages/volto/src/helpers/Site/index.js +++ b/packages/volto/src/helpers/Site/index.js @@ -1,5 +1,12 @@ import { GET_SITE } from '@plone/volto/constants/ActionTypes'; import { getSite } from '@plone/volto/actions/site/site'; +import { + listControlpanels, + getSystemInformation, +} from '@plone/volto/actions/controlpanels/controlpanels'; +import config from '@plone/volto/registry'; + +const prefixPath = config.settings.subpathPrefix || ''; const getSiteAsyncPropExtender = { path: '/', @@ -18,4 +25,44 @@ const getSiteAsyncPropExtender = { }, }; -export { getSiteAsyncPropExtender }; +const getControlpanelAsyncPropExtender = { + path: `${prefixPath}/controlpanel`, + extend: (dispatchActions) => { + if ( + dispatchActions.filter( + (asyncAction) => asyncAction.key === 'controlpanels', + ).length === 0 + ) { + dispatchActions.push({ + key: 'controlpanels', + promise: ({ location, store: { dispatch } }) => + __SERVER__ && dispatch(listControlpanels()), + }); + } + return dispatchActions; + }, +}; + +const getSystemInfoAsyncPropExtender = { + path: `${prefixPath}/controlpanel`, + extend: (dispatchActions) => { + if ( + dispatchActions.filter( + (asyncAction) => asyncAction.key === 'systemInformation', + ).length === 0 + ) { + dispatchActions.push({ + key: 'systemInformation', + promise: ({ location, store: { dispatch } }) => + __SERVER__ && dispatch(getSystemInformation()), + }); + } + return dispatchActions; + }, +}; + +export { + getSiteAsyncPropExtender, + getSystemInfoAsyncPropExtender, + getControlpanelAsyncPropExtender, +};