Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit b8c026e

Browse files
authored
Merge pull request #41 from yoution/hotfix/yoution-issue-36
fix: #36
2 parents 2f87b41 + b924dc8 commit b8c026e

File tree

6 files changed

+44
-18
lines changed

6 files changed

+44
-18
lines changed

src/components/SkillsList/index.jsx

+33-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* Shows list of skills with "N more" link which is showing tooltip with a full list of skills.
55
*/
6-
import React, { useCallback, useState } from "react";
6+
import React, { useCallback, useState, useMemo } from "react";
77
import PT from "prop-types";
88
import _ from "lodash";
99
import "./styles.module.scss";
@@ -12,13 +12,22 @@ import IconCross from "../../assets/images/icon-cross.svg";
1212
import { usePopper } from "react-popper";
1313
import OutsideClickHandler from "react-outside-click-handler";
1414

15-
const SkillsList = ({ skills, limit = 3 }) => {
15+
const SkillsList = ({requiredSkills, skills, limit = 3 }) => {
1616
const skillsToShow = skills.slice(0, limit);
1717
const skillsToHide = skills.slice(limit);
1818

19+
// if has requiredSkills, show two columns, eles show only one column
20+
const showMatches = !!requiredSkills
1921
const [isOpen, setIsOpen] = useState(false);
2022
const [referenceElement, setReferenceElement] = useState(null);
2123
const [popperElement, setPopperElement] = useState(null);
24+
25+
const otherSkills = useMemo(
26+
() => {
27+
return _.differenceBy(skills, requiredSkills, 'id' )
28+
},
29+
[requiredSkills, skills]
30+
);
2231
const { styles, attributes } = usePopper(referenceElement, popperElement, {
2332
placement: "bottom",
2433
modifiers: [
@@ -91,11 +100,29 @@ const SkillsList = ({ skills, limit = 3 }) => {
91100
{...attributes.popper}
92101
>
93102
<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 && (
95122
<div styleName="skills-section">
96-
<div styleName="skills-title">Skills</div>
123+
<div styleName="skills-title">{showMatches ? 'Other User Skills': 'Required Skills'}</div>
97124
<ul styleName="skills-list">
98-
{skills.map((skill) => (
125+
{otherSkills.map((skill) => (
99126
<li key={skill.id}>{skill.name}</li>
100127
))}
101128
</ul>
@@ -118,6 +145,7 @@ export const skillShape = PT.shape({
118145

119146
SkillsList.propTypes = {
120147
skills: PT.arrayOf(skillShape),
148+
requiredSkills: PT.arrayOf(skillShape),
121149
limit: PT.number,
122150
};
123151

src/components/SkillsSummary/index.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const SkillsSummary = ({ skills, requiredSkills = [], limit }) => {
2323
<PercentageBar ratio={skillsMatchedRatio} styleName="percentage-bar" />
2424
{Math.round(skillsMatchedRatio * 100)}% skill matched
2525
</div>
26-
<SkillsList skills={skills} limit={limit} />
26+
<SkillsList skills={skills} requiredSkills={requiredSkills} limit={limit} />
2727
</div>
2828
);
2929
};

src/routes/PositionDetails/actions/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,4 @@ export const updateCandidate = (candidateId, partialCandidateData) => ({
6161
*/
6262
export const resetPositionState = () => ({
6363
type: ACTION_TYPE.RESET_POSITION_STATE,
64-
})
64+
});

src/routes/PositionDetails/hooks/useTeamPositionsState.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export const useTeamPositionsState = (teamId, positionId) => {
2424
// clear state when we leave the page
2525
return () => {
2626
dispatch(resetPositionState());
27-
}
27+
};
2828
}, [dispatch, teamId, positionId]);
2929

3030
// bind actions to dispatch method

src/routes/PositionDetails/reducers/index.js

+5-9
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,10 @@ const reducer = (state = initialState, action) => {
7676
});
7777

7878
case ACTION_TYPE.UPDATE_CANDIDATE_SUCCESS:
79-
return patchCandidateInState(
80-
state,
81-
action.meta.candidateId,
82-
{
83-
updating: false,
84-
...action.payload,
85-
}
86-
);
79+
return patchCandidateInState(state, action.meta.candidateId, {
80+
updating: false,
81+
...action.payload,
82+
});
8783

8884
case ACTION_TYPE.UPDATE_CANDIDATE_ERROR:
8985
return patchCandidateInState(state, action.meta.candidateId, {
@@ -92,7 +88,7 @@ const reducer = (state = initialState, action) => {
9288
});
9389

9490
default:
95-
return state
91+
return state;
9692
}
9793
};
9894

src/utils/format.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -129,5 +129,7 @@ export const formatReportIssueUrl = (subject) => {
129129
* @returns {string} request an extension URL
130130
*/
131131
export const formatRequestExtensionUrl = (subject) => {
132-
return `mailto:${EMAIL_REQUEST_EXTENSION}?subject=${encodeURIComponent(subject)}`;
132+
return `mailto:${EMAIL_REQUEST_EXTENSION}?subject=${encodeURIComponent(
133+
subject
134+
)}`;
133135
};

0 commit comments

Comments
 (0)