Skip to content

Commit c9daaba

Browse files
authored
Merge pull request #703 from topcoder-platform/profiles-app
Profiles app -> dev
2 parents 01bfaea + 9ce6071 commit c9daaba

File tree

21 files changed

+131
-111
lines changed

21 files changed

+131
-111
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ const AboutMe: FC<AboutMeProps> = (props: AboutMeProps) => {
8585
onSave={handleEditModalSaved}
8686
profile={props.profile}
8787
memberPersonalizationTraitsData={
88-
(memberPersonalizationTraits?.[0]?.traits?.data || []) as UserTraits[]
88+
memberPersonalizationTraits?.[0]?.traits?.data
8989
}
9090
/>
9191
)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,7 @@
99
.formError {
1010
color: $red-100;
1111
}
12+
13+
.editForm {
14+
margin-top: $sp-4;
15+
}

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

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { toast } from 'react-toastify'
44

55
import { BaseModal, Button, InputText, InputTextarea } from '~/libs/ui'
66
import {
7+
createMemberTraitsAsync,
78
updateMemberProfileAsync,
89
updateMemberTraitsAsync,
910
UserProfile,
@@ -18,7 +19,12 @@ interface ModifyAboutMeModalProps {
1819
onClose: () => void
1920
onSave: () => void
2021
profile: UserProfile
21-
memberPersonalizationTraitsData: Array<UserTrait>
22+
memberPersonalizationTraitsData: UserTrait[] | undefined
23+
}
24+
25+
const methodsMap: { [key: string]: any } = {
26+
create: createMemberTraitsAsync,
27+
update: updateMemberTraitsAsync,
2228
}
2329

2430
const ModifyAboutMeModal: FC<ModifyAboutMeModalProps> = (props: ModifyAboutMeModalProps) => {
@@ -38,14 +44,14 @@ const ModifyAboutMeModal: FC<ModifyAboutMeModalProps> = (props: ModifyAboutMeMod
3844
const [isFormChanged, setIsFormChanged]: [boolean, Dispatch<SetStateAction<boolean>>]
3945
= useState<boolean>(false)
4046

41-
const [formError, setFormError]: [
47+
const [formSaveError, setFormSaveError]: [
4248
string | undefined,
4349
Dispatch<SetStateAction<string | undefined>>
4450
] = useState<string | undefined>()
4551

4652
useEffect(() => {
4753
const profileSelfTitleData: any
48-
= props.memberPersonalizationTraitsData.find(
54+
= props.memberPersonalizationTraitsData?.find(
4955
(trait: any) => trait.profileSelfTitle,
5056
)
5157
setMemberTitle(profileSelfTitleData?.profileSelfTitle)
@@ -66,14 +72,14 @@ const ModifyAboutMeModal: FC<ModifyAboutMeModalProps> = (props: ModifyAboutMeMod
6672
const updatedTitle: string = trim(memberTitle)
6773

6874
setIsSaving(true)
69-
setFormError(undefined)
75+
setFormSaveError(undefined)
7076

7177
Promise.all([
7278
updateMemberProfileAsync(
7379
props.profile.handle,
7480
{ description: updatedDescription },
7581
),
76-
updateMemberTraitsAsync(props.profile.handle, [{
82+
methodsMap[!!props.memberPersonalizationTraitsData ? 'update' : 'create'](props.profile.handle, [{
7783
categoryName: UserTraitCategoryNames.personalization,
7884
traitId: UserTraitIds.personalization,
7985
traits: {
@@ -88,13 +94,13 @@ const ModifyAboutMeModal: FC<ModifyAboutMeModalProps> = (props: ModifyAboutMeMod
8894
}]),
8995
])
9096
.then(() => {
91-
toast.success('Your profile has been updated.')
97+
toast.success('Your profile has been updated.', { position: toast.POSITION.BOTTOM_RIGHT })
9298
props.onSave()
9399
})
94100
.catch((error: any) => {
95-
toast.error('Something went wrong. Please try again.')
101+
toast.error('Something went wrong. Please try again.', { position: toast.POSITION.BOTTOM_RIGHT })
96102
setIsSaving(false)
97-
setFormError(error.message || error)
103+
setFormSaveError(error.message || error)
98104
})
99105
}
100106

@@ -115,38 +121,35 @@ const ModifyAboutMeModal: FC<ModifyAboutMeModalProps> = (props: ModifyAboutMeMod
115121
label='Save'
116122
onClick={handleAboutMeSave}
117123
primary
118-
disabled={!trim(memberTitle) || !trim(memberDescription) || isSaving || !isFormChanged}
124+
disabled={isSaving || !isFormChanged}
119125
/>
120126
</div>
121127
)}
122128
>
129+
<p>Enter a short bio to help potential customers know you.</p>
123130
<form className={styles.editForm}>
124131
<InputText
125-
label='Title *'
132+
label='Title'
126133
name='memberTitle'
127134
onChange={handleMemberTitleChange}
128135
value={memberTitle}
129136
tabIndex={0}
130137
type='text'
131-
error={!trim(memberTitle) ? 'Title is required' : undefined}
132-
dirty={!trim(memberTitle)}
133138
/>
134139
<InputTextarea
135-
label='Description *'
140+
label='Description'
136141
name='memberDescription'
137142
onChange={handleMemberDescriptionChange}
138143
onBlur={handleMemberDescriptionChange}
139144
value={memberDescription}
140145
tabIndex={0}
141-
error={!trim(memberDescription) ? 'Description is required' : undefined}
142-
dirty={!trim(memberDescription)}
143146
/>
144147
</form>
145148

146149
{
147-
formError && (
150+
formSaveError && (
148151
<div className={styles.formError}>
149-
{formError}
152+
{formSaveError}
150153
</div>
151154
)
152155
}

src/apps/profiles/src/member-profile/education-and-certifications/EducationAndCertifications.module.scss

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@
88
display: flex;
99
align-items: center;
1010
margin-bottom: $sp-4;
11+
12+
h3 {
13+
font-family: $font-roboto;
14+
font-weight: 700;
15+
text-transform: none;
16+
font-size: 20px;
17+
line-height: 26px;
18+
color: $black-60;
19+
}
1120
}
1221

1322
.educationContentWrap {

src/apps/profiles/src/member-profile/education-and-certifications/EducationCard/EducationCard.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,8 @@ const EducationCard: FC<EducationCardProps> = (props: EducationCardProps) => (
2424
props.education.timePeriodFrom || props.education.timePeriodTo ? (
2525
<div className={styles.educationCardHeaderRight}>
2626
<p>
27-
{props.education.timePeriodFrom ? moment(props.education.timePeriodFrom)
28-
.format('MM/YYYY') : ''}
29-
{' '}
30-
-
31-
{' '}
3227
{props.education.timePeriodTo ? moment(props.education.timePeriodTo)
33-
.format('MM/YYYY') : (props.education.graduated ? 'Graduated' : '')}
28+
.format('YYYY') : ''}
3429
</p>
3530
</div>
3631
) : undefined

src/apps/profiles/src/member-profile/education-and-certifications/ModifyEducationModal/ModifyEducationModal.tsx

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ const ModifyEducationModal: FC<ModifyEducationModalProps> = (props: ModifyEducat
7272
},
7373
}])
7474
.then(() => {
75-
toast.success('Education updated successfully.')
75+
toast.success('Education updated successfully.', { position: toast.POSITION.BOTTOM_RIGHT })
7676
props.onSave()
7777
})
7878
.catch(() => {
79-
toast.error('Failed to update member\'s Education.')
79+
toast.error('Failed to update your Education.', { position: toast.POSITION.BOTTOM_RIGHT })
8080
setIsSaving(false)
8181
})
8282
}
@@ -85,10 +85,6 @@ const ModifyEducationModal: FC<ModifyEducationModalProps> = (props: ModifyEducat
8585
let value: string | boolean | Date | undefined
8686

8787
switch (key) {
88-
case 'graduated':
89-
value = event.target.checked
90-
break
91-
case 'startDate':
9288
case 'endDate':
9389
value = event as unknown as Date
9490
break
@@ -131,18 +127,10 @@ const ModifyEducationModal: FC<ModifyEducationModalProps> = (props: ModifyEducat
131127
return
132128
}
133129

134-
if (!formValues.startDate) {
135-
setFormErrors({
136-
startDate: 'Start date is required',
137-
})
138-
return
139-
}
140-
141130
const updatedEducation: UserTrait = {
142131
graduated: formValues.graduated,
143132
major: formValues.major,
144133
schoolCollegeName: formValues.schoolCollegeName,
145-
timePeriodFrom: formValues.startDate ? (formValues.startDate as Date).toISOString() : undefined,
146134
timePeriodTo: formValues.endDate ? (formValues.endDate as Date).toISOString() : undefined,
147135
}
148136

@@ -172,7 +160,6 @@ const ModifyEducationModal: FC<ModifyEducationModalProps> = (props: ModifyEducat
172160
graduated: education.graduated,
173161
major: education.major,
174162
schoolCollegeName: education.schoolCollegeName,
175-
startDate: education.timePeriodFrom ? new Date(education.timePeriodFrom) : undefined,
176163
})
177164
}
178165

@@ -264,34 +251,16 @@ const ModifyEducationModal: FC<ModifyEducationModalProps> = (props: ModifyEducat
264251
onChange={bind(handleFormValueChange, this, 'major')}
265252
value={formValues.major as string}
266253
/>
267-
<div className={styles.row}>
268-
<InputDatePicker
269-
label='Start Date *'
270-
date={formValues.startDate as Date}
271-
onChange={bind(handleFormValueChange, this, 'startDate')}
272-
disabled={false}
273-
error={formErrors.startDate}
274-
dirty
275-
/>
276-
<InputDatePicker
277-
label='End Date'
278-
date={formValues.endDate as Date}
279-
onChange={bind(handleFormValueChange, this, 'endDate')}
280-
disabled={false}
281-
error={formErrors.endDate}
282-
dirty
283-
maxDate={new Date()}
284-
/>
285-
</div>
286-
<InputText
287-
name='graduated'
288-
label='Graduated?'
289-
error={formErrors.graduated}
254+
<InputDatePicker
255+
label='End date (or expected)'
256+
date={formValues.endDate as Date}
257+
onChange={bind(handleFormValueChange, this, 'endDate')}
258+
disabled={false}
259+
error={formErrors.endDate}
290260
dirty
291-
tabIndex={-1}
292-
type='checkbox'
293-
onChange={bind(handleFormValueChange, this, 'graduated')}
294-
checked={formValues.graduated as boolean}
261+
maxDate={new Date()}
262+
showYearPicker
263+
dateFormat='yyyy'
295264
/>
296265
<div className={styles.formCTAs}>
297266
{editedItemIndex === undefined ? <IconOutline.PlusCircleIcon /> : undefined}

src/apps/profiles/src/member-profile/languages/MemberLanguages.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ const MemberLanguages: FC<MemberLanguagesProps> = (props: MemberLanguagesProps)
5959
return canEdit || memberLanguages ? (
6060
<div className={styles.container}>
6161
<div className={styles.titleWrap}>
62-
<p className='body-main-bold'>My Languages:</p>
62+
<p className='body-main-bold'>Languages:</p>
6363
{
6464
canEdit && (
6565
<EditMemberPropertyBtn

src/apps/profiles/src/member-profile/languages/ModifyLanguagesModal/ModifyLanguagesModal.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@ const ModifyLanguagesModal: FC<ModifyLanguagesModalProps> = (props: ModifyLangua
107107
},
108108
}])
109109
.then(() => {
110-
toast.success('Languages updated successfully.')
110+
toast.success('Languages updated successfully.', { position: toast.POSITION.BOTTOM_RIGHT })
111111
props.onSave()
112112
})
113113
.catch(() => {
114-
toast.error('Failed to update user Languages.')
114+
toast.error('Failed to update your Languages.', { position: toast.POSITION.BOTTOM_RIGHT })
115115
setIsSaving(false)
116116
})
117117
}
@@ -133,7 +133,7 @@ const ModifyLanguagesModal: FC<ModifyLanguagesModalProps> = (props: ModifyLangua
133133
}
134134

135135
if (currentMemberLanguages?.find((item: UserTrait) => item.language === selectedLanguage)) {
136-
toast.info('Language already exists')
136+
toast.info('Language already exists', { position: toast.POSITION.BOTTOM_RIGHT })
137137
resetForm()
138138
return
139139
}

src/apps/profiles/src/member-profile/links/MemberLinks.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ const MemberLinks: FC<MemberLinksProps> = (props: MemberLinksProps) => {
8585
return canEdit || memberLinks?.links ? (
8686
<div className={styles.container}>
8787
<div className={styles.titleWrap}>
88-
<p className='body-main-bold'>My Links:</p>
88+
<p className='body-main-bold'>Links:</p>
8989
{
9090
canEdit && (
9191
<EditMemberPropertyBtn

src/apps/profiles/src/member-profile/links/ModifyMemberLinksModal/ModifyMemberLinksModal.tsx

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,14 @@ import { toast } from 'react-toastify'
44
import classNames from 'classnames'
55

66
import { BaseModal, Button, IconOutline, InputSelect, InputText } from '~/libs/ui'
7-
import { updateMemberTraitsAsync, UserProfile, UserTrait, UserTraitCategoryNames, UserTraitIds } from '~/libs/core'
7+
import {
8+
createMemberTraitsAsync,
9+
updateMemberTraitsAsync,
10+
UserProfile,
11+
UserTrait,
12+
UserTraitCategoryNames,
13+
UserTraitIds,
14+
} from '~/libs/core'
815

916
import { renderLinkIcon } from '../MemberLinks'
1017

@@ -19,6 +26,11 @@ interface ModifyMemberLinksModalProps {
1926
memberPersonalizationTraitsFullData: UserTrait[] | undefined
2027
}
2128

29+
const methodsMap: { [key: string]: any } = {
30+
create: createMemberTraitsAsync,
31+
update: updateMemberTraitsAsync,
32+
}
33+
2234
const ModifyMemberLinksModal: FC<ModifyMemberLinksModalProps> = (props: ModifyMemberLinksModalProps) => {
2335
const formElRef: MutableRefObject<HTMLDivElement | any> = useRef()
2436

@@ -67,7 +79,7 @@ const ModifyMemberLinksModal: FC<ModifyMemberLinksModalProps> = (props: ModifyMe
6779
const updatedPersonalizationTraits: UserTrait[]
6880
= reject(props.memberPersonalizationTraitsFullData, (trait: UserTrait) => trait.links)
6981

70-
updateMemberTraitsAsync(props.profile.handle, [{
82+
methodsMap[!!props.memberPersonalizationTraitsFullData ? 'update' : 'create'](props.profile.handle, [{
7183
categoryName: UserTraitCategoryNames.personalization,
7284
traitId: UserTraitIds.personalization,
7385
traits: {
@@ -80,11 +92,11 @@ const ModifyMemberLinksModal: FC<ModifyMemberLinksModalProps> = (props: ModifyMe
8092
},
8193
}])
8294
.then(() => {
83-
toast.success('Links updated successfully.')
95+
toast.success('Links updated successfully.', { position: toast.POSITION.BOTTOM_RIGHT })
8496
props.onSave()
8597
})
8698
.catch(() => {
87-
toast.error('Failed to update user Links.')
99+
toast.error('Failed to update user Links.', { position: toast.POSITION.BOTTOM_RIGHT })
88100
setIsSaving(false)
89101
})
90102
}
@@ -114,7 +126,7 @@ const ModifyMemberLinksModal: FC<ModifyMemberLinksModalProps> = (props: ModifyMe
114126
}
115127

116128
if (currentMemberLinks?.find((item: UserTrait) => item.url.toLowerCase() === selectedLinkURL?.toLowerCase())) {
117-
toast.info('Link already exists')
129+
toast.info('Link already exists', { position: toast.POSITION.BOTTOM_RIGHT })
118130
resetForm()
119131
return
120132
}

0 commit comments

Comments
 (0)