11import { Dispatch , FC , SetStateAction , useCallback , useEffect , useState } from 'react'
22import { Params , useNavigate , useParams } from 'react-router-dom'
3+ import { AxiosError } from 'axios'
34import { bind } from 'lodash'
45
56import { profileGetPublicAsync , useMemberBadges , UserBadge , UserBadgesResponse , UserProfile } from '~/libs/core'
67import { Button , ContentLayout , IconSolid , LoadingSpinner } from '~/libs/ui'
78
8- import { MemberBadgeModal } from '../components'
9+ import { MemberBadgeModal , MemberNotFound } from '../components'
910
1011import styles from './MemberBadgesPage.module.scss'
1112
@@ -19,6 +20,7 @@ const MemberBadgesPage: FC<{}> = () => {
1920 ] = useState ( )
2021
2122 const [ profileReady , setProfileReady ] : [ boolean , Dispatch < SetStateAction < boolean > > ] = useState < boolean > ( false )
23+ const [ notFound , setNotFound ] : [ boolean , Dispatch < SetStateAction < boolean > > ] = useState < boolean > ( false )
2224
2325 const memberBadges : UserBadgesResponse | undefined = useMemberBadges ( profile ?. userId as number , { limit : 100 } )
2426
@@ -39,12 +41,21 @@ const MemberBadgesPage: FC<{}> = () => {
3941
4042 useEffect ( ( ) => {
4143 if ( routeParams . memberHandle ) {
44+ setProfileReady ( false )
45+ setNotFound ( false )
46+ setProfile ( undefined )
47+
4248 profileGetPublicAsync ( routeParams . memberHandle )
4349 . then ( userProfile => {
4450 setProfile ( userProfile )
4551 setProfileReady ( true )
4652 } )
47- // TODO: NOT FOUND PAGE redirect/dispaly via catch
53+ . catch ( ( e : AxiosError ) => {
54+ if ( e . code === AxiosError . ERR_BAD_REQUEST && e . response ?. status === 404 ) {
55+ setNotFound ( true )
56+ setProfileReady ( true )
57+ }
58+ } )
4859 }
4960 } , [ routeParams . memberHandle ] )
5061
@@ -54,9 +65,13 @@ const MemberBadgesPage: FC<{}> = () => {
5465
5566 return (
5667 < >
57- < LoadingSpinner hide = { profileReady && ! ! memberBadges } />
68+ < LoadingSpinner hide = { profileReady && ( notFound || ! ! memberBadges ) } />
69+
70+ { profileReady && notFound && (
71+ < MemberNotFound memberHandle = { routeParams . memberHandle } />
72+ ) }
5873
59- { profileReady && profile && ! ! memberBadges && (
74+ { profileReady && profile && ! notFound && ! ! memberBadges && (
6075 < ContentLayout
6176 outerClass = { styles . container }
6277 >
0 commit comments