spaCy/website/src/components/alert.js

36 lines
1.0 KiB
JavaScript
Raw Normal View History

import React, { useState } from 'react'
import PropTypes from 'prop-types'
import classNames from 'classnames'
import Icon from './icon'
import classes from '../styles/alert.module.sass'
const Alert = ({ title, icon, variant, closeOnClick, children }) => {
const [visible, setVisible] = useState(true)
const alertClassNames = classNames(classes.root, {
[classes.warning]: variant === 'warning',
[classes.clickable]: !!closeOnClick,
})
const handleClick = () => !!closeOnClick && setVisible(false)
return !visible ? null : (
<aside className={alertClassNames} role="alert" onClick={handleClick}>
{icon && <Icon name={icon} width={18} inline />}
{title && <strong>{title}</strong>} {children}
</aside>
)
}
Alert.defaultProps = {
closeOnClick: true,
}
Alert.propTypes = {
title: PropTypes.string,
icon: PropTypes.string,
variant: PropTypes.oneOf(['warning']),
closeOnClick: PropTypes.bool,
children: PropTypes.node,
}
export default Alert