1- import { NextPage } from 'next' ;
1+ import { GetStaticPaths , GetStaticProps , InferGetStaticPropsType } from 'next' ;
22import Error from 'next/error' ;
3- import { Container } from '@material-ui/core' ;
3+ import { useRouter } from 'next/router' ;
4+ import { CircularProgress , Container } from '@material-ui/core' ;
45import GroupBase from '@zoonk/components/GroupBase' ;
56import GroupsBreadcrumb from '@zoonk/components/GroupsBreadcrumb' ;
67import GroupPinned from '@zoonk/components/GroupPinned' ;
78import Meta from '@zoonk/components/Meta' ;
89import PostShare from '@zoonk/components/PostShare' ;
910import PostsList from '@zoonk/components/PostsList' ;
1011import { Group , Post } from '@zoonk/models' ;
11- import { getGroup , getPosts } from '@zoonk/services' ;
12- import { appLanguage , preRender } from '@zoonk/utils' ;
12+ import { getGroup , getGroups , getPosts } from '@zoonk/services' ;
13+ import { appLanguage } from '@zoonk/utils' ;
1314
1415interface GroupPageProps {
1516 group : Group . Get | null ;
@@ -18,7 +19,29 @@ interface GroupPageProps {
1819
1920const limit = 10 ;
2021
21- const GroupPage : NextPage < GroupPageProps > = ( { group, posts } ) => {
22+ export const getStaticPaths : GetStaticPaths = async ( ) => {
23+ const groups = await getGroups ( { limit : 20 } ) ;
24+ const paths = groups . map ( ( group ) => ( { params : { id : group . id } } ) ) ;
25+ return { paths, fallback : true } ;
26+ } ;
27+
28+ export const getStaticProps : GetStaticProps < GroupPageProps > = async ( {
29+ params,
30+ } ) => {
31+ const groupId = String ( params ?. id ) ;
32+ const groupReq = getGroup ( groupId ) ;
33+ const postsReq = getPosts ( { groupId, limit } ) ;
34+ const [ group , posts ] = await Promise . all ( [ groupReq , postsReq ] ) ;
35+ return { props : { group, posts } , revalidate : 1 } ;
36+ } ;
37+
38+ const GroupPage = ( {
39+ group,
40+ posts,
41+ } : InferGetStaticPropsType < typeof getStaticProps > ) => {
42+ const { isFallback } = useRouter ( ) ;
43+
44+ if ( ! group && isFallback ) return < CircularProgress /> ;
2245 if ( ! group ) return < Error statusCode = { 404 } /> ;
2346
2447 const { description, id, language, photo, title, topics } = group ;
@@ -43,13 +66,4 @@ const GroupPage: NextPage<GroupPageProps> = ({ group, posts }) => {
4366 ) ;
4467} ;
4568
46- GroupPage . getInitialProps = async ( { query } ) => {
47- const groupId = String ( query . id ) ;
48- const groupReq = getGroup ( groupId ) ;
49- const postsReq = getPosts ( { groupId, limit } ) ;
50- const [ group , posts ] = await Promise . all ( [ groupReq , postsReq ] ) ;
51- preRender ( ) ;
52- return { group, posts } ;
53- } ;
54-
5569export default GroupPage ;
0 commit comments