1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import _extends from "@babel/runtime/helpers/esm/extends";
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
- import React, { useEffect, useRef, useMemo, useCallback } from 'react';
- import classNames from 'classnames';
- import useTimeout from '@restart/hooks/useTimeout';
- import Fade from './Fade';
- import Header from './ToastHeader';
- import Body from './ToastBody';
- import { useBootstrapPrefix } from './ThemeProvider';
- import ToastContext from './ToastContext';
- var defaultProps = {
- animation: true,
- autohide: false,
- delay: 3000,
- show: true,
- transition: Fade
- };
- var Toast = React.forwardRef(function (_ref, ref) {
- var bsPrefix = _ref.bsPrefix,
- className = _ref.className,
- children = _ref.children,
- Transition = _ref.transition,
- show = _ref.show,
- animation = _ref.animation,
- delay = _ref.delay,
- autohide = _ref.autohide,
- onClose = _ref.onClose,
- props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "className", "children", "transition", "show", "animation", "delay", "autohide", "onClose"]);
-
- bsPrefix = useBootstrapPrefix('toast');
- var delayRef = useRef(delay);
- var onCloseRef = useRef(onClose);
- useEffect(function () {
- // We use refs for these, because we don't want to restart the autohide
- // timer in case these values change.
- delayRef.current = delay;
- onCloseRef.current = onClose;
- }, [delay, onClose]);
- var autohideTimeout = useTimeout();
- var autohideFunc = useCallback(function () {
- if (!(autohide && show)) {
- return;
- }
-
- onCloseRef.current();
- }, [autohide, show]);
- autohideTimeout.set(autohideFunc, delayRef.current);
- var useAnimation = useMemo(function () {
- return Transition && animation;
- }, [Transition, animation]);
- var toast = React.createElement("div", _extends({}, props, {
- ref: ref,
- className: classNames(bsPrefix, className, !useAnimation && show && 'show'),
- role: "alert",
- "aria-live": "assertive",
- "aria-atomic": "true"
- }), children);
- var toastContext = {
- onClose: onClose
- };
- return React.createElement(ToastContext.Provider, {
- value: toastContext
- }, useAnimation ? React.createElement(Transition, {
- in: show
- }, toast) : toast);
- });
- Toast.defaultProps = defaultProps;
- Toast.displayName = 'Toast';
- Toast.Body = Body;
- Toast.Header = Header;
- export default Toast;
|