[improvement] Actionsheet: use popup instead of mixin (#2806)

This commit is contained in:
neverland 2019-02-20 15:16:25 +08:00 committed by GitHub
parent 9c1248db9a
commit 9236132dbf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 39 deletions

View File

@ -2,15 +2,14 @@ import { use } from '../utils';
import { PopupMixin } from '../mixins/popup'; import { PopupMixin } from '../mixins/popup';
import Icon from '../icon'; import Icon from '../icon';
import Loading from '../loading'; import Loading from '../loading';
import Popup from '../popup';
const [sfc, bem] = use('actionsheet'); const [sfc, bem] = use('actionsheet');
export default sfc({ export default sfc({
mixins: [PopupMixin],
props: { props: {
...PopupMixin.props,
title: String, title: String,
value: Boolean,
actions: Array, actions: Array,
cancelText: String, cancelText: String,
overlay: { overlay: {
@ -43,16 +42,12 @@ export default sfc({
}, },
render(h) { render(h) {
if (!this.shouldRender) {
return;
}
const { title, cancelText, onCancel } = this; const { title, cancelText, onCancel } = this;
const Header = () => ( const Header = () => (
<div class={[bem('header'), 'van-hairline--top-bottom']}> <div class={[bem('header'), 'van-hairline--top-bottom']}>
{title} {title}
<Icon name="close" onClick={onCancel} /> <Icon name="close" class={bem('close')} onClick={onCancel} />
</div> </div>
); );
@ -87,12 +82,17 @@ export default sfc({
); );
return ( return (
<transition name="van-slide-up"> <Popup
<div vShow={this.value} class={bem({ withtitle: title })}> class={bem()}
{title ? Header() : this.actions.map(Option)} value={this.value}
{Footer} position="bottom"
</div> onInput={value => {
</transition> this.$emit('input', value);
}}
>
{title ? Header() : this.actions.map(Option)}
{Footer}
</Popup>
); );
} }
}); });

View File

@ -1,23 +1,11 @@
@import '../style/var'; @import '../style/var';
.van-actionsheet { .van-actionsheet {
position: fixed;
left: 0;
right: 0;
bottom: 0;
color: @text-color;
max-height: 90%; max-height: 90%;
overflow-y: auto; color: @text-color;
-webkit-overflow-scrolling: touch;
background-color: @background-color;
&--withtitle {
background-color: @white;
}
&__item, &__item,
&__cancel { &__cancel {
height: 50px;
line-height: 50px; line-height: 50px;
font-size: 16px; font-size: 16px;
text-align: center; text-align: center;
@ -28,6 +16,10 @@
} }
} }
&__item {
height: 50px;
}
&__item--disabled { &__item--disabled {
color: @gray; color: @gray;
@ -46,23 +38,26 @@
display: inline-block; display: inline-block;
} }
&__cancel { &__cancel::before {
margin-top: 10px; content: ' ';
display: block;
height: 10px;
background-color: @background-color;
} }
&__header { &__header {
font-size: 16px; font-size: 16px;
line-height: 44px; line-height: 44px;
text-align: center; text-align: center;
}
.van-icon-close { &__close {
top: 0; top: 0;
right: 0; right: 0;
padding: 0 15px; padding: 0 15px;
font-size: 18px; font-size: 18px;
color: @gray-dark; color: @gray-dark;
position: absolute; position: absolute;
line-height: inherit; line-height: inherit;
}
} }
} }

View File

@ -1,7 +1,7 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP // Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`callback events 1`] = ` exports[`callback events 1`] = `
<div class="van-actionsheet" name="van-slide-up"> <div class="van-popup van-popup--bottom van-actionsheet" name="van-popup-slide-bottom">
<div class="van-actionsheet__item van-hairline--top"><span class="van-actionsheet__name">Option</span></div> <div class="van-actionsheet__item van-hairline--top"><span class="van-actionsheet__name">Option</span></div>
<div class="van-actionsheet__item van-actionsheet__item--disabled van-hairline--top"><span class="van-actionsheet__name">Option</span></div> <div class="van-actionsheet__item van-actionsheet__item--disabled van-hairline--top"><span class="van-actionsheet__name">Option</span></div>
<div class="van-actionsheet__cancel">Cancel</div> <div class="van-actionsheet__cancel">Cancel</div>