Files
anouma/payload.config.ts
T

134 lines
4.1 KiB
TypeScript

import { postgresAdapter } from "@payloadcms/db-postgres";
import { lexicalEditor } from "@payloadcms/richtext-lexical";
import path from "path";
import { buildConfig } from "payload";
import { fileURLToPath } from "url";
import sharp from "sharp";
import { Users } from "@/collections/Users";
import { Media } from "@/collections/Media";
import { Events } from "@/collections/Events";
import { Posts } from "@/collections/Posts";
import { Offers } from "@/collections/Offers";
import { EventRegistrations } from "@/collections/EventRegistrations";
import { Customers } from "@/collections/Customers";
import { Availability } from "@/collections/Availability";
import { AvailabilityOverrides } from "@/collections/AvailabilityOverrides";
import { BookingRequests } from "@/collections/BookingRequests";
import { Conversations } from "@/collections/Conversations";
import { ConversationMessages } from "@/collections/ConversationMessages";
import { GroupRegistrations } from "@/collections/GroupRegistrations";
import { Redirects } from "@/collections/Redirects";
import { AnalyticsEvents } from "@/collections/AnalyticsEvents";
import { AnalyticsDailyStats } from "@/collections/AnalyticsDailyStats";
import { Home } from "@/globals/Home";
import { About } from "@/globals/About";
import { AngeboteIntro } from "@/globals/AngeboteIntro";
import { AktuellesIntro } from "@/globals/AktuellesIntro";
import { Contact } from "@/globals/Contact";
import { Booking } from "@/globals/Booking";
import { MeetingSettings } from "@/globals/MeetingSettings";
import { BookingSettings } from "@/globals/BookingSettings";
import { SEOSettings } from "@/globals/SEOSettings";
import { CookieSettings } from "@/globals/CookieSettings";
import { AnalyticsSettings } from "@/globals/AnalyticsSettings";
import { payloadEmailAdapter } from "@/lib/email/payloadAdapter";
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);
export default buildConfig({
serverURL: process.env.NEXT_PUBLIC_SERVER_URL || "http://localhost:3000",
admin: {
user: Users.slug,
importMap: {
baseDir: path.resolve(dirname),
},
meta: {
titleSuffix: "— Anouma Admin",
},
components: {
afterNavLinks: [
"/components/admin/CalendarNavLink#CalendarNavLink",
"/components/admin/AnalyticsNavLink#AnalyticsNavLink",
"/components/admin/ConversationsNavLink#ConversationsNavLink",
],
views: {
kalender: {
Component: "/components/admin/AdminCalendarView#AdminCalendarView",
path: "/kalender",
exact: true,
meta: { title: "Kalender" },
},
analytics: {
Component: "/components/admin/AdminAnalyticsView#AdminAnalyticsView",
path: "/analytics",
exact: true,
meta: { title: "Analytics" },
},
anfragen: {
Component: "/components/admin/AdminConversationsView#AdminConversationsView",
path: "/anfragen",
exact: true,
meta: { title: "Anfragen" },
},
},
},
},
collections: [
Users,
Customers,
Media,
Events,
Posts,
Offers,
EventRegistrations,
Availability,
AvailabilityOverrides,
BookingRequests,
Conversations,
ConversationMessages,
GroupRegistrations,
Redirects,
AnalyticsEvents,
AnalyticsDailyStats,
],
globals: [
Home,
About,
AngeboteIntro,
AktuellesIntro,
Contact,
Booking,
MeetingSettings,
BookingSettings,
SEOSettings,
CookieSettings,
AnalyticsSettings,
],
editor: lexicalEditor(),
email: payloadEmailAdapter,
graphQL: {
disablePlaygroundInProduction: true,
disableIntrospectionInProduction: true,
},
secret: process.env.PAYLOAD_SECRET || "",
typescript: {
outputFile: path.resolve(dirname, "payload-types.ts"),
},
db: postgresAdapter({
pool: {
connectionString: process.env.DATABASE_URI || "",
},
}),
sharp,
// Server-side upload size limit; the Media collection restricts formats.
upload: {
limits: {
fileSize: 10 * 1024 * 1024, // 10 MB
},
},
plugins: [],
});