Skip to content

Commit 178d5f5

Browse files
committed
MP-122 member rating init
1 parent 6efcf80 commit 178d5f5

File tree

5 files changed

+104
-0
lines changed

5 files changed

+104
-0
lines changed

src/apps/profiles/src/member-profile/about-me/AboutMe.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { EditMemberPropertyBtn, EmptySection } from '../../components'
99
import { EDIT_MODE_QUERY_PARAM, profileEditModes } from '../../config'
1010

1111
import { ModifyAboutMeModal } from './ModifyAboutMeModal'
12+
import MemberRatingCard from './MemberRatingCard/MemberRatingCard'
1213
import styles from './AboutMe.module.scss'
1314

1415
interface AboutMeProps {
@@ -71,6 +72,9 @@ const AboutMe: FC<AboutMeProps> = (props: AboutMeProps) => {
7172
{' '}
7273
{props.profile?.firstName || props.profile?.handle}
7374
</p>
75+
76+
<MemberRatingCard profile={props.profile} />
77+
7478
<div className={classNames(styles.wizzardWrap, hasEmptyDescription && styles.emptyDesc)}>
7579
<p className='body-large'>{memberTitleTrait?.profileSelfTitle}</p>
7680
{
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
@import '@libs/ui/styles/includes';
2+
3+
.container {
4+
background-color: $tc-white;
5+
padding: $sp-3;
6+
margin: $sp-4 0;
7+
border-radius: 16px;
8+
width: 100%;
9+
10+
.innerWrap {
11+
background-image: linear-gradient(90deg, #05456D, #0A7AC0);
12+
color: $tc-white;
13+
border-radius: 10px;
14+
display: flex;
15+
justify-content: space-between;
16+
padding: $sp-4;
17+
18+
.valueWrap {
19+
display: flex;
20+
flex-direction: column;
21+
align-items: center;
22+
23+
.value {
24+
font-size: 26px;
25+
font-weight: 500;
26+
font-family: $font-barlow-condensed;
27+
line-height: 28px;
28+
}
29+
30+
.name {
31+
font-size: 12px;
32+
line-height: 18px;
33+
}
34+
}
35+
}
36+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/* eslint-disable jsx-a11y/anchor-is-valid */
2+
import { FC, useMemo } from 'react'
3+
4+
import { useMemberStats, UserProfile, UserStats } from '~/libs/core'
5+
6+
import styles from './MemberRatingCard.module.scss'
7+
8+
interface MemberRatingCardProps {
9+
profile: UserProfile
10+
}
11+
12+
const MemberRatingCard: FC<MemberRatingCardProps> = (props: MemberRatingCardProps) => {
13+
const memberStats: UserStats | undefined = useMemberStats(props.profile.handle)
14+
15+
const maxPercentile: number = useMemo(() => {
16+
let memberPercentile: number = 0
17+
if (memberStats?.DATA_SCIENCE) {
18+
memberPercentile = memberStats.DATA_SCIENCE.MARATHON_MATCH?.rank?.percentile || 0
19+
if ((memberStats.DATA_SCIENCE.SRM?.rank?.percentile || 0) > memberPercentile) {
20+
memberPercentile = memberStats.DATA_SCIENCE.SRM.rank?.percentile || 0
21+
}
22+
}
23+
24+
if (memberStats?.DEVELOP) {
25+
memberStats.DEVELOP.subTracks.forEach((subTrack: any) => {
26+
const subPercentile = subTrack.rank.percentile || subTrack.rank.overallPercentile || 0
27+
if (subPercentile > memberPercentile) {
28+
memberPercentile = subPercentile
29+
}
30+
})
31+
}
32+
33+
return memberPercentile
34+
}, [memberStats])
35+
36+
return memberStats?.maxRating?.rating ? (
37+
<div className={styles.container}>
38+
<div className={styles.innerWrap}>
39+
<div className={styles.valueWrap}>
40+
<p className={styles.value}>{memberStats?.maxRating?.rating}</p>
41+
<p className={styles.name}>Rating</p>
42+
</div>
43+
<div className={styles.valueWrap}>
44+
<p className={styles.value}>
45+
{Number(maxPercentile)
46+
.toFixed(2)}
47+
</p>
48+
<p className={styles.name}>Percentile</p>
49+
</div>
50+
<div className='body-small-medium'>
51+
<a href='#' className={styles.link}>What is this?</a>
52+
</div>
53+
</div>
54+
</div>
55+
) : <></>
56+
}
57+
58+
export default MemberRatingCard
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as MemberRatingCard } from './MemberRatingCard'

src/apps/profiles/src/member-profile/page-layout/ProfilePageLayout.module.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@
4646
.profileInfoLeft {
4747
display: flex;
4848
flex-direction: column;
49+
margin-top: -60px;
50+
51+
@include ltelg {
52+
margin-top: 0;
53+
}
4954

5055
.skillsWrap {
5156
display: flex;

0 commit comments

Comments
 (0)