Skip to content

Commit 5848fab

Browse files
authored
feat(devtools): the react query logo can now close the devtools (#3577)
* feat(devtools): update react query logo to close devtools added button wrapper on react query logo which onClick closes devtools window closes #3067 * feat(devtools): update test case for open and close devtools
1 parent 09a375b commit 5848fab

File tree

2 files changed

+64
-24
lines changed

2 files changed

+64
-24
lines changed

src/devtools/devtools.tsx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,6 @@ export function ReactQueryDevtools({
278278
{isResolvedOpen ? (
279279
<Button
280280
type="button"
281-
aria-label="Close React Query Devtools"
282281
aria-controls="ReactQueryDevtoolsPanel"
283282
aria-haspopup="true"
284283
aria-expanded="true"
@@ -540,12 +539,24 @@ export const ReactQueryDevtoolsPanel = React.forwardRef<
540539
alignItems: 'center',
541540
}}
542541
>
543-
<Logo
544-
aria-hidden
542+
<button
543+
type="button"
544+
aria-label="Close React Query Devtools"
545+
aria-controls="ReactQueryDevtoolsPanel"
546+
aria-haspopup="true"
547+
aria-expanded="true"
548+
onClick={() => setIsOpen(false)}
545549
style={{
550+
display: 'inline-flex',
551+
background: 'none',
552+
border: 0,
553+
padding: 0,
546554
marginRight: '.5em',
555+
cursor: 'pointer',
547556
}}
548-
/>
557+
>
558+
<Logo aria-hidden />
559+
</button>
549560
<div
550561
style={{
551562
display: 'flex',
@@ -605,6 +616,7 @@ export const ReactQueryDevtoolsPanel = React.forwardRef<
605616
style={{
606617
flex: '1',
607618
marginRight: '.5em',
619+
width: '100%',
608620
}}
609621
/>
610622
{!filter ? (

src/devtools/tests/devtools.test.tsx

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
import React from 'react'
2-
import {
3-
fireEvent,
4-
screen,
5-
waitFor,
6-
act,
7-
waitForElementToBeRemoved,
8-
} from '@testing-library/react'
2+
import { fireEvent, screen, waitFor, act } from '@testing-library/react'
93
import '@testing-library/jest-dom'
104
import { useQuery } from '../..'
115
import {
@@ -34,22 +28,56 @@ describe('ReactQueryDevtools', () => {
3428

3529
renderWithClient(queryClient, <Page />, { initialIsOpen: false })
3630

37-
const closeButton = screen.queryByRole('button', {
38-
name: /close react query devtools/i,
39-
})
40-
expect(closeButton).toBeNull()
41-
fireEvent.click(
42-
screen.getByRole('button', { name: /open react query devtools/i })
43-
)
31+
const verifyDevtoolsIsOpen = () => {
32+
expect(
33+
screen.queryByRole('generic', { name: /react query devtools panel/i })
34+
).not.toBeNull()
35+
expect(
36+
screen.queryByRole('button', { name: /open react query devtools/i })
37+
).toBeNull()
38+
}
39+
const verifyDevtoolsIsClosed = () => {
40+
expect(
41+
screen.queryByRole('generic', { name: /react query devtools panel/i })
42+
).toBeNull()
43+
expect(
44+
screen.queryByRole('button', { name: /open react query devtools/i })
45+
).not.toBeNull()
46+
}
4447

45-
await waitForElementToBeRemoved(() =>
46-
screen.queryByRole('button', { name: /open react query devtools/i })
47-
)
48-
fireEvent.click(
48+
const waitForDevtoolsToOpen = () =>
49+
screen.findByRole('button', { name: /close react query devtools/i })
50+
const waitForDevtoolsToClose = () =>
51+
screen.findByRole('button', { name: /open react query devtools/i })
52+
53+
const getOpenLogoButton = () =>
54+
screen.getByRole('button', { name: /open react query devtools/i })
55+
const getCloseLogoButton = () =>
4956
screen.getByRole('button', { name: /close react query devtools/i })
50-
)
57+
const getCloseButton = () =>
58+
screen.getByRole('button', { name: /^close$/i })
59+
60+
verifyDevtoolsIsClosed()
61+
62+
fireEvent.click(getOpenLogoButton())
63+
await waitForDevtoolsToOpen()
64+
65+
verifyDevtoolsIsOpen()
66+
67+
fireEvent.click(getCloseLogoButton())
68+
await waitForDevtoolsToClose()
69+
70+
verifyDevtoolsIsClosed()
71+
72+
fireEvent.click(getOpenLogoButton())
73+
await waitForDevtoolsToOpen()
74+
75+
verifyDevtoolsIsOpen()
76+
77+
fireEvent.click(getCloseButton())
78+
await waitForDevtoolsToClose()
5179

52-
await screen.findByRole('button', { name: /open react query devtools/i })
80+
verifyDevtoolsIsClosed()
5381
})
5482

5583
it('should display the correct query states', async () => {

0 commit comments

Comments
 (0)