From 269f1f8c62740617ebcfd1b3c30fef7ac5b9c2ca Mon Sep 17 00:00:00 2001 From: zmeyer44 Date: Wed, 1 Nov 2023 12:51:43 -0400 Subject: [PATCH] calendar --- app/(app)/calendar/[naddr]/layout.tsx | 51 +++++++++++++++++++++++++++ app/(app)/calendar/[naddr]/page.tsx | 19 +++++++++- app/(app)/event/[naddr]/layout.tsx | 7 ++-- 3 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 app/(app)/calendar/[naddr]/layout.tsx diff --git a/app/(app)/calendar/[naddr]/layout.tsx b/app/(app)/calendar/[naddr]/layout.tsx new file mode 100644 index 0000000..2665690 --- /dev/null +++ b/app/(app)/calendar/[naddr]/layout.tsx @@ -0,0 +1,51 @@ +import type { Metadata, ResolvingMetadata } from "next"; +import { get } from "@/lib/server-actions/events/cache"; + +export async function generateMetadata( + { params }: { params: { naddr: string } }, + parent: ResolvingMetadata, +): Promise { + // read route params + const identifier = params.naddr; + + // fetch data + const event = await get(identifier); + + // optionally access and extend (rather than replace) parent metadata + const previousImages = (await parent).openGraph?.images || []; + if (!event) { + return { + title: "Flockstr Calendar", + openGraph: { + images: previousImages, + }, + }; + } + const title = `${event.name} | Flockstr`; + const images = event.image + ? [event.image, ...previousImages] + : previousImages; + return { + title: title, + description: event.description, + openGraph: { + title: title, + description: event.description, + images: images, + }, + twitter: { + title: title, + description: event.description, + images: images, + card: "summary_large_image", + }, + }; +} + +export default function metadataLayout({ + children, +}: { + children: React.ReactNode; +}) { + return <>{children}; +} diff --git a/app/(app)/calendar/[naddr]/page.tsx b/app/(app)/calendar/[naddr]/page.tsx index eaabff9..0e1bb9d 100644 --- a/app/(app)/calendar/[naddr]/page.tsx +++ b/app/(app)/calendar/[naddr]/page.tsx @@ -1,5 +1,5 @@ "use client"; -import { useState } from "react"; +import { useEffect } from "react"; import Image from "next/image"; import Link from "next/link"; import { nip19 } from "nostr-tools"; @@ -14,6 +14,7 @@ import { import { type NDKKind } from "@nostr-dev-kit/ndk"; import Header from "./_components/Header"; import EventsFromCalendar from "@/containers/EventsTimeline/EventsFromCalendar"; +import { add } from "@/lib/server-actions/events/cache"; export default function EventPage({ params: { naddr }, @@ -36,6 +37,22 @@ export default function EventPage({ }, }); const event = events[0]; + useEffect(() => { + if (event) { + const { tags, content } = event; + const name = getTagValues("name", tags) ?? "Untitled"; + const image = + getTagValues("image", tags) ?? + getTagValues("picture", tags) ?? + getTagValues("banner", tags); + add({ + identifier: naddr, + name: name, + description: content, + image: image, + }); + } + }, [event]); if (!event) { return ( diff --git a/app/(app)/event/[naddr]/layout.tsx b/app/(app)/event/[naddr]/layout.tsx index eabdef4..9efc5e0 100644 --- a/app/(app)/event/[naddr]/layout.tsx +++ b/app/(app)/event/[naddr]/layout.tsx @@ -22,18 +22,21 @@ export async function generateMetadata( }; } const title = `${event.name} | Flockstr`; + const images = event.image + ? [event.image, ...previousImages] + : previousImages; return { title: title, description: event.description, openGraph: { title: title, description: event.description, - images: [event.image, ...previousImages], + images: images, }, twitter: { title: title, description: event.description, - images: [event.image], + images: images, card: "summary_large_image", }, };