Skip to content
Snippets Groups Projects
Commit 4da5fcaa authored by Aggarwal Himanshu's avatar Aggarwal Himanshu
Browse files

Add feature to close dropdown when clicked outside

parent 4533addc
No related branches found
No related tags found
2 merge requests!17Merge develop into main,!9Add support for filtering cryptocurrencies using the filter components
......@@ -5,9 +5,13 @@ import Button from "../button/Button";
import { RadioInputForm } from "../radio/RadioForm";
import { CSSTransition } from "react-transition-group";
export function FilterDropdown({ filterOptions, setOpen, addFilter }) {
export function FilterDropdown({
filterOptions,
setOpen,
addFilter,
dropdownRef,
}) {
const [selectedFilter, setSelectedFilter] = useState(null);
const [radioValue, setRadioValue] = useState("is");
const [inputValue, setInputValue] = useState("");
......@@ -39,7 +43,7 @@ export function FilterDropdown({ filterOptions, setOpen, addFilter }) {
};
return (
<div className="absolute flex flex-row z-50">
<div className="absolute flex flex-row z-50" ref={dropdownRef}>
<div
className={classNames(
"dark:bg-dark-600 w-56 h-max max-h-72 rounded-xl mt-2 transition-all duration-100 p-1 overflow-y-scroll shadow-lg shadow-dark-600"
......
import React, { useState } from "react";
import React, { useState, useRef, useCallback } from "react";
import Head from "next/head";
import Container from "../components/content/Container";
import Main from "../components/content/Main";
......@@ -17,7 +17,7 @@ import {
TableIcon,
XIcon,
} from "@heroicons/react/outline";
import useFilters from "../hooks/useFilters";
import { useFilters, useOnClickOutside } from "../hooks";
import { Filter, FilterButton, Filters } from "../components/filters/Filter";
import { FilterDropdown } from "../components/dropdown/FilterDropdown";
import { filterOptions } from "../constants";
......@@ -29,7 +29,10 @@ import Link from "next/link";
export default function Home() {
const [filters, addFilter, removeFilter] = useFilters([]);
const filterDropdownRef = useRef(null);
const [dropdownOpen, setDropdownOpen] = useState(false);
const callbackDropdownClose = useCallback(() => setDropdownOpen(false), []);
useOnClickOutside(filterDropdownRef, callbackDropdownClose);
const [searchText, setSearchText] = useState("");
const listOfCoins = useCryptoList("usd", 21, false);
......@@ -93,9 +96,9 @@ export default function Home() {
setDropdownOpen(!dropdownOpen) && addFilter({})
}
/>
{dropdownOpen && (
<FilterDropdown
dropdownRef={filterDropdownRef}
setOpen={setDropdownOpen}
addFilter={addFilter}
filterOptions={Object.keys(filterOptions)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment