import { useState, useRef } from 'react'; import './MenuOption.scss'; import Icon from '../Icon'; import classNames from 'classnames'; import Tooltip from '../Tooltip'; import { OptionCardProps, OptionProps, MenuOptionProps, OptionClick, } from './types'; import useClickOutside from '../../hooks/useClickOutside'; import Typography from '../Typography'; const Option = ({ option, onClick }: OptionProps) => (
!option.disable && onClick(option)} > {option.label}
); const OptionCard = ({ options, onClick, styles }: OptionCardProps) => { return (
{options.map((opt) => (
); }; const MenuOption = ({ labelName, iconName, tooltipTitle, tooltipPlacement = 'bottom', options = [], dropdownPlacement = 'down', onClick = () => {}, onOptionClick = () => {}, iconButtonSize = 20, iconButtonBorderRadius = 7, iconSize = 16, }: MenuOptionProps) => { const [isClicked, setIsClicked] = useState(false); const menuRef = useRef(null); const closeDropDown = () => setIsClicked(false); const onIconClickHandler = () => { onClick(); setIsClicked((prev) => !prev); }; const handleOptionClick = (option: OptionClick) => { onOptionClick(option); closeDropDown(); }; const dropdownPositionStyles = () => { switch (dropdownPlacement) { case 'top': return { bottom: '100%', left: -2 }; case 'left': return { top: -2, right: '100%' }; case 'right': return { top: -2, left: '100%' }; case 'down': default: return { top: '100%', left: -2 }; } }; useClickOutside(menuRef, closeDropDown); return (
{labelName && {labelName} }
{isClicked && ( )}
); }; export default MenuOption;