=
+ gql`
query GetRecipe($id: ID!) {
- recipe(id: $id) {
- id
- title
- description
- prepTimeMinutes
- servings
- imageUrl
- tags {
- id
- name
- }
- ingredients {
- id
- amount
- unit
- name
- }
- steps{
- id
- order
- instruction
- }
+ recipe(id: $id) {
+ id
+ title
+ description
+ prepTimeMinutes
+ servings
+ imageUrl
+ tags {
+ id
+ name
+ }
+ ingredients {
+ id
+ amount
+ unit
+ name
+ }
+ steps {
+ id
+ order
+ instruction
}
+ }
}
-`
\ No newline at end of file
+ `;
diff --git a/client/src/routes/RecipeListPage.tsx b/client/src/routes/RecipeListPage.tsx
index 85325eb..336d4b9 100644
--- a/client/src/routes/RecipeListPage.tsx
+++ b/client/src/routes/RecipeListPage.tsx
@@ -7,33 +7,42 @@ 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.
+// Selve søkefeltet ligger i headeren
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 },
+ variables: { search: query || undefined, page: 1, pageSize: PAGE_SIZE },
});
const [hasMore, setHasMore] = useState(true);
+ // nullstiller når man søker på noe nytt
+ const [prevQuery, setPrevQuery] = useState(query);
+ if (query !== prevQuery) {
+ setPrevQuery(query);
+ setHasMore(true);
+ }
+
if (loading && !data) {
- return Laster oppskrifter...
+ return Laster oppskrifter...
;
}
- if(error) {
- return Kunne ikke hente oppskriftene. Prøv igjen senere.
+ if (error) {
+ return (
+ Kunne ikke hente oppskriftene. Prøv igjen senere.
+ );
}
const recipes = data?.recipes ?? [];
async function handleLoadMore() {
- // Regner ut hvilke side som er neste.
+ // 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},
+ variables: { page: nextPage },
// Legger de nye oppskriftene etter de gamle
updateQuery: (previous, { fetchMoreResult }) => ({
recipes: [...previous.recipes, ...fetchMoreResult.recipes],
@@ -50,7 +59,12 @@ export default function RecipeListPage() {
<>
Oppskrifter
- {query && Alt med «{query}»
}
+ {query && recipes.length > 0 && Alt med '{query}'
}
+
+ {/* melding hvis søket ikke finner noe */}
+ {query && recipes.length === 0 && (
+ Fant ingen oppskrifter med '{query}'.
+ )}
{/*Knappen vises bare hvis det kan finnes flere oppskrifter og første side er full*/}