Home Reference Source

src/components/core/ModalPages.jsx

import React from 'react';
import PropTypes from 'prop-types';
import { createStructuredSelector } from 'reselect';
import { connect } from 'react-redux';
import { closeModal, hidePrompt } from '../../actions/modals';
import { modalsSelector } from '../../selectors/modals';
import compileUrl from '../../utils/compileUrl';

import ModalPage from './ModalPage';

/**
 * Компонент, отображающий все модальные окна
 * @reactProps {object} modals - Массив объктов модалок (из Redux)
 * @example
 *  <ModalPages/>
 */
class ModalPages extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    const { modals } = this.props;
    const modalPages = modals.map(
      modal =>
        modal.visible && (
          <ModalPage
            key={modal.pageId}
            close={this.props.close}
            hidePrompt={this.props.hidePrompt}
            {...modal}
            {...modal.props}
          />
        )
    );
    return <div>{modalPages}</div>;
  }
}

ModalPages.propTypes = {
  modals: PropTypes.array,
};

ModalPages.defaultProps = {
  modals: {},
};

const mapStateToProps = createStructuredSelector({
  modals: (state, props) => modalsSelector(state),
});

function mapDispatchToProps(dispatch) {
  return {
    close: (name, prompt) => {
      dispatch(closeModal(name, prompt));
    },
    hidePrompt: name => {
      dispatch(hidePrompt(name));
    },
  };
}

ModalPages.propTypes = {
  modals: PropTypes.array,
  options: PropTypes.object,
  actions: PropTypes.object,
};

ModalPages = connect(
  mapStateToProps,
  mapDispatchToProps
)(ModalPages);
export default ModalPages;