11/* eslint-disable complexity */
22import { Dispatch , FC , SetStateAction , useEffect , useMemo , useState } from 'react'
33import { Location , useLocation , useSearchParams } from 'react-router-dom'
4- import { KeyedMutator } from 'swr'
54import moment from 'moment'
65
76import {
8- useMemberTraits ,
7+ NamesAndHandleAppearance ,
98 UserProfile ,
10- UserTrait ,
11- UserTraitIds ,
12- UserTraits ,
139} from '~/libs/core'
1410import { ProfilePicture , useCheckIsMobile } from '~/libs/shared'
1511import { Button } from '~/libs/ui'
@@ -30,8 +26,6 @@ interface ProfileHeaderProps {
3026 refreshProfile : ( handle : string ) => void
3127}
3228
33- export type NamesAndHandleAppearance = 'namesOnly' | 'handleOnly' | 'namesAndHandle'
34-
3529const ProfileHeader : FC < ProfileHeaderProps > = ( props : ProfileHeaderProps ) => {
3630 const isMobile : boolean = useCheckIsMobile ( )
3731
@@ -48,18 +42,6 @@ const ProfileHeader: FC<ProfileHeaderProps> = (props: ProfileHeaderProps) => {
4842 const [ queryParams ] : [ URLSearchParams , any ] = useSearchParams ( )
4943 const editMode : string | null = queryParams . get ( EDIT_MODE_QUERY_PARAM )
5044
51- const { data : memberPersonalizationTraits , mutate : mutateTraits , loading : traitsLoading } : {
52- data : UserTraits [ ] | undefined ,
53- mutate : KeyedMutator < any > ,
54- loading : boolean ,
55- }
56- = useMemberTraits ( props . profile . handle , { traitIds : UserTraitIds . personalization } )
57-
58- const namesAndHandleAppearanceData : UserTrait | undefined
59- = useMemo ( ( ) => memberPersonalizationTraits ?. [ 0 ] ?. traits ?. data ?. find (
60- ( trait : UserTrait ) => trait . namesAndHandleAppearance ,
61- ) , [ memberPersonalizationTraits ] )
62-
6345 const [ isHiringFormOpen , setIsHiringFormOpen ] : [ boolean , Dispatch < SetStateAction < boolean > > ]
6446 = useState < boolean > ( false )
6547
@@ -95,7 +77,6 @@ const ProfileHeader: FC<ProfileHeaderProps> = (props: ProfileHeaderProps) => {
9577 setTimeout ( ( ) => {
9678 setIsNameEditMode ( false )
9779 props . refreshProfile ( props . profile . handle )
98- mutateTraits ( )
9980 } , 1000 )
10081 }
10182
@@ -159,60 +140,58 @@ const ProfileHeader: FC<ProfileHeaderProps> = (props: ProfileHeaderProps) => {
159140 ! isMobile ? renderMemberPhotoWrap ( ) : undefined
160141 }
161142
162- { ! traitsLoading && (
163- < div className = { styles . profileHeaderWrap } >
164- < div className = { styles . profileInfo } >
165- < div className = { styles . nameWrap } >
166- < p >
167- {
168- namesAndHandleAppearanceData ?. namesAndHandleAppearance === 'handleOnly'
169- ? props . profile . handle
170- : `${ props . profile . firstName } ${ props . profile . lastName ?. slice ( 0 , 1 ) ?? '' } `
171- }
172- </ p >
143+ < div className = { styles . profileHeaderWrap } >
144+ < div className = { styles . profileInfo } >
145+ < div className = { styles . nameWrap } >
146+ < p >
173147 {
174- canEdit && (
175- < EditMemberPropertyBtn
176- onClick = { handleModifyNameClick }
177- />
178- )
148+ props . profile . namesAndHandleAppearance === NamesAndHandleAppearance . handleOnly
149+ ? props . profile . handle
150+ : `${ props . profile . firstName } ${ props . profile . lastName ?. slice ( 0 , 1 ) ?? '' } `
179151 }
180- </ div >
181-
182- < p className = { styles . memberSince } >
183- {
184- // If the user hasn't set a name and handle appareance, display both name and handle
185- ( namesAndHandleAppearanceData ?. namesAndHandleAppearance === 'namesAndHandle'
186- || ! namesAndHandleAppearanceData ) ? (
187- // eslint-disable-next-line react/jsx-indent
188- < >
189- < span > { props . profile . handle } </ span >
190- { ' ' }
191- |
192- { ' ' }
193- </ >
194- ) : undefined
195- }
196- Member Since
197- { ' ' }
198- { moment ( props . profile . createdAt )
199- . format ( 'MMM YYYY' ) }
200152 </ p >
201- </ div >
202- {
203- ! canEdit && isTalentSearch ? (
204- < div className = { styles . hiringClickWrap } >
205- < Button
206- label = 'Hire Topcoder Talent'
207- primary
208- size = 'lg'
209- onClick = { handleStartHiringToggle }
153+ {
154+ canEdit && (
155+ < EditMemberPropertyBtn
156+ onClick = { handleModifyNameClick }
210157 />
211- </ div >
212- ) : undefined
213- }
158+ )
159+ }
160+ </ div >
161+
162+ < p className = { styles . memberSince } >
163+ {
164+ // If the user hasn't set a name and handle appareance, display both name and handle
165+ ( props . profile . namesAndHandleAppearance === NamesAndHandleAppearance . both
166+ || ! props . profile . namesAndHandleAppearance ) ? (
167+ // eslint-disable-next-line react/jsx-indent
168+ < >
169+ < span > { props . profile . handle } </ span >
170+ { ' ' }
171+ |
172+ { ' ' }
173+ </ >
174+ ) : undefined
175+ }
176+ Member Since
177+ { ' ' }
178+ { moment ( props . profile . createdAt )
179+ . format ( 'MMM YYYY' ) }
180+ </ p >
214181 </ div >
215- ) }
182+ {
183+ ! canEdit && isTalentSearch ? (
184+ < div className = { styles . hiringClickWrap } >
185+ < Button
186+ label = 'Hire Topcoder Talent'
187+ primary
188+ size = 'lg'
189+ onClick = { handleStartHiringToggle }
190+ />
191+ </ div >
192+ ) : undefined
193+ }
194+ </ div >
216195
217196 {
218197 // Showing only when they can edit until we have the talent search app
@@ -241,8 +220,6 @@ const ProfileHeader: FC<ProfileHeaderProps> = (props: ProfileHeaderProps) => {
241220 onClose = { handleModifyNameModalClose }
242221 onSave = { handleModifyNameModalSave }
243222 profile = { props . profile }
244- memberPersonalizationTraitsData = { memberPersonalizationTraits ?. [ 0 ] ?. traits ?. data }
245- namesAndHandleAppearance = { namesAndHandleAppearanceData ?. namesAndHandleAppearance }
246223 />
247224 )
248225 }
0 commit comments