diff --git a/app/[slug]/site/invitation/[id]/page.tsx b/app/[slug]/site/invitation/[id]/page.tsx new file mode 100644 index 0000000..8ac4b40 --- /dev/null +++ b/app/[slug]/site/invitation/[id]/page.tsx @@ -0,0 +1,41 @@ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ + +'use client'; + +import { AbstractApi } from '@/app/api/abstract-api'; +import { Invitation, InvitationSerializer } from '@/app/lib/invitation'; +import { useParams } from 'next/navigation'; +import { TabPanel, TabView } from 'primereact/tabview'; +import { useEffect, useState } from 'react'; + + +export default function Page() { + const params = useParams<{ slug: string, id: string }>() + + const serializer = new InvitationSerializer(); + const api = new AbstractApi(); + + const [invitation, setInvitation] = useState(null); + + useEffect(() => { + api.get(serializer, params.id, (invitation) => { + setInvitation(invitation); + }); + }, [params.slug, params.id]); + + return ( +
+ {invitation && ( + + {invitation.guests.map((guest, index) => ( + +
+

Name: {guest.name}

+
+
+ ))} +
+ )} +
+ ); +} \ No newline at end of file diff --git a/app/[slug]/site/layout.tsx b/app/[slug]/site/layout.tsx new file mode 100644 index 0000000..195d5bd --- /dev/null +++ b/app/[slug]/site/layout.tsx @@ -0,0 +1,20 @@ +export default function Layout({ children }: { children: React.ReactNode }) { + return ( +
+ {/* Full-width image */} +
+ Wedding Banner +
+ + + {/* Body */} +
+ {children} +
+
+ ); +} \ No newline at end of file