feature: deployment, deps update & more

This commit is contained in:
Benno Tielen 2024-09-06 15:02:33 +02:00
parent f645c01ac0
commit 0c7c64f7fc
24 changed files with 1722 additions and 2298 deletions

1
.dockerignore Normal file
View file

@ -0,0 +1 @@
/node_modules

File diff suppressed because one or more lines are too long

View file

@ -1,6 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"--install.ignore-engines" true
yarn-path ".yarn/releases/yarn-1.22.22.cjs"

View file

@ -1,3 +1 @@
nodeLinker: node-modules nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.4.0.cjs

View file

@ -1,69 +1,8 @@
# From https://github.com/vercel/next.js/blob/canary/examples/with-docker/Dockerfile FROM node:21-alpine
FROM node:18-alpine AS base
# Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat RUN apk add --no-cache libc6-compat
WORKDIR /app WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . . COPY . .
RUN yarn set version stable
# Next.js collects completely anonymous telemetry data about general usage. RUN yarn install --frozen-lockfile
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN \
if [ -f yarn.lock ]; then yarn run build; \
elif [ -f package-lock.json ]; then npm run build; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \
else echo "Lockfile not found." && exit 1; \
fi
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
# Set the correct permission for prerender cache
RUN mkdir .next
RUN chown nextjs:nodejs .next
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000 EXPOSE 3000
CMD yarn dev
ENV PORT 3000
# server.js is created by next build from the standalone output
# https://nextjs.org/docs/pages/api-reference/next-config-js/output
CMD HOSTNAME="0.0.0.0" node server.js

70
Dockerfile-old Normal file
View file

@ -0,0 +1,70 @@
# From https://github.com/vercel/next.js/blob/canary/examples/with-docker/Dockerfile
FROM node:21-alpine AS base
# Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json .yarnrc.yml yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN yarn set version stable
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN \
if [ -f yarn.lock ]; then yarn run build; \
elif [ -f package-lock.json ]; then npm run build; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \
else echo "Lockfile not found." && exit 1; \
fi
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
# Set the correct permission for prerender cache
RUN mkdir .next
RUN chown nextjs:nodejs .next
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
# server.js is created by next build from the standalone output
# https://nextjs.org/docs/pages/api-reference/next-config-js/output
CMD HOSTNAME="0.0.0.0" node server.js

View file

@ -3,6 +3,11 @@ import { withPayload } from '@payloadcms/next/withPayload'
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = { const nextConfig = {
// Your Next.js config here // Your Next.js config here
eslint: {
// Warning: This allows production builds to successfully complete even if
// your project has ESLint errors.
ignoreDuringBuilds: true,
},
} }
export default withPayload(nextConfig) export default withPayload(nextConfig)

View file

@ -16,18 +16,18 @@
"build-storybook": "storybook build" "build-storybook": "storybook build"
}, },
"dependencies": { "dependencies": {
"@payloadcms/db-mongodb": "beta", "@payloadcms/db-mongodb": "3.0.0-beta.99",
"@payloadcms/next": "beta", "@payloadcms/next": "3.0.0-beta.99",
"@payloadcms/plugin-cloud": "beta", "@payloadcms/plugin-cloud": "3.0.0-beta.99",
"@payloadcms/richtext-lexical": "beta", "@payloadcms/richtext-lexical": "3.0.0-beta.99",
"classnames": "^2.5.1", "classnames": "^2.5.1",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"graphql": "^16.8.1", "graphql": "^16.8.1",
"mapbox-gl": "^3.5.2", "mapbox-gl": "^3.5.2",
"next": "15.0.0-canary.123", "next": "15.0.0-canary.123",
"payload": "beta", "payload": "3.0.0-beta.99",
"react": "^19.0.0-rc-6230622a1a-20240610", "react": "19.0.0-rc-f65ac7bd-20240826",
"react-dom": "^19.0.0-rc-6230622a1a-20240610", "react-dom": "19.0.0-rc-f65ac7bd-20240826",
"sharp": "0.32.6" "sharp": "0.32.6"
}, },
"devDependencies": { "devDependencies": {
@ -65,5 +65,5 @@
"@types/react": "npm:types-react@19.0.0-rc.0", "@types/react": "npm:types-react@19.0.0-rc.0",
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.0" "@types/react-dom": "npm:types-react-dom@19.0.0-rc.0"
}, },
"packageManager": "yarn@4.4.0" "packageManager": "yarn@4.4.1"
} }

View file

@ -4,6 +4,7 @@ import type { Metadata } from 'next'
import config from '@payload-config' import config from '@payload-config'
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ /* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import { NotFoundPage, generatePageMetadata } from '@payloadcms/next/views' import { NotFoundPage, generatePageMetadata } from '@payloadcms/next/views'
import { importMap } from '../importMap'
type Args = { type Args = {
params: { params: {
@ -14,13 +15,10 @@ type Args = {
} }
} }
export const generateMetadata = ({ export const generateMetadata = ({ params, searchParams }: Args): Promise<Metadata> =>
params,
searchParams,
}: Args): Promise<Metadata> =>
generatePageMetadata({ config, params, searchParams }) generatePageMetadata({ config, params, searchParams })
const NotFound = ({ params, searchParams }: Args) => const NotFound = ({ params, searchParams }: Args) =>
NotFoundPage({ config, params, searchParams }) NotFoundPage({ config, params, searchParams, importMap })
export default NotFound export default NotFound

View file

@ -4,6 +4,7 @@ import type { Metadata } from 'next'
import config from '@payload-config' import config from '@payload-config'
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ /* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import { RootPage, generatePageMetadata } from '@payloadcms/next/views' import { RootPage, generatePageMetadata } from '@payloadcms/next/views'
import { importMap } from '../importMap'
type Args = { type Args = {
params: { params: {
@ -14,13 +15,10 @@ type Args = {
} }
} }
export const generateMetadata = ({ export const generateMetadata = ({ params, searchParams }: Args): Promise<Metadata> =>
params,
searchParams,
}: Args): Promise<Metadata> =>
generatePageMetadata({ config, params, searchParams }) generatePageMetadata({ config, params, searchParams })
const Page = ({ params, searchParams }: Args) => const Page = ({ params, searchParams }: Args) =>
RootPage({ config, params, searchParams }) RootPage({ config, params, searchParams, importMap })
export default Page export default Page

View file

@ -0,0 +1 @@
export const importMap = {}

View file

@ -1,13 +1,7 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY it because it could be re-written at any time. */ /* DO NOT MODIFY it because it could be re-written at any time. */
import config from '@payload-config' import config from '@payload-config'
import { import { REST_DELETE, REST_GET, REST_OPTIONS, REST_PATCH, REST_POST } from '@payloadcms/next/routes'
REST_DELETE,
REST_GET,
REST_OPTIONS,
REST_PATCH,
REST_POST,
} from '@payloadcms/next/routes'
export const GET = REST_GET(config) export const GET = REST_GET(config)
export const POST = REST_POST(config) export const POST = REST_POST(config)

View file

@ -6,13 +6,16 @@ import { RootLayout } from '@payloadcms/next/layouts'
import React from 'react' import React from 'react'
import './custom.scss' import './custom.scss'
import { importMap } from './admin/importMap'
type Args = { type Args = {
children: React.ReactNode children: React.ReactNode
} }
const Layout = ({ children }: Args) => ( const Layout = ({ children }: Args) => (
<RootLayout config={configPromise}>{children}</RootLayout> <RootLayout importMap={importMap} config={configPromise}>
{children}
</RootLayout>
) )
export default Layout export default Layout

View file

@ -51,7 +51,7 @@ export default async function Home() {
and: [ and: [
{ {
date: { date: {
greater_than_equal: today.toISOString().substring(0, 10), greater_than_equal: today.toISOString(),
}, },
}, },
{ {
@ -71,7 +71,7 @@ export default async function Home() {
<> <>
<BannerWithMenu nextMass={nextMass.docs[0]} /> <BannerWithMenu nextMass={nextMass.docs[0]} />
<div className={styles.mass}> <div className={styles.mass}>
<h2>Kommen Sie vorbei, in unsere Heilige Messe!</h2> <h2>Kommen Sie zu unserer Heiligen Messe vorbei!</h2>
<div className={styles.table}> <div className={styles.table}>
{worshipByDate.map(([date, worships]) => ( {worshipByDate.map(([date, worships]) => (

View file

@ -0,0 +1,43 @@
import { CollectionConfig } from 'payload'
import { isAdminOrEmployee } from '@/collections/access/admin'
export const Announcements: CollectionConfig = {
slug: 'vermeldungen',
labels: {
singular: {
de: 'Vermeldung'
},
plural: {
de: 'Vermeldungen'
}
},
fields: [
{
name: 'date',
type: 'date',
required: true,
label: {
de: 'Datum'
}
},
{
name: 'parish',
type: "relationship",
relationTo: 'parish',
required: true,
hasMany: true,
label: {
de: "Gemeinde"
},
admin: {
allowCreate: false
}
},
],
access: {
read: () => true,
create: isAdminOrEmployee(),
update: isAdminOrEmployee(),
delete: isAdminOrEmployee(),
}
}

64
src/collections/Blog.ts Normal file
View file

@ -0,0 +1,64 @@
import { CollectionConfig } from 'payload'
import { isAdminOrEmployee } from '@/collections/access/admin'
export const Blog: CollectionConfig = {
slug: 'blog',
labels: {
singular: {
de: 'Blogpost'
},
plural: {
de: 'Blog'
}
},
fields: [
{
name: 'photo',
type: 'upload',
relationTo: 'media',
},
{
name: 'title',
type: 'text',
required: true,
label: {
de: "Titel"
}
},
{
name: 'parish',
type: 'relationship',
relationTo: 'parish',
hasMany: true,
label: {
de: "Gemeinde"
}
},
{
name: 'isHighlight',
type: 'checkbox',
required: true,
label: {
de: "Highlight"
},
defaultValue: false
},
{
name: 'text',
type: 'richText',
required: true,
label: {
de: "Post"
}
}
],
admin: {
useAsTitle: 'title'
},
access: {
read: () => true,
create: isAdminOrEmployee(),
update: isAdminOrEmployee(),
delete: isAdminOrEmployee(),
}
}

93
src/collections/Pages.ts Normal file
View file

@ -0,0 +1,93 @@
import { Block, CollectionConfig } from 'payload'
import { isAdmin, isAdminOrEmployee } from '@/collections/access/admin'
const Content: Block = {
slug: 'content',
fields: [
{
name: 'content',
type: 'richText',
required: true
}
]
}
const Title: Block = {
slug: 'title',
fields: [
{
name: 'title',
type: 'text',
required: true,
},
]
}
const Testimony: Block = {
slug: 'testimony',
labels: {
singular: {
de: 'Zeugnis'
},
plural: {
de: 'Zeugnisse'
}
},
fields: [
{
name: 'testimony',
type: 'relationship',
relationTo: 'testimony',
required: true
}
]
}
export const Pages: CollectionConfig = {
slug: 'page',
labels: {
singular: {
de: 'Seite'
},
plural: {
de: "Seiten"
},
},
fields: [
{
name: "title",
type: "text",
required: true,
label: {
de: "Titel"
}
},
{
name: 'slug',
type: 'text',
required: true,
label: {
de: "Slug"
}
},
{
name: 'content',
type: 'blocks',
required: true,
blocks: [
Content,
Title,
Testimony
]
}
],
admin: {
useAsTitle: "title"
},
access: {
read: () => true,
create: isAdminOrEmployee(),
update: isAdminOrEmployee(),
delete: isAdmin(),
}
}

View file

@ -20,6 +20,14 @@ export const Parish: CollectionConfig = {
type: 'text', type: 'text',
required: true, required: true,
}, },
{
name: 'slug',
label: {
de: 'URL slug',
},
type: 'text',
required: true
},
{ {
name: 'churches', name: 'churches',
label: { label: {
@ -41,7 +49,6 @@ export const Parish: CollectionConfig = {
type: 'relationship', type: 'relationship',
relationTo: 'employees', relationTo: 'employees',
hasMany: true, hasMany: true,
required: true,
}, },
{ {
name: 'contact', name: 'contact',

39
src/collections/Tweets.ts Normal file
View file

@ -0,0 +1,39 @@
import { CollectionConfig } from 'payload'
import { isAdminOrEmployee } from '@/collections/access/admin'
export const Tweets: CollectionConfig = {
slug: 'tweet',
labels: {
singular: {
de: "Kurznachricht"
},
plural: {
de: "Kurznachrichten"
}
},
fields: [
{
name: 'parish',
type: 'relationship',
relationTo: 'parish',
hasMany: true,
label: {
de: "Gemeinde"
}
},
{
name: 'text',
type: 'textarea',
required: true,
label: {
de: "Nachricht"
}
}
],
access: {
read: () => true,
create: isAdminOrEmployee(),
update: isAdminOrEmployee(),
delete: isAdminOrEmployee(),
}
}

View file

@ -4,6 +4,7 @@ import MenuIcon from './menu.svg'
import Image from 'next/image' import Image from 'next/image'
import { Worship } from '@/payload-types' import { Worship } from '@/payload-types'
import { MenuBaseLayer } from '@/components/MenuBaseLayer/MenuBaseLayer' import { MenuBaseLayer } from '@/components/MenuBaseLayer/MenuBaseLayer'
import classNames from 'classnames'
type MenuProps = { type MenuProps = {
starClick?: () => void starClick?: () => void
@ -12,7 +13,7 @@ type MenuProps = {
export const Menu = (props: MenuProps) => { export const Menu = (props: MenuProps) => {
return ( return (
<nav className={styles.nav}> <nav className={classNames(styles.nav, {[styles.white]: typeof props.starClick !== 'undefined'})}>
<MenuBaseLayer /> <MenuBaseLayer />
<div className={styles.navMobile}> <div className={styles.navMobile}>
<Image src={MenuIcon} width={25} height={25} alt={'Menu'} /> <Image src={MenuIcon} width={25} height={25} alt={'Menu'} />

View file

@ -8,6 +8,10 @@
margin-bottom: 2.5em; margin-bottom: 2.5em;
} }
.white {
color: #eeeeee;
}
.navMobile { .navMobile {
display: none; display: none;
} }

View file

@ -8,241 +8,342 @@
export interface Config { export interface Config {
auth: { auth: {
users: UserAuthOperations users: UserAuthOperations;
} };
collections: { collections: {
parish: Parish parish: Parish;
church: Church church: Church;
worship: Worship worship: Worship;
event: Event vermeldungen: Vermeldungen;
group: Group blog: Blog;
employees: Employee tweet: Tweet;
testimony: Testimony event: Event;
users: User group: Group;
media: Media employees: Employee;
'payload-preferences': PayloadPreference testimony: Testimony;
'payload-migrations': PayloadMigration page: Page;
} users: User;
media: Media;
'payload-preferences': PayloadPreference;
'payload-migrations': PayloadMigration;
};
db: { db: {
defaultIDType: string defaultIDType: string;
} };
globals: {} globals: {};
locale: null locale: null;
user: User & { user: User & {
collection: 'users' collection: 'users';
} };
} }
export interface UserAuthOperations { export interface UserAuthOperations {
forgotPassword: { forgotPassword: {
email: string email: string;
password: string password: string;
} };
login: { login: {
email: string email: string;
password: string password: string;
} };
registerFirstUser: { registerFirstUser: {
email: string email: string;
password: string password: string;
} };
unlock: { unlock: {
email: string email: string;
password: string password: string;
} };
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "parish". * via the `definition` "parish".
*/ */
export interface Parish { export interface Parish {
id: string id: string;
name: string name: string;
churches: (string | Church)[] slug: string;
employees: (string | Employee)[] churches: (string | Church)[];
contact: string employees?: (string | Employee)[] | null;
title: string contact: string;
description: string title: string;
photo?: string | Media | null description: string;
updatedAt: string photo?: (string | null) | Media;
createdAt: string updatedAt: string;
createdAt: string;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "church". * via the `definition` "church".
*/ */
export interface Church { export interface Church {
id: string id: string;
name: string name: string;
address: string address: string;
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "employees". * via the `definition` "employees".
*/ */
export interface Employee { export interface Employee {
id: string id: string;
photo?: string | Media | null photo?: (string | null) | Media;
name: string name: string;
occupation: string occupation: string;
email?: string | null email?: string | null;
telephone?: string | null telephone?: string | null;
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "media". * via the `definition` "media".
*/ */
export interface Media { export interface Media {
id: string id: string;
alt: string alt: string;
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
url?: string | null url?: string | null;
thumbnailURL?: string | null thumbnailURL?: string | null;
filename?: string | null filename?: string | null;
mimeType?: string | null mimeType?: string | null;
filesize?: number | null filesize?: number | null;
width?: number | null width?: number | null;
height?: number | null height?: number | null;
focalX?: number | null focalX?: number | null;
focalY?: number | null focalY?: number | null;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "worship". * via the `definition` "worship".
*/ */
export interface Worship { export interface Worship {
id: string id: string;
date: string date: string;
location: string | Church location: string | Church;
type: 'MASS' | 'FAMILY' | 'WORD' type: 'MASS' | 'FAMILY' | 'WORD';
cancelled: boolean cancelled: boolean;
title?: string | null title?: string | null;
description?: string | null description?: string | null;
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "vermeldungen".
*/
export interface Vermeldungen {
id: string;
date: string;
parish: (string | Parish)[];
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "blog".
*/
export interface Blog {
id: string;
photo?: (string | null) | Media;
title: string;
parish?: (string | Parish)[] | null;
isHighlight: boolean;
text: {
root: {
type: string;
children: {
type: string;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
};
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "tweet".
*/
export interface Tweet {
id: string;
parish?: (string | Parish)[] | null;
text: string;
updatedAt: string;
createdAt: string;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "event". * via the `definition` "event".
*/ */
export interface Event { export interface Event {
id: string id: string;
photo?: string | Media | null photo?: (string | null) | Media;
title: string title: string;
datum: string datum: string;
parish?: (string | Parish)[] | null parish?: (string | Parish)[] | null;
group?: (string | null) | Group group?: (string | null) | Group;
shortDescription: string shortDescription: string;
description: { description: {
root: { root: {
type: string type: string;
children: { children: {
type: string type: string;
version: number version: number;
[k: string]: unknown [k: string]: unknown;
}[] }[];
direction: ('ltr' | 'rtl') | null direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number indent: number;
version: number version: number;
} };
[k: string]: unknown [k: string]: unknown;
} };
cancelled: boolean cancelled: boolean;
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "group". * via the `definition` "group".
*/ */
export interface Group { export interface Group {
id: string id: string;
photo?: string | Media | null photo?: (string | null) | Media;
name: string name: string;
description: string description: string;
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "testimony". * via the `definition` "testimony".
*/ */
export interface Testimony { export interface Testimony {
id: string id: string;
testimony: string testimony: string;
name: string name: string;
occupation?: string | null occupation?: string | null;
category: 'EUCHARIST' category: 'EUCHARIST';
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "page".
*/
export interface Page {
id: string;
title: string;
slug: string;
content: (
| {
content: {
root: {
type: string;
children: {
type: string;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
};
id?: string | null;
blockName?: string | null;
blockType: 'content';
}
| {
title: string;
id?: string | null;
blockName?: string | null;
blockType: 'title';
}
| {
testimony: string | Testimony;
id?: string | null;
blockName?: string | null;
blockType: 'testimony';
}
)[];
updatedAt: string;
createdAt: string;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "users". * via the `definition` "users".
*/ */
export interface User { export interface User {
id: string id: string;
name: string name: string;
roles: 'user' | 'employee' | 'admin' roles: 'user' | 'employee' | 'admin';
groups?: (string | Group)[] | null groups?: (string | Group)[] | null;
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
email: string email: string;
resetPasswordToken?: string | null resetPasswordToken?: string | null;
resetPasswordExpiration?: string | null resetPasswordExpiration?: string | null;
salt?: string | null salt?: string | null;
hash?: string | null hash?: string | null;
loginAttempts?: number | null loginAttempts?: number | null;
lockUntil?: string | null lockUntil?: string | null;
password?: string | null password?: string | null;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-preferences". * via the `definition` "payload-preferences".
*/ */
export interface PayloadPreference { export interface PayloadPreference {
id: string id: string;
user: { user: {
relationTo: 'users' relationTo: 'users';
value: string | User value: string | User;
} };
key?: string | null key?: string | null;
value?: value?:
| { | {
[k: string]: unknown [k: string]: unknown;
} }
| unknown[] | unknown[]
| string | string
| number | number
| boolean | boolean
| null | null;
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-migrations". * via the `definition` "payload-migrations".
*/ */
export interface PayloadMigration { export interface PayloadMigration {
id: string id: string;
name?: string | null name?: string | null;
batch?: number | null batch?: number | null;
updatedAt: string updatedAt: string;
createdAt: string createdAt: string;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "auth". * via the `definition` "auth".
*/ */
export interface Auth { export interface Auth {
[k: string]: unknown [k: string]: unknown;
} }
declare module 'payload' { declare module 'payload' {
export interface GeneratedTypes extends Config {} export interface GeneratedTypes extends Config {}
} }

View file

@ -16,6 +16,10 @@ import { Parish } from '@/collections/Parish'
import { Employees } from '@/collections/Employees' import { Employees } from '@/collections/Employees'
import { Groups } from '@/collections/Groups' import { Groups } from '@/collections/Groups'
import { Events } from '@/collections/Events' import { Events } from '@/collections/Events'
import { Announcements } from '@/collections/Announcements'
import { Blog } from '@/collections/Blog'
import { Tweets } from '@/collections/Tweets'
import { Pages } from '@/collections/Pages'
const filename = fileURLToPath(import.meta.url) const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename) const dirname = path.dirname(filename)
@ -28,10 +32,14 @@ export default buildConfig({
Parish, Parish,
Churches, Churches,
Worship, Worship,
Announcements,
Blog,
Tweets,
Events, Events,
Groups, Groups,
Employees, Employees,
Testimony, Testimony,
Pages,
Users, Users,
Media, Media,
], ],

2244
yarn.lock

File diff suppressed because it is too large Load diff