FindMyRecipe / src / lib / components / PaginationWrapper.svelte
PaginationWrapper.svelte
Raw
<script>
  import RecipeBannerV2 from '../components/RecipeBannerV2.svelte'
  import RecipePagination from '../components/RecipePagination.svelte'
  import { createEventDispatcher } from 'svelte';
  export let recipes;
  export let tags;
  export let page;
  export let totalPages;
  export let client = false;

  const dispatch = createEventDispatcher();

  function handleChangePage(event) {
    page = event.detail.page;
    dispatch('pageChange', { page: page })
  }

  let itemsPerPage = 6;

  function paginate(items) {
    if (items.length == 0) {
      return [[]]
    }
    const pagination = []
    for (let i = 0; i < items.length; i += itemsPerPage) {
      const chunk = items.slice(i, i + itemsPerPage)
      pagination.push(chunk)
    }
    return pagination
  }

  let recipePaginated = client ? [] : paginate(recipes)
  let tagsPaginated = client ? [] : paginate(tags)
</script>

<div class="flex flex-col justify-center p-8" style="min-height: 70vh;">
  <div class="md:grid-cols-3 grid grid-cols-1 grid-flow-row mb-4">
    <!-- {#each recipesPaginated[page - 1] as recipe, i} -->
    {#if client}
      {#each recipes as recipe, i}
        <RecipeBannerV2
          recipeId={recipe.Id}
          recipeLabel={recipe.Name}
          description={recipe.Description}
          prepminutes={recipe.PrepMinutes}
          tags={tags[i]}
          checkFavorite="false"
        />
      {/each}
    {:else}
      {#each recipePaginated[page - 1] as recipe, i}
        <RecipeBannerV2
          recipeId={recipe.Id}
          recipeLabel={recipe.Name}
          description={recipe.Description}
          prepminutes={recipe.PrepMinutes}
          tags={tagsPaginated[page - 1][i]}
          checkFavorite="false"
        />
      {/each}
    {/if}
  </div>
  <div class="flex flex-grow h-auto"></div>
  <RecipePagination
    page={page}
    totalPages={totalPages}
    on:pageChange={handleChangePage}
  />
</div>