'use client' import React, { useEffect, useRef, useState } from 'react' import { Icon } from '../../atoms' import { getGlobalStyle } from '../../../helpers' import styles from './styles.module.css' interface OptionsProps { active?: boolean | number | undefined | string children?: React.ReactNode handleClick: (index: number) => void icon?: React.ReactNode index?: number | string | boolean label: string size: number } export const Options: React.FC = ({ active = false, children, handleClick, icon = 'none', index, label, size }) => { const refButton = useRef(null) const refMenu = useRef(null) const [menuState, setMenuState] = useState<{ height: number heightMenu: number status: string }>({ height: 0, heightMenu: 0, status: 'close' }) useEffect(() => { if (refButton.current === null || refMenu.current === null) return const initialHeight = refButton.current.clientHeight - refMenu.current.clientHeight const initialHeightMenu = refMenu.current.scrollHeight setMenuState(prevState => ({ ...prevState, height: initialHeight, heightMenu: initialHeightMenu })) }, []) useEffect(() => { const updatedHeight = active === true ? menuState.height + menuState.heightMenu : (refButton.current?.clientHeight ?? 0) - (refMenu.current?.clientHeight ?? 0) const updatedStatus = active === true ? 'open' : 'close' setMenuState(prevState => ({ ...prevState, height: updatedHeight, status: updatedStatus })) }, [active]) return (
{ handleClick(index as number) }} ref={refButton} className={`${styles.optionMenu} ${active === true ? styles.active : ''}`} >
{label}
{children !== null && (
{children}
)}
) }