import { MouseEvent, ReactElement, ReactNode, useCallback, useContext, useRef, useState } from 'react'; import { KebabSVG } from '@snack-uikit/icons'; import { BaseItemProps, Droplist } from '@snack-uikit/list'; import { Tag } from '@snack-uikit/tag'; import { useLayoutEffect } from '@snack-uikit/utils'; import { TEST_IDS } from '../../constants'; import { FunctionBadgeContext } from '../../context'; import styles from './styles.module.scss'; type Option = { tagLabel?: string; icon?: ReactElement; } & Pick; export type FunctionBadgeProps = { /** Иконка */ icon?: ReactNode; /** Вложенные опции */ options: Option[]; }; export function FunctionBadge({ icon, options }: FunctionBadgeProps) { const [isOpen, setIsOpen] = useState(false); const buttonRef = useRef(null); const { setVisible } = useContext(FunctionBadgeContext); useLayoutEffect(() => { setVisible && setVisible(isOpen); }, [isOpen, setVisible]); const onClick = useCallback((e: MouseEvent) => { e.stopPropagation(); setIsOpen(isOpen => !isOpen); }, []); return ( ({ ...item, className: styles.item, beforeContent: icon, afterContent: tagLabel ? : undefined, onClick: e => { e.stopPropagation(); setIsOpen(false); onClick?.(e); }, }))} > ); }