Skip to content

Commit 2410959

Browse files
authored
Merge pull request #1286 from topcoder-platform/feat/v6
Fixes for work experience display with imported traits
2 parents f3c3fa8 + 27418e1 commit 2410959

File tree

5 files changed

+129
-63
lines changed

5 files changed

+129
-63
lines changed

src/apps/profiles/src/member-profile/work-expirence/ModifyWorkExpirenceModal/ModifyWorkExpirenceModal.tsx

Lines changed: 54 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,24 @@ const ModifyWorkExpirenceModal: FC<ModifyWorkExpirenceModalProps> = (props: Modi
164164
}
165165
}
166166

167+
const companyName: string | undefined = formValues.company as string | undefined
168+
const startDateIso: string | undefined = formValues.startDate
169+
? (formValues.startDate as Date).toISOString()
170+
: undefined
171+
const endDateIso: string | undefined = formValues.endDate
172+
? (formValues.endDate as Date).toISOString()
173+
: undefined
174+
167175
const updatedWorkExpirence: UserTrait = {
168176
cityTown: formValues.city,
169-
company: formValues.company,
177+
company: companyName,
178+
companyName,
179+
endDate: endDateIso,
170180
industry: formValues.industry,
171181
position: formValues.position,
172-
timePeriodFrom: formValues.startDate ? (formValues.startDate as Date).toISOString() : undefined,
173-
timePeriodTo: formValues.endDate ? (formValues.endDate as Date).toISOString() : undefined,
182+
startDate: startDateIso,
183+
timePeriodFrom: startDateIso,
184+
timePeriodTo: endDateIso,
174185
working: formValues.currentlyWorking,
175186
}
176187

@@ -195,13 +206,17 @@ const ModifyWorkExpirenceModal: FC<ModifyWorkExpirenceModalProps> = (props: Modi
195206
setEditedItemIndex(indx)
196207

197208
setFormValues({
198-
city: work.cityTown,
199-
company: work.company,
209+
city: work.cityTown || work.city,
210+
company: work.company || work.companyName,
200211
currentlyWorking: work.working,
201-
endDate: work.timePeriodTo ? new Date(work.timePeriodTo) : undefined,
212+
endDate: work.timePeriodTo
213+
? new Date(work.timePeriodTo)
214+
: (work.endDate ? new Date(work.endDate) : undefined),
202215
industry: work.industry,
203216
position: work.position,
204-
startDate: work.timePeriodFrom ? new Date(work.timePeriodFrom) : undefined,
217+
startDate: work.timePeriodFrom
218+
? new Date(work.timePeriodFrom)
219+
: (work.startDate ? new Date(work.startDate) : undefined),
205220
})
206221
}
207222

@@ -256,28 +271,39 @@ const ModifyWorkExpirenceModal: FC<ModifyWorkExpirenceModalProps> = (props: Modi
256271
{editedItemIndex === undefined && !addingNewItem ? (
257272
<div className={classNames(styles.workExpirenceWrap, !workExpirence?.length ? styles.noItems : '')}>
258273
{
259-
workExpirence?.map((work: UserTrait, indx: number) => (
260-
<div
261-
className={styles.workExpirenceCardWrap}
262-
key={`${work.company}-${work.industry}-${work.position}`}
263-
>
264-
<WorkExpirenceCard work={work} isModalView />
265-
<div className={styles.actionElements}>
266-
<Button
267-
className={styles.ctaBtn}
268-
icon={IconOutline.PencilIcon}
269-
onClick={bind(handleWorkExpirenceEdit, this, indx)}
270-
size='lg'
271-
/>
272-
<Button
273-
className={styles.ctaBtn}
274-
icon={IconOutline.TrashIcon}
275-
onClick={bind(handleWorkExpirenceDelete, this, indx)}
276-
size='lg'
277-
/>
274+
workExpirence?.map((work: UserTrait, indx: number) => {
275+
const companyName: string | undefined = work.company || work.companyName
276+
const uniqueKey: string = [
277+
companyName,
278+
work.industry,
279+
work.position,
280+
work.timePeriodFrom || work.startDate,
281+
].filter(Boolean)
282+
.join('-')
283+
284+
return (
285+
<div
286+
className={styles.workExpirenceCardWrap}
287+
key={uniqueKey || `${work.position}-${indx}`}
288+
>
289+
<WorkExpirenceCard work={work} isModalView />
290+
<div className={styles.actionElements}>
291+
<Button
292+
className={styles.ctaBtn}
293+
icon={IconOutline.PencilIcon}
294+
onClick={bind(handleWorkExpirenceEdit, this, indx)}
295+
size='lg'
296+
/>
297+
<Button
298+
className={styles.ctaBtn}
299+
icon={IconOutline.TrashIcon}
300+
onClick={bind(handleWorkExpirenceDelete, this, indx)}
301+
size='lg'
302+
/>
303+
</div>
278304
</div>
279-
</div>
280-
))
305+
)
306+
})
281307
}
282308
</div>
283309
) : undefined}

src/apps/profiles/src/member-profile/work-expirence/WorkExpirence.tsx

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,23 @@ const WorkExpirence: FC<WorkExpirenceProps> = (props: WorkExpirenceProps) => {
6969
{!loading && (
7070
<>
7171
{(workExpirence?.length as number) > 0
72-
? workExpirence?.map((work: UserTrait) => (
73-
<WorkExpirenceCard
74-
key={`${work.company}-${work.industry}-${work.position}`}
75-
work={work}
76-
/>
77-
))
72+
? workExpirence?.map((work: UserTrait, index: number) => {
73+
const companyName: string | undefined = work.company || work.companyName
74+
const uniqueKey: string = [
75+
companyName,
76+
work.industry,
77+
work.position,
78+
work.timePeriodFrom || work.startDate,
79+
].filter(Boolean)
80+
.join('-')
81+
82+
return (
83+
<WorkExpirenceCard
84+
key={uniqueKey || `${work.position || 'experience'}-${index}`}
85+
work={work}
86+
/>
87+
)
88+
})
7889
: (
7990
<EmptySection
8091
selfMessage={

src/apps/profiles/src/member-profile/work-expirence/WorkExpirenceCard/WorkExpirenceCard.tsx

Lines changed: 54 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,63 @@ interface WorkExpirenceCardProps {
1212
isModalView?: boolean
1313
}
1414

15-
const WorkExpirenceCard: FC<WorkExpirenceCardProps> = (props: WorkExpirenceCardProps) => (
16-
<div className={classNames(styles.workExpirenceCard, props.isModalView ? styles.workExpirenceCardModalView : '')}>
17-
<div className={styles.workExpirenceCardHeader}>
18-
<div className={styles.workExpirenceCardHeaderLeft}>
19-
<p className='body-main-bold'>
20-
{props.work.position}
21-
{props.work.industry ? `, ${getIndustryOptionLabel(props.work.industry)}` : undefined}
22-
</p>
23-
<p>
24-
{props.work.company}
25-
{props.work.cityTown ? `, ${props.work.cityTown}` : undefined}
26-
</p>
27-
</div>
28-
{
29-
props.work.timePeriodFrom || props.work.timePeriodTo || props.work.working ? (
30-
<div className={styles.workExpirenceCardHeaderRight}>
15+
const formatDateRange = (work: UserTrait): string | undefined => {
16+
const periodFrom: string | Date | undefined = work.timePeriodFrom || work.startDate
17+
const periodTo: string | Date | undefined = work.timePeriodTo || work.endDate
18+
const isWorking: boolean = Boolean(work.working)
19+
20+
if (!periodFrom && !periodTo && !isWorking) {
21+
return undefined
22+
}
23+
24+
const formattedFrom: string = periodFrom ? moment(periodFrom)
25+
.format('MM/YYYY') : ''
26+
const formattedTo: string = periodTo
27+
? moment(periodTo)
28+
.format('MM/YYYY')
29+
: (isWorking ? 'Present' : '')
30+
31+
if (formattedFrom && formattedTo) {
32+
return `${formattedFrom} - ${formattedTo}`
33+
}
34+
35+
return formattedFrom || formattedTo || undefined
36+
}
37+
38+
const WorkExpirenceCard: FC<WorkExpirenceCardProps> = (props: WorkExpirenceCardProps) => {
39+
const companyName: string | undefined = props.work.company || props.work.companyName
40+
const city: string | undefined = props.work.cityTown || props.work.city
41+
const industry: string | undefined = props.work.industry
42+
const dateRange: string | undefined = formatDateRange(props.work)
43+
44+
const containerClassName: string = classNames(
45+
styles.workExpirenceCard,
46+
props.isModalView ? styles.workExpirenceCardModalView : '',
47+
)
48+
49+
return (
50+
<div className={containerClassName}>
51+
<div className={styles.workExpirenceCardHeader}>
52+
<div className={styles.workExpirenceCardHeaderLeft}>
53+
<p className='body-main-bold'>
54+
{props.work.position}
55+
{industry ? `, ${getIndustryOptionLabel(industry)}` : undefined}
56+
</p>
57+
{(companyName || city) && (
3158
<p>
32-
{props.work.timePeriodFrom ? moment(props.work.timePeriodFrom)
33-
.format('MM/YYYY') : ''}
34-
{props.work.timePeriodFrom && (props.work.timePeriodTo || props.work.working) ? ' - ' : ''}
35-
{props.work.timePeriodTo ? moment(props.work.timePeriodTo)
36-
.format('MM/YYYY') : (props.work.working ? 'Present' : '')}
59+
{companyName}
60+
{city ? `, ${city}` : undefined}
3761
</p>
62+
)}
63+
</div>
64+
{dateRange ? (
65+
<div className={styles.workExpirenceCardHeaderRight}>
66+
<p>{dateRange}</p>
3867
</div>
39-
) : undefined
40-
}
68+
) : undefined}
69+
</div>
4170
</div>
42-
</div>
43-
)
71+
)
72+
}
4473

4574
export default WorkExpirenceCard

src/apps/review/src/lib/components/ChallengeDetailsContent/ChallengeDetailsContent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ export const ChallengeDetailsContent: FC<Props> = (props: Props) => {
201201
const targetUrl = submission.url?.trim()
202202
if (targetUrl) {
203203
if (typeof window !== 'undefined') {
204-
const openedWindow = window.open(targetUrl, '_blank', 'noopener,noreferrer')
204+
window.open(targetUrl, '_blank', 'noopener,noreferrer')
205205
} else {
206206
toast.error('Unable to open the submission URL from this environment.')
207207
}

start.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
export ESLINT_NO_DEV_ERRORS=true
66
export HTTPS=true
7-
export SSL_CRT_FILE=ssl-local/local.topcoder-dev.com+2.pem
8-
export SSL_KEY_FILE=ssl-local/local.topcoder-dev.com+2-key.pem
9-
export HOST=local.topcoder-dev.com
7+
export SSL_CRT_FILE=ssl-local/local.topcoder.com.pem
8+
export SSL_KEY_FILE=ssl-local/local.topcoder.com-key.pem
9+
export HOST=local.topcoder.com
1010
export REACT_APP_HOST_ENV=${REACT_APP_HOST_ENV:-dev}
1111
export PORT=443
1212

0 commit comments

Comments
 (0)