diff --git a/src/components/SkillsList/index.jsx b/src/components/SkillsList/index.jsx index c4cc1ae4..c3bf779c 100644 --- a/src/components/SkillsList/index.jsx +++ b/src/components/SkillsList/index.jsx @@ -3,7 +3,7 @@ * * Shows list of skills with "N more" link which is showing tooltip with a full list of skills. */ -import React, { useCallback, useState, useMemo } from "react"; +import React, { useCallback, useState, useMemo, useEffect } from "react"; import PT from "prop-types"; import _ from "lodash"; import "./styles.module.scss"; @@ -19,6 +19,8 @@ const SkillsList = ({ requiredSkills, skills, limit = 3 }) => { // if has requiredSkills, show two columns, eles show only one column const showMatches = !!requiredSkills; const [isOpen, setIsOpen] = useState(false); + const [isDelayClose, setIsDelayClose] = useState(false); + const [isPopoverEnter, setIsPopoverEnter] = useState(false); const [referenceElement, setReferenceElement] = useState(null); const [popperElement, setPopperElement] = useState(null); @@ -58,82 +60,105 @@ const SkillsList = ({ requiredSkills, skills, limit = 3 }) => { ], }); + useEffect(() => { + if (isDelayClose) { + const timer = setTimeout(() => { + if (!isPopoverEnter) { + close(); + } + }, 300); + return () => clearTimeout(timer); + } + }, [isDelayClose, isPopoverEnter, close]); + + const delayClose = useCallback(() => { + setIsDelayClose(true); + }, [setIsDelayClose]); const close = useCallback(() => { setIsOpen(false); + setIsDelayClose(false); + setIsPopoverEnter(false); }, [setIsOpen]); const open = useCallback(() => { setIsOpen(true); + setIsDelayClose(false); }, [setIsOpen]); const toggle = useCallback(() => { setIsOpen(!isOpen); }, [isOpen, setIsOpen]); + const enterPopover = useCallback(() => { + setIsPopoverEnter(true); + }, [setIsPopoverEnter]); + return ( -
- {_.map(skillsToShow, "name").join(", ")} - {skillsToHide.length > 0 && ( + +
+ {_.map(skillsToShow, "name").join(", ")} + + {skillsToHide.length > 0 && ( + <> + {" and "} + {skillsToHide.length > 0} more + + )} <> - {" and "} - - - {skillsToHide.length > 0} more - - - {isOpen && ( -
-
- {requiredSkills && ( -
-
Required Job Skills
-
    - {!requiredSkills.length &&
  • None
  • } - {requiredSkills.map((skill) => ( -
  • - {_.find(skills, { id: skill.id }) ? ( - - ) : ( - - )}{" "} - {skill.name} -
  • - ))} -
-
- )} - {otherSkills && ( -
-
- {showMatches ? "Other User Skills" : "Required Skills"} -
-
    - {otherSkills.map((skill) => ( -
  • {skill.name}
  • - ))} -
+
+ {requiredSkills && ( +
+
Required Job Skills
+
    + {!requiredSkills.length &&
  • None
  • } + {requiredSkills.map((skill) => ( +
  • + {_.find(skills, { id: skill.id }) ? ( + + ) : ( + + )}{" "} + {skill.name} +
  • + ))} +
+
+ )} + {otherSkills && ( +
+
+ {showMatches ? "Other User Skills" : "Required Skills"}
- )} -
+
    + {otherSkills.map((skill) => ( +
  • {skill.name}
  • + ))} +
+
+ )}
- )} - +
+ )} - )} -
+
+
); };