Frontend/src/app/common/embed.ts

70 lines
1.2 KiB
TypeScript
Raw Normal View History

2024-04-16 17:14:15 +00:00
import { Metadata } from "next";
type Embed = {
/**
* The title of the embed.
*/
2024-04-16 17:14:15 +00:00
title: string;
2024-04-19 23:34:42 +00:00
/**
* The title of the embed.
*/
embedTitle?: string;
/**
* The description of the embed.
*/
2024-04-16 17:14:15 +00:00
description: string;
/**
* The image to show as the thumbmail.
*/
image?: string;
/**
* The type of the card.
*/
cardType?: "summary" | "summary_large_image";
2024-04-16 17:14:15 +00:00
};
/**
* Generates metadata for a embed.
*
* @param title the title of the embed
2024-04-19 23:34:42 +00:00
* @param embedTitle the title of the embed
2024-04-16 17:14:15 +00:00
* @param description the description of the embed
2024-04-19 23:34:42 +00:00
* @param image the image to show as the thumbmail
* @param cardType the type of the card
2024-04-16 17:14:15 +00:00
* @returns the metadata for the embed
*/
export function generateEmbed({ title, embedTitle, description, image, cardType }: Embed): Metadata {
2024-04-19 23:34:42 +00:00
// Fall back to the title
if (!embedTitle) {
embedTitle = title;
}
if (!cardType) {
cardType = "summary";
}
2024-04-19 23:34:42 +00:00
2024-04-16 17:14:15 +00:00
const metadata: Metadata = {
title: `${title}`,
openGraph: {
title: `${title}`,
description: description,
},
twitter: {
card: cardType,
2024-04-16 17:14:15 +00:00
},
};
if (image) {
metadata.openGraph!.images = [
{
url: image || "",
},
];
}
return metadata;
}