Skip to content

Commit 92c721b

Browse files
authored
chore: Migrate useSelfHostedSettings to TS Query V5 (#3574)
1 parent 3c674b5 commit 92c721b

15 files changed

+197
-118
lines changed

src/pages/AdminSettings/AdminMembers/ActivationInfo/ActivationCount/ActivationCount.test.jsx renamed to src/pages/AdminSettings/AdminMembers/ActivationInfo/ActivationCount/ActivationCount.test.tsx

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,86 @@
1-
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
1+
import {
2+
QueryClientProvider as QueryClientProviderV5,
3+
QueryClient as QueryClientV5,
4+
} from '@tanstack/react-queryV5'
25
import { render, screen } from '@testing-library/react'
36
import { graphql, HttpResponse } from 'msw'
47
import { setupServer } from 'msw/node'
8+
import { Suspense } from 'react'
59
import { MemoryRouter, Route } from 'react-router-dom'
610

711
import ActivationCount from './ActivationCount'
812

9-
const queryClient = new QueryClient({
13+
const queryClientV5 = new QueryClientV5({
1014
defaultOptions: { queries: { retry: false } },
1115
})
1216

13-
const mockResponse = {
17+
const mockResponse = ({
18+
seatsUsed,
19+
seatsLimit,
20+
}: {
21+
seatsUsed: number
22+
seatsLimit: number
23+
}) => ({
1424
config: {
1525
planAutoActivate: true,
16-
seatsUsed: 5,
17-
seatsLimit: 10,
26+
seatsUsed,
27+
seatsLimit,
1828
},
19-
}
29+
})
2030

21-
const wrapper =
22-
() =>
23-
({ children }) => (
24-
<QueryClientProvider client={queryClient}>
25-
<MemoryRouter initialEntries={['/gh']}>
26-
<Route path="/:provider">{children}</Route>
27-
</MemoryRouter>
28-
</QueryClientProvider>
29-
)
31+
const wrapper: React.FC<React.PropsWithChildren> = ({ children }) => (
32+
<QueryClientProviderV5 client={queryClientV5}>
33+
<MemoryRouter initialEntries={['/gh']}>
34+
<Route path="/:provider">
35+
<Suspense fallback={<div>Loading</div>}>{children}</Suspense>
36+
</Route>
37+
</MemoryRouter>
38+
</QueryClientProviderV5>
39+
)
3040

3141
const server = setupServer()
3242
beforeAll(() => {
3343
server.listen()
3444
})
3545

3646
beforeEach(() => {
47+
queryClientV5.clear()
3748
server.resetHandlers()
38-
queryClient.clear()
3949
})
4050

4151
afterAll(() => {
4252
server.close()
4353
})
4454

55+
interface SetupArgs {
56+
seatsLimit: number
57+
seatsUsed: number
58+
}
59+
4560
describe('ActivationCount', () => {
46-
function setup() {
61+
function setup({ seatsLimit, seatsUsed }: SetupArgs) {
4762
server.use(
4863
graphql.query('SelfHostedSettings', () => {
49-
return HttpResponse.json({ data: mockResponse })
64+
return HttpResponse.json({
65+
data: mockResponse({ seatsLimit, seatsUsed }),
66+
})
5067
})
5168
)
5269
}
5370

5471
describe('it renders component', () => {
5572
describe('seat limit is not reached', () => {
5673
it('displays seat count', async () => {
57-
setup()
58-
render(<ActivationCount />, { wrapper: wrapper() })
74+
setup({ seatsLimit: 10, seatsUsed: 5 })
75+
render(<ActivationCount />, { wrapper })
5976

6077
const element = await screen.findByText('5')
6178
expect(element).toBeInTheDocument()
6279
})
6380

6481
it('displays seat limit', async () => {
65-
setup()
66-
render(<ActivationCount />, { wrapper: wrapper() })
82+
setup({ seatsLimit: 10, seatsUsed: 5 })
83+
render(<ActivationCount />, { wrapper })
6784

6885
const element = await screen.findByText('10')
6986
expect(element).toBeInTheDocument()
@@ -73,7 +90,7 @@ describe('ActivationCount', () => {
7390
describe('seat limit is reached', () => {
7491
it('displays info message', async () => {
7592
setup({ seatsLimit: 10, seatsUsed: 10 })
76-
render(<ActivationCount />, { wrapper: wrapper() })
93+
render(<ActivationCount />, { wrapper })
7794

7895
const link = await screen.findByText('[email protected]')
7996
expect(link).toBeInTheDocument()
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1-
import PropTypes from 'prop-types'
1+
import { useSuspenseQuery as useSuspenseQueryV5 } from '@tanstack/react-queryV5'
2+
import { useParams } from 'react-router'
23

3-
import { useSelfHostedSettings } from 'services/selfHosted'
4+
import { SelfHostedSettingsQueryOpts } from 'services/selfHosted/SelfHostedSettingsQueryOpts'
45

56
import ActivationLimit from './ActivationLimit'
67

8+
interface URLParams {
9+
provider: string
10+
}
11+
712
function ActivationCount() {
8-
const { data } = useSelfHostedSettings()
13+
const { provider } = useParams<URLParams>()
14+
const { data } = useSuspenseQueryV5(SelfHostedSettingsQueryOpts({ provider }))
915

1016
return (
1117
<div className="mt-4 flex flex-col gap-2 border-2 border-ds-gray-primary p-4">
@@ -21,9 +27,4 @@ function ActivationCount() {
2127
)
2228
}
2329

24-
ActivationCount.propTypes = {
25-
seatsUsed: PropTypes.number,
26-
seatsLimit: PropTypes.number,
27-
}
28-
2930
export default ActivationCount

src/pages/AdminSettings/AdminMembers/ActivationInfo/ActivationCount/index.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/pages/AdminSettings/AdminMembers/ActivationInfo/ActivationInfo.test.jsx renamed to src/pages/AdminSettings/AdminMembers/ActivationInfo/ActivationInfo.test.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import { render, screen } from '@testing-library/react'
22

33
import ActivationInfo from './ActivationInfo'
44

5-
vi.mock('./ActivationCount', () => ({ default: () => 'ActivationCount' }))
6-
vi.mock('./AutoActivateMembers', () => ({
5+
vi.mock('./ActivationCount/ActivationCount', () => ({
6+
default: () => 'ActivationCount',
7+
}))
8+
vi.mock('./AutoActivateMembers/AutoActivateMembers', () => ({
79
default: () => 'AutoActivateMembers',
810
}))
911

src/pages/AdminSettings/AdminMembers/ActivationInfo/ActivationInfo.jsx renamed to src/pages/AdminSettings/AdminMembers/ActivationInfo/ActivationInfo.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import { lazy, Suspense } from 'react'
22

33
import Spinner from 'ui/Spinner'
44

5-
const ActivationCount = lazy(() => import('./ActivationCount'))
6-
const AutoActivateMembers = lazy(() => import('./AutoActivateMembers'))
5+
const ActivationCount = lazy(() => import('./ActivationCount/ActivationCount'))
6+
const AutoActivateMembers = lazy(
7+
() => import('./AutoActivateMembers/AutoActivateMembers')
8+
)
79

810
const Loader = () => (
911
<div className="flex items-center justify-center py-16">
Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,39 @@
11
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
2+
import {
3+
QueryClientProvider as QueryClientProviderV5,
4+
QueryClient as QueryClientV5,
5+
} from '@tanstack/react-queryV5'
26
import { render, screen } from '@testing-library/react'
37
import userEvent from '@testing-library/user-event'
48
import { graphql, HttpResponse } from 'msw'
59
import { setupServer } from 'msw/node'
10+
import { Suspense } from 'react'
611
import { MemoryRouter, Route } from 'react-router-dom'
712

813
import AutoActivateMembers from './AutoActivateMembers'
914

15+
const mockResponse = {
16+
config: { planAutoActivate: true, seatsUsed: 1, seatsLimit: 10 },
17+
}
18+
1019
const queryClient = new QueryClient({
1120
defaultOptions: { queries: { retry: false } },
1221
})
22+
const queryClientV5 = new QueryClientV5({
23+
defaultOptions: { queries: { retry: false } },
24+
})
1325

14-
const mockResponse = {
15-
config: {
16-
planAutoActivate: true,
17-
seatsUsed: 1,
18-
seatsLimit: 10,
19-
},
20-
}
26+
const wrapper: React.FC<React.PropsWithChildren> = ({ children }) => (
27+
<QueryClientProviderV5 client={queryClientV5}>
28+
<QueryClientProvider client={queryClient}>
29+
<MemoryRouter initialEntries={['/gh']}>
30+
<Route path="/:provider">
31+
<Suspense fallback={<div>Loading</div>}>{children}</Suspense>
32+
</Route>
33+
</MemoryRouter>
34+
</QueryClientProvider>
35+
</QueryClientProviderV5>
36+
)
2137

2238
const server = setupServer()
2339
beforeAll(() => {
@@ -33,14 +49,6 @@ afterAll(() => {
3349
server.close()
3450
})
3551

36-
const wrapper = ({ children }) => (
37-
<QueryClientProvider client={queryClient}>
38-
<MemoryRouter initialEntries={['/gh']}>
39-
<Route path="/:provider">{children}</Route>
40-
</MemoryRouter>
41-
</QueryClientProvider>
42-
)
43-
4452
describe('AutoActivateMembers', () => {
4553
function setup() {
4654
const user = userEvent.setup()
@@ -60,10 +68,7 @@ describe('AutoActivateMembers', () => {
6068
describe('it renders the component', () => {
6169
it('displays activated toggle', async () => {
6270
setup()
63-
render(
64-
<AutoActivateMembers autoActivate={mockResponse.planAutoActivate} />,
65-
{ wrapper }
66-
)
71+
render(<AutoActivateMembers />, { wrapper })
6772

6873
const toggle = await screen.findByRole('button', {
6974
name: 'On',
@@ -75,10 +80,7 @@ describe('AutoActivateMembers', () => {
7580
describe('user clicks on toggle', () => {
7681
it('changes to off', async () => {
7782
const { user } = setup()
78-
render(
79-
<AutoActivateMembers autoActivate={mockResponse.planAutoActivate} />,
80-
{ wrapper }
81-
)
83+
render(<AutoActivateMembers />, { wrapper })
8284

8385
let toggle = await screen.findByRole('button', { name: 'On' })
8486

src/pages/AdminSettings/AdminMembers/ActivationInfo/AutoActivateMembers/AutoActivateMembers.jsx renamed to src/pages/AdminSettings/AdminMembers/ActivationInfo/AutoActivateMembers/AutoActivateMembers.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
import { useSuspenseQuery as useSuspenseQueryV5 } from '@tanstack/react-queryV5'
2+
import { useParams } from 'react-router'
3+
14
import { useUpdateSelfHostedSettings } from 'services/account/useUpdateSelfHostedSettings'
2-
import { useSelfHostedSettings } from 'services/selfHosted'
5+
import { SelfHostedSettingsQueryOpts } from 'services/selfHosted/SelfHostedSettingsQueryOpts'
6+
import { Provider } from 'shared/api/helpers'
37
import Spinner from 'ui/Spinner'
48
import Toggle from 'ui/Toggle'
59

@@ -9,10 +13,18 @@ const Loader = () => (
913
</div>
1014
)
1115

16+
interface URLParams {
17+
provider: Provider
18+
}
19+
1220
function AutoActivateMembers() {
13-
const { data, isLoading } = useSelfHostedSettings()
21+
const { provider } = useParams<URLParams>()
22+
const { data, isLoading } = useSuspenseQueryV5(
23+
SelfHostedSettingsQueryOpts({ provider })
24+
)
1425

1526
const { mutate, isLoading: isMutating } = useUpdateSelfHostedSettings()
27+
1628
if (isLoading) {
1729
return <Loader />
1830
}
@@ -24,7 +36,7 @@ function AutoActivateMembers() {
2436
<Toggle
2537
dataMarketing="auto-acitvate-members"
2638
label={data?.planAutoActivate ? 'On' : 'Off'}
27-
value={data?.planAutoActivate}
39+
value={!!data?.planAutoActivate}
2840
disabled={isMutating}
2941
onClick={() =>
3042
mutate({ shouldAutoActivate: !data?.planAutoActivate })

src/pages/AdminSettings/AdminMembers/ActivationInfo/AutoActivateMembers/index.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/pages/AdminSettings/AdminMembers/MemberList/MemberTable.test.jsx

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
2+
import {
3+
QueryClientProvider as QueryClientProviderV5,
4+
QueryClient as QueryClientV5,
5+
} from '@tanstack/react-queryV5'
26
import { render, screen } from '@testing-library/react'
37
import userEvent from '@testing-library/user-event'
48
import { graphql, http, HttpResponse } from 'msw'
59
import { setupServer } from 'msw/node'
10+
import { Suspense } from 'react'
611
import { mockAllIsIntersecting } from 'react-intersection-observer/test-utils'
712
import { MemoryRouter, Route } from 'react-router-dom'
813

@@ -61,12 +66,21 @@ const mockOpenSeatsTaken = {
6166
const queryClient = new QueryClient({
6267
defaultOptions: { queries: { retry: false, cacheTime: Infinity } },
6368
})
69+
70+
const queryClientV5 = new QueryClientV5({
71+
defaultOptions: { queries: { retry: false, cacheTime: Infinity } },
72+
})
73+
6474
const wrapper = ({ children }) => (
65-
<QueryClientProvider client={queryClient}>
66-
<MemoryRouter initialEntries={['/admin/gh/members']}>
67-
<Route path="/admin/:provider/members">{children}</Route>
68-
</MemoryRouter>
69-
</QueryClientProvider>
75+
<QueryClientProviderV5 client={queryClientV5}>
76+
<QueryClientProvider client={queryClient}>
77+
<MemoryRouter initialEntries={['/admin/gh/members']}>
78+
<Route path="/admin/:provider/members">
79+
<Suspense fallback={<div>Loading</div>}>{children}</Suspense>
80+
</Route>
81+
</MemoryRouter>
82+
</QueryClientProvider>
83+
</QueryClientProviderV5>
7084
)
7185

7286
const server = setupServer()
@@ -75,8 +89,9 @@ beforeAll(() => {
7589
})
7690

7791
beforeEach(() => {
78-
server.resetHandlers()
7992
queryClient.clear()
93+
queryClientV5.clear()
94+
server.resetHandlers()
8095
})
8196

8297
afterAll(() => {

0 commit comments

Comments
 (0)