diff --git a/src/components/modal/__snapshots__/index.test.js.snap b/src/components/modal/__snapshots__/index.test.js.snap index 9411696bd..3ef2c3905 100644 --- a/src/components/modal/__snapshots__/index.test.js.snap +++ b/src/components/modal/__snapshots__/index.test.js.snap @@ -6,6 +6,12 @@ exports[`Modal Snap render opened Modal -- simple 1`] = `"
这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室
"`; +exports[`Modal Snap render opened Modal -- popup 1`] = `"
标题
欢迎加入京东凹凸实验室'n'r欢迎加入京东凹凸实验室
"`; + +exports[`Modal Snap render opened Modal -- popup animationType 1`] = `"
标题
欢迎加入京东凹凸实验室'n'r欢迎加入京东凹凸实验室
"`; + +exports[`Modal Snap render opened Modal -- simple 1`] = `"
标题
欢迎加入京东凹凸实验室'n'r欢迎加入京东凹凸实验室
"`; + exports[`Modal Snap render opened Modal -- single button 1`] = `"
这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室
"`; exports[`Modal Snap render opened Modal 1`] = `"
标题
这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室
"`; diff --git a/src/components/modal/index.js b/src/components/modal/index.js index 9552ccf42..abf00c2d8 100644 --- a/src/components/modal/index.js +++ b/src/components/modal/index.js @@ -71,7 +71,7 @@ export default class AtModal extends AtComponent { render () { const { _isOpened } = this.state - const { title, content, cancelText, confirmText } = this.props + const { title, content, cancelText, confirmText, popup, animationType } = this.props const rootClass = classNames( 'at-modal', @@ -81,6 +81,21 @@ export default class AtModal extends AtComponent { this.props.className ) + let isPopUp = false + + if (popup) { + isPopUp = true + // eslint-disable-next-line no-unused-expressions + animationType === 'slide-up' ? 'slide-up' : 'slide-down' + } + const popUpClass = classNames( + { + 'at-modal__container': !isPopUp, + 'at-modal__popup': isPopUp, + [`at-modal__popup-${animationType}`]: isPopUp && animationType + } + ) + if (title || content) { const isRenderAction = cancelText || confirmText return ( @@ -89,7 +104,7 @@ export default class AtModal extends AtComponent { onClick={this.handleClickOverlay} className='at-modal__overlay' /> - + {title && ( {title} @@ -120,7 +135,7 @@ export default class AtModal extends AtComponent { return ( - {this.props.children} + {this.props.children} ) } diff --git a/src/components/modal/index.test.js b/src/components/modal/index.test.js index 4c629ef55..a1993522c 100644 --- a/src/components/modal/index.test.js +++ b/src/components/modal/index.test.js @@ -91,6 +91,33 @@ describe('Modal Snap', () => { ) expect(component).toMatchSnapshot() }) + + it('render opened Modal -- popup', () => { + const component = renderToString( + + ) + expect(component).toMatchSnapshot() + }) + + it('render opened Modal -- popup animationType', () => { + const component = renderToString( + + ) + expect(component).toMatchSnapshot() + }) }) describe('Modal Behavior ', () => { diff --git a/src/pages/action/modal/index.js b/src/pages/action/modal/index.js index b4257f980..457eb4d87 100644 --- a/src/pages/action/modal/index.js +++ b/src/pages/action/modal/index.js @@ -1,5 +1,5 @@ import Taro from '@tarojs/taro' -import { View, Button } from '@tarojs/components' +import { View, Button, Text, Input } from '@tarojs/components' import { AtButton, AtModal, @@ -27,7 +27,8 @@ export default class ModalPage extends Taro.Component { isOpened2: false, isOpened3: false, isOpened4: false, - isOpened5: false + isOpened5: false, + isOpened6: false } } @@ -61,7 +62,7 @@ export default class ModalPage extends Taro.Component { } render () { - const { isOpened1, isOpened2, isOpened3, isOpened4, isOpened5 } = this.state + const { isOpened1, isOpened2, isOpened3, isOpened4, isOpened5, isOpened6 } = this.state return ( @@ -116,6 +117,17 @@ export default class ModalPage extends Taro.Component { + + 打开popup + + + + 打开popup + + + + + {/* 城市索引 */} 城市索引 @@ -204,6 +216,36 @@ export default class ModalPage extends Taro.Component { onConfirm={this.closeModalConfirm.bind(this, 4, '点击了确认')} /> + {/* Popup */} + + 完善信息 + + + 姓名: + + + + 呢称: + + + + + + + + + diff --git a/src/style/components/modal.scss b/src/style/components/modal.scss index 0d595cf87..5acfeec7f 100644 --- a/src/style/components/modal.scss +++ b/src/style/components/modal.scss @@ -33,6 +33,22 @@ $at-modal-duration: 200ms; overflow: hidden; } + &__popup { + position: absolute; + width: 100%; + background: #fff; + + &-slide-down { + top: 0; + } + + &-slide-up { + position: absolute; + width: 100%; + bottom: 0; + } + } + &__header { @include hairline-bottom-relative($color: $color-grey-4); @include line(1);