Skip to content
This repository was archived by the owner on Sep 22, 2025. It is now read-only.

Commit cc05cfc

Browse files
committed
Fixed problem with dataloading that caused pages detail screen to hang
1 parent faaa6b4 commit cc05cfc

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

src/queries/pages.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,17 @@ export const pagesQuery = (params:IPageParams) => queryOptions({
1010
// Query for page detail
1111
export const pageDetailQuery = (params:IPageDetailParams) => queryOptions({
1212
queryKey: ['page-detail'],
13-
queryFn: async () => getPageDetail(params),
13+
queryFn: async () => {
14+
const detail = getPageDetail(params);
15+
if (!detail) {
16+
throw new Response('', {
17+
status: 404,
18+
statusText: 'Page Details Not Found',
19+
});
20+
}
21+
22+
return detail;
23+
}
1424
});
1525

1626

src/routes/protected/pages/page-detail.tsx

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import {
55
ExclamationTriangleIcon,
66
ReloadIcon,
77
} from '@radix-ui/react-icons';
8-
import { keepPreviousData, QueryClient, useQuery } from '@tanstack/react-query';
8+
import { keepPreviousData, QueryClient, useQuery, useQueryClient } from '@tanstack/react-query';
99
import {
1010
ColumnDef,
1111
flexRender,
1212
getCoreRowModel,
1313
useReactTable,
1414
} from '@tanstack/react-table';
1515
import { format, formatDistance } from 'date-fns';
16-
import { ActionFunctionArgs, Link, useLoaderData } from 'react-router-dom';
16+
import { ActionFunctionArgs, Link, LoaderFunctionArgs, useLoaderData } from 'react-router-dom';
1717

1818
import { toast } from '~/components/alerts';
1919
import { Button } from '~/components/buttons';
@@ -28,26 +28,37 @@ import {
2828
} from '~/components/tables';
2929
import { pageDetailQuery } from '~/queries/pages';
3030
import { getPageDetail, getScan, IPageScan, sendUrlsToScan } from '~/services';
31+
import { assertNonNull } from '~/utils/safety';
3132

3233
// Initial data on pageload
3334
export const pageDetailLoader =
3435
(queryClient: QueryClient) =>
35-
async ({ params }: ActionFunctionArgs) => {
36-
if (!params.pageId) { throw("Error loading page")};
36+
async ({ params }: LoaderFunctionArgs) => {
37+
assertNonNull(
38+
params.pageId,
39+
'Page ID is missing in the route parameters',
40+
);
3741
const initialPage = await queryClient.ensureQueryData(
3842
pageDetailQuery({ pageId: params.pageId }),
3943
);
40-
return { initialPage };
44+
return { initialPage, pageId: params.pageId };
4145
};
4246

4347
const pageDetail = () => {
4448
// fetch the single page data
45-
const initialPage = useLoaderData() as Awaited<
49+
const queryClient = useQueryClient();
50+
const { initialPage, pageId } = useLoaderData() as Awaited<
4651
ReturnType<ReturnType<typeof pageDetailLoader>>
4752
>;
48-
const [data, setData] = useState(initialPage?.initialPage);
53+
//const [data, setData] = useState(initialPage?.initialPage);
4954
const [isSendingToScan, setIsSendingToScan] = useState(false);
5055

56+
const { data } = useQuery({
57+
...pageDetailQuery({pageId: pageId!}),
58+
initialData: initialPage,
59+
});
60+
61+
5162
// Define the columns
5263
const columns = React.useMemo<ColumnDef<IPageScan>[]>(
5364
() => [
@@ -146,7 +157,8 @@ const pageDetail = () => {
146157
title: 'Success',
147158
description: 'Pages sent to scan!',
148159
});
149-
setData(await getPageDetail({ pageId: data.id})); // refresh the page
160+
queryClient.refetchQueries({ queryKey: ['page-detail']});
161+
//setData(await getPageDetail({ pageId: data.id})); // refresh the page
150162
} else {
151163
toast.error({
152164
title: 'Error',

0 commit comments

Comments
 (0)