diff --git a/resources/assets/src/components/Pagination.tsx b/resources/assets/src/components/Pagination.tsx index 897ab3de..62208c2c 100644 --- a/resources/assets/src/components/Pagination.tsx +++ b/resources/assets/src/components/Pagination.tsx @@ -12,7 +12,7 @@ export const labels = { next: '›', } -const Pagination: React.FC = props => { +const Pagination: React.FC = (props) => { const { page, totalPages, onChange } = props if (totalPages < 1) { @@ -34,45 +34,53 @@ const Pagination: React.FC = props => { {i + 1} )) - ) : page < 3 || totalPages - page < 2 ? ( - <> - {[1, 2].map(p => ( - onChange(p)} - > - {p} - - ))} - ... - {[totalPages - 1, totalPages].map(p => ( - onChange(p)} - > - {p} - - ))} - ) : ( <> - onChange(1)}>1 + {page < 4 ? ( + [1, 2, 3, 4].map((n) => ( + onChange(n)} + > + {n} + + )) + ) : ( + onChange(1)}>1 + )} ... - {[page - 1, page, page + 1].map(p => ( - onChange(p)} - > - {p} + {page > 3 && page < totalPages - 2 && ( + <> + {[page - 1, page, page + 1].map((n) => ( + onChange(n)} + > + {n} + + ))} + ... + + )} + {totalPages - page < 3 ? ( + [totalPages - 3, totalPages - 2, totalPages - 1, totalPages].map( + (n) => ( + onChange(n)} + > + {n} + + ), + ) + ) : ( + onChange(totalPages)}> + {totalPages} - ))} - ... - onChange(totalPages)}> - {totalPages} - + )} )} { }) describe('pages count greater than or equals to 8', () => { - it('edge', () => { + it('left edge', () => { const mock = jest.fn() const { getByText, queryByText } = render( , @@ -90,31 +90,38 @@ describe('middle pages', () => { expect(mock).toBeCalledWith(1) expect(queryByText('1')).toBeInTheDocument() expect(queryByText('2')).toBeInTheDocument() + expect(queryByText('3')).toBeInTheDocument() expect(queryByText('...')).toBeInTheDocument() - expect(queryByText('9')).toBeInTheDocument() expect(queryByText('10')).toBeInTheDocument() fireEvent.click(getByText('2')) expect(mock).toBeCalledWith(2) expect(queryByText('1')).toBeInTheDocument() expect(queryByText('2')).toBeInTheDocument() + expect(queryByText('3')).toBeInTheDocument() expect(queryByText('...')).toBeInTheDocument() + expect(queryByText('10')).toBeInTheDocument() + }) + + it('right edge', () => { + const mock = jest.fn() + const { getByText, queryByText } = render( + , + ) + + fireEvent.click(getByText('10')) + expect(mock).toBeCalledWith(10) + expect(queryByText('1')).toBeInTheDocument() + expect(queryByText('...')).toBeInTheDocument() + expect(queryByText('8')).toBeInTheDocument() expect(queryByText('9')).toBeInTheDocument() expect(queryByText('10')).toBeInTheDocument() fireEvent.click(getByText('9')) expect(mock).toBeCalledWith(9) expect(queryByText('1')).toBeInTheDocument() - expect(queryByText('2')).toBeInTheDocument() - expect(queryByText('...')).toBeInTheDocument() - expect(queryByText('9')).toBeInTheDocument() - expect(queryByText('10')).toBeInTheDocument() - - fireEvent.click(getByText('10')) - expect(mock).toBeCalledWith(10) - expect(queryByText('1')).toBeInTheDocument() - expect(queryByText('2')).toBeInTheDocument() expect(queryByText('...')).toBeInTheDocument() + expect(queryByText('8')).toBeInTheDocument() expect(queryByText('9')).toBeInTheDocument() expect(queryByText('10')).toBeInTheDocument() })