UNPKG

@plone/volto

Version:
346 lines (335 loc) 8.14 kB
/** * Routes. * @module routes */ import debug from 'debug'; import compact from 'lodash/compact'; import Add from '@plone/volto/components/manage/Add/Add'; import Aliases from '@plone/volto/components/manage/Aliases/Aliases'; import ChangePassword from '@plone/volto/components/manage/Preferences/ChangePassword'; import ContactForm from '@plone/volto/components/theme/ContactForm/ContactForm'; import CreateTranslation from '@plone/volto/components/manage/Multilingual/CreateTranslation'; import Delete from '@plone/volto/components/manage/Delete/Delete'; import Diff from '@plone/volto/components/manage/Diff/Diff'; import Edit from '@plone/volto/components/manage/Edit/Edit'; import History from '@plone/volto/components/manage/History/History'; import LinksToItem from '@plone/volto/components/manage/LinksToItem/LinksToItem'; import Login from '@plone/volto/components/theme/Login/Login'; import Logout from '@plone/volto/components/theme/Logout/Logout'; import ManageTranslations from '@plone/volto/components/manage/Multilingual/ManageTranslations'; import NotFound from '@plone/volto/components/theme/NotFound/NotFound'; import PasswordReset from '@plone/volto/components/theme/PasswordReset/PasswordReset'; import Register from '@plone/volto/components/theme/Register/Register'; import RequestPasswordReset from '@plone/volto/components/theme/PasswordReset/RequestPasswordReset'; import Search from '@plone/volto/components/theme/Search/Search'; import Sharing from '@plone/volto/components/manage/Sharing/Sharing'; import Sitemap from '@plone/volto/components/theme/Sitemap/Sitemap'; import PersonalInformation from '@plone/volto/components/manage/Preferences/PersonalInformation'; import { Contents } from '@plone/volto/components/manage/Contents'; import { Rules } from '@plone/volto/components/manage/Rules'; import { RulesControlpanel, AddRuleControlpanel, EditRuleControlpanel, ConfigureRuleControlpanel, UsersControlpanel, UserGroupMembershipControlPanel, GroupsControlpanel, AddonsControlpanel, AliasesControlpanel, ContentType, ContentTypeLayout, ContentTypeSchema, ContentTypes, Controlpanel, Controlpanels, DatabaseInformation, ModerateComments, RelationsControlpanel, UndoControlpanel, UpgradeControlPanel, } from '@plone/volto/components/manage/Controlpanels'; import withClientSideContent from '@plone/volto/helpers/Content/withClientSideContent'; import App from '@plone/volto/components/theme/App/App'; import View from '@plone/volto/components/theme/View/View'; import config from '@plone/volto/registry'; /** * Default routes array. * @array * @returns {array} Routes. */ export const multilingualRoutes = [ { path: `/(${config.settings?.supportedLanguages.join('|')})/sitemap`, component: Sitemap, }, { path: `/(${config.settings?.supportedLanguages.join('|')})/search`, component: Search, }, { path: `/(${config.settings?.supportedLanguages.join('|')})/contact-form`, component: ContactForm, }, { path: `/(${config.settings?.supportedLanguages.join('|')})/change-password`, component: ChangePassword, }, { path: `/(${config.settings?.supportedLanguages.join('|')})/register`, component: Register, }, { path: `/(${config.settings?.supportedLanguages.join('|')})/passwordreset`, component: RequestPasswordReset, exact: true, }, { path: `/(${config.settings?.supportedLanguages.join( '|', )})/passwordreset/:token`, component: PasswordReset, exact: true, }, ]; export function getExternalRoutes() { return compact( (config.settings?.externalRoutes || []).map((route) => { const newRoute = { component: NotFound, }; if (typeof route.match === 'string') { newRoute.path = route.match; return newRoute; } else if ( typeof route.match === 'object' && !Array.isArray(route.match) ) { return { ...newRoute, ...route.match, }; } else { debug('routes')( 'Got invalid externalRoute, please check the configuration.', ); return null; } }), ); } export const defaultRoutes = [ // redirect to external links if path is in blacklist ...getExternalRoutes(), ...((config.settings?.isMultilingual && multilingualRoutes) || []), { path: '/', component: View, exact: true, }, { path: ['/login', '/**/login'], component: Login, }, { path: ['/logout', '/**/logout'], component: Logout, }, { path: '/sitemap', component: Sitemap, }, { path: '/search', component: Search, }, { path: '/contact-form', component: ContactForm, }, { path: '/controlpanel', exact: true, component: Controlpanels, }, { path: '/controlpanel/dexterity-types/:id/layout', component: ContentTypeLayout, }, { path: '/controlpanel/dexterity-types/:id/schema', component: ContentTypeSchema, }, { path: '/controlpanel/dexterity-types/:id', component: ContentType, }, { path: '/controlpanel/dexterity-types', component: ContentTypes, }, { path: '/controlpanel/addons', component: AddonsControlpanel, }, { path: '/controlpanel/undo', component: UndoControlpanel, }, { path: '/controlpanel/database', component: DatabaseInformation, }, { path: '/controlpanel/aliases', component: AliasesControlpanel, }, { path: '/controlpanel/moderate-comments', component: ModerateComments, }, { path: '/controlpanel/users', component: UsersControlpanel, }, { path: '/controlpanel/usergroupmembership', component: UserGroupMembershipControlPanel, }, { path: '/controlpanel/groups', component: GroupsControlpanel, }, { path: '/controlpanel/plone-upgrade', component: UpgradeControlPanel, }, { path: '/controlpanel/rules/:id/configure', component: ConfigureRuleControlpanel, }, { path: '/controlpanel/rules/:id/edit', component: EditRuleControlpanel, }, { path: '/controlpanel/rules/add', component: AddRuleControlpanel, }, { path: '/controlpanel/rules', component: RulesControlpanel, }, { path: '/controlpanel/relations', component: RelationsControlpanel, }, { path: '/controlpanel/:id', component: Controlpanel, }, { path: '/change-password', component: ChangePassword, }, { path: ['/add', '/**/add'], component: Add, }, { path: ['/edit', '/**/edit'], component: withClientSideContent(Edit), }, { path: ['/contents', '/**/contents'], component: Contents, }, { path: ['/sharing', '/**/sharing'], component: Sharing, }, { path: '/rules', component: Rules, }, { path: '/**/create-translation', component: CreateTranslation, }, { path: '/**/rules', component: Rules, }, { path: '/**/aliases', component: Aliases, }, { path: '/**/delete', component: Delete, }, { path: '/**/diff', component: Diff, }, { path: '/**/historyview', component: History, }, { path: '/**/manage-translations', component: ManageTranslations, }, { path: '/links-to-item', component: LinksToItem, }, { path: '/**/links-to-item', component: LinksToItem, }, { path: '/register', component: Register, }, { path: '/passwordreset', component: RequestPasswordReset, exact: true, }, { path: '/passwordreset/:token', component: PasswordReset, exact: true, }, { path: '/personal-information', component: PersonalInformation, exact: true, }, { path: '/**', component: View, }, { path: '*', component: NotFound, }, ]; /** * Routes array. * @array * @returns {array} Routes. */ const routes = [ { path: '/', component: App, routes: [ // addon routes have a higher priority then default routes ...(config.addonRoutes || []), ...defaultRoutes, ], }, ]; export default routes;