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`
238 lines
7.3 KiB
TypeScript
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'),
|
|
},
|
|
})
|