Skip to content

Commit 7c90ee8

Browse files
committed
feat(app): added paginator logic + emitters
1 parent 826a751 commit 7c90ee8

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

pages/index.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@ type Props = {
1717
total: number;
1818
skip: number;
1919
limit: number;
20+
page?: number;
2021
}
2122

2223
const cards = (entries) => entries.map((entry, index) => (<Card info={entry} key={index}/>));
2324

25+
const handlePaginationChange = (event) => {
26+
console.log(event)
27+
};
28+
2429
const IndexPage: NextPage = (props: Props) => {
30+
const page = !!props.page ? props.page : 1;
2531
const entries = props.entries;
2632
const tags = props.tags || [];
2733
const total = props.total;
@@ -41,7 +47,7 @@ const IndexPage: NextPage = (props: Props) => {
4147
</div>
4248
</div>
4349
<div className="pagination">
44-
<Paginator range={range} skip={skip}/>
50+
<Paginator handlePaginationChange={handlePaginationChange} range={range} skip={skip}/>
4551
</div>
4652
</div>
4753
<div className="sidenav">
@@ -68,11 +74,12 @@ const IndexPage: NextPage = (props: Props) => {
6874
)
6975
};
7076

71-
IndexPage.getInitialProps = async ({req}) => {
77+
IndexPage.getInitialProps = async ({req, query}) => {
78+
const {page} = query;
7279
const {entries, total, skip, limit} = await getBlogPostEntries({limit: 1});
7380
const allTags = entries.map(entry => entry.tags);
7481
const tags = Array.from(new Set(allTags.flat(1)));
75-
return {entries, tags, total, skip, limit};
82+
return {page, entries, tags, total, skip, limit};
7683
};
7784

7885
export default IndexPage;

shared/components/paginator/index.tsx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,36 @@
1-
import React, { FunctionComponent, Fragment } from 'react';
2-
import Link from 'next/link';
1+
import React, { FunctionComponent, Fragment, useState } from 'react';
32

43
type Props = {
54
skip?: number;
65
range: number[];
6+
handlePaginationChange: Function;
77
}
8-
const Paginator: FunctionComponent<Props> = ({skip, range}) => {
8+
const Paginator: FunctionComponent<Props> = ({skip, range, handlePaginationChange}) => {
99
skip = !!skip ? skip : 0;
10-
console.log(skip);
11-
console.log(range);
10+
11+
const [page, setPageNumber] = useState(1);
12+
13+
handlePaginationChange(page);
14+
1215
return (
1316
<Fragment>
1417
<div className="paginator">
15-
{range.length > 1 ? <span className="previous">{'<'}</span> : null}
18+
{range.length > 1 ?
19+
<span className="previous"
20+
onClick={() => page <= 1 ? null : setPageNumber(page - 1)}>{'<'}</span> : null}
1621
{range.map((num, index) => {
17-
return (<span className="page-number" key={index}>{num}</span>)
22+
return (<span className={`page-number ${num === page ? 'selected' : ''}`}
23+
key={index} onClick={() => setPageNumber(num)}>{num}</span>)
1824
})}
19-
{range.length > 1 ? <span className="next">{'>'}</span> : null}
25+
{range.length > 1 ? <span className="next"
26+
onClick={() => page >= range[range.length - 1] ? null
27+
: setPageNumber(page + 1)}>{'>'}</span> : null}
2028
</div>
2129
<style jsx>{`
2230
.paginator {display: flex; flex-flow: row nowrap; justify-content: center;};
2331
span { margin: 0 1rem; };
2432
span:hover { cursor: pointer };
33+
.page-number.selected {};
2534
`}</style>
2635
</Fragment>
2736
)

0 commit comments

Comments
 (0)