diff --git a/client/src/components/recipe/RecipeList.tsx b/client/src/components/recipe/RecipeList.tsx index cf72f88..31bb7be 100644 --- a/client/src/components/recipe/RecipeList.tsx +++ b/client/src/components/recipe/RecipeList.tsx @@ -10,7 +10,7 @@ export function RecipeList({ recipes }: RecipeListProps) { return (
Fant ikke oppskriften.
} diff --git a/client/src/routes/RecipeListPage.tsx b/client/src/routes/RecipeListPage.tsx index 9db5c1a..85325eb 100644 --- a/client/src/routes/RecipeListPage.tsx +++ b/client/src/routes/RecipeListPage.tsx @@ -1,6 +1,10 @@ import { useSearchParams } from 'react-router'; import { RecipeList } from '../components/recipe/RecipeList'; -import { recipes} from '../mocks/recipes'; +import { useQuery } from '@apollo/client/react'; +import { GET_RECIPES } from '../graphql/recipes'; +import { useState } from 'react'; + +const PAGE_SIZE = 12; // Listen over alle oppskrifter eller søksresultatet // Selve søkefeltet ligger i headeren. Resultatene kobles til senere. @@ -8,12 +12,60 @@ export default function RecipeListPage() { const [searchParams] = useSearchParams(); const query = searchParams.get('q') ?? ''; + const { data, loading, error, fetchMore } = useQuery(GET_RECIPES, { + variables: { page: 1, pageSize: PAGE_SIZE }, + }); + + const [hasMore, setHasMore] = useState(true); + + if (loading && !data) { + returnLaster oppskrifter...
+ } + if(error) { + returnKunne ikke hente oppskriftene. Prøv igjen senere.
+ } + + const recipes = data?.recipes ?? []; + + async function handleLoadMore() { + // Regner ut hvilke side som er neste. + const nextPage = Math.floor(recipes.length / PAGE_SIZE) + 1; + + // Henter neste side + const result = await fetchMore({ + variables: {page: nextPage}, + // Legger de nye oppskriftene etter de gamle + updateQuery: (previous, { fetchMoreResult }) => ({ + recipes: [...previous.recipes, ...fetchMoreResult.recipes], + }), + }); + + // Dersom det er færre enn 12 er det ikke flere oppskrifter igjen. + if ((result.data?.recipes.length ?? 0) < PAGE_SIZE) { + setHasMore(false); + } + } + return ( <>Alt med «{query}»
} -