Skip to content

Commit 4b72b46

Browse files
committed
TSJR-111 updates
1 parent 126d369 commit 4b72b46

File tree

5 files changed

+51
-168
lines changed

5 files changed

+51
-168
lines changed

src/apps/profiles/src/member-profile/skills/MemberSkillsInfo.module.scss

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,6 @@
2222
justify-content: space-between;
2323
align-items: center;
2424
margin-bottom: $sp-6;
25-
26-
.skillActions {
27-
display: flex;
28-
align-items: center;
29-
30-
@include ltemd {
31-
flex-direction: column;
32-
align-items: flex-end;
33-
}
34-
35-
> button:nth-child(2) {
36-
margin-left: $sp-4;
37-
38-
@include ltemd {
39-
margin-left: 0;
40-
}
41-
}
42-
}
4325
}
4426

4527
.skillsWrap {

src/apps/profiles/src/member-profile/skills/MemberSkillsInfo.tsx

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const MemberSkillsInfo: FC<MemberSkillsInfoProps> = (props: MemberSkillsInfoProp
3535

3636
const groupedSkillsByCategory: { [key: string]: UserSkill[] } = useMemo(() => {
3737
const grouped: { [key: string]: UserSkill[] } = {}
38+
const sortedGroupedSkillsByCategory: { [key: string]: UserSkill[] } = {}
3839

3940
memberSkills.forEach((skill: UserSkill) => {
4041
if (grouped[skill.category.name]) {
@@ -44,11 +45,14 @@ const MemberSkillsInfo: FC<MemberSkillsInfoProps> = (props: MemberSkillsInfoProp
4445
}
4546
})
4647

47-
return grouped
48-
}, [memberSkills])
48+
Object.keys(grouped)
49+
.sort()
50+
.forEach(key => {
51+
sortedGroupedSkillsByCategory[key] = grouped[key]
52+
})
4953

50-
const [skillsCatsCollapsed, setSkillsCatsCollapsed]: [boolean, Dispatch<SetStateAction<boolean>>]
51-
= useState<boolean>(true)
54+
return sortedGroupedSkillsByCategory
55+
}, [memberSkills])
5256

5357
const [isEditMode, setIsEditMode]: [boolean, Dispatch<SetStateAction<boolean>>]
5458
= useState<boolean>(false)
@@ -87,20 +91,6 @@ const MemberSkillsInfo: FC<MemberSkillsInfoProps> = (props: MemberSkillsInfoProp
8791
setHowSkillsWorkVisible(false)
8892
}
8993

90-
function handleExpandAllClick(): void {
91-
setSkillsCatsCollapsed(!skillsCatsCollapsed)
92-
}
93-
94-
function toggleCollapseUIButton(collapsed: boolean): void {
95-
if (collapsed === false && !!skillsCatsCollapsed) {
96-
setSkillsCatsCollapsed(false)
97-
}
98-
99-
if (collapsed === true && skillsCatsCollapsed === false) {
100-
setSkillsCatsCollapsed(true)
101-
}
102-
}
103-
10494
return (
10595
<div className={styles.container}>
10696
{
@@ -129,25 +119,13 @@ const MemberSkillsInfo: FC<MemberSkillsInfoProps> = (props: MemberSkillsInfoProp
129119
onClick={handleHowSkillsWorkClick}
130120
variant='linkblue'
131121
/>
132-
{
133-
memberSkills.length > 0 && (
134-
<Button
135-
link
136-
label={skillsCatsCollapsed ? 'Expand all' : 'Collapse all'}
137-
onClick={handleExpandAllClick}
138-
variant='linkblue'
139-
/>
140-
)
141-
}
142122
</div>
143123
</div>
144124

145125
<div className={styles.skillsWrap}>
146126
{memberSkills.length > 0 && (
147127
<GroupedSkillsUI
148128
groupedSkillsByCategory={groupedSkillsByCategory}
149-
skillsCatsCollapsed={skillsCatsCollapsed}
150-
onAllSkillsSameDisplayState={toggleCollapseUIButton}
151129
/>
152130
)}
153131
{!memberSkills.length && (

src/libs/shared/lib/components/collapsible-skills-list/CollapsibleSkillsList.module.scss

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,12 @@
2525
display: flex;
2626
justify-content: flex-start;
2727
align-items: flex-start;
28-
cursor: pointer;
2928

3029
.title {
3130
font-weight: 700;
3231
font-size: 14px;
3332
}
3433

35-
.btn {
36-
padding-left: 0;
37-
padding-right: $sp-2;
38-
color: $turq-120;
39-
40-
svg {
41-
flex: 0 0 auto;
42-
color: $turq-120;
43-
@include icon-size(16);
44-
}
45-
}
46-
4734
.badgeCount {
4835
background-color: $black-10;
4936
border-radius: 50%;
Lines changed: 12 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
import { Dispatch, FC, ReactNode, SetStateAction, useEffect, useState } from 'react'
1+
import { FC, ReactNode } from 'react'
22
import classNames from 'classnames'
33

4-
import { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/outline'
5-
import { Button } from '~/libs/ui'
6-
74
import styles from './CollapsibleSkillsList.module.scss'
85

96
interface CollapsibleSkillsListProps {
@@ -12,44 +9,21 @@ interface CollapsibleSkillsListProps {
129
containerClass?: string
1310
headerClass?: string
1411
contentClass?: string
15-
isCollapsed: boolean
16-
onDisplayChnage?: (isCollapsed: boolean) => void
1712
}
1813

19-
const CollapsibleSkillsList: FC<CollapsibleSkillsListProps> = (props: CollapsibleSkillsListProps) => {
20-
const [isCollapsed, setIsCollapsed]: [boolean, Dispatch<SetStateAction<boolean>>]
21-
= useState<boolean>(props.isCollapsed)
22-
23-
useEffect(() => {
24-
setIsCollapsed(props.isCollapsed)
25-
}, [props.isCollapsed])
26-
27-
function toggleCollapse(): void {
28-
const newIsCollapsed: boolean = !isCollapsed
29-
30-
setIsCollapsed(newIsCollapsed)
31-
if (props.onDisplayChnage) props.onDisplayChnage(newIsCollapsed)
32-
}
33-
34-
return (
35-
<div className={classNames(styles.container, props.containerClass, isCollapsed ? styles.collapsed : '')}>
36-
<div className={classNames(styles.header, props.headerClass)} onClick={toggleCollapse}>
37-
{
38-
!isCollapsed
39-
? <Button icon={ChevronUpIcon} size='md' className={styles.btn} />
40-
: <Button icon={ChevronDownIcon} size='md' className={styles.btn} />
41-
}
42-
<div className={styles.title}>{props.header}</div>
43-
<div className={styles.badgeCount}>
44-
{props.children && props.children.length}
45-
</div>
14+
const CollapsibleSkillsList: FC<CollapsibleSkillsListProps> = (props: CollapsibleSkillsListProps) => (
15+
<div className={classNames(styles.container, props.containerClass)}>
16+
<div className={classNames(styles.header, props.headerClass)}>
17+
<div className={styles.title}>{props.header}</div>
18+
<div className={styles.badgeCount}>
19+
{props.children && props.children.length}
4620
</div>
21+
</div>
4722

48-
<div className={classNames(styles.content, props.contentClass)}>
49-
{props.children}
50-
</div>
23+
<div className={classNames(styles.content, props.contentClass)}>
24+
{props.children}
5125
</div>
52-
)
53-
}
26+
</div>
27+
)
5428

5529
export default CollapsibleSkillsList
Lines changed: 31 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Dispatch, FC, SetStateAction, useEffect, useState } from 'react'
1+
import { FC } from 'react'
22
import Masonry, { ResponsiveMasonry } from 'react-responsive-masonry'
33

44
import { UserSkill } from '~/libs/core'
@@ -10,74 +10,36 @@ import styles from './GroupedSkillsUI.module.scss'
1010

1111
interface GroupedSkillsUIProps {
1212
groupedSkillsByCategory: { [key: string]: UserSkill[] }
13-
skillsCatsCollapsed: boolean
14-
onAllSkillsSameDisplayState: (collapsed: boolean) => void
15-
}
16-
const GroupedSkillsUI: FC<GroupedSkillsUIProps> = (props: GroupedSkillsUIProps) => {
17-
const [collapsedMap, setCollapsedMap]:
18-
[{ [key: string]: boolean }, Dispatch<SetStateAction<{ [key: string]: boolean }>>]
19-
= useState<{ [key: string]: boolean }>({})
20-
21-
useEffect(() => {
22-
const newCollapsedMap: { [key: string]: boolean } = {}
23-
24-
Object.keys(props.groupedSkillsByCategory)
25-
.forEach((categoryName: string) => {
26-
newCollapsedMap[categoryName] = props.skillsCatsCollapsed
27-
})
28-
29-
setCollapsedMap(newCollapsedMap)
30-
}, [props.groupedSkillsByCategory, props.skillsCatsCollapsed])
31-
32-
useEffect(() => {
33-
const arr: boolean[] = Object.values(collapsedMap)
34-
35-
if (arr.every(val => val === arr[0])) {
36-
props.onAllSkillsSameDisplayState(arr[0])
37-
}
38-
// eslint-disable-next-line react-hooks/exhaustive-deps
39-
}, [collapsedMap])
40-
41-
function handleCollapseChange(categoryName: string, isCollapsed: boolean): void {
42-
setCollapsedMap({
43-
...collapsedMap,
44-
[categoryName]: isCollapsed,
45-
})
46-
}
47-
48-
return (
49-
<ResponsiveMasonry
50-
className={styles.skillsCategories}
51-
columnsCountBreakPoints={{ 350: 1, 750: 2, 1368: 3 }}
52-
>
53-
<Masonry>
54-
{
55-
Object.keys(props.groupedSkillsByCategory)
56-
.map((categoryName: string) => (
57-
58-
<CollapsibleSkillsList
59-
key={categoryName}
60-
header={categoryName}
61-
isCollapsed={collapsedMap[categoryName]}
62-
// eslint-disable-next-line react/jsx-no-bind
63-
onDisplayChnage={handleCollapseChange.bind(this, categoryName)}
64-
>
65-
{
66-
props.groupedSkillsByCategory[categoryName]
67-
.map((skill: UserSkill) => (
68-
<SkillPill
69-
skill={skill}
70-
key={skill.id}
71-
theme='catList'
72-
/>
73-
))
74-
}
75-
</CollapsibleSkillsList>
76-
))
77-
}
78-
</Masonry>
79-
</ResponsiveMasonry>
80-
)
8113
}
14+
const GroupedSkillsUI: FC<GroupedSkillsUIProps> = (props: GroupedSkillsUIProps) => (
15+
<ResponsiveMasonry
16+
className={styles.skillsCategories}
17+
columnsCountBreakPoints={{ 350: 1, 750: 2, 1368: 3 }}
18+
>
19+
<Masonry>
20+
{
21+
Object.keys(props.groupedSkillsByCategory)
22+
.map((categoryName: string) => (
23+
24+
<CollapsibleSkillsList
25+
key={categoryName}
26+
header={categoryName}
27+
>
28+
{
29+
props.groupedSkillsByCategory[categoryName]
30+
.map((skill: UserSkill) => (
31+
<SkillPill
32+
skill={skill}
33+
key={skill.id}
34+
theme='catList'
35+
/>
36+
))
37+
}
38+
</CollapsibleSkillsList>
39+
))
40+
}
41+
</Masonry>
42+
</ResponsiveMasonry>
43+
)
8244

8345
export default GroupedSkillsUI

0 commit comments

Comments
 (0)