fix: Drawer cannot open (#24802)

* bugfix: fix drawer getContainer is null error

* add test
This commit is contained in:
陈帅 2020-06-07 19:05:44 +08:00 committed by GitHub
parent 6129d3a1eb
commit 30217ade3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 93 additions and 5 deletions

View File

@ -4,6 +4,16 @@ import Drawer from '..';
import mountTest from '../../../tests/shared/mountTest';
import rtlTest from '../../../tests/shared/rtlTest';
const DrawerTest = ({ getContainer }) => {
return (
<div>
<Drawer visible width={400} getContainer={getContainer}>
Here is content of Drawer
</Drawer>
</div>
);
};
describe('Drawer', () => {
mountTest(Drawer);
rtlTest(Drawer);
@ -17,6 +27,13 @@ describe('Drawer', () => {
expect(wrapper).toMatchSnapshot();
});
it('getContainer return undefined', () => {
let wrapper = mount(<DrawerTest getContainer={() => undefined} />);
expect(wrapper.render()).toMatchSnapshot();
wrapper = mount(<DrawerTest getContainer={false} />);
expect(wrapper.render()).toMatchSnapshot();
});
it('render top drawer', () => {
const wrapper = render(
<Drawer visible height={400} placement="top" getContainer={false}>
@ -93,15 +110,19 @@ describe('Drawer', () => {
it('forceRender works', () => {
const wrapper = mount(
<Drawer>
<button type="button" className="forceRender">should not be rendered</button>
<button type="button" className="forceRender">
should not be rendered
</button>
</Drawer>,
);
expect(wrapper.find('button.forceRender').length).toBe(0);
const wrapper2 = mount(
<Drawer forceRender>
<button type="button" className="forceRender">should be rendered</button>
<button type="button" className="forceRender">
should be rendered
</button>
</Drawer>,
);
expect(wrapper2.find('button.forceRender').length).toBe(1);
})
});
});

View File

@ -161,6 +161,73 @@ exports[`Drawer destroyOnClose is true 1`] = `
</div>
`;
exports[`Drawer getContainer return undefined 1`] = `<div />`;
exports[`Drawer getContainer return undefined 2`] = `
<div>
<div
class=""
>
<div
class="ant-drawer ant-drawer-right ant-drawer-open"
tabindex="-1"
>
<div
class="ant-drawer-mask"
/>
<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"
style="--scroll-bar: 0px;"
>
<span
aria-label="close"
class="anticon anticon-close"
role="img"
>
<svg
aria-hidden="true"
class=""
data-icon="close"
fill="currentColor"
focusable="false"
height="1em"
viewBox="64 64 896 896"
width="1em"
>
<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"
/>
</svg>
</span>
</button>
</div>
<div
class="ant-drawer-body"
>
Here is content of Drawer
</div>
</div>
</div>
</div>
</div>
</div>
</div>
`;
exports[`Drawer have a footer 1`] = `
<div
class=""

View File

@ -306,8 +306,8 @@ class Drawer extends React.Component<DrawerProps & ConfigConsumerProps, IDrawerS
])}
getContainer={
// 有可能为 false所以不能直接判断
rest.getContainer === undefined
? () => (getPopupContainer ? getPopupContainer(document.body) : undefined)
rest.getContainer === undefined && getPopupContainer
? () => getPopupContainer(document.body)
: rest.getContainer
}
{...offsetStyle}