Skip to content

Commit d2241db

Browse files
committed
Merge branch 'dev' into onboarding
2 parents af26e2b + 594f796 commit d2241db

File tree

31 files changed

+700
-147
lines changed

31 files changed

+700
-147
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@import "@libs/ui/styles/includes";
2+
3+
.wrap {
4+
margin-top: $sp-2;
5+
6+
&:global(.mt0) {
7+
margin-top: 0;
8+
}
9+
}
10+
11+
.addButton {
12+
padding: 0 !important;
13+
color: $black-100;
14+
15+
svg {
16+
width: 20px;
17+
height: 20px;
18+
}
19+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { FC } from 'react'
2+
import classNames from 'classnames'
3+
4+
import { Button, IconOutline } from '~/libs/ui'
5+
6+
import styles from './AddButton.module.scss'
7+
8+
interface AddButtonProps {
9+
className?: string
10+
label?: string
11+
onClick: () => void
12+
variant?: 'mt0'
13+
}
14+
15+
const AddButton: FC<AddButtonProps> = props => (
16+
<div className={classNames(styles.wrap, props.variant, props.className)}>
17+
<Button
18+
icon={IconOutline.PlusIcon}
19+
onClick={props.onClick}
20+
className={styles.addButton}
21+
size='lg'
22+
label={props.label}
23+
link
24+
variant='linkblue'
25+
/>
26+
</div>
27+
)
28+
29+
export default AddButton
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as AddButton } from './AddButton'

src/apps/profiles/src/components/EditMemberPropertyBtn/EditMemberPropertyBtn.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
import { FC } from 'react'
2+
import classNames from 'classnames'
23

34
import { Button, IconOutline } from '~/libs/ui'
45

56
import styles from './EditMemberPropertyBtn.module.scss'
67

78
interface EditMemberPropertyBtnProps {
9+
className?: string
810
onClick: () => void
911
}
1012

1113
const EditMemberPropertyBtn: FC<EditMemberPropertyBtnProps> = (props: EditMemberPropertyBtnProps) => (
1214
<Button
1315
icon={IconOutline.PencilIcon}
1416
onClick={props.onClick}
15-
className={styles.editMemberPropertyBtn}
17+
className={classNames(styles.editMemberPropertyBtn, props.className)}
1618
size='lg'
1719
/>
1820
)

src/apps/profiles/src/components/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ export * from './LogoDesignDetailsModal'
1515
export * from './WebDesignDetailsModal'
1616
export * from './DesignF2FDetailsModal'
1717
export * from './EditMemberPropertyBtn'
18+
export * from './AddButton'
1819
export * from './EmptySection'

src/apps/profiles/src/member-profile/about-me/AboutMe.module.scss

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,14 @@
1616
display: flex;
1717
align-items: center;
1818
justify-content: center;
19-
margin-bottom: $sp-10;
19+
margin-bottom: $sp-4;
2020
&.emptyDesc {
2121
margin-bottom: 0;
2222
}
2323
}
2424
}
25+
26+
.empty {
27+
height: auto;
28+
margin-top: $sp-4;
29+
}

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

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import { KeyedMutator } from 'swr'
44
import classNames from 'classnames'
55

66
import { useMemberTraits, UserProfile, UserTraitIds, UserTraits } from '~/libs/core'
7+
import { Button } from '~/libs/ui'
78

8-
import { EditMemberPropertyBtn, EmptySection } from '../../components'
9+
import { AddButton, EditMemberPropertyBtn, EmptySection } from '../../components'
910
import { EDIT_MODE_QUERY_PARAM, profileEditModes } from '../../config'
1011

1112
import { ModifyAboutMeModal } from './ModifyAboutMeModal'
13+
import MemberRatingCard from './MemberRatingCard/MemberRatingCard'
1214
import styles from './AboutMe.module.scss'
1315

1416
interface AboutMeProps {
@@ -71,25 +73,48 @@ const AboutMe: FC<AboutMeProps> = (props: AboutMeProps) => {
7173
{' '}
7274
{props.profile?.firstName || props.profile?.handle}
7375
</p>
76+
77+
<MemberRatingCard profile={props.profile} />
78+
7479
<div className={classNames(styles.wizzardWrap, hasEmptyDescription && styles.emptyDesc)}>
7580
<p className='body-large'>{memberTitleTrait?.profileSelfTitle}</p>
76-
{
77-
canEdit && (
78-
<EditMemberPropertyBtn
79-
onClick={handleEditClick}
80-
/>
81-
)
82-
}
81+
{canEdit && !hasEmptyDescription && (
82+
<EditMemberPropertyBtn
83+
onClick={handleEditClick}
84+
/>
85+
)}
8386
</div>
8487
{hasEmptyDescription && (
85-
<EmptySection
86-
className={styles.empty}
87-
selfMessage={`
88-
Your bio is an opportunity to share your personality
89-
and interests with the community and customers.
90-
`}
91-
isSelf={canEdit}
92-
/>
88+
<>
89+
<EmptySection
90+
className={styles.empty}
91+
selfMessage={`
92+
Your bio is an opportunity to share your personality
93+
and interests with the community and customers.
94+
`}
95+
isSelf={canEdit}
96+
>
97+
I&apos;m a proud Topcoder member, working hard to solve some of the worlds biggest problems.
98+
<br />
99+
<br />
100+
I&apos;m excited to hear about your technology challenges and look forward to being
101+
on your next project.
102+
<br />
103+
<Button
104+
link
105+
variant='linkblue'
106+
size='lg'
107+
>
108+
Let&apos;s connect!
109+
</Button>
110+
</EmptySection>
111+
{canEdit && (
112+
<AddButton
113+
label='Add your bio'
114+
onClick={handleEditClick}
115+
/>
116+
)}
117+
</>
93118
)}
94119
<p>{props.profile?.description}</p>
95120

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'

0 commit comments

Comments
 (0)