import React, { useCallback, useEffect } from "react"; import { IBlock } from "../BlockList/Block"; import classes from "./classes.module.scss"; import Typography, { ETypo, ETypoColor } from "../../Typography"; import { ChevronDownIcon } from "@heroicons/react/24/outline"; type IProps = { blocks: IBlock[]; onSelectedBlock: (block: IBlock) => void; defaultSelectedBlock?: IBlock; }; export default function DropdownNavigation({ blocks, onSelectedBlock, defaultSelectedBlock = blocks[0] }: IProps) { const [selectedBlock, setSelectedBlock] = React.useState(defaultSelectedBlock ?? null); const [isDropdownOpened, setIsDropdownOpened] = React.useState(false); const rootRef = React.useRef(null); const selectBlock = useCallback( (id: string) => { setIsDropdownOpened(false); setSelectedBlock(blocks.find((folder) => folder.id === id)!); onSelectedBlock && onSelectedBlock(blocks.find((folder) => folder.id === id)!); }, [blocks, onSelectedBlock], ); const handleOnClick = () => setIsDropdownOpened((prev) => !prev); useEffect(() => { // on click outside of root, close dropdown const handleClickOutside = (event: MouseEvent) => { if (rootRef.current && !rootRef.current.contains(event.target as Node)) { setIsDropdownOpened(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); useEffect(() => { if (defaultSelectedBlock) setSelectedBlock(defaultSelectedBlock); }, [defaultSelectedBlock]); return (
{selectedBlock && ( <>
{selectedBlock.secondaryText && ( {selectedBlock.secondaryText} )} {selectedBlock.primaryText}
{isDropdownOpened && (
{blocks .filter((block) => block.id !== selectedBlock.id) .map((block) => (
selectBlock(block.id)}> {block.secondaryText && ( {block.secondaryText} )} {block.primaryText}
))}
)} )}
); }