Skip to content

Commit 9a6c943

Browse files
authored
Merge pull request #1221 from topcoder-platform/pm-1503_5
fix(PM-1503): Some more QA feedback fixes on view scorecard page
2 parents 34f6614 + 29856c0 commit 9a6c943

File tree

5 files changed

+83
-64
lines changed

5 files changed

+83
-64
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
useState,
1111
} from 'react'
1212
import { NavigateFunction, useLocation, useNavigate } from 'react-router-dom'
13-
import { bind } from 'lodash'
13+
import { bind, isEmpty } from 'lodash'
1414
import classNames from 'classnames'
1515

1616
import { useClickOutside } from '~/libs/shared/lib/hooks'
@@ -28,12 +28,13 @@ const NavTabs: FC = () => {
2828
const { pathname }: { pathname: string } = useLocation()
2929

3030
const { loginUserInfo }: ReviewAppContextModel = useContext(ReviewAppContext)
31+
const isAnonymous = isEmpty(loginUserInfo)
3132
const userRoles = useMemo(() => loginUserInfo?.roles || [], [loginUserInfo?.roles])
32-
const tabs = useMemo(() => getTabsConfig(userRoles), [userRoles])
33+
const tabs = useMemo(() => getTabsConfig(userRoles, isAnonymous), [userRoles, isAnonymous])
3334

3435
const activeTabPathName: string = useMemo<string>(
35-
() => getTabIdFromPathName(pathname, userRoles),
36-
[pathname, userRoles],
36+
() => getTabIdFromPathName(pathname, userRoles, isAnonymous),
37+
[pathname, userRoles, isAnonymous],
3738
)
3839
const [activeTab, setActiveTab]: [
3940
string,

src/apps/review/src/lib/components/NavTabs/config/tabs-config.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,21 @@ import {
88
scorecardRouteId,
99
} from '~/apps/review/src/config/routes.config'
1010

11-
export function getTabsConfig(userRoles: string[]): TabsNavItem[] {
11+
export function getTabsConfig(userRoles: string[], isAnonymous: boolean): TabsNavItem[] {
12+
1213
const tabs: TabsNavItem[] = [
13-
{
14+
...(isAnonymous ? [] : [{
1415
id: activeReviewAssigmentsRouteId,
1516
title: 'Active Review Assignments',
16-
},
17+
}]),
1718
{
1819
id: openOpportunitiesRouteId,
1920
title: 'Open Opportunities',
2021
},
21-
{
22+
...(isAnonymous ? [] : [{
2223
id: pastReviewAssignmentsRouteId,
2324
title: 'Past Review Assignments',
24-
},
25+
}]),
2526
]
2627

2728
if (userRoles.includes('administrator')) {
@@ -34,12 +35,12 @@ export function getTabsConfig(userRoles: string[]): TabsNavItem[] {
3435
return tabs
3536
}
3637

37-
export function getTabIdFromPathName(pathname: string, userRoles: string[]): string {
38-
const matchItem = _.find(getTabsConfig(userRoles), item => pathname.includes(`/${item.id}`))
38+
export function getTabIdFromPathName(pathname: string, userRoles: string[], isAnonymous: boolean): string {
39+
const matchItem = _.find(getTabsConfig(userRoles, isAnonymous), item => pathname.includes(`/${item.id}`))
3940

4041
if (matchItem) {
4142
return matchItem.id
4243
}
4344

44-
return activeReviewAssigmentsRouteId
45+
return ''
4546
}

src/apps/review/src/lib/models/ScorecardQuestion.model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*/
44
export interface ScorecardQuestion {
55
id: string
6-
type: 'SCALE' | 'YES_NO'
6+
type: 'SCALE' | 'YES_NO' | 'TEST_CASE'
77
description: string
88
guidelines: string
99
weight: number

src/apps/review/src/pages/scorecards/ViewScorecardPage/ScorecardSections/ScorecardSections.module.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
.value {
6262
font-weight: 400;
6363
font-size: 14px;
64+
white-space: pre-line;
6465
}
6566
}
6667
}
@@ -97,6 +98,9 @@
9798
.detailItem {
9899
flex-direction: column;
99100
min-width: auto;
101+
.value {
102+
white-space: pre-line;
103+
}
100104
}
101105
}
102106
}
Lines changed: 64 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,84 @@
11
import { FC } from 'react'
22
import cn from 'classnames'
33

4-
import { ScorecardSection } from '~/apps/review/src/lib/models'
4+
import { ScorecardQuestion, ScorecardSection } from '~/apps/review/src/lib/models'
55

66
import styles from './ScorecardSections.module.scss'
77

88
interface ScorecardSectionsProps {
99
sections: ScorecardSection[]
1010
}
1111

12-
const ScorecardSections: FC<ScorecardSectionsProps> = (props: ScorecardSectionsProps) => (
13-
<div className={styles.container}>
14-
{
15-
props.sections.map((section, sectionIndex) => (
16-
<div key={section.id} className={styles.section}>
17-
<div className={styles.heading}>
18-
<div>{`Section ${sectionIndex + 1}`}</div>
19-
<div className={styles.sectionInfo}>
20-
<div className={styles.name}>{section.name}</div>
21-
<div className={styles.weight}>{section.weight}</div>
12+
const ScorecardSections: FC<ScorecardSectionsProps> = (props: ScorecardSectionsProps) => {
13+
const getScaleLabel = (question: ScorecardQuestion):string => {
14+
switch (question.type) {
15+
case 'YES_NO':
16+
return 'Yes/No'
17+
case 'TEST_CASE':
18+
return 'Test case'
19+
default:
20+
return `Scale ${question.scaleMin} - ${question.scaleMax}`
21+
}
22+
}
23+
24+
return (
25+
<div className={styles.container}>
26+
{
27+
props.sections.map((section, sectionIndex) => (
28+
<div key={section.id} className={styles.section}>
29+
<div className={styles.heading}>
30+
<div>{`Section ${sectionIndex + 1}`}</div>
31+
<div className={styles.sectionInfo}>
32+
<div className={styles.name}>{section.name}</div>
33+
<div className={styles.weight}>{section.weight}</div>
34+
</div>
2235
</div>
23-
</div>
24-
<div className={styles.questions}>
25-
{
26-
section.questions.map((question, index) => (
27-
<div className={cn(styles.question, {
28-
[styles.notLast]: index + 1 !== section.questions.length,
29-
})}
30-
>
31-
<div className={styles.left}>
32-
<div
33-
className={styles.description}
34-
>
35-
{`${sectionIndex + 1}.${index + 1} ${question.description}`}
36-
</div>
37-
<div className={styles.detailItemsWrapper}>
38-
<div className={styles.detailItem}>
39-
<div className={styles.label}>Guidelines:</div>
40-
<div className={styles.value}>{question.guidelines}</div>
36+
<div className={styles.questions}>
37+
{
38+
section.questions.map((question, index) => (
39+
<div className={cn(styles.question, {
40+
[styles.notLast]: index + 1 !== section.questions.length,
41+
})}
42+
>
43+
<div className={styles.left}>
44+
<div
45+
className={styles.description}
46+
>
47+
{`${sectionIndex + 1}.${index + 1} ${question.description}`}
4148
</div>
42-
<div className={styles.detailItem}>
43-
<div className={styles.label}>Scale:</div>
44-
<div
45-
className={styles.value}
46-
>
47-
{`Scale ${question.scaleMin} - ${question.scaleMax}`}
49+
<div className={styles.detailItemsWrapper}>
50+
<div className={styles.detailItem}>
51+
<div className={styles.label}>Guidelines:</div>
52+
<div className={styles.value}>{question.guidelines || 'NA'}</div>
4853
</div>
49-
</div>
50-
<div className={styles.detailItem}>
51-
<div className={styles.label}>Document Upload:</div>
52-
<div className={styles.value}>
53-
{question.requiresUpload ? 'Yes' : 'No'}
54+
<div className={styles.detailItem}>
55+
<div className={styles.label}>Scale:</div>
56+
<div
57+
className={styles.value}
58+
>
59+
{getScaleLabel(question)}
60+
</div>
61+
</div>
62+
<div className={styles.detailItem}>
63+
<div className={styles.label}>Document Upload:</div>
64+
<div className={styles.value}>
65+
{question.requiresUpload ? 'Yes' : 'No'}
66+
</div>
5467
</div>
5568
</div>
5669
</div>
70+
<div className={styles.right}>
71+
<div className={styles.weight}>{question.weight}</div>
72+
</div>
5773
</div>
58-
<div className={styles.right}>
59-
<div className={styles.weight}>{question.weight}</div>
60-
</div>
61-
</div>
62-
))
63-
}
74+
))
75+
}
76+
</div>
6477
</div>
65-
</div>
66-
))
67-
}
68-
</div>
69-
)
78+
))
79+
}
80+
</div>
81+
)
82+
}
7083

7184
export default ScorecardSections

0 commit comments

Comments
 (0)