import React, { PureComponent } from 'react' import { createPortal } from 'react-dom' import TransitionGroup from 'react-transition-group/TransitionGroup' import cc from 'classcat' import { canUseDOM } from 'exenv' import { color } from '../_utils/branding' import { Button, ButtonStatus } from '../button' import { CrossIcon } from '../icon/crossIcon' import { Text, TextDisplayType } from '../text' import { AnimationType, Transitions as CustomTransition } from '../transitions' import { StyledSnackbar } from './Snackbar.style' export type SnackbarProps = Readonly<{ close: () => void isOpen: boolean className?: string extraClassName?: string children: React.ReactNode }> export class Snackbar extends PureComponent { private portalNode: HTMLElement static defaultProps: Partial = { isOpen: false, } constructor(props: SnackbarProps) { super(props) if (canUseDOM) { this.portalNode = document.createElement('div') document.body.appendChild(this.portalNode) } } componentWillUnmount() { if (this.portalNode) { document.body.removeChild(this.portalNode) this.portalNode = null } } render() { const modalElement = ( {this.props.isOpen && (
{this.props.children}
)}
) if (!this.portalNode) { return modalElement } return createPortal(modalElement, this.portalNode) } }