Skip to content

Commit 8695c89

Browse files
committed
scale pageNo to keep the first row in focus
1 parent 8f199d3 commit 8695c89

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

src/components/Pagination.jsx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { component$, useStylesScoped$, $, useComputed$ } from '@builder.io/qwik';
1+
import { component$, useSignal, useStylesScoped$, $, useComputed$ } from '@builder.io/qwik';
22

33

44

@@ -13,15 +13,6 @@ export const Pagination = component$((props) => {
1313
return Math.ceil((props.totalPosts.value / props.postPerPage.value)) || 1;
1414
});
1515

16-
const changePosts = $((e) => {
17-
props.postPerPage.value = e.target.value ;
18-
props.postPerPageSelectedIndex.value = props.postPerPageValues.indexOf(props.postPerPage.value);
19-
})
20-
21-
const changePageNo = $((e) => {
22-
props.pageNo.value = e.target.value ;
23-
})
24-
2516
const decPage = $(() => {
2617
if (props.pageNo.value > 1) props.pageNo.value--;
2718
})
@@ -38,20 +29,35 @@ export const Pagination = component$((props) => {
3829
if(props.pageNo.value !== totalPage.value) props.pageNo.value = totalPage.value;
3930
})
4031

32+
const postPerPageLast = useSignal(props.postPerPage.value);
33+
34+
const postPerPageChange = $(() => {
35+
// scale pageNo to keep the first row in focus
36+
const firstRowIdx = postPerPageLast.value * (props.pageNo.value - 1);
37+
const totalPage2 = Math.ceil((props.totalPosts.value / props.postPerPage.value)) || 1;
38+
const pageNo2 = Math.floor(Math.min(totalPage2, (firstRowIdx / props.postPerPage.value) + 1));
39+
//console.log(`postPerPage: ${postPerPageLast.value} -> ${props.postPerPage.value}`);
40+
//console.log(`totalPage: ${totalPage.value} -> ${totalPage2}`);
41+
//console.log(`firstRowIdx: ${firstRowIdx}`);
42+
//console.log(`pageNo: ${props.pageNo.value} -> ${pageNo2}`);
43+
props.pageNo.value = pageNo2;
44+
postPerPageLast.value = props.postPerPage.value;
45+
});
46+
4147
return (
4248
<div class='page-cont'>
4349

4450
<div class='post-select'>
4551
<div>Rows per page </div>
46-
<select bind:value={props.postPerPage}>
47-
{props.postPerPageValues.map(postPerPage => (
48-
<option selected={postPerPage == props.postPerPage.value}>{postPerPage}</option>
52+
<select bind:value={props.postPerPage} onChange$={postPerPageChange}>
53+
{props.postPerPageValues.map((postPerPage, idx) => (
54+
<option key={idx} selected={postPerPage == props.postPerPage.value}>{postPerPage}</option>
4955
))}
5056
</select>
5157
</div>
5258

5359
<div>
54-
<div class='select-page'>Page <input onInput$={changePageNo} value={props.pageNo.value} type='number' min={1} max={totalPage.value} /> of {totalPage.value}</div>
60+
<div class='select-page'>Page <input bind:value={props.pageNo} type='number' min={1} max={totalPage.value} /> of {totalPage.value}</div>
5561
</div>
5662

5763
<div class='btn-cont'>

0 commit comments

Comments
 (0)