diff --git a/apps/react-vite/src/app/router.tsx b/apps/react-vite/src/app/router.tsx index 713d54d1..2434612a 100644 --- a/apps/react-vite/src/app/router.tsx +++ b/apps/react-vite/src/app/router.tsx @@ -49,11 +49,11 @@ export const createAppRouter = (queryClient: QueryClient) => ); return { Component: DiscussionsRoute }; }, - loader: async () => { + loader: async (args: LoaderFunctionArgs) => { const { discussionsLoader } = await import( './routes/app/discussions/discussions' ); - return discussionsLoader(queryClient)(); + return discussionsLoader(queryClient)(args); }, }, { diff --git a/apps/react-vite/src/app/routes/app/discussions/discussion.tsx b/apps/react-vite/src/app/routes/app/discussions/discussion.tsx index 2cc4a5bf..db111d9e 100644 --- a/apps/react-vite/src/app/routes/app/discussions/discussion.tsx +++ b/apps/react-vite/src/app/routes/app/discussions/discussion.tsx @@ -4,7 +4,7 @@ import { useParams, LoaderFunctionArgs } from 'react-router-dom'; import { ContentLayout } from '@/components/layouts'; import { Spinner } from '@/components/ui/spinner'; -import { getCommentsQueryOptions } from '@/features/comments/api/get-comments'; +import { getInfiniteCommentsQueryOptions } from '@/features/comments/api/get-comments'; import { Comments } from '@/features/comments/components/comments'; import { useDiscussion, @@ -18,13 +18,13 @@ export const discussionLoader = const discussionId = params.discussionId as string; const discussionQuery = getDiscussionQueryOptions(discussionId); - const commentsQuery = getCommentsQueryOptions(discussionId); + const commentsQuery = getInfiniteCommentsQueryOptions(discussionId); const promises = [ queryClient.getQueryData(discussionQuery.queryKey) ?? (await queryClient.fetchQuery(discussionQuery)), queryClient.getQueryData(commentsQuery.queryKey) ?? - (await queryClient.fetchQuery(commentsQuery)), + (await queryClient.fetchInfiniteQuery(commentsQuery)), ] as const; const [discussion, comments] = await Promise.all(promises); @@ -50,11 +50,13 @@ export const DiscussionRoute = () => { ); } - if (!discussionQuery.data) return null; + const discussion = discussionQuery.data?.data; + + if (!discussion) return null; return ( <> - +
async () => { - const query = getDiscussionsQueryOptions(); +export const discussionsLoader = + (queryClient: QueryClient) => + async ({ request }: LoaderFunctionArgs) => { + const url = new URL(request.url); - return ( - queryClient.getQueryData(query.queryKey) ?? - (await queryClient.fetchQuery(query)) - ); -}; + const page = Number(url.searchParams.get('page') || 1); + + const query = getDiscussionsQueryOptions({ page }); + + return ( + queryClient.getQueryData(query.queryKey) ?? + (await queryClient.fetchQuery(query)) + ); + }; export const DiscussionsRoute = () => { const queryClient = useQueryClient(); @@ -26,7 +33,9 @@ export const DiscussionsRoute = () => { { // Prefetch the comments data when the user hovers over the link in the list - queryClient.prefetchQuery(getCommentsQueryOptions(id)); + queryClient.prefetchInfiniteQuery( + getInfiniteCommentsQueryOptions(id), + ); }} />
diff --git a/apps/react-vite/src/app/routes/auth/register.tsx b/apps/react-vite/src/app/routes/auth/register.tsx index 0646c9ab..74cd7bb2 100644 --- a/apps/react-vite/src/app/routes/auth/register.tsx +++ b/apps/react-vite/src/app/routes/auth/register.tsx @@ -27,7 +27,7 @@ export const RegisterRoute = () => { } chooseTeam={chooseTeam} setChooseTeam={() => setChooseTeam(!chooseTeam)} - teams={teamsQuery.data} + teams={teamsQuery.data?.data} /> ); diff --git a/apps/react-vite/src/components/ui/table/pagination.tsx b/apps/react-vite/src/components/ui/table/pagination.tsx new file mode 100644 index 00000000..5ea63b5d --- /dev/null +++ b/apps/react-vite/src/components/ui/table/pagination.tsx @@ -0,0 +1,188 @@ +import { + ChevronLeftIcon, + ChevronRightIcon, + DotsHorizontalIcon, +} from '@radix-ui/react-icons'; +import * as React from 'react'; + +import { ButtonProps, buttonVariants } from '@/components/ui/button'; +import { cn } from '@/utils/cn'; + +import { Link } from '../link'; + +const Pagination = ({ className, ...props }: React.ComponentProps<'nav'>) => ( +