|
2 | 2 | import BreweriesTable from '$lib/components/BreweriesTable.svelte';
|
3 | 3 | import BreweryCard from '$lib/components/BreweryCard.svelte';
|
4 | 4 | import BrewerySearchForm from '$lib/components/BrewerySearchForm.svelte';
|
| 5 | + import SearchPagination from '$lib/components/SearchPagination.svelte'; |
5 | 6 | import { goto } from '$app/navigation';
|
6 | 7 | import {
|
7 | 8 | getBreweries,
|
8 | 9 | getLoading,
|
9 | 10 | getError,
|
10 | 11 | resetSearch,
|
11 | 12 | initializeStore,
|
12 |
| - getHasBreweries, |
13 | 13 | getHasNextPage,
|
14 | 14 | getHasPreviousPage,
|
15 | 15 | getCurrentPage,
|
| 16 | + getItemsPerPage, |
| 17 | + getTotalBreweries, |
16 | 18 | getTotalPages,
|
17 | 19 | getSearchQuery,
|
18 | 20 | } from '$lib/stores/breweries.svelte';
|
|
76 | 78 | {#if getSearchQuery()}
|
77 | 79 | <div class="mb-6">
|
78 | 80 | <p class="text-gray-600">
|
79 |
| - Found {getBreweries().length} breweries matching "{getSearchQuery()}" |
| 81 | + {(getCurrentPage() - 1) * getItemsPerPage() + 1} |
| 82 | + - {Math.min( |
| 83 | + getCurrentPage() * getItemsPerPage(), |
| 84 | + getTotalBreweries() |
| 85 | + )} |
| 86 | + of {getTotalBreweries()} breweries (page {getCurrentPage()} of {getTotalPages()}) |
80 | 87 | </p>
|
81 | 88 | </div>
|
82 | 89 | {/if}
|
83 | 90 |
|
| 91 | + <SearchPagination |
| 92 | + currentPage={getCurrentPage()} |
| 93 | + totalPages={getTotalPages()} |
| 94 | + hasPrevious={getHasPreviousPage()} |
| 95 | + hasNext={getHasNextPage()} |
| 96 | + onPageChange={handlePageChange} |
| 97 | + /> |
| 98 | + |
84 | 99 | <!-- Mobile view: Card layout -->
|
85 | 100 | <div class="grid grid-cols-1 gap-6 mt-6 md:hidden">
|
86 | 101 | {#each getBreweries() as brewery}
|
|
103 | 118 | </div>
|
104 | 119 | </div>
|
105 | 120 |
|
106 |
| - <!-- Pagination Controls --> |
107 |
| - {#if getTotalPages() > 1} |
108 |
| - <div class="flex justify-center mt-8 space-x-2"> |
109 |
| - <button |
110 |
| - class="px-4 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed" |
111 |
| - disabled={!getHasPreviousPage()} |
112 |
| - onclick={() => handlePageChange(getCurrentPage() - 1)} |
113 |
| - > |
114 |
| - Previous |
115 |
| - </button> |
116 |
| - |
117 |
| - <div class="flex space-x-1"> |
118 |
| - {#each Array(Math.min(getTotalPages(), 10)) as _, i} |
119 |
| - {@const pageNum = i + 1} |
120 |
| - <button |
121 |
| - class="px-4 py-2 border rounded-md shadow-sm text-sm font-medium {pageNum === |
122 |
| - getCurrentPage() |
123 |
| - ? 'bg-amber-600 text-white border-amber-600' |
124 |
| - : 'border-gray-300 text-gray-700 bg-white hover:bg-gray-50'}" |
125 |
| - onclick={() => handlePageChange(pageNum)} |
126 |
| - > |
127 |
| - {pageNum} |
128 |
| - </button> |
129 |
| - {/each} |
130 |
| - </div> |
131 |
| - |
132 |
| - <button |
133 |
| - class="px-4 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed" |
134 |
| - disabled={!getHasNextPage()} |
135 |
| - onclick={() => handlePageChange(getCurrentPage() + 1)} |
136 |
| - > |
137 |
| - Next |
138 |
| - </button> |
139 |
| - </div> |
140 |
| - {/if} |
| 121 | + <SearchPagination |
| 122 | + currentPage={getCurrentPage()} |
| 123 | + totalPages={getTotalPages()} |
| 124 | + hasPrevious={getHasPreviousPage()} |
| 125 | + hasNext={getHasNextPage()} |
| 126 | + onPageChange={handlePageChange} |
| 127 | + /> |
141 | 128 | {:else if getSearchQuery()}
|
142 | 129 | <div class="text-center py-12">
|
143 | 130 | <p class="text-gray-500">
|
|
0 commit comments