Skip to content

Commit b7ec40d

Browse files
add inMemoryPagingation
1 parent 0a2d57c commit b7ec40d

3 files changed

Lines changed: 69 additions & 0 deletions

File tree

src/inMemoryPagination.tsx

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { useState, useCallback, useMemo } from 'react'
2+
import { UseSearchAndPagination } from './types'
3+
4+
const useSearchAndPaginationInMemory = (): UseSearchAndPagination => {
5+
const initialState = useMemo(
6+
() => ({
7+
page: 0,
8+
size: 15,
9+
searchQuery: '',
10+
}),
11+
[]
12+
)
13+
14+
const [state, setState] = useState(initialState)
15+
16+
const search = useCallback((query: string) => {
17+
setState((currentState) => {
18+
return {
19+
...currentState,
20+
page: 0,
21+
searchQuery: query,
22+
}
23+
})
24+
}, [])
25+
26+
const clear = useCallback(() => {
27+
setState(() => {
28+
return initialState
29+
})
30+
}, [initialState])
31+
32+
const setPage = useCallback((page: number) => {
33+
setState((currentState) => {
34+
return {
35+
...currentState,
36+
page,
37+
}
38+
})
39+
}, [])
40+
41+
return {
42+
search: state.searchQuery,
43+
searchActions: {
44+
search,
45+
clear,
46+
},
47+
page: state.page,
48+
size: state.size,
49+
paginationActions: { setPage },
50+
}
51+
}
52+
53+
export { useSearchAndPaginationInMemory }

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './inMemoryPagination'

src/types.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export type UseSearchQuery = {
2+
search: string
3+
searchActions: { search: (query: string) => void; clear: () => void }
4+
}
5+
6+
export type UsePagination = {
7+
page: number
8+
size: number
9+
} & PaginationActions
10+
11+
export type PaginationActions = {
12+
paginationActions: { setPage: (page: number) => void }
13+
}
14+
15+
export type UseSearchAndPagination = UseSearchQuery & UsePagination

0 commit comments

Comments
 (0)