3
3
*
4
4
* Shows list of skills with "N more" link which is showing tooltip with a full list of skills.
5
5
*/
6
- import React , { useCallback , useState } from "react" ;
6
+ import React , { useCallback , useState , useMemo } from "react" ;
7
7
import PT from "prop-types" ;
8
8
import _ from "lodash" ;
9
9
import "./styles.module.scss" ;
@@ -12,13 +12,22 @@ import IconCross from "../../assets/images/icon-cross.svg";
12
12
import { usePopper } from "react-popper" ;
13
13
import OutsideClickHandler from "react-outside-click-handler" ;
14
14
15
- const SkillsList = ( { skills, limit = 3 } ) => {
15
+ const SkillsList = ( { requiredSkills , skills, limit = 3 } ) => {
16
16
const skillsToShow = skills . slice ( 0 , limit ) ;
17
17
const skillsToHide = skills . slice ( limit ) ;
18
18
19
+ // if has requiredSkills, show two columns, eles show only one column
20
+ const showMatches = ! ! requiredSkills
19
21
const [ isOpen , setIsOpen ] = useState ( false ) ;
20
22
const [ referenceElement , setReferenceElement ] = useState ( null ) ;
21
23
const [ popperElement , setPopperElement ] = useState ( null ) ;
24
+
25
+ const otherSkills = useMemo (
26
+ ( ) => {
27
+ return _ . differenceBy ( skills , requiredSkills , 'id' )
28
+ } ,
29
+ [ requiredSkills , skills ]
30
+ ) ;
22
31
const { styles, attributes } = usePopper ( referenceElement , popperElement , {
23
32
placement : "bottom" ,
24
33
modifiers : [
@@ -91,11 +100,29 @@ const SkillsList = ({ skills, limit = 3 }) => {
91
100
{ ...attributes . popper }
92
101
>
93
102
< div styleName = "popover-content" >
94
- { skills && (
103
+ { requiredSkills && (
104
+ < div styleName = "skills-section" >
105
+ < div styleName = "skills-title" > Required Job Skills</ div >
106
+ < ul styleName = "skills-list" >
107
+ { requiredSkills . map ( ( skill ) => (
108
+ < li key = { skill . id } >
109
+ { showMatches &&
110
+ ( _ . find ( skills , { id : skill . id } ) ? (
111
+ < IconCheck />
112
+ ) : (
113
+ < IconCross />
114
+ ) ) } { " " }
115
+ { skill . name }
116
+ </ li >
117
+ ) ) }
118
+ </ ul >
119
+ </ div >
120
+ ) }
121
+ { otherSkills && (
95
122
< div styleName = "skills-section" >
96
- < div styleName = "skills-title" > Skills</ div >
123
+ < div styleName = "skills-title" > { showMatches ? 'Other User Skills' : 'Required Skills' } </ div >
97
124
< ul styleName = "skills-list" >
98
- { skills . map ( ( skill ) => (
125
+ { otherSkills . map ( ( skill ) => (
99
126
< li key = { skill . id } > { skill . name } </ li >
100
127
) ) }
101
128
</ ul >
@@ -118,6 +145,7 @@ export const skillShape = PT.shape({
118
145
119
146
SkillsList . propTypes = {
120
147
skills : PT . arrayOf ( skillShape ) ,
148
+ requiredSkills : PT . arrayOf ( skillShape ) ,
121
149
limit : PT . number ,
122
150
} ;
123
151
0 commit comments