Skip to content
Snippets Groups Projects
modal.jsx 2.39 KiB
Newer Older
  • Learn to ignore specific revisions
  • steven dale's avatar
    steven dale committed
    const classNames = require('classnames');
    
    const PropTypes = require('prop-types');
    
    Ray Schamp's avatar
    Ray Schamp committed
    const React = require('react');
    const ReactModal = require('react-modal');
    
    
    const Box = require('../box/box.jsx');
    
    const CloseButton = require('../close-button/close-button.jsx');
    
    const Filter = require('../filter/filter.jsx');
    
    Ray Schamp's avatar
    Ray Schamp committed
    const styles = require('./modal.css');
    
    class ModalComponent extends React.Component {
        render () {
            return (
                <ReactModal
    
                    className={styles.fullModalContent}
    
                    contentLabel={this.props.contentLabel}
    
    Ray Schamp's avatar
    Ray Schamp committed
                    isOpen={this.props.visible}
                    overlayClassName={styles.modalOverlay}
                    ref={m => (this.modal = m)}
                >
    
                    <Box
                        direction="column"
    
    DD Liu's avatar
    DD Liu committed
                        grow={1}
    
                        <div className={styles.header}>
                            <div className={classNames(styles.headerItem, styles.headerItemFilter)}>
    
                                <Filter
                                    filterQuery={this.props.filterQuery}
                                    onChange={this.props.onFilterChange}
                                />
    
    steven dale's avatar
    steven dale committed
                            </div>
                            <div
                                className={classNames(
    
    steven dale's avatar
    steven dale committed
                                    styles.headerItemTitle
                                )}
                            >
                                {this.props.contentLabel}
                            </div>
                            <div
                                className={classNames(
    
    steven dale's avatar
    steven dale committed
                                    styles.headerItemClose
                                )}
                            >
                                <CloseButton
                                    size={CloseButton.SIZE_LARGE}
                                    onClick={this.props.onRequestClose}
                                />
                            </div>
                        </div>
    
                        {this.props.children}
                    </Box>
    
    Ray Schamp's avatar
    Ray Schamp committed
                </ReactModal>
            );
        }
    }
    
    ModalComponent.propTypes = {
    
        children: PropTypes.node,
        contentLabel: PropTypes.string.isRequired,
    
        filterQuery: PropTypes.string,
        onFilterChange: PropTypes.func,
    
    steven dale's avatar
    steven dale committed
        onRequestClose: PropTypes.func,
    
        visible: PropTypes.bool.isRequired
    
    Ray Schamp's avatar
    Ray Schamp committed
    };
    
    module.exports = ModalComponent;