Files
web2.0-frontend/src/pages/feed/[id].tsx
T
Aarni Halinen 36b8cab248 10s revalidate
2021-06-29 17:49:00 +03:00

67 lines
1.5 KiB
TypeScript

import React from "react";
import { NextPage, GetStaticProps, GetStaticPaths } from "next";
import Head from "next/head";
import { useRouter } from "next/router";
import Post from "@models/Feed";
import FeedApi from "@api/feedApi";
import FeedPageView from "@views/FeedPage/FeedPageView";
import PageWrapper from "@views/common/PageWrapper";
import LoadingView from "@views/common/LoadingView";
interface InitialProps {
post: Post;
}
const FeedPage: NextPage<InitialProps> = ({ post }) => {
const router = useRouter();
const { id } = router.query;
if (router.isFallback) return <LoadingView />;
return (
<>
<Head>
<link rel="canonical" href={`${process.env.NEXT_PUBLIC_SITE_URL}/feed/${id}`} />
</Head>
<PageWrapper>
<FeedPageView post={post} />
</PageWrapper>
</>
);
};
export const getStaticPaths: GetStaticPaths = async () => {
const feed = await FeedApi.getFeed();
const paths = feed.map((post: Post) => ({
params: {
id: String(post.id),
},
}
));
return {
paths,
fallback: true,
};
};
export const getStaticProps: GetStaticProps<InitialProps> = async ({ params }) => {
const { id } = params;
let notFound = false;
let post: Post;
try {
post = await FeedApi.getPost(Number(id));
} catch (err) {
notFound = true;
}
return {
props: {
post,
},
revalidate: 10, // Required for deleting hidden pages
notFound,
};
};
export default FeedPage;