@coreui/react
Version:
CoreUI React 17 Bootstrap 4 components
82 lines (73 loc) • 2.69 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
import React, { useState, useEffect, useRef } from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import CFade from '../fade/CFade';
import { omitByKeys } from '@coreui/utils/src';
import { CFadeProps } from '../utils/helper.js';
import CButtonClose from '../button/CButtonClose'; //component - CoreUI / CAlert
var CAlert = function CAlert(props) {
var _classNames;
var children = props.children,
className = props.className,
innerRef = props.innerRef,
onShowChange = props.onShowChange,
closeButton = props.closeButton,
color = props.color,
fade = props.fade,
show = props.show,
attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef", "onShowChange", "closeButton", "color", "fade", "show"]); //render
var classes = classNames(className, 'alert', (_classNames = {}, _classNames["alert-" + color] = color, _classNames['alert-dismissible'] = closeButton, _classNames));
var alertTransition = {
baseClass: fade ? CFade.baseClass : '',
timeout: fade ? CFade.timeout : 0,
unmountOnExit: true
};
var _useState = useState(show),
isOpen = _useState[0],
setIsOpen = _useState[1];
useEffect(function () {
setIsOpen(show);
}, [show]);
var timeout = useRef();
useEffect(function () {
onShowChange && onShowChange(isOpen);
clearTimeout(timeout.current);
if (typeof isOpen === 'number' && isOpen > 0) {
timeout.current = setTimeout(function () {
setIsOpen(isOpen - 1);
}, 1000);
}
return function () {
return clearTimeout(timeout.current);
};
}, [isOpen]);
var attrs = omitByKeys(attributes, CFadeProps);
return /*#__PURE__*/React.createElement(CFade, _extends({}, alertTransition, {
className: classes,
in: Boolean(isOpen),
role: "alert"
}, attrs, {
innerRef: innerRef
}), children, closeButton && /*#__PURE__*/React.createElement(CButtonClose, {
onClick: function onClick() {
return setIsOpen(false);
}
}));
};
CAlert.propTypes = {
children: PropTypes.node,
className: PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.array]),
innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),
onShowChange: PropTypes.func,
closeButton: PropTypes.bool,
color: PropTypes.string,
fade: PropTypes.bool,
show: PropTypes.oneOfType([PropTypes.bool, PropTypes.number])
};
CAlert.defaultProps = {
show: true,
fade: true
};
export default CAlert;