Skip to content
Snippets Groups Projects
Commit 4a6e68a6 authored by Alexandru Munteanu's avatar Alexandru Munteanu
Browse files

fix(modal-component): fix rendering multiple modals

parent 06bad58b
No related branches found
No related tags found
No related merge requests found
import React from 'react' import React from 'react'
import { omit } from 'lodash'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import Modal from './Modal' import Modal from './Modal'
import { setModalVisibility } from '../redux/modal' import { showModal, hideModal } from '../redux/modal'
const mapState = state => ({ const mapState = state => ({
modalVisible: state.modal.visible, modalsVisibility: omit(state.modal, 'props'),
modalProps: state.modal.props, modalProps: state.modal.props,
}) })
const mapDispatch = dispatch => ({ const mapDispatch = modalKey => (dispatch, propss) => ({
hideModal: e => dispatch(setModalVisibility(false)), hideModal: () => dispatch(hideModal()),
showModal: (modalProps = {}) => showModal: (modalProps = {}) => dispatch(showModal(modalKey, modalProps)),
dispatch(setModalVisibility(true, modalProps)),
}) })
const withModal = ({ const withModal = ({
modalKey,
modalComponent: Component, modalComponent: Component,
overlayColor, overlayColor,
}) => WrappedComponent => }) => WrappedComponent =>
connect(mapState, mapDispatch)( connect(mapState, mapDispatch(modalKey))(
({ modalVisible, modalProps, hideModal, ...rest }) => ( ({ modalsVisibility, modalProps, hideModal, ...rest }) => (
<React.Fragment> <React.Fragment>
{modalVisible && ( {modalsVisibility[modalKey] && (
<Modal <Modal
{...modalProps} {...modalProps}
component={Component} component={Component}
......
const initialState = { const initialState = {
visible: false,
props: {}, props: {},
} }
const SET_MODAL_VISIBILTY = 'modal/SET_MODAL_VISIBILTY' const SHOW_MODAL = 'modal/SHOW_MODAL'
const HIDE_MODAL = 'modal/HIDE_MODAL'
export const setModalVisibility = (visible, props = {}) => ({ export const showModal = (modalKey, props = {}) => ({
type: SET_MODAL_VISIBILTY, type: SHOW_MODAL,
payload: { payload: {
visible, modalKey,
props, props,
}, },
}) })
export const hideModal = () => ({
type: HIDE_MODAL,
})
export const getModalVisibility = (state, modalKey) => state[modalKey]
export default (state = initialState, action = {}) => { export default (state = initialState, action = {}) => {
switch (action.type) { switch (action.type) {
case SHOW_MODAL:
return {
[action.payload.modalKey]: true,
props: action.payload.props,
}
case HIDE_MODAL:
return initialState
default: default:
return state return state
} }
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
"dependencies": { "dependencies": {
"@pubsweet/ui": "^3.1.0", "@pubsweet/ui": "^3.1.0",
"moment": "^2.20.1", "moment": "^2.20.1",
"portal-modal": "^1.0.3",
"prop-types": "^15.5.10", "prop-types": "^15.5.10",
"react": "^16.1.0", "react": "^16.1.0",
"react-dnd": "^2.5.4", "react-dnd": "^2.5.4",
......
...@@ -8,6 +8,7 @@ const AssignEditor = ({ assign }) => <button onClick={assign}>ASSIGN</button> ...@@ -8,6 +8,7 @@ const AssignEditor = ({ assign }) => <button onClick={assign}>ASSIGN</button>
export default compose( export default compose(
withModal({ withModal({
modalKey: 'assignHEmodal',
modalComponent: HEModal, modalComponent: HEModal,
}), }),
withHandlers({ withHandlers({
......
...@@ -37,6 +37,7 @@ class AssignHEModal extends React.Component { ...@@ -37,6 +37,7 @@ class AssignHEModal extends React.Component {
const filteredEditors = this.filterEditors(editors) const filteredEditors = this.filterEditors(editors)
return ( return (
<RootModal> <RootModal>
<button onClick={this.props.hideModal}>CLOSE</button>
<ModalTitle>Assign Handling Editor</ModalTitle> <ModalTitle>Assign Handling Editor</ModalTitle>
<ModalHeader> <ModalHeader>
<span>HANDLING EDITORS</span> <span>HANDLING EDITORS</span>
......
import React from 'react' import React from 'react'
import { get } from 'lodash' import { get } from 'lodash'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { compose, getContext } from 'recompose'
import { Button, Icon, th } from '@pubsweet/ui' import { Button, Icon, th } from '@pubsweet/ui'
import styled, { css, withTheme } from 'styled-components' import styled, { css, withTheme } from 'styled-components'
import { compose, getContext } from 'recompose'
import { parseVersion, parseJournalIssue } from './utils'
import ZipFiles from './ZipFiles' import ZipFiles from './ZipFiles'
import { parseVersion, parseJournalIssue } from './utils'
import HandlingEditorActions from './HandlingEditorActions' import HandlingEditorActions from './HandlingEditorActions'
const DashboardCard = ({ const DashboardCard = ({
......
...@@ -4,7 +4,6 @@ module.exports = { ...@@ -4,7 +4,6 @@ module.exports = {
reducers: { reducers: {
authors: () => require('./redux/authors').default, authors: () => require('./redux/authors').default,
files: () => require('./redux/files').default, files: () => require('./redux/files').default,
modal: () => require('./redux/modal').default,
editors: () => require('./redux/editors').default, editors: () => require('./redux/editors').default,
}, },
}, },
......
export { default as modal } from './modal'
export { default as authors } from './authors' export { default as authors } from './authors'
export { default as editors } from './editors' export { default as editors } from './editors'
import { modalReducer } from 'portal-modal'
export default modalReducer
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment