|
7 | 7 |
|
8 | 8 | let { lastPage = 1 }: Props = $props(); |
9 | 9 |
|
10 | | - let pages: number[] = $state([]); |
11 | | - let truncatedPages: number[] = $state([]); |
12 | | -
|
13 | 10 | const maxPages = 7; |
14 | | - let truncated = $state(false); |
| 11 | + let truncated = $derived(lastPage > maxPages); |
15 | 12 |
|
16 | | - function generatePages() { |
17 | | - pages = []; |
18 | | - truncatedPages = []; |
19 | | - truncated = lastPage > maxPages; |
| 13 | + let pages = $derived.by(() => { |
| 14 | + if (truncated) return []; |
| 15 | + return Array.from({ length: lastPage }, (_, i) => i + 1); |
| 16 | + }); |
20 | 17 |
|
21 | | - if (truncated) { |
22 | | - const startIndex = Math.max($currentPage - Math.floor(maxPages / 2), 1); |
23 | | - const endIndex = Math.min(startIndex + maxPages - 1, lastPage); |
| 18 | + let truncatedPages = $derived.by(() => { |
| 19 | + if (!truncated) return []; |
| 20 | + const startIndex = Math.max($currentPage - Math.floor(maxPages / 2), 1); |
| 21 | + const endIndex = Math.min(startIndex + maxPages - 1, lastPage); |
| 22 | + return Array.from({ length: endIndex - startIndex + 1 }, (_, i) => startIndex + i); |
| 23 | + }); |
24 | 24 |
|
25 | | - for (let i = startIndex; i <= endIndex; i++) { |
26 | | - truncatedPages.push(i); |
27 | | - } |
28 | | - } else { |
29 | | - for (let i = 1; i <= lastPage; i++) { |
30 | | - pages.push(i); |
31 | | - } |
| 25 | + // Clamp current page if lastPage shrinks (e.g. after filtering search results) |
| 26 | + $effect(() => { |
| 27 | + if ($currentPage > lastPage) { |
| 28 | + $currentPage = lastPage; |
32 | 29 | } |
33 | | - } |
| 30 | + }); |
34 | 31 |
|
35 | 32 | function handlePageChange(page) { |
36 | 33 | $currentPage = page; |
37 | | - generatePages(); |
38 | 34 | } |
39 | 35 |
|
40 | 36 | function handleKeydown(e, page) { |
|
43 | 39 | handlePageChange(page); |
44 | 40 | } |
45 | 41 | } |
46 | | -
|
47 | | - generatePages(); |
48 | 42 | </script> |
49 | 43 |
|
50 | 44 | <div class="d-flex justify-content-center mt-2"> |
|
0 commit comments