import AppLayout from "components/AppLayout"; import Chip from "components/Chip"; import ThumbnailHeader from "components/Content/ThumbnailHeader"; import HorizontalLine from "components/HorizontalLine"; import LanguageSwitcher from "components/LanguageSwitcher"; import Markdawn from "components/Markdown/Markdawn"; import TOC from "components/Markdown/TOC"; import ReturnButton, { ReturnButtonType, } from "components/PanelComponents/ReturnButton"; import ContentPanel from "components/Panels/ContentPanel"; import SubPanel from "components/Panels/SubPanel"; import RecorderChip from "components/RecorderChip"; import ToolTip from "components/ToolTip"; import { getPost, getPostsSlugs } from "graphql/operations"; import { GetPostQuery, StrapiImage } from "graphql/operations-types"; import { GetStaticPathsContext, GetStaticPathsResult, GetStaticPropsContext, } from "next"; import { useRouter } from "next/router"; import { AppStaticProps, getAppStaticProps } from "queries/getAppStaticProps"; import { getLocalesFromLanguages, getStatusDescription, prettySlug, } from "queries/helpers"; interface PostProps extends AppStaticProps { post: GetPostQuery["posts"]["data"][number]["attributes"]; postId: GetPostQuery["posts"]["data"][number]["id"]; } export default function LibrarySlug(props: PostProps): JSX.Element { const { post, langui } = props; const locales = getLocalesFromLanguages(post.translations_languages); const router = useRouter(); const thumbnail: StrapiImage | undefined = post.translations.length > 0 && post.translations[0].thumbnail.data ? post.translations[0].thumbnail.data.attributes : post.thumbnail.data ? post.thumbnail.data.attributes : undefined; const subPanel = ( {post.translations.length > 0 && (

{langui.status}:

{post.translations[0].status}
)} {post.authors.data.length > 0 && (

{"Authors"}:

{post.authors.data.map((author) => ( ))}
)} {post.translations.length > 0 && post.translations[0].body && ( )}
); const contentPanel = ( 0 ? post.translations[0].title : prettySlug(post.slug) } description={ post.translations.length > 0 ? post.translations[0].excerpt : undefined } langui={langui} categories={post.categories} /> {locales.includes(router.locale ?? "en") ? ( ) : ( )} ); return ( 0 ? post.translations[0].title : prettySlug(post.slug) } contentPanel={contentPanel} subPanel={subPanel} thumbnail={thumbnail} {...props} /> ); } export async function getStaticProps( context: GetStaticPropsContext ): Promise<{ props: PostProps }> { const slug = context.params?.slug?.toString() ?? ""; const post = ( await getPost({ slug: slug, language_code: context.locale ?? "en", }) ).posts.data[0]; const props: PostProps = { ...(await getAppStaticProps(context)), post: post.attributes, postId: post.id, }; return { props: props, }; } export async function getStaticPaths( context: GetStaticPathsContext ): Promise { const posts = await getPostsSlugs({}); const paths: GetStaticPathsResult["paths"] = []; posts.posts.data.map((item) => { context.locales?.map((local) => { paths.push({ params: { slug: item.attributes.slug }, locale: local }); }); }); return { paths, fallback: false, }; }