Files
klz-cables.com/.pnpm-store/v10/files/81/d64cfe09da5ae38bb619d3f1fc70caf2c6e4184fa917db972290f3f7bbfef0f9ccfa2e27970db40c92430212cb754c04f8192545edaa78135486fcc721c258
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

359 lines
13 KiB
Plaintext

import { parseDocumentID } from 'payload';
import { formatAdminURL, isNumber } from 'payload/shared';
import { AccountView } from '../Account/index.js';
import { BrowseByFolder } from '../BrowseByFolder/index.js';
import { CollectionFolderView } from '../CollectionFolders/index.js';
import { TrashView } from '../CollectionTrash/index.js';
import { CreateFirstUserView } from '../CreateFirstUser/index.js';
import { DashboardView } from '../Dashboard/index.js';
import { DocumentView } from '../Document/index.js';
import { forgotPasswordBaseClass, ForgotPasswordView } from '../ForgotPassword/index.js';
import { ListView } from '../List/index.js';
import { loginBaseClass, LoginView } from '../Login/index.js';
import { LogoutInactivity, LogoutView } from '../Logout/index.js';
import { ResetPassword, resetPasswordBaseClass } from '../ResetPassword/index.js';
import { UnauthorizedView } from '../Unauthorized/index.js';
import { Verify, verifyBaseClass } from '../Verify/index.js';
import { getSubViewActions, getViewActions } from './attachViewActions.js';
import { getCustomViewByKey } from './getCustomViewByKey.js';
import { getCustomViewByRoute } from './getCustomViewByRoute.js';
import { getDocumentViewInfo } from './getDocumentViewInfo.js';
import { isPathMatchingRoute } from './isPathMatchingRoute.js';
const baseClasses = {
account: 'account',
folders: 'folders',
forgot: forgotPasswordBaseClass,
login: loginBaseClass,
reset: resetPasswordBaseClass,
verify: verifyBaseClass
};
const oneSegmentViews = {
account: AccountView,
browseByFolder: BrowseByFolder,
createFirstUser: CreateFirstUserView,
forgot: ForgotPasswordView,
inactivity: LogoutInactivity,
login: LoginView,
logout: LogoutView,
unauthorized: UnauthorizedView
};
export const getRouteData = ({
adminRoute,
collectionConfig,
collectionPreferences = undefined,
currentRoute,
globalConfig,
payload,
segments
}) => {
const {
config
} = payload;
let ViewToRender = null;
let templateClassName;
let templateType;
let documentSubViewType;
let viewType;
const routeParams = {};
const [segmentOne, segmentTwo, segmentThree, segmentFour, segmentFive, segmentSix] = segments;
const isBrowseByFolderEnabled = config.folders && config.folders.browseByFolder;
const browseByFolderSlugs = isBrowseByFolderEnabled && config.collections.reduce((acc, {
slug,
folders
}) => {
if (folders && folders.browseByFolder) {
return [...acc, slug];
}
return acc;
}, []) || [];
const viewActions = [...(config?.admin?.components?.actions || [])];
switch (segments.length) {
case 0:
{
if (currentRoute === adminRoute) {
ViewToRender = {
Component: DashboardView
};
templateClassName = 'dashboard';
templateType = 'default';
viewType = 'dashboard';
}
break;
}
case 1:
{
// users can override the default routes via `admin.routes` config
// i.e.{ admin: { routes: { logout: '/sign-out', inactivity: '/idle' }}}
let viewKey;
if (config.admin.routes) {
const matchedRoute = Object.entries(config.admin.routes).find(([, route]) => {
return isPathMatchingRoute({
currentRoute,
exact: true,
path: formatAdminURL({
adminRoute,
path: route
})
});
});
if (matchedRoute) {
viewKey = matchedRoute[0];
}
}
// Check if a custom view is configured for this viewKey
// First try to get custom view by the known viewKey, then fallback to route matching
const customView = viewKey && getCustomViewByKey({
config,
viewKey
}) || getCustomViewByRoute({
config,
currentRoute
});
if (customView?.view?.payloadComponent || customView?.view?.Component) {
// User has configured a custom view (either overriding a built-in or a new custom view)
ViewToRender = customView.view;
// If this custom view is overriding a built-in view (viewKey matches a built-in),
// use the built-in's template settings and viewType
if (viewKey && oneSegmentViews[viewKey]) {
viewType = viewKey;
templateClassName = baseClasses[viewKey] || viewKey;
templateType = 'minimal';
if (viewKey === 'account') {
templateType = 'default';
}
if (isBrowseByFolderEnabled && viewKey === 'browseByFolder') {
templateType = 'default';
viewType = 'folders';
}
}
} else if (oneSegmentViews[viewKey]) {
// --> /account
// --> /create-first-user
// --> /browse-by-folder
// --> /forgot
// --> /login
// --> /logout
// --> /logout-inactivity
// --> /unauthorized
ViewToRender = {
Component: oneSegmentViews[viewKey]
};
viewType = viewKey;
templateClassName = baseClasses[viewKey];
templateType = 'minimal';
if (viewKey === 'account') {
templateType = 'default';
}
if (isBrowseByFolderEnabled && viewKey === 'browseByFolder') {
templateType = 'default';
viewType = 'folders';
}
}
break;
}
case 2:
{
if (`/${segmentOne}` === config.admin.routes.reset) {
// --> /reset/:token
ViewToRender = {
Component: ResetPassword
};
templateClassName = baseClasses[segmentTwo];
templateType = 'minimal';
viewType = 'reset';
} else if (isBrowseByFolderEnabled && `/${segmentOne}` === config.admin.routes.browseByFolder) {
// --> /browse-by-folder/:folderID
routeParams.folderID = segmentTwo;
ViewToRender = {
Component: oneSegmentViews.browseByFolder
};
templateClassName = baseClasses.folders;
templateType = 'default';
viewType = 'folders';
} else if (collectionConfig) {
// --> /collections/:collectionSlug'
routeParams.collection = collectionConfig.slug;
if (collectionPreferences?.listViewType && collectionPreferences.listViewType === 'folders') {
// Render folder view by default if set in preferences
ViewToRender = {
Component: CollectionFolderView
};
templateClassName = `collection-folders`;
templateType = 'default';
viewType = 'collection-folders';
} else {
ViewToRender = {
Component: ListView
};
templateClassName = `${segmentTwo}-list`;
templateType = 'default';
viewType = 'list';
}
viewActions.push(...(collectionConfig.admin.components?.views?.list?.actions || []));
} else if (globalConfig) {
// --> /globals/:globalSlug
routeParams.global = globalConfig.slug;
ViewToRender = {
Component: DocumentView
};
templateClassName = 'global-edit';
templateType = 'default';
viewType = 'document';
// add default view actions
viewActions.push(...getViewActions({
editConfig: globalConfig.admin?.components?.views?.edit,
viewKey: 'default'
}));
}
break;
}
default:
if (segmentTwo === 'verify') {
// --> /:collectionSlug/verify/:token
routeParams.collection = segmentOne;
routeParams.token = segmentThree;
ViewToRender = {
Component: Verify
};
templateClassName = 'verify';
templateType = 'minimal';
viewType = 'verify';
} else if (collectionConfig) {
routeParams.collection = collectionConfig.slug;
if (segmentThree === 'trash' && typeof segmentFour === 'string') {
// --> /collections/:collectionSlug/trash/:id (read-only)
// --> /collections/:collectionSlug/trash/:id/api
// --> /collections/:collectionSlug/trash/:id/preview
// --> /collections/:collectionSlug/trash/:id/versions
// --> /collections/:collectionSlug/trash/:id/versions/:versionID
routeParams.id = segmentFour;
routeParams.versionID = segmentSix;
ViewToRender = {
Component: DocumentView
};
templateClassName = `collection-default-edit`;
templateType = 'default';
const viewInfo = getDocumentViewInfo([segmentFive, segmentSix]);
viewType = viewInfo.viewType;
documentSubViewType = viewInfo.documentSubViewType;
viewActions.push(...getSubViewActions({
collectionOrGlobal: collectionConfig,
viewKeyArg: documentSubViewType
}));
} else if (segmentThree === 'trash') {
// --> /collections/:collectionSlug/trash
ViewToRender = {
Component: TrashView
};
templateClassName = `${segmentTwo}-trash`;
templateType = 'default';
viewType = 'trash';
viewActions.push(...(collectionConfig.admin.components?.views?.list?.actions || []));
} else {
if (config.folders && segmentThree === config.folders.slug && collectionConfig.folders) {
// Collection Folder Views
// --> /collections/:collectionSlug/:folderCollectionSlug
// --> /collections/:collectionSlug/:folderCollectionSlug/:folderID
routeParams.folderCollection = segmentThree;
routeParams.folderID = segmentFour;
ViewToRender = {
Component: CollectionFolderView
};
templateClassName = `collection-folders`;
templateType = 'default';
viewType = 'collection-folders';
viewActions.push(...(collectionConfig.admin.components?.views?.list?.actions || []));
} else {
// Collection Edit Views
// --> /collections/:collectionSlug/create
// --> /collections/:collectionSlug/:id
// --> /collections/:collectionSlug/:id/api
// --> /collections/:collectionSlug/:id/versions
// --> /collections/:collectionSlug/:id/versions/:versionID
routeParams.id = segmentThree === 'create' ? undefined : segmentThree;
routeParams.versionID = segmentFive;
ViewToRender = {
Component: DocumentView
};
templateClassName = `collection-default-edit`;
templateType = 'default';
const viewInfo = getDocumentViewInfo([segmentFour, segmentFive]);
viewType = viewInfo.viewType;
documentSubViewType = viewInfo.documentSubViewType;
viewActions.push(...getSubViewActions({
collectionOrGlobal: collectionConfig,
viewKeyArg: documentSubViewType
}));
}
}
} else if (globalConfig) {
// Global Edit Views
// --> /globals/:globalSlug/versions
// --> /globals/:globalSlug/versions/:versionID
// --> /globals/:globalSlug/api
routeParams.global = globalConfig.slug;
routeParams.versionID = segmentFour;
ViewToRender = {
Component: DocumentView
};
templateClassName = `global-edit`;
templateType = 'default';
const viewInfo = getDocumentViewInfo([segmentThree, segmentFour]);
viewType = viewInfo.viewType;
documentSubViewType = viewInfo.documentSubViewType;
viewActions.push(...getSubViewActions({
collectionOrGlobal: globalConfig,
viewKeyArg: documentSubViewType
}));
}
break;
}
if (!ViewToRender) {
ViewToRender = getCustomViewByRoute({
config,
currentRoute
})?.view;
}
if (collectionConfig) {
if (routeParams.id) {
routeParams.id = parseDocumentID({
id: routeParams.id,
collectionSlug: collectionConfig.slug,
payload
});
}
if (routeParams.versionID) {
routeParams.versionID = parseDocumentID({
id: routeParams.versionID,
collectionSlug: collectionConfig.slug,
payload
});
}
}
if (config.folders && routeParams.folderID) {
routeParams.folderID = parseDocumentID({
id: routeParams.folderID,
collectionSlug: config.folders.slug,
payload
});
}
if (globalConfig && routeParams.versionID) {
routeParams.versionID = payload.db.defaultIDType === 'number' && isNumber(routeParams.versionID) ? Number(routeParams.versionID) : routeParams.versionID;
}
if (viewActions.length) {
viewActions.reverse();
}
return {
browseByFolderSlugs,
collectionConfig,
DefaultView: ViewToRender,
documentSubViewType,
globalConfig,
routeParams,
templateClassName,
templateType,
viewActions: viewActions.length ? viewActions : undefined,
viewType
};
};
//# sourceMappingURL=getRouteData.js.map