This repository has no description
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}