Skip to content

Commit ab22a88

Browse files
committed
pagination changes
1 parent 0d9ef4c commit ab22a88

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

src/Common/Hooks/useStateFilters/types.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,18 @@ import { UseUrlFiltersProps, UseUrlFiltersReturnType } from '../useUrlFilters'
1919
export interface UseStateFiltersProps<T> extends Pick<UseUrlFiltersProps<T, never>, 'initialSortKey'> {}
2020

2121
export interface UseStateFiltersReturnType<T>
22-
extends Pick<UseUrlFiltersReturnType<T>, 'sortBy' | 'sortOrder' | 'handleSorting' | 'clearFilters'> {}
22+
extends Pick<
23+
UseUrlFiltersReturnType<T>,
24+
'sortBy' | 'sortOrder' | 'handleSorting' | 'clearFilters' | 'changePage' | 'changePageSize'
25+
> {
26+
/*
27+
* Handler for resetting the pagination to the initial state
28+
*/
29+
resetPagination: () => void
30+
}
31+
32+
export interface PaginationType {
33+
pageSize: number
34+
offset: number
35+
size: number
36+
}

src/Common/Hooks/useStateFilters/useStateFilters.tsx

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
*/
1616

1717
import { useState } from 'react'
18-
import { SortingOrder } from '../../Constants'
19-
import { UseStateFiltersProps, UseStateFiltersReturnType } from './types'
18+
import { DEFAULT_BASE_PAGE_SIZE, SortingOrder } from '../../Constants'
19+
import { PaginationType, UseStateFiltersProps, UseStateFiltersReturnType } from './types'
2020

2121
/**
2222
* Generic hook for implementing state based pagination, search, sorting.
@@ -38,9 +38,30 @@ const useStateFilters = <T = string,>({
3838
sortOrder: SortingOrder.ASC,
3939
sortBy: initialSortKey,
4040
})
41-
4241
const { sortBy, sortOrder } = sortingConfig
4342

43+
const [pagination, setPagination] = useState<PaginationType>({
44+
pageSize: DEFAULT_BASE_PAGE_SIZE,
45+
offset: 0,
46+
size: 0,
47+
})
48+
49+
const changePage = (pageNo: number): void => {
50+
const offset = pagination.pageSize * (pageNo - 1)
51+
setPagination({
52+
...pagination,
53+
offset,
54+
})
55+
}
56+
57+
const changePageSize = (_pageSize: number): void => {
58+
setPagination({
59+
...pagination,
60+
pageSize: _pageSize,
61+
offset: 0,
62+
})
63+
}
64+
4465
const handleSorting = (_sortBy: T) => {
4566
let order: SortingOrder
4667

@@ -64,10 +85,22 @@ const useStateFilters = <T = string,>({
6485
})
6586
}
6687

88+
const resetPagination = () => {
89+
setPagination({
90+
pageSize: DEFAULT_BASE_PAGE_SIZE,
91+
offset: 0,
92+
size: 0,
93+
})
94+
}
95+
6796
return {
6897
...sortingConfig,
6998
handleSorting,
7099
clearFilters,
100+
...pagination,
101+
changePage,
102+
changePageSize,
103+
resetPagination,
71104
}
72105
}
73106

0 commit comments

Comments
 (0)