import * as React from "react"
import {
GetStaticPathsContext,
GetStaticPathsResult,
GetStaticPropsContext,
GetStaticPropsResult,
} from "next"
import Head from "next/head"
import { useRouter } from "next/router"
import { DrupalNode } from "next-drupal"
import { drupal } from "lib/drupal"
import { getMenus } from "lib/get-menus"
import { absoluteURL } from "lib/utils/absolute-url"
import { getParams } from "lib/get-params"
import { Node } from "components/node"
import { Layout, LayoutProps } from "components/layout"
import { Meta } from "components/meta"
const RESOURCE_TYPES = ["node--page", "node--landing_page", "node--article"]
interface NodePageProps extends LayoutProps {
node: DrupalNode
}
export default function NodePage({ node, menus }: NodePageProps) {
const router = useRouter()
return (
{node.content_translations?.map((translation, index) =>
translation.langcode !== router.locale ? (
) : null
)}
)
}
export async function getStaticPaths(
context: GetStaticPathsContext
): Promise {
return {
paths: await drupal.getStaticPathsFromContext(RESOURCE_TYPES, context, {
params: {
filter: {
"field_site.meta.drupal_internal__target_id":
process.env.DRUPAL_SITE_ID,
},
},
}),
fallback: "blocking",
}
}
export async function getStaticProps(
context: GetStaticPropsContext
): Promise> {
const path = await drupal.translatePathFromContext(context)
if (!path || !RESOURCE_TYPES.includes(path.jsonapi.resourceName)) {
return {
notFound: true,
}
}
const type = path.jsonapi.resourceName
const node = await drupal.getResourceFromContext(path, context, {
params: getParams(type),
})
if (!node || (!context.preview && node?.status === false)) {
return {
notFound: true,
}
}
// Load initial view data.
if (type === "node--landing_page") {
for (const section of node.field_sections) {
if (section.type === "paragraph--view" && section.field_view) {
const view = await drupal.getView(section.field_view, {
params: {
include: "field_location,field_images.field_media_image",
},
})
section.field_view = {
name: section.field_view,
...view,
}
}
}
}
return {
props: {
node,
menus: await getMenus(context),
},
}
}