Newer
Older
import React, { Fragment } from 'react'
import { omit, get } from 'lodash'
import { compose } from 'recompose'
import { connect } from 'react-redux'
import { showModal, hideModal, setModalError } from '../redux/modal'
modalVisibility: omit(state.modal, ['props', 'error']),
modalError: state.modal.error,

Alexandru Munteanu
committed
const mapDispatch = (dispatch, props) => ({
hideModal: () => dispatch(hideModal()),

Alexandru Munteanu
committed
dispatch(showModal(get(props, 'modalKey'), modalProps)),
setModalError: errorMessage => dispatch(setModalError(errorMessage)),
})

Alexandru Munteanu
committed
const withModal = mapperFn => BaseComponent =>
compose(connect(mapState, mapDispatch))(baseProps => {
const { modalComponent: Component, overlayColor } = mapperFn(baseProps)
const {
hideModal,
modalProps,
modalError,
modalVisibility,
...rest
} = baseProps
return (
<Fragment>
{modalVisibility[modalKey] && (
<Modal
{...modalProps}
component={Component}
hideModal={hideModal}
isFetching={isFetching}
modalError={modalError}
overlayColor={overlayColor}
setModalError={setModalError}
showModal={showModal}
/>
)}
<BaseComponent
hideModal={hideModal}
setModalError={setModalError}
showModal={showModal}
{...rest}
/>
</Fragment>