import React, { useMemo } from 'react' import useTheme from '../use-theme' import type { Toast, ToastLayout } from './use-toast' import CssTransition from '../shared/css-transition' import { makeToastActions, getColors, getTranslateByPlacement } from './helpers' export interface ToastItemProps { toast: Toast layout: Required } const ToastItem: React.FC = React.memo(({ toast, layout }) => { const theme = useTheme() const { color, bgColor } = useMemo( () => getColors(theme.palette, toast.type), [theme.palette, toast.type] ) const isReactNode = typeof toast.text !== 'string' const { padding, margin, maxHeight, maxWidth, width, placement } = layout const { enter, leave } = useMemo(() => getTranslateByPlacement(placement), [placement]) return (
{isReactNode ? ( toast.text ) : ( <>
{toast.text}
{makeToastActions(toast.actions, toast.cancel)}
)}
) }) export default ToastItem