mirror of
https://github.com/gosticks/react-table.git
synced 2026-09-17 06:30:19 +00:00
Changing filters resets pagination
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import React from 'react'
|
||||
import { renderHook, act } from '@testing-library/react-hooks'
|
||||
import { render, fireEvent } from '../../../test-utils/react-testing'
|
||||
import { useTable } from '../../hooks/useTable'
|
||||
import { usePagination } from '../usePagination'
|
||||
import { useFilters } from '../useFilters'
|
||||
|
||||
const data = [...new Array(1000)].map((d, i) => ({
|
||||
firstName: `tanner ${i + 1}`,
|
||||
@@ -12,6 +14,43 @@ const data = [...new Array(1000)].map((d, i) => ({
|
||||
progress: 50,
|
||||
}))
|
||||
|
||||
const columns = [
|
||||
{
|
||||
Header: 'Name',
|
||||
columns: [
|
||||
{
|
||||
Header: 'First Name',
|
||||
accessor: 'firstName',
|
||||
},
|
||||
{
|
||||
Header: 'Last Name',
|
||||
accessor: 'lastName',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
Header: 'Info',
|
||||
columns: [
|
||||
{
|
||||
Header: 'Age',
|
||||
accessor: 'age',
|
||||
},
|
||||
{
|
||||
Header: 'Visits',
|
||||
accessor: 'visits',
|
||||
},
|
||||
{
|
||||
Header: 'Status',
|
||||
accessor: 'status',
|
||||
},
|
||||
{
|
||||
Header: 'Profile Progress',
|
||||
accessor: 'progress',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
function Table({ columns, data }) {
|
||||
const {
|
||||
getTableProps,
|
||||
@@ -114,46 +153,6 @@ function Table({ columns, data }) {
|
||||
}
|
||||
|
||||
function App() {
|
||||
const columns = React.useMemo(
|
||||
() => [
|
||||
{
|
||||
Header: 'Name',
|
||||
columns: [
|
||||
{
|
||||
Header: 'First Name',
|
||||
accessor: 'firstName',
|
||||
},
|
||||
{
|
||||
Header: 'Last Name',
|
||||
accessor: 'lastName',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
Header: 'Info',
|
||||
columns: [
|
||||
{
|
||||
Header: 'Age',
|
||||
accessor: 'age',
|
||||
},
|
||||
{
|
||||
Header: 'Visits',
|
||||
accessor: 'visits',
|
||||
},
|
||||
{
|
||||
Header: 'Status',
|
||||
accessor: 'status',
|
||||
},
|
||||
{
|
||||
Header: 'Profile Progress',
|
||||
accessor: 'progress',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
[]
|
||||
)
|
||||
|
||||
return <Table columns={columns} data={data} />
|
||||
}
|
||||
|
||||
@@ -185,3 +184,53 @@ test('renders a paginated table', () => {
|
||||
.reverse()[0].children[0].textContent
|
||||
).toEqual('tanner 30')
|
||||
})
|
||||
|
||||
describe('usePagination', () => {
|
||||
test('renders a paginated table', () => {
|
||||
const rendered = render(<App />)
|
||||
|
||||
expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 21')
|
||||
|
||||
fireEvent.click(rendered.getByText('>'))
|
||||
expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 31')
|
||||
|
||||
fireEvent.click(rendered.getByText('>'))
|
||||
expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 41')
|
||||
|
||||
fireEvent.click(rendered.getByText('>>'))
|
||||
expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 991')
|
||||
|
||||
fireEvent.click(rendered.getByText('<<'))
|
||||
expect(rendered.queryAllByRole('cell')[0].textContent).toEqual('tanner 1')
|
||||
|
||||
fireEvent.change(rendered.getByTestId('page-size-select'), {
|
||||
target: { value: 30 },
|
||||
})
|
||||
|
||||
expect(
|
||||
rendered
|
||||
.queryAllByRole('row')
|
||||
.slice(2)
|
||||
.reverse()[0].children[0].textContent
|
||||
).toEqual('tanner 30')
|
||||
})
|
||||
|
||||
test('changing filters resets pagination', async () => {
|
||||
const { result } = renderHook(() =>
|
||||
useTable(
|
||||
{
|
||||
columns,
|
||||
data,
|
||||
},
|
||||
useFilters,
|
||||
usePagination
|
||||
)
|
||||
)
|
||||
|
||||
act(() => result.current.nextPage())
|
||||
act(() => result.current.nextPage())
|
||||
expect(result.current.state.pageIndex).toEqual(2)
|
||||
act(() => result.current.visibleColumns[0].setFilter('tanner'))
|
||||
expect(result.current.state.pageIndex).toEqual(0)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -89,10 +89,6 @@ function useInstance(instance) {
|
||||
dispatch,
|
||||
data,
|
||||
manualPagination,
|
||||
manualGlobalFilter,
|
||||
manualFilters,
|
||||
manualGroupBy,
|
||||
manualSortBy,
|
||||
} = instance
|
||||
|
||||
ensurePluginOrder(
|
||||
@@ -105,15 +101,16 @@ function useInstance(instance) {
|
||||
|
||||
useMountedLayoutEffect(() => {
|
||||
if (getAutoResetPage()) {
|
||||
console.log('reset')
|
||||
dispatch({ type: actions.resetPage })
|
||||
}
|
||||
}, [
|
||||
dispatch,
|
||||
manualPagination ? null : data,
|
||||
manualGlobalFilter ? null : globalFilter,
|
||||
manualFilters ? null : filters,
|
||||
manualGroupBy ? null : groupBy,
|
||||
manualSortBy ? null : sortBy,
|
||||
globalFilter,
|
||||
filters,
|
||||
groupBy,
|
||||
sortBy,
|
||||
])
|
||||
|
||||
const pageCount = manualPagination
|
||||
|
||||
Reference in New Issue
Block a user