All files / src/store/features/pagination paginationSlice.ts

66.66% Statements 8/12
100% Branches 0/0
0% Functions 0/4
70% Lines 7/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 461x     1x                       1x                   1x                             1x   1x   1x  
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { RootState } from "../../index.ts";
 
export const PaginationKeys = {
  PAGE: "page",
  LIMIT: "limit",
} as const;
 
type PaginationKeyType = (typeof PaginationKeys)[keyof typeof PaginationKeys];
 
type PaginationType = {
  [PaginationKeys.PAGE]: number;
  [PaginationKeys.LIMIT]: number;
};
 
const initialState: PaginationType = {
  [PaginationKeys.PAGE]: 0,
  [PaginationKeys.LIMIT]: 10,
};
 
type PaginationKeyAction = {
  key: PaginationKeyType;
  value: number;
};
 
const paginationSlice = createSlice({
  name: "pagination",
  initialState,
  reducers: {
    setPaginationKey: (state, action: PayloadAction<PaginationKeyAction>) => {
      state[action.payload.key] = action.payload.value;
    },
    resetPagination: (state) => {
      Object.values(PaginationKeys).forEach(
        (key) => (state[key] = initialState[key]),
      );
    },
  },
});
 
export const { setPaginationKey, resetPagination } = paginationSlice.actions;
 
export default paginationSlice.reducer;
 
export const paginationSelector = (state: RootState) => state.pagination;