import type { DrawerPopupProps } from 'rc-drawer/lib/DrawerPopup'; import React from 'react'; import Drawer from '..'; import { fireEvent, render } from '../../../tests/utils'; import Button from '../../button'; interface DrawerPropsType { push?: DrawerPopupProps['push']; placement?: DrawerPopupProps['placement']; } interface DrawerStateType { open: boolean; hasChildren: boolean; childrenDrawer: boolean; } class MultiDrawer extends React.Component { state = { open: false, childrenDrawer: false, hasChildren: true }; showDrawer = () => { this.setState({ open: true, hasChildren: true, }); }; onClose = () => { this.setState({ open: false, }); }; showChildrenDrawer = () => { this.setState({ childrenDrawer: true, hasChildren: true, }); }; onChildrenDrawerClose = () => { this.setState({ childrenDrawer: false, }); }; onRemoveChildDrawer = () => { this.setState({ hasChildren: false, }); }; render() { const { childrenDrawer, open, hasChildren } = this.state; const { placement, push } = this.props; return (
{hasChildren && (
This is two-level drawer
)}
{String(childrenDrawer)}
); } } describe('Drawer', () => { it('render right MultiDrawer', () => { const { container } = render(); fireEvent.click(container.querySelector('button#open_drawer')!); fireEvent.click(container.querySelector('button#open_two_drawer')!); expect(container.querySelector('.ant-drawer-content-wrapper')).toHaveStyle({ transform: 'translateX(-180px)', }); expect(container.querySelectorAll('#two_drawer_text').length).toBe(1); }); it('render left MultiDrawer', () => { const { container } = render(); fireEvent.click(container.querySelector('button#open_drawer')!); fireEvent.click(container.querySelector('button#open_two_drawer')!); expect(container.querySelector('.ant-drawer-content-wrapper')).toHaveStyle({ transform: 'translateX(180px)', }); expect(container.querySelectorAll('#two_drawer_text').length).toBe(1); fireEvent.click(container.querySelector('.Two-level .ant-drawer-close')!); expect(container.querySelector('.childrenDrawer')?.innerHTML).toEqual('false'); }); it('render top MultiDrawer', () => { const { container } = render(); fireEvent.click(container.querySelector('button#open_drawer')!); fireEvent.click(container.querySelector('button#open_two_drawer')!); expect(container.querySelector('.ant-drawer-content-wrapper')).toHaveStyle({ transform: 'translateY(180px)', }); expect(container.querySelectorAll('#two_drawer_text').length).toBe(1); }); it('render MultiDrawer is child in unmount', () => { const mask = { mask: false }; const { container } = render(); fireEvent.click(container.querySelector('button#open_drawer')!); fireEvent.click(container.querySelector('button#open_two_drawer')!); fireEvent.click(container.querySelector('button#remove_drawer')!); expect(container.querySelector('.ant-drawer-content-wrapper')).toHaveStyle({ transform: '' }); fireEvent.click(container.querySelector('button#open_two_drawer')!); expect(container.querySelector('.ant-drawer-content-wrapper')).toHaveStyle({ transform: 'translateY(180px)', }); expect(container.querySelectorAll('#two_drawer_text').length).toBe(1); }); it('custom MultiDrawer push distance', () => { const { container } = render(); fireEvent.click(container.querySelector('button#open_drawer')!); fireEvent.click(container.querySelector('button#open_two_drawer')!); expect(container.querySelector('.ant-drawer-content-wrapper')).toHaveStyle({ transform: 'translateX(-256px)', }); }); it('custom MultiDrawer push with true', () => { const { container } = render(); fireEvent.click(container.querySelector('button#open_drawer')!); fireEvent.click(container.querySelector('button#open_two_drawer')!); expect(container.querySelector('.ant-drawer-content-wrapper')).toHaveStyle({ transform: 'translateX(-180px)', }); }); it('custom MultiDrawer push with false', () => { const { container } = render(); fireEvent.click(container.querySelector('button#open_drawer')!); fireEvent.click(container.querySelector('button#open_two_drawer')!); expect(container.querySelector('.ant-drawer-content-wrapper')).toHaveStyle({ transform: '' }); }); });