chore(plugin-nested-docs): migrates demo to payload 2.x
This commit is contained in:
2
packages/plugin-nested-docs/dev/.env.example
Normal file
2
packages/plugin-nested-docs/dev/.env.example
Normal file
@@ -0,0 +1,2 @@
|
||||
DATABASE_URI=mongodb://localhost/payload-plugin-form-builder
|
||||
PAYLOAD_SECRET=kajsnfkjhabndsfgseaniluanbsrkdgbhyasfg
|
||||
4
packages/plugin-nested-docs/dev/nodemon.json
Normal file
4
packages/plugin-nested-docs/dev/nodemon.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"ext": "ts",
|
||||
"exec": "ts-node src/server.ts"
|
||||
}
|
||||
30
packages/plugin-nested-docs/dev/package.json
Normal file
30
packages/plugin-nested-docs/dev/package.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "payload-starter-typescript",
|
||||
"description": "Blank template - no collections",
|
||||
"version": "1.0.0",
|
||||
"main": "dist/server.js",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"dev": "cross-env PAYLOAD_PUBLIC_SEED=true PAYLOAD_DROP_DATABASE=true PAYLOAD_CONFIG_PATH=src/payload.config.ts nodemon",
|
||||
"build:payload": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts payload build",
|
||||
"build:server": "tsc",
|
||||
"build": "yarn build:payload && yarn build:server",
|
||||
"serve": "cross-env PAYLOAD_CONFIG_PATH=dist/payload.config.js NODE_ENV=production node dist/server.js",
|
||||
"generate:types": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts payload generate:types"
|
||||
},
|
||||
"dependencies": {
|
||||
"@payloadcms/bundler-webpack": "latest",
|
||||
"@payloadcms/db-mongodb": "latest",
|
||||
"@payloadcms/richtext-slate": "latest",
|
||||
"dotenv": "^8.2.0",
|
||||
"express": "^4.17.1",
|
||||
"payload": "latest"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.9",
|
||||
"cross-env": "^7.0.3",
|
||||
"nodemon": "^2.0.6",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.1.3"
|
||||
}
|
||||
}
|
||||
45
packages/plugin-nested-docs/dev/src/collections/Pages.ts
Normal file
45
packages/plugin-nested-docs/dev/src/collections/Pages.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
// const payload = require('payload');
|
||||
import type { CollectionConfig } from 'payload/types'
|
||||
|
||||
import populateFullTitle from './populateFullTitle'
|
||||
|
||||
export const Pages: CollectionConfig = {
|
||||
slug: 'pages',
|
||||
labels: {
|
||||
singular: 'Page',
|
||||
plural: 'Pages',
|
||||
},
|
||||
admin: {
|
||||
useAsTitle: 'fullTitle',
|
||||
},
|
||||
access: {
|
||||
read: () => true,
|
||||
},
|
||||
fields: [
|
||||
{
|
||||
name: 'title',
|
||||
label: 'Title',
|
||||
type: 'text',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
name: 'slug',
|
||||
label: 'Slug',
|
||||
type: 'text',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
name: 'fullTitle',
|
||||
type: 'text',
|
||||
localized: true,
|
||||
hooks: {
|
||||
beforeChange: [populateFullTitle],
|
||||
},
|
||||
admin: {
|
||||
components: {
|
||||
Field: () => null,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
16
packages/plugin-nested-docs/dev/src/collections/Users.ts
Normal file
16
packages/plugin-nested-docs/dev/src/collections/Users.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import type { CollectionConfig } from 'payload/types'
|
||||
|
||||
export const Users: CollectionConfig = {
|
||||
slug: 'users',
|
||||
auth: true,
|
||||
admin: {
|
||||
useAsTitle: 'email',
|
||||
},
|
||||
access: {
|
||||
read: () => true,
|
||||
},
|
||||
fields: [
|
||||
// Email added by default
|
||||
// Add more fields as needed
|
||||
],
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import type { FieldHook } from 'payload/types'
|
||||
|
||||
export const generateFullTitle = (breadcrumbs: Array<{ label: string }>): string | undefined => {
|
||||
if (Array.isArray(breadcrumbs)) {
|
||||
return breadcrumbs.reduce((title, breadcrumb, i) => {
|
||||
if (i === 0) return `${breadcrumb.label}`
|
||||
return `${title} > ${breadcrumb.label}`
|
||||
}, '')
|
||||
}
|
||||
|
||||
return undefined
|
||||
}
|
||||
|
||||
const populateFullTitle: FieldHook = async ({ data, originalDoc }) =>
|
||||
generateFullTitle(data?.breadcrumbs || originalDoc?.breadcrumbs)
|
||||
|
||||
export default populateFullTitle
|
||||
@@ -0,0 +1,17 @@
|
||||
import React from 'react'
|
||||
|
||||
const BeforeLogin: React.FC = () => {
|
||||
if (process.env.PAYLOAD_PUBLIC_SEED === 'true') {
|
||||
return (
|
||||
<p>
|
||||
{'Log in with the email '}
|
||||
<strong>demo@payloadcms.com</strong>
|
||||
{' and the password '}
|
||||
<strong>demo</strong>.
|
||||
</p>
|
||||
)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export default BeforeLogin
|
||||
58
packages/plugin-nested-docs/dev/src/payload.config.ts
Normal file
58
packages/plugin-nested-docs/dev/src/payload.config.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import path from 'path'
|
||||
import { buildConfig } from 'payload/config'
|
||||
|
||||
// import nestedPages from '../../dist';
|
||||
import nestedPages from '../../src' // eslint-disable-line import/no-relative-packages
|
||||
import { Pages } from './collections/Pages'
|
||||
import { Users } from './collections/Users'
|
||||
import { slateEditor } from '@payloadcms/richtext-slate'
|
||||
import { mongooseAdapter } from '@payloadcms/db-mongodb'
|
||||
import { webpackBundler } from '@payloadcms/bundler-webpack'
|
||||
import BeforeLogin from './components/BeforeLogin'
|
||||
|
||||
export default buildConfig({
|
||||
serverURL: 'http://localhost:3000',
|
||||
admin: {
|
||||
user: Users.slug,
|
||||
bundler: webpackBundler(),
|
||||
components: {
|
||||
beforeLogin: [BeforeLogin],
|
||||
},
|
||||
webpack: (config) => {
|
||||
const newConfig = {
|
||||
...config,
|
||||
resolve: {
|
||||
...config.resolve,
|
||||
alias: {
|
||||
...config.resolve.alias,
|
||||
react: path.join(__dirname, '../node_modules/react'),
|
||||
'react-dom': path.join(__dirname, '../node_modules/react-dom'),
|
||||
payload: path.join(__dirname, '../node_modules/payload'),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return newConfig
|
||||
},
|
||||
},
|
||||
editor: slateEditor({}),
|
||||
db: mongooseAdapter({
|
||||
url: process.env.DATABASE_URI,
|
||||
}),
|
||||
collections: [Users, Pages],
|
||||
localization: {
|
||||
locales: ['en', 'es', 'de'],
|
||||
defaultLocale: 'en',
|
||||
fallback: true,
|
||||
},
|
||||
plugins: [
|
||||
nestedPages({
|
||||
collections: ['pages'],
|
||||
generateLabel: (_, doc) => doc.title as string,
|
||||
generateURL: (docs) => docs.reduce((url, doc) => `${url}/${doc.slug}`, ''),
|
||||
}),
|
||||
],
|
||||
typescript: {
|
||||
outputFile: path.resolve(__dirname, 'payload-types.ts'),
|
||||
},
|
||||
})
|
||||
47
packages/plugin-nested-docs/dev/src/seed/index.ts
Normal file
47
packages/plugin-nested-docs/dev/src/seed/index.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import type { Payload } from 'payload'
|
||||
|
||||
export const seed = async (payload: Payload): Promise<void> => {
|
||||
payload.logger.info('Seeding data...')
|
||||
|
||||
await payload.create({
|
||||
collection: 'users',
|
||||
data: {
|
||||
email: 'demo@payloadcms.com',
|
||||
password: 'demo',
|
||||
},
|
||||
})
|
||||
|
||||
const { id: parentID } = await payload.create({
|
||||
collection: 'pages',
|
||||
data: {
|
||||
title: 'Parent page',
|
||||
slug: 'parent-page',
|
||||
},
|
||||
})
|
||||
|
||||
const { id: childID } = await payload.create({
|
||||
collection: 'pages',
|
||||
data: {
|
||||
title: 'Child page',
|
||||
slug: 'child-page',
|
||||
parent: parentID,
|
||||
},
|
||||
})
|
||||
|
||||
await payload.create({
|
||||
collection: 'pages',
|
||||
data: {
|
||||
title: 'Grandchild page',
|
||||
slug: 'grandchild-page',
|
||||
parent: childID,
|
||||
},
|
||||
})
|
||||
|
||||
await payload.create({
|
||||
collection: 'pages',
|
||||
data: {
|
||||
title: 'Sister page',
|
||||
slug: 'sister-page',
|
||||
},
|
||||
})
|
||||
}
|
||||
32
packages/plugin-nested-docs/dev/src/server.ts
Normal file
32
packages/plugin-nested-docs/dev/src/server.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import dotenv from 'dotenv'
|
||||
dotenv.config()
|
||||
|
||||
import express from 'express'
|
||||
import payload from 'payload'
|
||||
|
||||
import { seed } from './seed'
|
||||
const app = express()
|
||||
|
||||
// Redirect root to Admin panel
|
||||
app.get('/', (_, res) => {
|
||||
res.redirect('/admin')
|
||||
})
|
||||
|
||||
// Initialize Payload
|
||||
const start = async (): Promise<void> => {
|
||||
await payload.init({
|
||||
secret: process.env.PAYLOAD_SECRET,
|
||||
express: app,
|
||||
onInit: () => {
|
||||
payload.logger.info(`Payload Admin URL: ${payload.getAdminURL()}`)
|
||||
},
|
||||
})
|
||||
|
||||
if (process.env.PAYLOAD_PUBLIC_SEED === 'true') {
|
||||
await seed(payload)
|
||||
}
|
||||
|
||||
app.listen(3000)
|
||||
}
|
||||
|
||||
start()
|
||||
16
packages/plugin-nested-docs/dev/tsconfig.json
Normal file
16
packages/plugin-nested-docs/dev/tsconfig.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"strict": false,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"outDir": "./dist",
|
||||
"rootDir": "../",
|
||||
"jsx": "react"
|
||||
},
|
||||
"ts-node": {
|
||||
"transpileOnly": true,
|
||||
"swc": true
|
||||
}
|
||||
}
|
||||
7251
packages/plugin-nested-docs/dev/yarn.lock
Normal file
7251
packages/plugin-nested-docs/dev/yarn.lock
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user