Files
LivingDexTracker/src/lib/components/Pagination.svelte
T
Josh Creek 3a2c18bbeb fix: repair defects surfaced by gating CI on lint and typecheck
`npm run check` reported 15 errors and `npm run lint` 20, all pre-existing, so
neither gate could pass. Fixing them turned up three real bugs:

- SignOut destructured `{ error }` off `.then(() => {})`, which resolves to
  undefined, so every sign-out threw a TypeError - after the signed-out event had
  already been emitted. Sign-out also left the user on the protected page they
  were on, still showing its content; it now returns them to the home page and
  re-runs the server loads.

- SignUp passed `redirectTo`, which is not a signUp option and was silently
  ignored, so the confirmation link has always used Supabase's configured site
  URL. Documented rather than changed, since pointing it elsewhere needs an
  absolute allow-listed URL.

- The Pokédex page tracked totalRecordsCreated but never passed it to the box
  view, so the "Processed N entries so far" progress message never rendered.

The rest is typing and dead code: cookie callback parameters in hooks.server.ts
and +layout.ts, the untyped supabase props, a query-builder type that made
PostgREST rows untyped downstream, an unused session destructure, and
`while (true)` paging loops rewritten as `for (;;)`.
2026-09-13 17:38:42 +01:00

35 lines
987 B
Svelte

<script lang="ts">
export let currentPage: number;
export let itemsPerPage: number;
export let totalPages: number;
function nextPage() {
currentPage = Math.min(currentPage + 1, totalPages);
}
function previousPage() {
currentPage = Math.max(currentPage - 1, 1);
}
function setItemsPerPage(event: Event) {
itemsPerPage = parseInt((event.target as HTMLSelectElement).value, 10);
}
</script>
<div class="join mb-4">
<button class="join-item btn" on:click={previousPage} disabled={currentPage === 1}>«</button>
<button class="join-item btn">Page {currentPage} of {totalPages}</button>
<button class="join-item btn" on:click={nextPage} disabled={currentPage === totalPages}>»</button>
</div>
<label for="itemsPerPage">Items per page:</label>
<select
id="itemsPerPage"
class="select select-bordered w-full max-w-xs text-black"
on:change={setItemsPerPage}
>
<option value="20">20</option>
<option value="50">50</option>
<option value="100">100</option>
</select>