Skip to content
This repository was archived by the owner on Aug 5, 2026. It is now read-only.

Commit 393b50c

Browse files
committed
[CAPY-2410][BpkDrawerV2] Address review comments
1 parent fee8203 commit 393b50c

6 files changed

Lines changed: 62 additions & 47 deletions

File tree

packages/backpack-web/src/bpk-component-close-button/src/BpkCloseButton.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,4 @@ const BpkCloseButton = ({
6868
);
6969
};
7070

71-
export default BpkCloseButton;
71+
export default BpkCloseButton;

packages/backpack-web/src/bpk-component-drawer/src/BpkDrawerV2/BpkDrawerV2-test.tsx

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,28 +84,40 @@ describe('BpkDrawerV2', () => {
8484
});
8585

8686
it('passes swipeDirection to Ark', () => {
87-
const { container } = renderDrawerV2({ swipeDirection: 'end' });
87+
renderDrawerV2({ swipeDirection: 'end' });
8888
expect(
89-
container.querySelector('[data-scope="drawer"][data-part="content"]'),
89+
document.body.querySelector(
90+
'[data-scope="drawer"][data-part="content"]',
91+
),
9092
).toHaveAttribute('data-swipe-direction', 'right');
9193
});
9294
});
9395

9496
describe('Parts', () => {
95-
it('renders the backdrop with the Backpack class', () => {
97+
it('portals the backdrop with the Backpack class', () => {
9698
const { container } = renderDrawerV2();
9799
const backdrop = container.querySelector(
98100
'[data-backpack-ds-component="DrawerV2Backdrop"]',
99101
);
100-
expect(backdrop?.className).toContain('bpk-drawer-v2__backdrop');
102+
expect(backdrop).not.toBeInTheDocument();
103+
expect(
104+
document.body.querySelector(
105+
'[data-backpack-ds-component="DrawerV2Backdrop"]',
106+
)?.className,
107+
).toContain('bpk-drawer-v2__backdrop');
101108
});
102109

103-
it('renders the content with the Backpack class', () => {
110+
it('portals the content with the Backpack class', () => {
104111
const { container } = renderDrawerV2();
105112
const content = container.querySelector(
106113
'[data-backpack-ds-component="DrawerV2Content"]',
107114
);
108-
expect(content?.className).toContain('bpk-drawer-v2__content');
115+
expect(content).not.toBeInTheDocument();
116+
expect(
117+
document.body.querySelector(
118+
'[data-backpack-ds-component="DrawerV2Content"]',
119+
)?.className,
120+
).toContain('bpk-drawer-v2__content');
109121
});
110122

111123
it('renders the header, title, and body', () => {
@@ -145,9 +157,11 @@ describe('BpkDrawerV2', () => {
145157
});
146158

147159
it('marks body content as a no-drag area', () => {
148-
const { container } = renderDrawerV2();
160+
renderDrawerV2();
149161
expect(
150-
container.querySelector('[data-backpack-ds-component="DrawerV2Body"]'),
162+
document.body.querySelector(
163+
'[data-backpack-ds-component="DrawerV2Body"]',
164+
),
151165
).toHaveAttribute('data-no-drag');
152166
});
153167
});
@@ -160,6 +174,7 @@ describe('BpkDrawerV2', () => {
160174

161175
await user.click(screen.getByRole('button', { name: 'Close filters' }));
162176

177+
expect(onOpenChange).toHaveBeenCalledTimes(1);
163178
expect(onOpenChange).toHaveBeenCalledWith(
164179
expect.objectContaining({ open: false }),
165180
);

packages/backpack-web/src/bpk-component-drawer/src/BpkDrawerV2/BpkDrawerV2Backdrop/BpkDrawerV2Backdrop.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* limitations under the License.
1717
*/
1818

19-
import { Drawer } from '@ark-ui/react';
19+
import { Drawer, Portal } from '@ark-ui/react';
2020

2121
import { cssModules, getDataComponentAttribute } from '../../../../bpk-react-utils';
2222

@@ -25,10 +25,12 @@ import STYLES from './BpkDrawerV2Backdrop.module.scss';
2525
const getClassName = cssModules(STYLES);
2626

2727
const BpkDrawerV2Backdrop = () => (
28-
<Drawer.Backdrop
29-
className={getClassName('bpk-drawer-v2__backdrop')}
30-
{...getDataComponentAttribute('DrawerV2Backdrop')}
31-
/>
28+
<Portal>
29+
<Drawer.Backdrop
30+
className={getClassName('bpk-drawer-v2__backdrop')}
31+
{...getDataComponentAttribute('DrawerV2Backdrop')}
32+
/>
33+
</Portal>
3234
);
3335

3436
export default BpkDrawerV2Backdrop;

packages/backpack-web/src/bpk-component-drawer/src/BpkDrawerV2/BpkDrawerV2CloseTrigger/BpkDrawerV2CloseTrigger.tsx

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* limitations under the License.
1717
*/
1818

19-
import { Drawer, useDrawerContext } from '@ark-ui/react';
19+
import { Drawer } from '@ark-ui/react';
2020

2121
// @ts-expect-error Untyped import. See `decisions/imports-ts-suppressions.md`.
2222
import BpkCloseButton from '../../../../bpk-component-close-button';
@@ -28,18 +28,14 @@ export type BpkDrawerV2CloseTriggerProps = {
2828

2929
const BpkDrawerV2CloseTrigger = ({
3030
label,
31-
}: BpkDrawerV2CloseTriggerProps) => {
32-
const drawer = useDrawerContext();
33-
34-
return (
35-
<Drawer.CloseTrigger asChild>
36-
<BpkCloseButton
37-
label={label}
38-
onClick={() => drawer.setOpen(false)}
39-
{...getDataComponentAttribute('DrawerV2CloseTrigger')}
40-
/>
41-
</Drawer.CloseTrigger>
42-
);
43-
};
31+
}: BpkDrawerV2CloseTriggerProps) => (
32+
<Drawer.CloseTrigger asChild>
33+
<BpkCloseButton
34+
label={label}
35+
onClick={() => {}}
36+
{...getDataComponentAttribute('DrawerV2CloseTrigger')}
37+
/>
38+
</Drawer.CloseTrigger>
39+
);
4440

4541
export default BpkDrawerV2CloseTrigger;

packages/backpack-web/src/bpk-component-drawer/src/BpkDrawerV2/BpkDrawerV2Content/BpkDrawerV2Content.tsx

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import type { ComponentProps, ReactNode } from 'react';
2020

21-
import { Drawer } from '@ark-ui/react';
21+
import { Drawer, Portal } from '@ark-ui/react';
2222

2323
import { cssModules, getDataComponentAttribute } from '../../../../bpk-react-utils';
2424

@@ -38,19 +38,21 @@ const BpkDrawerV2Content = ({
3838
draggable = true,
3939
...rest
4040
}: BpkDrawerV2ContentProps) => (
41-
<Drawer.Positioner
42-
className={getClassName('bpk-drawer-v2__positioner')}
43-
{...getDataComponentAttribute('DrawerV2Positioner')}
44-
>
45-
<Drawer.Content
46-
{...rest}
47-
className={getClassName('bpk-drawer-v2__content')}
48-
draggable={draggable}
49-
{...getDataComponentAttribute('DrawerV2Content')}
41+
<Portal>
42+
<Drawer.Positioner
43+
className={getClassName('bpk-drawer-v2__positioner')}
44+
{...getDataComponentAttribute('DrawerV2Positioner')}
5045
>
51-
{children}
52-
</Drawer.Content>
53-
</Drawer.Positioner>
46+
<Drawer.Content
47+
{...rest}
48+
className={getClassName('bpk-drawer-v2__content')}
49+
draggable={draggable}
50+
{...getDataComponentAttribute('DrawerV2Content')}
51+
>
52+
{children}
53+
</Drawer.Content>
54+
</Drawer.Positioner>
55+
</Portal>
5456
);
5557

5658
export default BpkDrawerV2Content;

packages/backpack-web/src/bpk-component-drawer/src/BpkDrawerV2/accessibility-test.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ beforeAll(mockResizeObserver);
2626

2727
describe('BpkDrawerV2 accessibility tests', () => {
2828
it('has no accessibility violations when open', async () => {
29-
const { container } = render(
29+
const { baseElement } = render(
3030
<BpkDrawerV2.Root open onOpenChange={jest.fn()}>
3131
<BpkDrawerV2.Backdrop />
3232
<BpkDrawerV2.Content>
@@ -40,11 +40,11 @@ describe('BpkDrawerV2 accessibility tests', () => {
4040
</BpkDrawerV2.Root>,
4141
);
4242

43-
expect(await axe(container)).toHaveNoViolations();
43+
expect(await axe(baseElement)).toHaveNoViolations();
4444
});
4545

4646
it('has no accessibility violations with description', async () => {
47-
const { container } = render(
47+
const { baseElement } = render(
4848
<BpkDrawerV2.Root open onOpenChange={jest.fn()}>
4949
<BpkDrawerV2.Content>
5050
<BpkDrawerV2.Header>
@@ -59,11 +59,11 @@ describe('BpkDrawerV2 accessibility tests', () => {
5959
</BpkDrawerV2.Root>,
6060
);
6161

62-
expect(await axe(container)).toHaveNoViolations();
62+
expect(await axe(baseElement)).toHaveNoViolations();
6363
});
6464

6565
it('has no accessibility violations as a side drawer', async () => {
66-
const { container } = render(
66+
const { baseElement } = render(
6767
<BpkDrawerV2.Root
6868
open
6969
onOpenChange={jest.fn()}
@@ -80,6 +80,6 @@ describe('BpkDrawerV2 accessibility tests', () => {
8080
</BpkDrawerV2.Root>,
8181
);
8282

83-
expect(await axe(container)).toHaveNoViolations();
83+
expect(await axe(baseElement)).toHaveNoViolations();
8484
});
8585
});

0 commit comments

Comments
 (0)