import { useCardContext } from '@cloud-ru/ds-card'; import { KebabSVG } from '@cloud-ru/ds-icons/interface/system'; import { BaseItemProps, Droplist } from '@cloud-ru/ds-list'; import { Tag } from '@cloud-ru/ds-tag'; import { useLayoutEffect } from '@cloud-ru/ds-utils'; import { MouseEvent, ReactElement, ReactNode, useCallback, useContext, useRef, useState } from 'react'; import { TEST_IDS } from '../../../constants'; import { FunctionBadgeContext } from '../../../functionBadgeContext'; import { FunctionBadgeWrapper } from '../../../helperComponents/FunctionBadgeWrapper'; import styles from './styles.module.scss'; type Option = { tagLabel?: string; icon?: ReactElement; } & Pick; export type FunctionBadgeProps = { /** Иконка */ icon?: ReactNode; /** Вложенные опции */ options: Option[]; /** Всегда показывать FunctionBadge */ alwaysVisible?: boolean; }; function FunctionBadgeButton({ icon, options }: Pick) { const [isOpen, setIsOpen] = useState(false); const buttonRef = useRef(null); const { setVisible } = useContext(FunctionBadgeContext); useLayoutEffect(() => { setVisible?.(isOpen); }, [isOpen, setVisible]); const onClick = useCallback((e: MouseEvent) => { e.stopPropagation(); setIsOpen(open => !open); }, []); return ( ({ ...item, className: styles.item, beforeContent: optionIcon, afterContent: tagLabel ? : undefined, onClick: e => { e.stopPropagation(); setIsOpen(false); onItemClick?.(e); }, }))} > ); } export function FunctionBadge({ icon, options, alwaysVisible }: FunctionBadgeProps) { const { disabled } = useCardContext(); if (disabled) { return null; } return ( ); } FunctionBadge.displayName = 'CardCustom.FunctionBadge';