feat(nav-bar): add clickable prop to nav-bar component (#11048)

* feat: add clickable prop to nav-bar

* test(nav-bar): add clickable prop test case
This commit is contained in:
哭你几哇 2022-10-03 21:43:32 +08:00 committed by GitHub
parent 9f2eb92172
commit ea0ba1fcf1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 44 additions and 3 deletions

View File

@ -33,6 +33,7 @@ export const navBarProps = {
leftArrow: Boolean,
placeholder: Boolean,
safeAreaInsetTop: Boolean,
clickable: truthProp,
};
export type NavBarProps = ExtractPropTypes<typeof navBarProps>;
@ -92,7 +93,7 @@ export default defineComponent({
<div class={bem('content')}>
{hasLeft && (
<div
class={[bem('left'), HAPTICS_FEEDBACK]}
class={[bem('left'), props.clickable ? HAPTICS_FEEDBACK : '']}
onClick={onClickLeft}
>
{renderLeft()}
@ -103,7 +104,7 @@ export default defineComponent({
</div>
{hasRight && (
<div
class={[bem('right'), HAPTICS_FEEDBACK]}
class={[bem('right'), props.clickable ? HAPTICS_FEEDBACK : '']}
onClick={onClickRight}
>
{renderRight()}

View File

@ -99,6 +99,7 @@ export default {
| placeholder | Whether to generate a placeholder element when fixed | _boolean_ | `false` |
| z-index | Z-index | _number \| string_ | `1` |
| safe-area-inset-top | Whether to enable top safe area adaptation | _boolean_ | `false` |
| clickable | Whether to add `van-haptics-feedback` class name to parent element when render `Slots` | _boolean_ | `true` |
### Slots

View File

@ -97,7 +97,7 @@ export default {
### Props
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| --- | --- | --- | --- | --- |
| title | 标题 | _string_ | `''` |
| left-text | 左侧文案 | _string_ | `''` |
| right-text | 右侧文案 | _string_ | `''` |
@ -107,6 +107,7 @@ export default {
| placeholder | 固定在顶部时,是否在标签位置生成一个等高的占位元素 | _boolean_ | `false` |
| z-index | 导航栏 z-index | _number \| string_ | `1` |
| safe-area-inset-top | 是否开启[顶部安全区适配](#/zh-CN/advanced-usage#di-bu-an-quan-qu-gua-pei) | _boolean_ | `false` |
| clickable | 渲染 `Slots` 是否在父元素添加 `van-haptics-feedback` 类名 | _boolean_ | `true` | |
### Slots

View File

@ -25,6 +25,18 @@ exports[`should render placeholder element when using placeholder prop 1`] = `
</div>
`;
exports[`should render slots correctly when set clickable to false 1`] = `
<div class="van-nav-bar__left">
Custom Left
</div>
`;
exports[`should render slots correctly when set clickable to false 2`] = `
<div class="van-nav-bar__right">
Custom Right
</div>
`;
exports[`should render title slot correctly 1`] = `
<div class="van-nav-bar__title van-ellipsis">
Custom Title

View File

@ -1,4 +1,5 @@
import { NavBar } from '..';
import { HAPTICS_FEEDBACK } from '../../utils';
import { mount, mockGetBoundingClientRect, later } from '../../../test';
test('should render left slot correctly', () => {
@ -9,6 +10,9 @@ test('should render left slot correctly', () => {
});
expect(wrapper.find('.van-nav-bar__left').html()).toMatchSnapshot();
expect(
wrapper.find('.van-nav-bar__left').classes(HAPTICS_FEEDBACK)
).toBeTruthy();
});
test('should render left slot correctly', () => {
@ -19,6 +23,9 @@ test('should render left slot correctly', () => {
});
expect(wrapper.find('.van-nav-bar__right').html()).toMatchSnapshot();
expect(
wrapper.find('.van-nav-bar__right').classes(HAPTICS_FEEDBACK)
).toBeTruthy();
});
test('should render title slot correctly', () => {
@ -85,3 +92,22 @@ test('should change z-index when using z-index prop', () => {
});
expect(wrapper.style.zIndex).toEqual('100');
});
test('should render slots correctly when set clickable to false', () => {
const wrapper = mount(NavBar, {
slots: {
left: () => 'Custom Left',
right: () => 'Custom Right',
},
props: {
clickable: false,
},
});
const leftDom = wrapper.find('.van-nav-bar__left');
const rightDom = wrapper.find('.van-nav-bar__right');
expect(leftDom.html()).toMatchSnapshot();
expect(rightDom.html()).toMatchSnapshot();
expect(leftDom.classes(HAPTICS_FEEDBACK)).toBeFalsy();
expect(rightDom.classes(HAPTICS_FEEDBACK)).toBeFalsy();
});