From 6372817f30fbb4108e2cdf66efd69c830eb45711 Mon Sep 17 00:00:00 2001 From: Himanshu Aggarwal <aggarwah@mcmaster.ca> Date: Thu, 17 Mar 2022 00:16:35 -0400 Subject: [PATCH] Close dropdown when clicked outside --- src/cryptometrics/components/dropdown/Dropdown.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cryptometrics/components/dropdown/Dropdown.js b/src/cryptometrics/components/dropdown/Dropdown.js index 024740e..963426f 100644 --- a/src/cryptometrics/components/dropdown/Dropdown.js +++ b/src/cryptometrics/components/dropdown/Dropdown.js @@ -1,6 +1,7 @@ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, useRef, useCallback } from "react"; import classNames from "classnames"; import { ChevronDownIcon } from "@heroicons/react/outline"; +import { useOnClickOutside } from "../../hooks"; function getCoin(list, id) { for (let i = 0; i < list.length; i++) { @@ -13,13 +14,16 @@ function getCoin(list, id) { function Dropdown({ list, value, setValue, disabled }) { const [open, setOpen] = useState(false); + const ref = useRef(null); + const callbackDropdownClose = useCallback(() => setOpen(false), []); + useOnClickOutside(ref, callbackDropdownClose); useEffect(() => { setOpen(false); }, [value]); return ( - <div className="relative"> + <div className="relative" ref={ref}> <button className={classNames(" px-3 py-2 rounded-md font-light", { "dark:bg-white dark:text-gray-800": false, -- GitLab