From 971f7a49848e00882d77b39e24244d6e535beb6c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 28 Jan 2022 10:39:53 +0700 Subject: [PATCH] added static generation for nodes --- src/pages/index.tsx | 4 ++-- src/pages/node/[id].tsx | 33 ++++++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4185625e..57a2ea5f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -10,7 +10,7 @@ import { FlowLayout } from '~/layouts/FlowLayout'; import { FlowProvider } from '~/utils/providers/FlowProvider'; import { getPageTitle } from '~/utils/ssr/getPageTitle'; -export const getStaticProps = async ctx => { +export const getStaticProps = async () => { const fallbackData = await getNodeDiff({ start: new Date().toISOString(), end: new Date().toISOString(), @@ -24,7 +24,7 @@ export const getStaticProps = async ctx => { props: { fallbackData, }, - revalidate: 5 * 60, + revalidate: 60 * 60, // every hour }; }; diff --git a/src/pages/node/[id].tsx b/src/pages/node/[id].tsx index a5a4448b..f01d3de3 100644 --- a/src/pages/node/[id].tsx +++ b/src/pages/node/[id].tsx @@ -1,10 +1,10 @@ import React, { FC } from 'react'; import { observer } from 'mobx-react-lite'; -import { InferGetServerSidePropsType } from 'next'; +import { InferGetStaticPropsType } from 'next'; import { RouteComponentProps } from 'react-router'; -import { apiGetNode } from '~/api/node'; +import { apiGetNode, getNodeDiff } from '~/api/node'; import { NodeHeadMetadata } from '~/components/node/NodeHeadMetadata'; import { useNodeComments } from '~/hooks/comments/useNodeComments'; import { useScrollToTop } from '~/hooks/dom/useScrollToTop'; @@ -18,8 +18,31 @@ import { CommentContextProvider } from '~/utils/context/CommentContextProvider'; import { NodeContextProvider } from '~/utils/context/NodeContextProvider'; import { TagsContextProvider } from '~/utils/context/TagsContextProvider'; import { NodeRelatedProvider } from '~/utils/providers/NodeRelatedProvider'; +import { uniqBy } from '~/utils/ramda'; -export const getServerSideProps = async context => { +export const getStaticPaths = async () => { + const recent = await getNodeDiff({ + with_heroes: false, + with_recent: true, + with_updated: true, + with_valid: false, + }); + + const recentIDs = uniqBy(it => it.id, [ + ...(recent.after || []), + ...(recent.before || []), + ...(recent.recent || []), + ]) + .filter(it => it.id) + .map(it => it.id!.toString()); + + return { + paths: recentIDs.map(id => ({ params: { id } })), + fallback: 'blocking', + }; +}; + +export const getStaticProps = async context => { if (!context.params?.id) { return { props: {} }; } @@ -39,11 +62,11 @@ export const getServerSideProps = async context => { last_seen: fallbackData.last_seen ?? null, }, }, + revalidate: 7 * 86400, // every week }; }; -type Props = RouteComponentProps<{ id: string }> & - InferGetServerSidePropsType; +type Props = RouteComponentProps<{ id: string }> & InferGetStaticPropsType; const NodePage: FC = observer(props => { const id = useNodePageParams();