import { AppLayout } from "components/AppLayout"; import { Chip } from "components/Chip"; import { HorizontalLine } from "components/HorizontalLine"; import { Img } from "components/Img"; import { ReturnButton, ReturnButtonType, } from "components/PanelComponents/ReturnButton"; import { ContentPanel, ContentPanelWidthSizes, } from "components/Panels/ContentPanel"; import { SubPanel } from "components/Panels/SubPanel"; import DefinitionCard from "components/Wiki/DefinitionCard"; import { AppStaticProps, getAppStaticProps } from "graphql/getAppStaticProps"; import { getReadySdk } from "graphql/sdk"; import { filterHasAttributes, isDefined, isDefinedAndNotEmpty, } from "helpers/others"; import { WikiPageWithTranslations } from "helpers/types"; import { useSmartLanguage } from "hooks/useSmartLanguage"; import { GetStaticPathsContext, GetStaticPathsResult, GetStaticPropsContext, } from "next"; import { useMemo } from "react"; interface Props extends AppStaticProps { page: WikiPageWithTranslations; } export default function WikiPage(props: Props): JSX.Element { const { page, langui, languages } = props; const [selectedTranslation, LanguageSwitcher] = useSmartLanguage({ items: page.translations, languages: languages, languageExtractor: (item) => item.language?.data?.attributes?.code, }); const subPanel = useMemo( () => ( ), [langui] ); const contentPanel = useMemo( () => ( {selectedTranslation?.title} {selectedTranslation && ( {page.thumbnail?.data?.attributes && ( )} {langui.categories} {page.categories?.data.map((category) => ( {category.attributes?.name} ))} {isDefinedAndNotEmpty(selectedTranslation.summary) && ( {langui.summary} {selectedTranslation.summary} )} {filterHasAttributes(page.definitions, ["translations"]).map( (definition, index) => ( ({ language: translation.language.data?.attributes?.code, definition: translation.definition, status: translation.status, }))} index={index + 1} languages={languages} langui={langui} /> ) )} )} ), [ LanguageSwitcher, languages, langui, page.categories?.data, page.definitions, page.thumbnail?.data?.attributes, selectedTranslation, ] ); return ( ); } export async function getStaticProps( context: GetStaticPropsContext ): Promise<{ notFound: boolean } | { props: Props }> { const sdk = getReadySdk(); const slug = context.params && isDefined(context.params.slug) ? context.params.slug.toString() : ""; const page = await sdk.getWikiPage({ language_code: context.locale ?? "en", slug: slug, }); if (!page.wikiPages?.data[0].attributes?.translations) return { notFound: true }; const props: Props = { ...(await getAppStaticProps(context)), page: page.wikiPages.data[0].attributes as WikiPageWithTranslations, }; return { props: props, }; } export async function getStaticPaths( context: GetStaticPathsContext ): Promise { const sdk = getReadySdk(); const contents = await sdk.getWikiPagesSlugs(); const paths: GetStaticPathsResult["paths"] = []; filterHasAttributes(contents.wikiPages?.data).map((wikiPage) => { context.locales?.map((local) => paths.push({ params: { slug: wikiPage.attributes.slug }, locale: local, }) ); }); return { paths, fallback: "blocking", }; }
{langui.categories}
{langui.summary}
{selectedTranslation.summary}