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

Commit 721b19f

Browse files
committed
Merge branch 'dev' into feature/member-management
2 parents 194af0f + cd5941f commit 721b19f

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

src/components/SkillsList/index.jsx

+27-2
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, useMemo } from "react";
6+
import React, { useCallback, useState, useMemo, useEffect } from "react";
77
import PT from "prop-types";
88
import _ from "lodash";
99
import "./styles.module.scss";
@@ -19,6 +19,8 @@ const SkillsList = ({ requiredSkills, skills, limit = 3 }) => {
1919
// if has requiredSkills, show two columns, eles show only one column
2020
const showMatches = !!requiredSkills;
2121
const [isOpen, setIsOpen] = useState(false);
22+
const [isDelayClose, setIsDelayClose] = useState(false);
23+
const [isPopoverEnter, setIsPopoverEnter] = useState(false);
2224
const [referenceElement, setReferenceElement] = useState(null);
2325
const [popperElement, setPopperElement] = useState(null);
2426

@@ -58,25 +60,46 @@ const SkillsList = ({ requiredSkills, skills, limit = 3 }) => {
5860
],
5961
});
6062

63+
useEffect(() => {
64+
if (isDelayClose) {
65+
const timer = setTimeout(() => {
66+
if (!isPopoverEnter) {
67+
close();
68+
}
69+
}, 300);
70+
return () => clearTimeout(timer);
71+
}
72+
}, [isDelayClose, isPopoverEnter, close]);
73+
74+
const delayClose = useCallback(() => {
75+
setIsDelayClose(true);
76+
}, [setIsDelayClose]);
6177
const close = useCallback(() => {
6278
setIsOpen(false);
79+
setIsDelayClose(false);
80+
setIsPopoverEnter(false);
6381
}, [setIsOpen]);
6482

6583
const open = useCallback(() => {
6684
setIsOpen(true);
85+
setIsDelayClose(false);
6786
}, [setIsOpen]);
6887

6988
const toggle = useCallback(() => {
7089
setIsOpen(!isOpen);
7190
}, [isOpen, setIsOpen]);
7291

92+
const enterPopover = useCallback(() => {
93+
setIsPopoverEnter(true);
94+
}, [setIsPopoverEnter]);
95+
7396
return (
7497
<OutsideClickHandler onOutsideClick={close} display="inline">
7598
<div
7699
styleName="skills-list"
77100
onClick={toggle}
78101
onMouseEnter={open}
79-
onMouseLeave={close}
102+
onMouseLeave={delayClose}
80103
role="button"
81104
tabIndex={0}
82105
ref={setReferenceElement}
@@ -94,6 +117,8 @@ const SkillsList = ({ requiredSkills, skills, limit = 3 }) => {
94117
<div
95118
styleName="popover"
96119
ref={setPopperElement}
120+
onMouseEnter={enterPopover}
121+
onMouseLeave={close}
97122
style={styles.popper}
98123
{...attributes.popper}
99124
>

0 commit comments

Comments
 (0)