instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
72 lines (63 loc) • 2.14 kB
JSX
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