refactor(TreeSelect): use Sidebar as nav (#4383)

This commit is contained in:
neverland 2019-09-06 09:51:20 +08:00 committed by GitHub
parent ebf5a18eb9
commit 5b0feb58e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 66 additions and 61 deletions

View File

@ -483,7 +483,7 @@
// SidebarItem // SidebarItem
@sidebar-font-size: @font-size-md; @sidebar-font-size: @font-size-md;
@sidebar-line-height: 1.4; @sidebar-line-height: 20px;
@sidebar-text-color: @text-color; @sidebar-text-color: @text-color;
@sidebar-disabled-text-color: @gray; @sidebar-disabled-text-color: @gray;
@sidebar-padding: 20px @padding-sm 20px @padding-xs; @sidebar-padding: 20px @padding-sm 20px @padding-xs;
@ -648,10 +648,7 @@
@tree-select-font-size: @font-size-md; @tree-select-font-size: @font-size-md;
@tree-select-nav-background-color: @background-color-light; @tree-select-nav-background-color: @background-color-light;
@tree-select-content-background-color: @white; @tree-select-content-background-color: @white;
@tree-select-nav-item-padding: 0 @padding-xs 0 @padding-sm; @tree-select-nav-item-padding: @padding-sm @padding-xs @padding-sm @padding-sm;
@tree-select-nav-item-active-border-color: @red;
@tree-select-nav-item-active-background-color: @white;
@tree-select-nav-item-disabled-color: @gray-dark;
@tree-select-item-height: 44px; @tree-select-item-height: 44px;
@tree-select-item-active-color: @red; @tree-select-item-active-color: @red;
@tree-select-item-disabled-color: @gray; @tree-select-item-disabled-color: @gray;

View File

@ -13,20 +13,7 @@
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
&-item { &-item {
position: relative;
padding: @tree-select-nav-item-padding; padding: @tree-select-nav-item-padding;
line-height: @tree-select-item-height;
border-left: 3px solid transparent;
&--active {
font-weight: bold;
background-color: @tree-select-nav-item-active-background-color;
border-color: @tree-select-nav-item-active-border-color;
}
&--disabled {
color: @tree-select-nav-item-disabled-color;
}
} }
} }
@ -39,7 +26,7 @@
&__item { &__item {
position: relative; position: relative;
padding-left: @padding-md; padding: 0 32px 0 @padding-md;
font-weight: bold; font-weight: bold;
line-height: @tree-select-item-height; line-height: @tree-select-item-height;

View File

@ -1,6 +1,8 @@
import { createNamespace, addUnit } from '../utils'; import { createNamespace, addUnit } from '../utils';
import { emit, inherit } from '../utils/functional'; import { emit, inherit } from '../utils/functional';
import Icon from '../icon'; import Icon from '../icon';
import Sidebar from '../sidebar';
import SidebarItem from '../sidebar-item';
// Types // Types
import { CreateElement, RenderContext } from 'vue/types'; import { CreateElement, RenderContext } from 'vue/types';
@ -52,28 +54,12 @@ function TreeSelect(
: activeId === id; : activeId === id;
} }
const Nav = items.map((item, index) => ( const Nav = items.map(item => (
<div <SidebarItem
key={index} title={item.text}
class={[ disabled={item.disabled}
'van-ellipsis', class={bem('nav-item')}
bem('nav-item', { />
active: mainActiveIndex === index,
disabled: item.disabled
})
]}
onClick={() => {
if (!item.disabled) {
emit(ctx, 'click-nav', index);
emit(ctx, 'update:main-active-index', index);
// compatible for old usage, should be removed in next major version
emit(ctx, 'navclick', index);
}
}}
>
{item.text}
</div>
)); ));
function Content() { function Content() {
@ -124,7 +110,19 @@ function TreeSelect(
return ( return (
<div class={bem()} style={{ height: addUnit(height) }} {...inherit(ctx)}> <div class={bem()} style={{ height: addUnit(height) }} {...inherit(ctx)}>
<div class={bem('nav')}>{Nav}</div> <Sidebar
class={bem('nav')}
activeKey={mainActiveIndex}
onChange={(index: number) => {
emit(ctx, 'click-nav', index);
emit(ctx, 'update:main-active-index', index);
// compatible for old usage, should be removed in next major version
emit(ctx, 'navclick', index);
}}
>
{Nav}
</Sidebar>
<div class={bem('content')}>{Content()}</div> <div class={bem('content')}>{Content()}</div>
</div> </div>
); );

View File

@ -4,11 +4,19 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div> <div>
<div class="van-tree-select" style="height: 300px;"> <div class="van-tree-select" style="height: 300px;">
<div class="van-tree-select__nav"> <div class="van-sidebar van-tree-select__nav"><a class="van-sidebar-item van-sidebar-item--select van-tree-select__nav-item">
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--active">浙江</div> <div class="van-sidebar-item__text">浙江
<div class="van-ellipsis van-tree-select__nav-item">江苏</div> <!---->
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--disabled">福建</div>
</div> </div>
</a><a class="van-sidebar-item van-tree-select__nav-item">
<div class="van-sidebar-item__text">江苏
<!---->
</div>
</a><a class="van-sidebar-item van-sidebar-item--disabled van-tree-select__nav-item">
<div class="van-sidebar-item__text">福建
<!---->
</div>
</a></div>
<div class="van-tree-select__content"> <div class="van-tree-select__content">
<div class="van-ellipsis van-tree-select__item van-tree-select__item--active">杭州<i class="van-icon van-icon-checked van-tree-select__selected" style="font-size: 16px;"> <div class="van-ellipsis van-tree-select__item van-tree-select__item--active">杭州<i class="van-icon van-icon-checked van-tree-select__selected" style="font-size: 16px;">
<!----></i></div> <!----></i></div>
@ -20,11 +28,19 @@ exports[`renders demo correctly 1`] = `
</div> </div>
<div> <div>
<div class="van-tree-select" style="height: 300px;"> <div class="van-tree-select" style="height: 300px;">
<div class="van-tree-select__nav"> <div class="van-sidebar van-tree-select__nav"><a class="van-sidebar-item van-sidebar-item--select van-tree-select__nav-item">
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--active">浙江</div> <div class="van-sidebar-item__text">浙江
<div class="van-ellipsis van-tree-select__nav-item">江苏</div> <!---->
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--disabled">福建</div>
</div> </div>
</a><a class="van-sidebar-item van-tree-select__nav-item">
<div class="van-sidebar-item__text">江苏
<!---->
</div>
</a><a class="van-sidebar-item van-sidebar-item--disabled van-tree-select__nav-item">
<div class="van-sidebar-item__text">福建
<!---->
</div>
</a></div>
<div class="van-tree-select__content"> <div class="van-tree-select__content">
<div class="van-ellipsis van-tree-select__item van-tree-select__item--active">杭州<i class="van-icon van-icon-checked van-tree-select__selected" style="font-size: 16px;"> <div class="van-ellipsis van-tree-select__item van-tree-select__item--active">杭州<i class="van-icon van-icon-checked van-tree-select__selected" style="font-size: 16px;">
<!----></i></div> <!----></i></div>
@ -37,10 +53,15 @@ exports[`renders demo correctly 1`] = `
</div> </div>
<div> <div>
<div class="van-tree-select" style="height: 55vw;"> <div class="van-tree-select" style="height: 55vw;">
<div class="van-tree-select__nav"> <div class="van-sidebar van-tree-select__nav"><a class="van-sidebar-item van-sidebar-item--select van-tree-select__nav-item">
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--active">分组 1</div> <div class="van-sidebar-item__text">分组 1
<div class="van-ellipsis van-tree-select__nav-item">分组 2</div> <!---->
</div> </div>
</a><a class="van-sidebar-item van-tree-select__nav-item">
<div class="van-sidebar-item__text">分组 2
<!---->
</div>
</a></div>
<div class="van-tree-select__content"> <div class="van-tree-select__content">
<div class="van-image"><img src="https://img.yzcdn.cn/vant/apple-1.jpg" class="van-image__img"> <div class="van-image"><img src="https://img.yzcdn.cn/vant/apple-1.jpg" class="van-image__img">
<div class="van-image__loading"><i class="van-icon van-icon-photo-o" style="font-size: 22px;"> <div class="van-image__loading"><i class="van-icon van-icon-photo-o" style="font-size: 22px;">

View File

@ -2,23 +2,25 @@
exports[`content slot 1`] = ` exports[`content slot 1`] = `
<div class="van-tree-select" style="height: 300px;"> <div class="van-tree-select" style="height: 300px;">
<div class="van-tree-select__nav"> <div class="van-sidebar van-tree-select__nav"><a class="van-sidebar-item van-sidebar-item--select van-tree-select__nav-item">
<div class="van-ellipsis van-tree-select__nav-item van-tree-select__nav-item--active">group1</div> <div class="van-sidebar-item__text">group1
<!---->
</div> </div>
</a></div>
<div class="van-tree-select__content">Custom Content</div> <div class="van-tree-select__content">Custom Content</div>
</div> </div>
`; `;
exports[`empty list 1`] = ` exports[`empty list 1`] = `
<div class="van-tree-select" style="height: 300px;"> <div class="van-tree-select" style="height: 300px;">
<div class="van-tree-select__nav"></div> <div class="van-sidebar van-tree-select__nav"></div>
<div class="van-tree-select__content"></div> <div class="van-tree-select__content"></div>
</div> </div>
`; `;
exports[`height prop 1`] = ` exports[`height prop 1`] = `
<div class="van-tree-select" style="height: 100vh;"> <div class="van-tree-select" style="height: 100vh;">
<div class="van-tree-select__nav"></div> <div class="van-sidebar van-tree-select__nav"></div>
<div class="van-tree-select__content"></div> <div class="van-tree-select__content"></div>
</div> </div>
`; `;