1- import React , { useMemo } from 'react'
1+ import React , { useMemo , useState } from 'react'
22import Skeleton from 'react-loading-skeleton'
33import axios from 'axios'
4- import { useQuery } from 'react-query'
4+ import { useQuery } from 'react-query'
55import { useTable , usePagination } from 'react-table'
66
77import './ReactTable.css'
88
9- // const PAGE_SIZE = 10
10-
11- const PeopleTable = ( {
12- columns,
13- } ) => {
9+ const fetchPeople = async ( key , pageIndex ) => {
10+ let peopleList = await axios . get (
11+ `https://swapi.dev/api/people/?page=${ pageIndex + 1 } ` ,
12+ )
13+ return peopleList
14+ }
1415
15- const { data : peopleList , isLoading, } = useQuery ( 'fetchPeople' , fetchPeople )
16+ const PeopleTable = ( { columns } ) => {
17+ const [ pageIndex , setPageIndex ] = useState ( 0 )
18+ const { data : peopleList , isLoading } = useQuery (
19+ [ 'fetchPeople' , pageIndex ] ,
20+ fetchPeople ,
21+ )
1622
1723 const {
1824 getTableProps,
1925 getTableBodyProps,
2026 headerGroups,
2127 page,
2228 prepareRow,
23- canPreviousPage,
24- canNextPage,
25- pageCount,
26- gotoPage,
27- nextPage,
28- previousPage,
2929 pageOptions,
30- state : { pageIndex, pageSize } ,
3130 } = useTable (
3231 {
3332 columns,
@@ -38,6 +37,16 @@ const PeopleTable = ({
3837 usePagination ,
3938 )
4039
40+ const previousPagePossible = ( ) => {
41+ if ( pageIndex === 0 ) return true
42+ return false
43+ }
44+
45+ const nextPagePossible = ( ) => {
46+ if ( pageIndex === pageOptions . length ) return true
47+ return false
48+ }
49+
4150 return (
4251 < div className = 'people-table' >
4352 < table { ...getTableProps ( ) } >
@@ -81,25 +90,16 @@ const PeopleTable = ({
8190 { ! isLoading && (
8291 < div className = 'pagination' >
8392 < button
84- disabled = { ! canPreviousPage }
85- onClick = { ( ) => gotoPage ( 0 ) }
86- >
87- { '<<' }
88- </ button > { ' ' }
89- < button
90- disabled = { ! canPreviousPage }
91- onClick = { ( ) => previousPage ( ) }
93+ disabled = { previousPagePossible ( ) }
94+ onClick = { ( ) => setPageIndex ( i => i - 1 ) }
9295 >
9396 { '<' }
9497 </ button > { ' ' }
95- < button disabled = { ! canNextPage } onClick = { ( ) => nextPage ( ) } >
96- { '>' }
97- </ button > { ' ' }
98- < button
99- disabled = { ! canNextPage }
100- onClick = { ( ) => gotoPage ( pageCount - 1 ) }
98+ < button
99+ disabled = { nextPagePossible ( ) }
100+ onClick = { ( ) => setPageIndex ( i => i + 1 ) }
101101 >
102- { '>> ' }
102+ { '>' }
103103 </ button > { ' ' }
104104 < span >
105105 Page{ ' ' }
@@ -117,13 +117,7 @@ const PeopleTable = ({
117117 )
118118}
119119
120- const fetchPeople = async ( ) => {
121- let peopleList = await axios . get ( `https://swapi.dev/api/people/?page=1` )
122- return peopleList
123- }
124-
125120const ReactTable = ( ) => {
126-
127121 let columns = useMemo (
128122 ( ) => [
129123 {
@@ -156,13 +150,9 @@ const ReactTable = () => {
156150 } ,
157151 ] ,
158152 [ ] ,
159- )
160-
161- return (
162- < PeopleTable
163- columns = { columns }
164- />
165153 )
154+
155+ return < PeopleTable columns = { columns } />
166156}
167157
168158export default ReactTable
0 commit comments