Home Reference Source

src/components/snippets/Popover/Popover.jsx

import React from 'react';
import PropTypes from 'prop-types';
import { Popover, PopoverBody } from 'reactstrap';
import { id } from '../../../utils/id';

class N2OPopover extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      showPopover: false,
    };
    this.fieldId = id();
    this.onToggle = this.onToggle.bind(this);
  }

  onToggle() {
    this.setState({
      showPopover: !this.state.showPopover,
    });
  }

  render() {
    const { help, placement, icon } = this.props;
    return (
      <div className={'n2o-popover'}>
        <div id={this.fieldId} onClick={this.onToggle}>
          <i className={icon} />
        </div>
        <Popover
          placement={placement}
          isOpen={this.state.showPopover}
          target={this.fieldId}
          toggle={this.onToggle}
        >
          <PopoverBody>
            <div dangerouslySetInnerHTML={{ __html: help }} />
          </PopoverBody>
        </Popover>
      </div>
    );
  }
}

N2OPopover.propTypes = {
  help: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
};

N2OPopover.defaultProps = {
  placement: 'right',
  icon: 'fa fa-question-circle',
};

export default N2OPopover;