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;