diff --git a/src/pages/CommitDetailPage/Header/HeaderDefault/HeaderDefault.jsx b/src/pages/CommitDetailPage/Header/HeaderDefault/HeaderDefault.jsx index 6d8eb08a41..d9adb34ddd 100644 --- a/src/pages/CommitDetailPage/Header/HeaderDefault/HeaderDefault.jsx +++ b/src/pages/CommitDetailPage/Header/HeaderDefault/HeaderDefault.jsx @@ -1,3 +1,4 @@ +import { useSuspenseQuery as useSuspenseQueryV5 } from '@tanstack/react-queryV5' import { useParams } from 'react-router-dom' import { formatTimeToNow } from 'shared/utils/dates' @@ -7,7 +8,7 @@ import CIStatusLabel from 'ui/CIStatus' import Icon from 'ui/Icon' import TruncatedMessage from 'ui/TruncatedMessage/TruncatedMessage' -import { useCommitHeaderData } from './hooks' +import { CommitHeaderDataQueryOpts } from './queries/CommitHeaderDataQueryOpts' import PullLabel from '../PullLabel' @@ -15,13 +16,14 @@ function HeaderDefault() { const { provider, owner, repo, commit: commitSha } = useParams() const shortSHA = commitSha?.slice(0, 7) - const { data: headerData } = useCommitHeaderData({ - provider, - owner, - repo, - commitId: commitSha, - }) - + const { data: headerData } = useSuspenseQueryV5( + CommitHeaderDataQueryOpts({ + provider, + owner, + repo, + commitId: commitSha, + }) + ) const providerPullUrl = getProviderPullURL({ provider, owner, diff --git a/src/pages/CommitDetailPage/Header/HeaderDefault/HeaderDefault.test.jsx b/src/pages/CommitDetailPage/Header/HeaderDefault/HeaderDefault.test.jsx index 173022a533..d62736af6f 100644 --- a/src/pages/CommitDetailPage/Header/HeaderDefault/HeaderDefault.test.jsx +++ b/src/pages/CommitDetailPage/Header/HeaderDefault/HeaderDefault.test.jsx @@ -1,7 +1,11 @@ -import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { + QueryClientProvider as QueryClientProviderV5, + QueryClient as QueryClientV5, +} from '@tanstack/react-queryV5' import { render, screen, waitFor } from '@testing-library/react' import { graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' +import { Suspense } from 'react' import { MemoryRouter, Route } from 'react-router-dom' import { useTruncation } from 'ui/TruncatedMessage/hooks' @@ -29,22 +33,24 @@ const mockData = (pullId = null) => ({ }, }) -const queryClient = new QueryClient({ +const queryClientV5 = new QueryClientV5({ defaultOptions: { queries: { retry: false } }, }) const server = setupServer() const wrapper = ({ children }) => ( - + - {children} + + Loading

}>{children}
+
-
+ ) beforeAll(() => server.listen()) afterEach(() => { - queryClient.clear() + queryClientV5.clear() server.resetHandlers() }) afterAll(() => server.close()) @@ -117,8 +123,8 @@ describe('HeaderDefault', () => { it('does not render the pull label', async () => { render(, { wrapper }) - await waitFor(() => queryClient.isFetching) - await waitFor(() => !queryClient.isFetching) + await waitFor(() => queryClientV5.isFetching) + await waitFor(() => !queryClientV5.isFetching) const pullIcon = screen.queryByText(/pull-request-open.svg/) expect(pullIcon).not.toBeInTheDocument() diff --git a/src/pages/CommitDetailPage/Header/HeaderDefault/hooks/index.ts b/src/pages/CommitDetailPage/Header/HeaderDefault/hooks/index.ts deleted file mode 100644 index 68d61e49c7..0000000000 --- a/src/pages/CommitDetailPage/Header/HeaderDefault/hooks/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './useCommitHeaderData' diff --git a/src/pages/CommitDetailPage/Header/HeaderDefault/hooks/useCommitHeaderData.test.tsx b/src/pages/CommitDetailPage/Header/HeaderDefault/queries/CommitHeaderDataQueryOpts.test.tsx similarity index 80% rename from src/pages/CommitDetailPage/Header/HeaderDefault/hooks/useCommitHeaderData.test.tsx rename to src/pages/CommitDetailPage/Header/HeaderDefault/queries/CommitHeaderDataQueryOpts.test.tsx index 03991d7f9e..c462b0463a 100644 --- a/src/pages/CommitDetailPage/Header/HeaderDefault/hooks/useCommitHeaderData.test.tsx +++ b/src/pages/CommitDetailPage/Header/HeaderDefault/queries/CommitHeaderDataQueryOpts.test.tsx @@ -1,9 +1,13 @@ -import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { + QueryClientProvider as QueryClientProviderV5, + QueryClient as QueryClientV5, + useQuery as useQueryV5, +} from '@tanstack/react-queryV5' import { renderHook, waitFor } from '@testing-library/react' import { graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' -import { useCommitHeaderData } from './useCommitHeaderData' +import { CommitHeaderDataQueryOpts } from './CommitHeaderDataQueryOpts' const mockRepository = { owner: { @@ -48,13 +52,15 @@ const mockNullOwner = { const mockUnsuccessfulParseError = {} -const queryClient = new QueryClient({ - defaultOptions: { queries: { retry: false, useErrorBoundary: false } }, +const queryClientV5 = new QueryClientV5({ + defaultOptions: { queries: { retry: false } }, }) const server = setupServer() const wrapper: React.FC = ({ children }) => ( - {children} + + {children} + ) beforeAll(() => { @@ -62,7 +68,7 @@ beforeAll(() => { }) afterEach(() => { - queryClient.clear() + queryClientV5.clear() server.resetHandlers() }) @@ -77,7 +83,7 @@ interface SetupArgs { isNullOwner?: boolean } -describe('useCommitHeaderData', () => { +describe('CommitHeaderDataQueryOpts', () => { function setup({ isNotFoundError = false, isOwnerNotActivatedError = false, @@ -109,12 +115,14 @@ describe('useCommitHeaderData', () => { const { result } = renderHook( () => - useCommitHeaderData({ - provider: 'gh', - owner: 'codecov', - repo: 'test-repo', - commitId: 'id-1', - }), + useQueryV5( + CommitHeaderDataQueryOpts({ + provider: 'gh', + owner: 'codecov', + repo: 'test-repo', + commitId: 'id-1', + }) + ), { wrapper } ) @@ -146,12 +154,14 @@ describe('useCommitHeaderData', () => { const { result } = renderHook( () => - useCommitHeaderData({ - provider: 'gh', - owner: 'codecov', - repo: 'test-repo', - commitId: 'id-1', - }), + useQueryV5( + CommitHeaderDataQueryOpts({ + provider: 'gh', + owner: 'codecov', + repo: 'test-repo', + commitId: 'id-1', + }) + ), { wrapper } ) @@ -185,12 +195,14 @@ describe('useCommitHeaderData', () => { const { result } = renderHook( () => - useCommitHeaderData({ - provider: 'gh', - owner: 'codecov', - repo: 'test-repo', - commitId: 'id-1', - }), + useQueryV5( + CommitHeaderDataQueryOpts({ + provider: 'gh', + owner: 'codecov', + repo: 'test-repo', + commitId: 'id-1', + }) + ), { wrapper } ) @@ -221,12 +233,14 @@ describe('useCommitHeaderData', () => { const { result } = renderHook( () => - useCommitHeaderData({ - provider: 'gh', - owner: 'codecov', - repo: 'test-repo', - commitId: 'id-1', - }), + useQueryV5( + CommitHeaderDataQueryOpts({ + provider: 'gh', + owner: 'codecov', + repo: 'test-repo', + commitId: 'id-1', + }) + ), { wrapper } ) @@ -257,12 +271,14 @@ describe('useCommitHeaderData', () => { const { result } = renderHook( () => - useCommitHeaderData({ - provider: 'gh', - owner: 'codecov', - repo: 'test-repo', - commitId: 'id-1', - }), + useQueryV5( + CommitHeaderDataQueryOpts({ + provider: 'gh', + owner: 'codecov', + repo: 'test-repo', + commitId: 'id-1', + }) + ), { wrapper } ) diff --git a/src/pages/CommitDetailPage/Header/HeaderDefault/hooks/useCommitHeaderData.tsx b/src/pages/CommitDetailPage/Header/HeaderDefault/queries/CommitHeaderDataQueryOpts.tsx similarity index 82% rename from src/pages/CommitDetailPage/Header/HeaderDefault/hooks/useCommitHeaderData.tsx rename to src/pages/CommitDetailPage/Header/HeaderDefault/queries/CommitHeaderDataQueryOpts.tsx index 4671c1bd44..8b21154240 100644 --- a/src/pages/CommitDetailPage/Header/HeaderDefault/hooks/useCommitHeaderData.tsx +++ b/src/pages/CommitDetailPage/Header/HeaderDefault/queries/CommitHeaderDataQueryOpts.tsx @@ -1,4 +1,4 @@ -import { useQuery } from '@tanstack/react-query' +import { queryOptions as queryOptionsV5 } from '@tanstack/react-queryV5' import { z } from 'zod' import { @@ -6,6 +6,7 @@ import { RepoOwnerNotActivatedErrorSchema, } from 'services/repo' import Api from 'shared/api' +import { rejectNetworkError } from 'shared/api/helpers' import A from 'ui/A' const RepositorySchema = z.object({ @@ -76,20 +77,20 @@ const query = ` } ` -interface UseCommitHeaderDataArgs { +interface CommitHeaderDataQueryArgs { provider: string owner: string repo: string commitId: string } -export const useCommitHeaderData = ({ +export const CommitHeaderDataQueryOpts = ({ provider, owner, repo, commitId, -}: UseCommitHeaderDataArgs) => - useQuery({ +}: CommitHeaderDataQueryArgs) => + queryOptionsV5({ queryKey: ['CommitPageHeaderData', provider, owner, repo, commitId, query], queryFn: ({ signal }) => Api.graphql({ @@ -106,23 +107,26 @@ export const useCommitHeaderData = ({ const parsedData = CommitHeaderDataSchema.safeParse(res?.data) if (!parsedData.success) { - return Promise.reject({ + return rejectNetworkError({ status: 404, data: {}, + dev: 'CommitHeaderDataQueryOpts - 404 Failed to parse schema', + error: parsedData.error, }) } const data = parsedData.data if (data?.owner?.repository?.__typename === 'NotFoundError') { - return Promise.reject({ + return rejectNetworkError({ status: 404, data: {}, + dev: 'CommitHeaderDataQueryOpts - 404 Not Found', }) } if (data?.owner?.repository?.__typename === 'OwnerNotActivatedError') { - return Promise.reject({ + return rejectNetworkError({ status: 403, data: { detail: ( @@ -134,6 +138,7 @@ export const useCommitHeaderData = ({

), }, + dev: 'CommitHeaderDataQueryOpts - 403 Owner Not Activated', }) }