import { ForwardedRef, MouseEvent, RefObject, useMemo } from 'react'; import { ButtonFunction } from '@snack-uikit/button'; import { Divider } from '@snack-uikit/divider'; import { useLocale } from '@snack-uikit/locale'; import { TruncateString, TruncateStringProps } from '@snack-uikit/truncate-string'; import { useNewListContext } from '../../components/Lists/contexts'; import { stopPropagation } from '../../utils'; import { SELECT_BUTTON_SIZE_MAP } from './constants'; import styles from './styles.module.scss'; export type SeparatorProps = { label?: string; truncate?: { variant?: TruncateStringProps['variant']; }; mode?: 'primary' | 'secondary'; divider?: boolean; selectButton?: { onClick?(e: MouseEvent): void; indeterminate?: boolean; checked?: boolean; itemRef?: ForwardedRef; label?: string; }; }; export function Separator({ label, truncate, divider, mode = 'secondary', selectButton }: SeparatorProps) { const { size = 's' } = useNewListContext(); const { t } = useLocale('List'); const selectButtonJSX = useMemo(() => { if (!selectButton) { return null; } const { onClick, checked, itemRef, label } = selectButton; return ( { onClick?.(e); e.preventDefault(); e.stopPropagation(); }} onFocus={stopPropagation} ref={itemRef as RefObject} label={label ?? (checked ? t('groupSelectButton.reset') : t('groupSelectButton.select'))} /> ); }, [divider, mode, selectButton, size, t]); if (label) { return (
{selectButtonJSX} {divider && }
); } if (divider) { return (
); } return null; }