Files
payloadcms/test/admin/config.ts
Germán Jabloñski a7a05012fb feat(next): add redirect from ${adminRoute}/collections to ${adminRoute} (#13061)
Occasionally, I find myself on a URL like
`https://domain.com/admin/collections/myCollection/docId` and I modify
the URL with the intention of going to the admin panel, but I shorten it
in the wrong place: `https://domain.com/admin/collections`.

The confusion arises because the admin panel basically displays the
collections.

I think this redirect is a subtle but nice touch, since `/collections`
is a URL that doesn't exist.

EDIT: now I'm doing also the same thing for `/globals`
2025-07-09 10:39:02 -04:00

238 lines
7.3 KiB
TypeScript

import { fileURLToPath } from 'node:url'
import path from 'path'
import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js'
import { Array } from './collections/Array.js'
import { BaseListFilter } from './collections/BaseListFilter.js'
import { CustomFields } from './collections/CustomFields/index.js'
import { CustomViews1 } from './collections/CustomViews1.js'
import { CustomViews2 } from './collections/CustomViews2.js'
import { DisableBulkEdit } from './collections/DisableBulkEdit.js'
import { DisableCopyToLocale } from './collections/DisableCopyToLocale.js'
import { DisableDuplicate } from './collections/DisableDuplicate.js'
import { EditMenuItems } from './collections/editMenuItems.js'
import { Geo } from './collections/Geo.js'
import { CollectionGroup1A } from './collections/Group1A.js'
import { CollectionGroup1B } from './collections/Group1B.js'
import { CollectionGroup2A } from './collections/Group2A.js'
import { CollectionGroup2B } from './collections/Group2B.js'
import { CollectionHidden } from './collections/Hidden.js'
import { ListDrawer } from './collections/ListDrawer.js'
import { CollectionNoApiView } from './collections/NoApiView.js'
import { CollectionNotInView } from './collections/NotInView.js'
import { Placeholder } from './collections/Placeholder.js'
import { Posts } from './collections/Posts.js'
import { ReorderTabs } from './collections/ReorderTabs.js'
import { UploadCollection } from './collections/Upload.js'
import { UploadTwoCollection } from './collections/UploadTwo.js'
import { UseAsTitleGroupField } from './collections/UseAsTitleGroupField.js'
import { Users } from './collections/Users.js'
import { with300Documents } from './collections/With300Documents.js'
import { CustomGlobalViews1 } from './globals/CustomViews1.js'
import { CustomGlobalViews2 } from './globals/CustomViews2.js'
import { Global } from './globals/Global.js'
import { GlobalGroup1A } from './globals/Group1A.js'
import { GlobalGroup1B } from './globals/Group1B.js'
import { GlobalHidden } from './globals/Hidden.js'
import { GlobalNoApiView } from './globals/NoApiView.js'
import { GlobalNotInView } from './globals/NotInView.js'
import { Settings } from './globals/Settings.js'
import { seed } from './seed.js'
import {
customAdminRoutes,
customNestedViewPath,
customParamViewPath,
customRootViewMetaTitle,
customViewPath,
protectedCustomNestedViewPath,
publicCustomViewPath,
} from './shared.js'
import { editMenuItemsSlug, reorderTabsSlug } from './slugs.js'
const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)
export default buildConfigWithDefaults({
admin: {
livePreview: {
collections: [reorderTabsSlug, editMenuItemsSlug],
url: 'http://localhost:3000',
},
importMap: {
baseDir: path.resolve(dirname),
},
components: {
actions: ['/components/actions/AdminButton/index.js#AdminButton'],
afterDashboard: [
'/components/AfterDashboard/index.js#AfterDashboard',
'/components/AfterDashboardClient/index.js#AfterDashboardClient',
],
afterNavLinks: ['/components/AfterNavLinks/index.js#AfterNavLinks'],
beforeLogin: ['/components/BeforeLogin/index.js#BeforeLogin'],
graphics: {
Logo: '/components/graphics/Logo.js#Logo',
Icon: '/components/graphics/Icon.js#Icon',
},
header: ['/components/CustomHeader/index.js#CustomHeader'],
logout: {
Button: '/components/Logout/index.js#Logout',
},
providers: [
'/components/CustomProviderServer/index.js#CustomProviderServer',
'/components/CustomProvider/index.js#CustomProvider',
],
views: {
// Dashboard: CustomDashboardView,
// Account: CustomAccountView,
collections: {
Component: '/components/views/CustomView/index.js#CustomView',
path: '/collections',
},
CustomDefaultView: {
Component: '/components/views/CustomDefault/index.js#CustomDefaultView',
path: '/custom-default-view',
},
CustomMinimalView: {
Component: '/components/views/CustomMinimal/index.js#CustomMinimalView',
path: '/custom-minimal-view',
meta: {
title: customRootViewMetaTitle,
},
},
CustomNestedView: {
Component: '/components/views/CustomViewNested/index.js#CustomNestedView',
exact: true,
path: customNestedViewPath,
},
CustomView: {
Component: '/components/views/CustomView/index.js#CustomView',
exact: true,
path: customViewPath,
strict: true,
},
ProtectedCustomNestedView: {
Component: '/components/views/CustomProtectedView/index.js#CustomProtectedView',
exact: true,
path: protectedCustomNestedViewPath,
},
PublicCustomView: {
Component: '/components/views/CustomView/index.js#CustomView',
exact: true,
path: publicCustomViewPath,
strict: true,
},
CustomViewWithParam: {
Component: '/components/views/CustomViewWithParam/index.js#CustomViewWithParam',
path: customParamViewPath,
},
},
},
meta: {
description: 'This is a custom meta description',
icons: [
{
type: 'image/png',
rel: 'icon',
url: '/custom-favicon-dark.png',
},
{
type: 'image/png',
media: '(prefers-color-scheme: dark)',
rel: 'icon',
url: '/custom-favicon-light.png',
},
],
openGraph: {
description: 'This is a custom OG description',
title: 'This is a custom OG title',
},
titleSuffix: '- Custom Title Suffix',
},
routes: customAdminRoutes,
dependencies: {
myTestComponent: {
path: '/components/TestComponent.js#TestComponent',
type: 'component',
clientProps: {
test: 'hello',
},
},
},
},
collections: [
UploadCollection,
UploadTwoCollection,
Posts,
Users,
CollectionHidden,
CollectionNotInView,
CollectionNoApiView,
CustomViews1,
CustomViews2,
ReorderTabs,
CustomFields,
CollectionGroup1A,
CollectionGroup1B,
CollectionGroup2A,
CollectionGroup2B,
Geo,
Array,
DisableDuplicate,
DisableCopyToLocale,
EditMenuItems,
BaseListFilter,
with300Documents,
ListDrawer,
Placeholder,
UseAsTitleGroupField,
DisableBulkEdit,
],
globals: [
GlobalHidden,
GlobalNotInView,
GlobalNoApiView,
Global,
CustomGlobalViews1,
CustomGlobalViews2,
GlobalGroup1A,
GlobalGroup1B,
Settings,
],
i18n: {
translations: {
en: {
general: {
dashboard: 'Home',
},
},
},
},
localization: {
defaultLocalePublishOption: 'active',
defaultLocale: 'en',
locales: [
{
code: 'es',
label: {
en: 'Spanish',
es: 'Español',
},
},
{
code: 'en',
label: {
en: 'English',
es: 'Inglés',
},
},
],
},
onInit: async (payload) => {
if (process.env.SEED_IN_CONFIG_ONINIT !== 'false') {
await seed(payload)
}
},
typescript: {
outputFile: path.resolve(dirname, 'payload-types.ts'),
},
})