diff --git a/src/components/Table/index.tsx b/src/components/Table/index.tsx index 0ade5ed574a4be8a94f0b2e0d65dbb0d483cc90e..6298a6fde833a462691df798cd9747ce370def22 100644 --- a/src/components/Table/index.tsx +++ b/src/components/Table/index.tsx @@ -23,6 +23,7 @@ interface TableProps { searchPlaceholder?: string; maximumData?: number; rowOnClick?: (row: Array) => void; + itemPerPage?: number; } const Click = styled.div` @@ -93,6 +94,7 @@ export default function Table({ onChange = async () => new Promise>>(() => []), maximumData = -1, rowOnClick, + itemPerPage, }: TableProps) { const { colors } = useContext(ThemeContext) || DEFAULT_THEME; const [previousDataTotal, setPreviousDataTotal] = useState(0); @@ -118,18 +120,24 @@ export default function Table({ return; setIsLoading(true); - const newData: Array> = await onChange( - searchValue, - newPageNumber - ); - setIsLoading(false); + await onChange(searchValue, newPageNumber).then((newData) => { + setIsLoading(false); - if (newData.length === 0 || newData[0].length === 0) return; - setPageNumber(newPageNumber); - setPreviousDataTotal( - previousDataTotal + (sign === 1 ? data.length : -newData.length) - ); - setData([...newData]); + if (newData.length === 0 || newData[0].length === 0) return; + setPageNumber(newPageNumber); + setPreviousDataTotal( + previousDataTotal + (sign === 1 ? data.length : -newData.length) + ); + if ( + action === PageAction.Prev && + previousDataTotal + data.length === maximumData + ) { + setPreviousDataTotal( + previousDataTotal - (itemPerPage ? itemPerPage : 10) + ); + } + setData([...newData]); + }); }; const [couldGoBack, couldGoNext] = [ @@ -175,14 +183,14 @@ export default function Table({