parent
44d4b5b5db
commit
d0d0103bb5
@ -0,0 +1,2 @@ |
|||||||
|
export { default } from './modal.component' |
||||||
|
export { default as ModalContent } from './modal-content' |
@ -0,0 +1,60 @@ |
|||||||
|
@import './modal-content/index'; |
||||||
|
|
||||||
|
.modal-container { |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
background-color: #fff; |
||||||
|
display: flex; |
||||||
|
flex-flow: column; |
||||||
|
border-radius: 8px; |
||||||
|
|
||||||
|
&__content { |
||||||
|
overflow-y: auto; |
||||||
|
flex: 1; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: center; |
||||||
|
padding: 16px 32px; |
||||||
|
|
||||||
|
@media screen and (max-width: 575px) { |
||||||
|
justify-content: center; |
||||||
|
padding: 28px 20px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
&__header { |
||||||
|
position: relative; |
||||||
|
display: flex; |
||||||
|
padding: 12px; |
||||||
|
justify-content: center; |
||||||
|
border-bottom: 1px solid #d2d8dd; |
||||||
|
} |
||||||
|
|
||||||
|
&__header-close::after { |
||||||
|
content: '\00D7'; |
||||||
|
font-size: 40px; |
||||||
|
color: $dusty-gray; |
||||||
|
position: absolute; |
||||||
|
top: -5px; |
||||||
|
right: 10px; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
|
||||||
|
&__footer { |
||||||
|
display: flex; |
||||||
|
flex-flow: row; |
||||||
|
justify-content: center; |
||||||
|
border-top: 1px solid #d2d8dd; |
||||||
|
padding: 16px; |
||||||
|
flex: 0 0 auto; |
||||||
|
|
||||||
|
&-button { |
||||||
|
min-width: 0; |
||||||
|
margin-right: 16px; |
||||||
|
|
||||||
|
&:last-of-type { |
||||||
|
margin-right: 0; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1 @@ |
|||||||
|
export { default } from './modal-content.component' |
@ -0,0 +1,19 @@ |
|||||||
|
.modal-content { |
||||||
|
flex: 1; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: center; |
||||||
|
padding: 16px 0; |
||||||
|
|
||||||
|
&__title { |
||||||
|
font-size: 1.5rem; |
||||||
|
font-weight: 500; |
||||||
|
padding: 16px 0; |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
|
||||||
|
&__description { |
||||||
|
text-align: center; |
||||||
|
font-size: .875rem; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
import React, { PureComponent } from 'react' |
||||||
|
import PropTypes from 'prop-types' |
||||||
|
|
||||||
|
export default class ModalContent extends PureComponent { |
||||||
|
static propTypes = { |
||||||
|
title: PropTypes.string, |
||||||
|
description: PropTypes.string, |
||||||
|
} |
||||||
|
|
||||||
|
render () { |
||||||
|
const { title, description } = this.props |
||||||
|
|
||||||
|
return ( |
||||||
|
<div className="modal-content"> |
||||||
|
<div className="modal-content__title"> |
||||||
|
{ title } |
||||||
|
</div> |
||||||
|
<div className="modal-content__description"> |
||||||
|
{ description } |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,78 @@ |
|||||||
|
import React, { PureComponent } from 'react' |
||||||
|
import PropTypes from 'prop-types' |
||||||
|
import Button from '../button' |
||||||
|
|
||||||
|
export default class Modal extends PureComponent { |
||||||
|
static propTypes = { |
||||||
|
children: PropTypes.node, |
||||||
|
// Header text
|
||||||
|
headerText: PropTypes.string, |
||||||
|
// Submit button (right button)
|
||||||
|
onSubmit: PropTypes.func, |
||||||
|
submitType: PropTypes.string, |
||||||
|
submitText: PropTypes.string, |
||||||
|
// Cancel button (left button)
|
||||||
|
onCancel: PropTypes.func, |
||||||
|
cancelType: PropTypes.string, |
||||||
|
cancelText: PropTypes.string, |
||||||
|
} |
||||||
|
|
||||||
|
static defaultProps = { |
||||||
|
submitType: 'primary', |
||||||
|
cancelType: 'default', |
||||||
|
} |
||||||
|
|
||||||
|
render () { |
||||||
|
const { |
||||||
|
children, |
||||||
|
headerText, |
||||||
|
onSubmit, |
||||||
|
submitType, |
||||||
|
submitText, |
||||||
|
onCancel, |
||||||
|
cancelType, |
||||||
|
cancelText, |
||||||
|
} = this.props |
||||||
|
|
||||||
|
return ( |
||||||
|
<div className="modal-container"> |
||||||
|
{ |
||||||
|
headerText && ( |
||||||
|
<div className="modal-container__header"> |
||||||
|
<div className="modal-container__header-text"> |
||||||
|
{ headerText } |
||||||
|
</div> |
||||||
|
<div |
||||||
|
className="modal-container__header-close" |
||||||
|
onClick={() => onCancel()} |
||||||
|
/> |
||||||
|
</div> |
||||||
|
) |
||||||
|
} |
||||||
|
<div className="modal-container__content"> |
||||||
|
{ children } |
||||||
|
</div> |
||||||
|
<div className="modal-container__footer"> |
||||||
|
{ |
||||||
|
onCancel && ( |
||||||
|
<Button |
||||||
|
type={cancelType} |
||||||
|
onClick={onCancel} |
||||||
|
className="modal-container__footer-button" |
||||||
|
> |
||||||
|
{ cancelText } |
||||||
|
</Button> |
||||||
|
) |
||||||
|
} |
||||||
|
<Button |
||||||
|
type={submitType} |
||||||
|
onClick={onSubmit} |
||||||
|
className="modal-container__footer-button" |
||||||
|
> |
||||||
|
{ submitText } |
||||||
|
</Button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
) |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue