import * as React from 'react'; import classNames from 'classnames'; import { isFunction } from '@aws-amplify/ui'; import { ComponentClassNames, ComponentText } from '../shared/constants'; import { classNameModifier } from '../shared/utils'; import { AlertProps, BaseAlertProps, ForwardRefPrimitive, Primitive, } from '../types'; import { View } from '../View'; import { Flex } from '../Flex'; import { Button } from '../Button'; import { AlertIcon } from './AlertIcon'; import { IconClose } from '../Icon/internal'; const AlertPrimitive: Primitive = ( { buttonRef, children, className, dismissButtonLabel = ComponentText.Alert.dismissButtonLabel, hasIcon = true, heading, isDismissible = false, onDismiss, variation, ...rest }, ref ) => { const [dismissed, setDismissed] = React.useState(false); const dismissAlert = React.useCallback(() => { setDismissed(!dismissed); if (isFunction(onDismiss)) { onDismiss(); } }, [setDismissed, onDismiss, dismissed]); return !dismissed ? ( {hasIcon && } {heading && ( {heading} )} {children} {isDismissible && ( )} ) : null; }; /** * [📖 Docs](https://ui.docs.amplify.aws/react/components/alert) */ export const Alert: ForwardRefPrimitive = React.forwardRef(AlertPrimitive); Alert.displayName = 'Alert';