UNPKG

3.65 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7exports.__esModule = true;
8exports.default = void 0;
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
14var _react = _interopRequireWildcard(require("react"));
15
16var _classnames = _interopRequireDefault(require("classnames"));
17
18var _useTimeout = _interopRequireDefault(require("@restart/hooks/useTimeout"));
19
20var _Fade = _interopRequireDefault(require("./Fade"));
21
22var _ToastHeader = _interopRequireDefault(require("./ToastHeader"));
23
24var _ToastBody = _interopRequireDefault(require("./ToastBody"));
25
26var _ThemeProvider = require("./ThemeProvider");
27
28var _ToastContext = _interopRequireDefault(require("./ToastContext"));
29
30var Toast = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
31 var bsPrefix = _ref.bsPrefix,
32 className = _ref.className,
33 children = _ref.children,
34 _ref$transition = _ref.transition,
35 Transition = _ref$transition === void 0 ? _Fade.default : _ref$transition,
36 _ref$show = _ref.show,
37 show = _ref$show === void 0 ? true : _ref$show,
38 _ref$animation = _ref.animation,
39 animation = _ref$animation === void 0 ? true : _ref$animation,
40 _ref$delay = _ref.delay,
41 delay = _ref$delay === void 0 ? 3000 : _ref$delay,
42 _ref$autohide = _ref.autohide,
43 autohide = _ref$autohide === void 0 ? false : _ref$autohide,
44 onClose = _ref.onClose,
45 props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["bsPrefix", "className", "children", "transition", "show", "animation", "delay", "autohide", "onClose"]);
46 bsPrefix = (0, _ThemeProvider.useBootstrapPrefix)(bsPrefix, 'toast'); // We use refs for these, because we don't want to restart the autohide
47 // timer in case these values change.
48
49 var delayRef = (0, _react.useRef)(delay);
50 var onCloseRef = (0, _react.useRef)(onClose);
51 (0, _react.useEffect)(function () {
52 delayRef.current = delay;
53 onCloseRef.current = onClose;
54 }, [delay, onClose]);
55 var autohideTimeout = (0, _useTimeout.default)();
56 var autohideToast = !!(autohide && show);
57 var autohideFunc = (0, _react.useCallback)(function () {
58 if (autohideToast) {
59 onCloseRef.current == null ? void 0 : onCloseRef.current();
60 }
61 }, [autohideToast]);
62 (0, _react.useEffect)(function () {
63 // Only reset timer if show or autohide changes.
64 autohideTimeout.set(autohideFunc, delayRef.current);
65 }, [autohideTimeout, autohideFunc]);
66 var toastContext = (0, _react.useMemo)(function () {
67 return {
68 onClose: onClose
69 };
70 }, [onClose]);
71 var hasAnimation = !!(Transition && animation);
72
73 var toast = /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, props, {
74 ref: ref,
75 className: (0, _classnames.default)(bsPrefix, className, !hasAnimation && (show ? 'show' : 'hide')),
76 role: "alert",
77 "aria-live": "assertive",
78 "aria-atomic": "true"
79 }), children);
80
81 return /*#__PURE__*/_react.default.createElement(_ToastContext.default.Provider, {
82 value: toastContext
83 }, hasAnimation && Transition ? /*#__PURE__*/_react.default.createElement(Transition, {
84 in: show,
85 unmountOnExit: true
86 }, toast) : toast);
87});
88
89Toast.displayName = 'Toast';
90
91var _default = Object.assign(Toast, {
92 Body: _ToastBody.default,
93 Header: _ToastHeader.default
94});
95
96exports.default = _default;
97module.exports = exports["default"];
\No newline at end of file