22 * SkillsList
33 *
44 * Shows list of skills with "N more" link which is showing tooltip with a full list of skills.
5- * If `showMatches = true` it marks matched and not matched required skills.
65 */
7- import React , { useCallback , useState } from "react" ;
6+ import React , { useCallback , useState , useMemo } from "react" ;
87import PT from "prop-types" ;
98import _ from "lodash" ;
109import "./styles.module.scss" ;
@@ -13,17 +12,19 @@ import IconCross from "../../assets/images/icon-cross.svg";
1312import { usePopper } from "react-popper" ;
1413import OutsideClickHandler from "react-outside-click-handler" ;
1514
16- const SkillsList = ( {
17- skills,
18- limit = 3 ,
19- showMatches = false ,
20- } ) => {
15+ const SkillsList = ( { requiredSkills, skills, limit = 3 } ) => {
2116 const skillsToShow = skills . slice ( 0 , limit ) ;
2217 const skillsToHide = skills . slice ( limit ) ;
2318
19+ // if has requiredSkills, show two columns, eles show only one column
20+ const showMatches = ! ! requiredSkills ;
2421 const [ isOpen , setIsOpen ] = useState ( false ) ;
2522 const [ referenceElement , setReferenceElement ] = useState ( null ) ;
2623 const [ popperElement , setPopperElement ] = useState ( null ) ;
24+
25+ const otherSkills = useMemo ( ( ) => {
26+ return _ . differenceBy ( skills , requiredSkills , "id" ) ;
27+ } , [ requiredSkills , skills ] ) ;
2728 const { styles, attributes } = usePopper ( referenceElement , popperElement , {
2829 placement : "bottom" ,
2930 modifiers : [
@@ -96,11 +97,30 @@ const SkillsList = ({
9697 { ...attributes . popper }
9798 >
9899 < div styleName = "popover-content" >
99- { skills && (
100+ { requiredSkills && (
101+ < div styleName = "skills-section" >
102+ < div styleName = "skills-title" > Required Job Skills</ div >
103+ < ul styleName = "skills-list" >
104+ { requiredSkills . map ( ( skill ) => (
105+ < li key = { skill . id } >
106+ { _ . find ( skills , { id : skill . id } ) ? (
107+ < IconCheck />
108+ ) : (
109+ < IconCross />
110+ ) } { " " }
111+ { skill . name }
112+ </ li >
113+ ) ) }
114+ </ ul >
115+ </ div >
116+ ) }
117+ { otherSkills && (
100118 < div styleName = "skills-section" >
101- < div styleName = "skills-title" > Skills</ div >
119+ < div styleName = "skills-title" >
120+ { showMatches ? "Other User Skills" : "Required Skills" }
121+ </ div >
102122 < ul styleName = "skills-list" >
103- { skills . map ( ( skill ) => (
123+ { otherSkills . map ( ( skill ) => (
104124 < li key = { skill . id } > { skill . name } </ li >
105125 ) ) }
106126 </ ul >
@@ -123,8 +143,8 @@ export const skillShape = PT.shape({
123143
124144SkillsList . propTypes = {
125145 skills : PT . arrayOf ( skillShape ) ,
146+ requiredSkills : PT . arrayOf ( skillShape ) ,
126147 limit : PT . number ,
127- showMatches : PT . bool ,
128148} ;
129149
130150export default SkillsList ;
0 commit comments