All files / src/Notify NotifyPortal.js

0% Statements 0/23
0% Branches 0/10
0% Functions 0/2
0% Lines 0/23

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49                                                                                                 
import React, { Component } from 'preact';
import PropTypes from 'prop-types';
import { StyledNotifyWrapper } from './styles';
 
/**
 * Notification Portal Component
 */
class NotifyPortal extends Component {
    constructor(props) {
        super(props);
        this.portal = null;
    }
    componentDidMount() {
        let portal =
            this.props.portalId && document.getElementById(this.props.portalId);
        if (!portal) {
            portal = document.createElement('div');
            portal.id = this.props.portalId;
            portal.style.position = 'fixed';
            portal.style[this.props.position] = '10px';
            portal.style.right = '10px';
            portal.style.overflow = 'hidden';
            document.body.appendChild(portal);
        }
        this.portal = portal;
        this.componentDidUpdate();
    }
    componentWillUnmount() {
        const element = document.getElementById(this.props.portalId);
        if (element) {
            document.body.removeChild(this.portal);
        }
    }
    componentDidUpdate() {
        if (!this.props.children.length) {
            return;
        }
        React.render(
            <StyledNotifyWrapper {...this.props}>
                {this.props.children}
            </StyledNotifyWrapper>,
            this.portal
        );
    }
    render = () => null;
}
 
export default NotifyPortal;