reducer.ts 812 B

1234567891011121314151617181920212223242526272829303132333435
  1. import { Action, LoaderState } from 'redux/interfaces';
  2. export const initialState: LoaderState = {};
  3. const reducer = (state = initialState, action: Action): LoaderState => {
  4. const { type } = action;
  5. const matches = /(.*)__(REQUEST|SUCCESS|FAILURE)$/.exec(type);
  6. // not a *__REQUEST / *__SUCCESS / *__FAILURE actions, so we ignore them
  7. if (!matches) return state;
  8. const [, requestName, requestState] = matches;
  9. switch (requestState) {
  10. case 'REQUEST':
  11. return {
  12. ...state,
  13. [requestName]: 'fetching',
  14. };
  15. case 'SUCCESS':
  16. return {
  17. ...state,
  18. [requestName]: 'fetched',
  19. };
  20. case 'FAILURE':
  21. return {
  22. ...state,
  23. [requestName]: 'errorFetching',
  24. };
  25. default:
  26. return state;
  27. }
  28. };
  29. export default reducer;