UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

72 lines (63 loc) 2.14 kB
import React, {Component} from 'react' import {connect} from 'react-redux' import classNames from 'classnames/bind' import {MdClose} from 'react-icons/lib/md' import {color} from 'common/constants' import auto_bind from 'common/auto_bind' import event_system from 'common/event_system' import {dismiss_popover} from 'actions/display' const cx = classNames.bind(require('styles/popover.scss')) export class PopoverStatic extends Component { constructor(props) { super(props) auto_bind(this) } dismiss_popover() { event_system.trigger("dismiss_popover") event_system.cancel_all("dismiss_popover") this.props.dismiss_popover() } render() { if (this.props.component) { return ( <div className={cx('my-popover', `popover_mode_${this.props.fill_screen ? 'fill-screen' : 'keep-constrained'}`)} onClick={this.props.dismiss_popover}> <div className={cx('popover__container')} onClick={(event) => event.stopPropagation()}> <div className={cx('popover__header')}> <div className={cx('popover__header__title')}> {this.props.title} </div> <div className={cx('popover__header__close-button')} onClick={this.dismiss_popover}> <MdClose /> </div> </div> <div className={cx('popover__content')}> <div style={{flex: 0}}></div> <this.props.component {...this.props.props} ref={(popover_content) => this.popover_content = popover_content} /> </div> </div> </div> ) } else { return null } } } PopoverStatic.defaultProps = { props: {}, dismiss_popover() {}, } const Popover = connect( (state) => ({ component: state.display.popover_component, props: state.display.popover_props || {}, fill_screen: state.display.popover_fill_screen, title: state.display.popover_title, }), (dispatch) => ({ dismiss_popover: () => dispatch(dismiss_popover()), }) )(PopoverStatic) Popover.defaultProps = { get_wrapped_content: (content) => content, } export default Popover