From 67edc7b6390182a670f9d663647cd07bbf41ba62 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Sun, 10 Jul 2022 19:42:34 -0500 Subject: [PATCH] UserPage: Load user with getStatic props --- web/pages/[username]/index.tsx | 35 ++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/web/pages/[username]/index.tsx b/web/pages/[username]/index.tsx index c2f56d78..3c44a5cc 100644 --- a/web/pages/[username]/index.tsx +++ b/web/pages/[username]/index.tsx @@ -1,30 +1,45 @@ import { useRouter } from 'next/router' -import React, { useEffect, useState } from 'react' +import React from 'react' import { getUserByUsername, User } from 'web/lib/firebase/users' import { UserPage } from 'web/components/user-page' import { useUser } from 'web/hooks/use-user' import Custom404 from '../404' import { useTracking } from 'web/hooks/use-tracking' +import { fromPropz, usePropz } from 'web/hooks/use-propz' + +export const getStaticProps = fromPropz(getStaticPropz) +export async function getStaticPropz(props: { params: { username: string } }) { + const { username } = props.params + const user = await getUserByUsername(username) + + return { + props: { + user, + }, + + revalidate: 60, // regenerate after a minute + } +} + +export async function getStaticPaths() { + return { paths: [], fallback: 'blocking' } +} + +export default function UserProfile(props: { user: User | null }) { + props = usePropz(props, getStaticPropz) ?? { user: undefined } + const { user } = props -export default function UserProfile() { const router = useRouter() - const [user, setUser] = useState('loading') const { username, tab } = router.query as { username: string tab?: string | undefined } - useEffect(() => { - if (username) { - getUserByUsername(username).then(setUser) - } - }, [username]) - const currentUser = useUser() useTracking('view user profile', { username }) - if (user === 'loading') return
+ if (user === undefined) return
return user ? (