Skip to content

refactor(drawer): use compositionAPI #4708

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Oct 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions components/drawer/__tests__/MultiDrawer.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@ const MultiDrawer = {
width: 520,
visible: this.visible,
getContainer: false,
wrapClassName: 'test_drawer',
className: 'test_drawer',
placement: this.placement,
onClose: this.onClose,
};
const childrenDrawerProps = {
title: 'Two-level Drawer',
width: 320,
wrapClassName: 'Two-level',
className: 'Two-level',
visible: this.childrenDrawer,
getContainer: false,
placement: this.placement,
Expand Down Expand Up @@ -112,7 +112,7 @@ describe('Drawer', () => {
wrapper.find('#open_two_drawer').trigger('click');
}, 0);
await asyncExpect(() => {
const translateX = wrapper.find('.ant-drawer.test_drawer').element.style.transform;
const translateX = wrapper.find('.test_drawer').find('.ant-drawer').element.style.transform;
expect(translateX).toEqual('translateX(-180px)');
expect(wrapper.find('#two_drawer_text').exists()).toBe(true);
}, 1000);
Expand All @@ -133,7 +133,7 @@ describe('Drawer', () => {
wrapper.find('#open_two_drawer').trigger('click');
}, 0);
await asyncExpect(() => {
const translateX = wrapper.find('.ant-drawer.test_drawer').element.style.transform;
const translateX = wrapper.find('.test_drawer').find('.ant-drawer').element.style.transform;
expect(translateX).toEqual('translateX(180px)');
expect(wrapper.find('#two_drawer_text').exists()).toBe(true);
}, 1000);
Expand All @@ -153,7 +153,7 @@ describe('Drawer', () => {
wrapper.find('#open_two_drawer').trigger('click');
}, 0);
await asyncExpect(() => {
const translateY = wrapper.find('.ant-drawer.test_drawer').element.style.transform;
const translateY = wrapper.find('.test_drawer').find('.ant-drawer').element.style.transform;
expect(translateY).toEqual('translateY(180px)');
expect(wrapper.find('#two_drawer_text').exists()).toBe(true);
}, 1000);
Expand Down
72 changes: 42 additions & 30 deletions components/drawer/__tests__/__snapshots__/Drawer.test.js.snap
Original file line number Diff line number Diff line change
@@ -1,110 +1,122 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Drawer class is test_drawer 1`] = `
<div class="">
<div class="ant-drawer ant-drawer-right test_drawer" tabindex="-1">
<div>
<div class="ant-drawer ant-drawer-right" tabindex="-1">
<div class="ant-drawer-mask"></div>
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 256px;">
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 378px;">
<div class="ant-drawer-content">
<div class="ant-drawer-wrapper-body">
<div class="ant-drawer-header-no-title">
<!----><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<div class="ant-drawer-header ant-drawer-header-close-only">
<div class="ant-drawer-header-title"><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<!---->
</div>
<!---->
</div>
<div class="ant-drawer-body">Here is content of Drawer</div>
<!---->
</div>
</div>
<!---->
</div>
</div>
</div>
`;

exports[`Drawer closable is false 1`] = `
<div class="">
<div class="ant-drawer ant-drawer-right" tabindex="-1">
<div>
<div class="ant-drawer ant-drawer-right ant-drawer-open" tabindex="-1">
<div class="ant-drawer-mask"></div>
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 256px;">
<div class="ant-drawer-content-wrapper" style="width: 378px;">
<div class="ant-drawer-content">
<div class="ant-drawer-wrapper-body">
<!---->
<div class="ant-drawer-body">Here is content of Drawer</div>
<!---->
</div>
</div>
<!---->
</div>
</div>
</div>
`;

exports[`Drawer destroyOnClose is true 1`] = `
<div class="">
<div>
<div class="ant-drawer ant-drawer-right" tabindex="-1">
<div class="ant-drawer-mask"></div>
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 256px;">
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 378px;">
<div class="ant-drawer-content">
<div class="ant-drawer-wrapper-body" style="opacity: 0; transition: opacity .3s;">
<!---->
<div class="ant-drawer-body">Here is content of Drawer</div>
<!---->
</div>
</div>
<!---->
</div>
</div>
</div>
`;

exports[`Drawer have a title 1`] = `
<div class="">
<div class="ant-drawer ant-drawer-right" tabindex="-1">
<div>
<div class="ant-drawer ant-drawer-right ant-drawer-open" tabindex="-1">
<div class="ant-drawer-mask"></div>
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 256px;">
<div class="ant-drawer-content-wrapper" style="width: 378px;">
<div class="ant-drawer-content">
<div class="ant-drawer-wrapper-body">
<div class="ant-drawer-header">
<div class="ant-drawer-title">Test Title</div><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<div class="ant-drawer-header-title"><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<div class="ant-drawer-title">Test Title</div>
</div>
<!---->
</div>
<div class="ant-drawer-body">Here is content of Drawer</div>
<!---->
</div>
</div>
<!---->
</div>
</div>
</div>
`;

exports[`Drawer render correctly 1`] = `
<div class="">
<div class="ant-drawer ant-drawer-right" tabindex="-1">
<div>
<div class="ant-drawer ant-drawer-right ant-drawer-open" tabindex="-1">
<div class="ant-drawer-mask"></div>
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 400px;">
<div class="ant-drawer-content-wrapper" style="width: 400px;">
<div class="ant-drawer-content">
<div class="ant-drawer-wrapper-body">
<div class="ant-drawer-header-no-title">
<!----><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<div class="ant-drawer-header ant-drawer-header-close-only">
<div class="ant-drawer-header-title"><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<!---->
</div>
<!---->
</div>
<div class="ant-drawer-body">Here is content of Drawer</div>
<!---->
</div>
</div>
<!---->
</div>
</div>
</div>
`;

exports[`Drawer render top drawer 1`] = `
<div class="">
<div class="ant-drawer ant-drawer-top" tabindex="-1">
<div>
<div class="ant-drawer ant-drawer-top ant-drawer-open" tabindex="-1">
<div class="ant-drawer-mask"></div>
<div class="ant-drawer-content-wrapper" style="transform: translateY(-100%); height: 400px;">
<div class="ant-drawer-content-wrapper" style="height: 400px;">
<div class="ant-drawer-content">
<div class="ant-drawer-wrapper-body">
<div class="ant-drawer-header-no-title">
<!----><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<div class="ant-drawer-header ant-drawer-header-close-only">
<div class="ant-drawer-header-title"><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<!---->
</div>
<!---->
</div>
<div class="ant-drawer-body">Here is content of Drawer</div>
<!---->
</div>
</div>
<!---->
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,22 @@ exports[`Drawer render correctly 1`] = `
<div><button class="ant-btn" type="button" ant-click-animating-without-extra-node="false">
<!----><span>open</span>
</button>
<div class="">
<div>
<div class="ant-drawer ant-drawer-right" tabindex="-1">
<div class="ant-drawer-mask"></div>
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 256px;">
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 378px;">
<div class="ant-drawer-content">
<div class="ant-drawer-wrapper-body">
<div class="ant-drawer-header-no-title">
<!----><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<div class="ant-drawer-header ant-drawer-header-close-only">
<div class="ant-drawer-header-title"><button aria-label="Close" class="ant-drawer-close"><span role="img" aria-label="close" class="anticon anticon-close"><svg focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></button>
<!---->
</div>
<!---->
</div>
<div class="ant-drawer-body">Here is content of Drawer</div>
<!---->
</div>
</div>
<!---->
</div>
</div>
</div>
Expand Down
29 changes: 24 additions & 5 deletions components/drawer/__tests__/__snapshots__/demo.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ exports[`renders ./components/drawer/demo/basic.vue correctly 1`] = `
<!---->
`;

exports[`renders ./components/drawer/demo/extra.vue correctly 1`] = `
<div class="ant-radio-group ant-radio-group-outline ant-radio-group-default" style="margin-right: 8px;"><label class="ant-radio-wrapper"><span class="ant-radio"><input type="radio" class="ant-radio-input" value="top"><span class="ant-radio-inner"></span></span><span>top</span></label><label class="ant-radio-wrapper"><span class="ant-radio"><input type="radio" class="ant-radio-input" value="right"><span class="ant-radio-inner"></span></span><span>right</span></label><label class="ant-radio-wrapper"><span class="ant-radio"><input type="radio" class="ant-radio-input" value="bottom"><span class="ant-radio-inner"></span></span><span>bottom</span></label><label class="ant-radio-wrapper ant-radio-wrapper-checked"><span class="ant-radio ant-radio-checked"><input type="radio" class="ant-radio-input" value="left"><span class="ant-radio-inner"></span></span><span>left</span></label></div><button class="ant-btn ant-btn-primary" type="button">
<!----><span>Open</span>
</button>
<!---->
`;

exports[`renders ./components/drawer/demo/form-in-drawer.vue correctly 1`] = `
<button class="ant-btn ant-btn-primary" type="button">
<!----><span role="img" aria-label="plus" class="anticon anticon-plus"><svg focusable="false" class="" data-icon="plus" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><defs><style></style></defs><path d="M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"></path><path d="M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z"></path></svg></span><span>New account</span>
Expand All @@ -32,28 +39,40 @@ exports[`renders ./components/drawer/demo/render-in-current.vue correctly 1`] =
<div style="height: 200px; overflow: hidden; position: relative; border: 1px solid #ebedf0; border-radius: 2px; padding: 48px; text-align: center; background: rgb(250, 250, 250); width: 100%;"> Render in this <div style="margin-top: 16px;"><button class="ant-btn ant-btn-primary" type="button">
<!----><span>Open</span>
</button></div>
<div class="">
<div class="ant-drawer ant-drawer-right" style="position: absolute;" tabindex="-1">
<div>
<div class="ant-drawer ant-drawer-right" tabindex="-1" style="position: absolute;">
<div class="ant-drawer-mask"></div>
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 256px;">
<div class="ant-drawer-content-wrapper" style="transform: translateX(100%); width: 378px;">
<div class="ant-drawer-content">
<div class="ant-drawer-wrapper-body">
<div class="ant-drawer-header">
<div class="ant-drawer-title">Basic Drawer</div>
<div class="ant-drawer-header-title">
<!---->
<div class="ant-drawer-title">Basic Drawer</div>
</div>
<!---->
</div>
<div class="ant-drawer-body">
<p>Some contents...</p>
</div>
<!---->
</div>
</div>
<!---->
</div>
</div>
</div>
</div>
`;

exports[`renders ./components/drawer/demo/size.vue correctly 1`] = `
<button style="margin-right: 8px;" class="ant-btn ant-btn-primary" type="button">
<!----><span>Open Default Size (378px)</span>
</button><button class="ant-btn ant-btn-primary" type="button">
<!----><span>Open Large Size (736px)</span>
</button>
<!---->
`;

exports[`renders ./components/drawer/demo/user-profile.vue correctly 1`] = `
<div class="ant-list ant-list-split ant-list-bordered">
<!---->
Expand Down
3 changes: 1 addition & 2 deletions components/drawer/demo/basic.vue
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ Basic drawer.
v-model:visible="visible"
title="Basic Drawer"
placement="right"
:closable="false"
:after-visible-change="afterVisibleChange"
@after-visible-change="afterVisibleChange"
>
<p>Some contents...</p>
<p>Some contents...</p>
Expand Down
65 changes: 65 additions & 0 deletions components/drawer/demo/extra.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<docs>
---
order: 2
title:
zh-CN: 额外操作
en-US: Extra Actions
---

## zh-CN

在 Ant Design 规范中,操作按钮建议放在抽屉的右上角,可以使用 extra 属性来实现。

## en-US

Extra actions should be placed at corner of drawer in Ant Design, you can using `extra` prop for that.

</docs>

<template>
<a-radio-group v-model:value="placement" style="margin-right: 8px">
<a-radio value="top">top</a-radio>
<a-radio value="right">right</a-radio>
<a-radio value="bottom">bottom</a-radio>
<a-radio value="left">left</a-radio>
</a-radio-group>
<a-button type="primary" @click="showDrawer">Open</a-button>
<a-drawer
:width="500"
title="Basic Drawer"
:placement="placement"
:visible="visible"
@close="onClose"
>
<template #extra>
<a-button style="margin-right: 8px" @click="onClose">Cancel</a-button>
<a-button type="primary" @click="onClose">Submit</a-button>
</template>
<p>Some contents...</p>
<p>Some contents...</p>
<p>Some contents...</p>
</a-drawer>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
export default defineComponent({
setup() {
const placement = ref<string>('left');
const visible = ref<boolean>(false);

const showDrawer = () => {
visible.value = true;
};

const onClose = () => {
visible.value = false;
};
return {
placement,
visible,
showDrawer,
onClose,
};
},
});
</script>
Loading