import { getPayload } from 'payload'; import configPromise from '@payload-config'; export interface PageFrontmatter { title: string; excerpt: string; featuredImage: string | null; locale: string; public?: boolean; } export interface PageMdx { slug: string; frontmatter: PageFrontmatter; content: any; // Lexical AST Document } export async function getPageBySlug(slug: string, locale: string): Promise { const payload = await getPayload({ config: configPromise }); const result = await payload.find({ collection: 'pages' as any, where: { slug: { equals: slug }, locale: { equals: locale }, }, limit: 1, }); const docs = result.docs as any[]; if (!docs || docs.length === 0) return null; const doc = docs[0]; return { slug: doc.slug, frontmatter: { title: doc.title, excerpt: doc.excerpt || '', locale: doc.locale, featuredImage: typeof doc.featuredImage === 'object' && doc.featuredImage !== null ? doc.featuredImage.sizes?.card?.url || doc.featuredImage.url : null, } as PageFrontmatter, content: doc.content as any, // Native Lexical Editor State }; } export async function getAllPages(locale: string): Promise { const payload = await getPayload({ config: configPromise }); const result = await payload.find({ collection: 'pages' as any, where: { locale: { equals: locale, }, }, limit: 100, }); const docs = result.docs as any[]; return docs.map((doc: any) => { return { slug: doc.slug, frontmatter: { title: doc.title, excerpt: doc.excerpt || '', locale: doc.locale, featuredImage: typeof doc.featuredImage === 'object' && doc.featuredImage !== null ? doc.featuredImage.sizes?.card?.url || doc.featuredImage.url : null, } as PageFrontmatter, content: doc.content as any, }; }); } export async function getAllPagesMetadata(locale: string): Promise[]> { const payload = await getPayload({ config: configPromise }); const result = await payload.find({ collection: 'pages' as any, where: { locale: { equals: locale, }, }, limit: 100, }); const docs = result.docs as any[]; return docs.map((doc: any) => { return { slug: doc.slug, frontmatter: { title: doc.title, excerpt: doc.excerpt || '', locale: doc.locale, featuredImage: typeof doc.featuredImage === 'object' && doc.featuredImage !== null ? doc.featuredImage.sizes?.card?.url || doc.featuredImage.url : null, } as PageFrontmatter, }; }); }