reducer.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { Action, LoaderState } from 'redux/interfaces';
  2. export const initialState: LoaderState = {};
  3. // eslint-disable-next-line @typescript-eslint/default-param-last
  4. const reducer = (state = initialState, action: Action): LoaderState => {
  5. const { type } = action;
  6. const splitType = type.split('__');
  7. const requestState = splitType.pop();
  8. const requestName = splitType.join('__');
  9. // not a *__REQUEST / *__SUCCESS / *__FAILURE / *__CANCEL actions, so we ignore them
  10. if (
  11. requestState &&
  12. !['REQUEST', 'SUCCESS', 'FAILURE', 'CANCEL'].includes(requestState)
  13. ) {
  14. return state;
  15. }
  16. switch (requestState) {
  17. case 'REQUEST':
  18. return {
  19. ...state,
  20. [requestName]: 'fetching',
  21. };
  22. case 'SUCCESS':
  23. return {
  24. ...state,
  25. [requestName]: 'fetched',
  26. };
  27. case 'FAILURE':
  28. return {
  29. ...state,
  30. [requestName]: 'errorFetching',
  31. };
  32. case 'CANCEL':
  33. return {
  34. ...state,
  35. [requestName]: 'notFetched',
  36. };
  37. default:
  38. return state;
  39. }
  40. };
  41. export default reducer;