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

View File

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

View File

@ -1,7 +1,7 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
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-actionsheet__item--disabled van-hairline--top"><span class="van-actionsheet__name">Option</span></div>
<div class="van-actionsheet__cancel">Cancel</div>