Snackbar

import { Snackbar } from '@megafon/ui-core';
Примеры и код
Свойства и методы
Код DemoSnackbarWrapper
export const DemoSnackbarWrapper: React.FC<IDemoSnackbarWrapperProps> = ({ children }) => {
const [showSnackbar, setShowSnackbar] = useState(false);
const [clickAmount, setClickAmount] = useState(0);
const handleClose = () => {
setShowSnackbar(false);
setClickAmount(0);
};
return children({
onTextButtonClick: () => setClickAmount(clickAmount + 1),
onButtonClick: () => setShowSnackbar(true),
onClose: handleClose,
showSnackbar,
clickAmount,
});
};

Типы

<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар с типом 'info'</Button>
    {showSnackbar && (
       <Snackbar
          type='info'
          text='Что-то происходит'
          hasTextButton={true}
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>
<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар с типом 'success'</Button>
    {showSnackbar && (
       <Snackbar
          type='success'
          text='Успешно завершено'
          hasTextButton={true}
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>
<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар с типом 'attention'</Button>
    {showSnackbar && (
       <Snackbar
          type='attention'
          text='Сообщение об ошибке'
          hasTextButton={true}
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>
<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар с типом 'timer'</Button>
    {showSnackbar && (
       <Snackbar
          type='timer'
          text='Элемент удален'
          hasTextButton={true}
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>

Управление иконкой

<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар без иконки</Button>
    {showSnackbar && (
       <Snackbar
          type='info'
          text='Снэкбар без иконки'
          hasIcon={false}
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>
<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар с кастомной иконкой</Button>
    {showSnackbar && (
       <Snackbar
          type='info'
          text='Снэкбар с кастомной иконкой'
          icon=<CustomIcon />
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>

Управление кнопкой

Кастомный текст кнопки недоступен для типа 'timer'

<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар с кастомным текстом кнопки</Button>
    {showSnackbar && (
       <Snackbar
          type='info'
          text='Снэкбар с кастомным текстом кнопки и очень длинным текстом'
          buttonText='Кнопка'
          hasTextButton={true}
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>
<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар без текстовой кнопки</Button>
    {showSnackbar && (
       <Snackbar
          type='info'
          text='Снэкбар без текстовой кнопки'
          hasTextButton={false}
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>

Обработчик на текстовой кнопке

<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose, clickAmount, onTextButtonClick }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар</Button>
    {showSnackbar && (
       <Snackbar
          type='info'
          text={'Количество кликов: ' + clickAmount}
          buttonText='Кнопка'
          hasTextButton={true}
          onButtonClick={onTextButtonClick}
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>

Без автоматического закрытия

Отключение автоматического закрытия недоступно для типа 'timer'

<DemoSnackbarWrapper>
{({ onButtonClick, showSnackbar, onClose, clickAmount, onTextButtonClick }) => (
 <div style={blockStyle}>
    <Button onClick={onButtonClick}>Показать снэкбар</Button>
    {showSnackbar && (
       <Snackbar
          type='info'
          text='Что-то происходит'
          hasTextButton={true}
          disableAutoClose
          onClose={onClose}
       />
    )}
 </div>
)}
</DemoSnackbarWrapper>
Prop nameTypeDefaultDescription
text*stringТекст
typeSnackbarType | undefinedТип отображения
iconElement | undefinedКастомная иконка для типа 'info'
hasIconboolean | undefinedtrueОтображение иконки. Скрыть иконку можно только для типа 'info'
buttonTextstring | undefinedКастомный текст кнопки. Не работает для типа 'timer'
maxTimerValuenumber | undefined4Максимальное значение таймера
hasTextButtonboolean | undefinedfalseОтображение текстовой кнопки
disableCloseAnimationboolean | undefinedfalseОтключение анимации закрытия
disableAutoCloseboolean | undefinedfalseОтключение автоматического закрытия
classNamestring | undefinedДополнительный класс корневого элемента
classes{ root?: string | undefined; container?: string | undefined; icon?: string | undefined; text?: string | undefined; } | undefined{}Дополнительные классы для корневого и внутренних элементов
dataAttrs{ root?: Record<string, string> | undefined; text?: Record<string, string> | undefined; closeButton?: Record<string, string> | undefined; textButton?: Record<...> | undefined; } | undefinedДополнительные data атрибуты к внутренним элементам
onButtonClick(() => void) | undefinedОбработчик клика по кнопке
onClose(() => void) | undefinedОбработчик на закрытие