This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

semble / src / webapp / app / (dashboard) / url / page.tsx
1.6 kB 60 lines
1import type { Metadata } from 'next'; 2import { getDomain } from '@/lib/utils/link'; 3import { getUrlMetadata } from '@/features/cards/lib/dal'; 4import { redirect } from 'next/navigation'; 5import SembleAside from '@/features/semble/containers/sembleAside/SembleAside'; 6import SembleAsideSkeleton from '@/features/semble/containers/sembleAside/Skeleton.SembleAside'; 7import SembleContainer from '@/features/semble/containers/sembleContainer/SembleContainer'; 8import { Fragment, Suspense } from 'react'; 9 10interface Props { 11 searchParams: Promise<{ id: string | undefined }>; 12} 13 14export async function generateMetadata({ 15 searchParams, 16}: { 17 searchParams: Promise<{ id: string | undefined }>; 18}): Promise<Metadata> { 19 const { id: url } = await searchParams; 20 21 if (!url) { 22 redirect('/'); 23 } 24 25 const { metadata } = await getUrlMetadata(url); 26 const domain = getDomain(url); 27 const title = metadata.title ? `${metadata.title} (${domain})` : url; 28 29 return { 30 title: `Semble | ${title}`, 31 description: `Semble page for ${title}`, 32 openGraph: { 33 images: [ 34 { 35 url: `${process.env.APP_URL}/api/opengraph/semble?url=${url}`, 36 width: 1200, 37 height: 630, 38 alt: `Semble page for ${domain}`, 39 }, 40 ], 41 }, 42 }; 43} 44 45export default async function Page(props: Props) { 46 const { id: url } = await props.searchParams; 47 48 if (!url) { 49 redirect('/'); 50 } 51 52 return ( 53 <Fragment> 54 <SembleContainer url={url} /> 55 <Suspense fallback={<SembleAsideSkeleton />} key={url}> 56 <SembleAside url={url} /> 57 </Suspense> 58 </Fragment> 59 ); 60}