fk-react-ui-components
Version:
Step 1 : Create a file in [ Seeds / Plants / Trees ] <br> Step 2 : It should export an Object with component name and story Component [Refer other components] <br> Step 3 : Story Component should return a react component <br> Step 3 : Created file should
146 lines (136 loc) • 4.29 kB
JavaScript
import { PropTypes } from 'prop-types';
import React from 'react';
import ReactModal from 'react-modal';
import styled from 'styled-components';
import styles from '../StyleComponents/index';
import { colors } from '../colorCodes';
const Icon = styles.icon;
const map = React.Children.map;
const Header = styled.div`
position: relative;
border-bottom: 1px solid ${colors.modalHeaderBorderColor};
overflow: hidden;
height: ${props => props.height || '40px'};
line-height: 30px;
padding: ${props => props.padding || '6px 10px'};
`;
const Footer = styled.div`
-webkit-box-shadow: ${colors.modalFooterShadow};
-moz-box-shadow: ${colors.modalFooterShadow};
box-shadow: ${colors.modalFooterShadow};
height: ${props => props.footerHeight || '65px'};
line-height: 50px;
`;
const HeaderText = styled.div`
font-size: 15px;
color: ${props => props.color || '#545454'};
`;
const customStyles = {
content: {
top: '40%',
left: '50%',
right: 'auto',
bottom: 'auto',
marginRight: '-50%',
transform: 'translate(-50%, -50%)',
padding: '0px',
width: '450px',
overflow: 'visible',
boxShadow: colors.modalShadow,
border: `1px solid ${colors.modalBorderColor}`
}
};
export default class Modal extends React.Component {
computeBody() {
return map(this.props.children, node => {
if (node.props.refs === 'body') {
return node;
}
});
}
computeFooter() {
return map(this.props.children, node => {
if (node.props.refs === 'footer') {
return node;
}
});
}
computeHeader() {
return map(this.props.children, node => {
if (node.props.refs === 'header') {
return node;
}
});
}
render() {
const self = this;
return (
<ReactModal
isOpen={this.props.modalIsOpen}
onRequestClose={this.props.closeModal}
style={this.props.customStyles || customStyles}
>
<Header
height={this.props.headerHeight}
padding={this.props.headerPadding}
>
<HeaderText color={this.props.headerColor}>
{this.props.headerText ? (
<span>{this.props.headerText}</span>
) : (
<div>{this.computeHeader()}</div>
)}
</HeaderText>
{this.props.isClose ? (
<Icon
position="absolute"
top={self.props.headerTop || '9px'}
right="30px"
width="0"
height="0"
fontSize="26px"
content="'\00d7'"
onClick={self.props.closeModal}
className="fa fa-times"
fontWeight="900"
cursor="pointer"
/>
) : (
<span />
)}
</Header>
{this.computeBody()}
{this.props.isFooter ? (
<Footer footerHeight={self.props.footerHeight}>
{this.computeFooter()}
</Footer>
) : (
<div />
)}
</ReactModal>
);
}
}
Modal.propTypes = {
modalIsOpen: PropTypes.bool,
closeModal: PropTypes.func,
customStyles: PropTypes.element,
headerHeight: PropTypes.string,
headerPadding: PropTypes.string,
headerColor: PropTypes.string,
headerText: PropTypes.string.isRequired,
isClose: PropTypes.bool,
isFooter: PropTypes.bool,
children: PropTypes.element
};
Modal.defaultProps = {
modalIsOpen: false,
closeModal: false,
isClose: false,
isFooter: false,
headerHeight: '',
headerPadding: '',
headerColor: '',
customStyles,
children: {}
};