Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
tannerlinsley committed May 12, 2020
2 parents 40460db + 2d7803f commit 88031d8
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
60 changes: 60 additions & 0 deletions src/tests/usePaginatedQuery.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,64 @@ describe('usePaginatedQuery', () => {
expect(rendered.getByTestId('status').textContent).toBe('success')
expect(rendered.getByTestId('status').textContent).not.toBe('loading')
})

it('should clear resolvedData data when query is falsy', async () => {
function Page() {
const [searchTerm, setSearchTerm] = React.useState('')
const [page, setPage] = React.useState(1)
const { resolvedData = 'undefined' } = usePaginatedQuery(
searchTerm && ['data', searchTerm, page],
async (queryName, searchTerm, page) => {
await sleep(1)
return `${searchTerm} ${page}`
}
)

return (
<div>
<h1 data-testid="title">Data {resolvedData}</h1>
<input
name="searchTerm"
placeholder="Enter a search term"
value={searchTerm}
onChange={e => setSearchTerm(e.currentTarget.value)}
/>
<button
onClick={() => {
setSearchTerm('')
setPage(1)
}}
>
clear
</button>
<button onClick={() => setPage(page + 1)}>next</button>
</div>
)
}

const rendered = render(<Page />)

fireEvent.change(rendered.getByPlaceholderText('Enter a search term'), {
target: { value: 'first-search' },
})
rendered.getByText('Data undefined')
await waitForElement(() => rendered.getByText('Data first-search 1'))

fireEvent.click(rendered.getByText('next'))
rendered.getByText('Data first-search 1')
await waitForElement(() => rendered.getByText('Data first-search 2'))

fireEvent.click(rendered.getByText('clear'))
rendered.getByText('Data undefined')

fireEvent.change(rendered.getByPlaceholderText('Enter a search term'), {
target: { value: 'second-search' },
})
rendered.getByText('Data undefined')
await waitForElement(() => rendered.getByText('Data second-search 1'))

fireEvent.click(rendered.getByText('next'))
rendered.getByText('Data second-search 1')
await waitForElement(() => rendered.getByText('Data second-search 2'))
})
})
4 changes: 4 additions & 0 deletions src/usePaginatedQuery.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ export function usePaginatedQuery(...args) {

const lastDataRef = React.useRef()

if (!queryKey) {
lastDataRef.current = undefined
}

// If latestData is set, don't use initialData
if (typeof lastDataRef.current !== 'undefined') {
delete config.initialData
Expand Down

0 comments on commit 88031d8

Please sign in to comment.