reducer.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { Action, TopicMessagesState } from 'redux/interfaces';
  2. import { getType } from 'typesafe-actions';
  3. import * as actions from 'redux/actions';
  4. export const initialState: TopicMessagesState = {
  5. messages: [],
  6. meta: {
  7. bytesConsumed: 0,
  8. elapsedMs: 0,
  9. messagesConsumed: 0,
  10. isCancelled: false,
  11. },
  12. isFetching: false,
  13. };
  14. // eslint-disable-next-line @typescript-eslint/default-param-last
  15. const reducer = (state = initialState, action: Action): TopicMessagesState => {
  16. switch (action.type) {
  17. case getType(actions.addTopicMessage): {
  18. return {
  19. ...state,
  20. messages: [action.payload, ...state.messages],
  21. };
  22. }
  23. case getType(actions.resetTopicMessages):
  24. return initialState;
  25. case getType(actions.updateTopicMessagesPhase):
  26. return {
  27. ...state,
  28. phase: action.payload,
  29. };
  30. case getType(actions.updateTopicMessagesMeta):
  31. return {
  32. ...state,
  33. meta: action.payload,
  34. };
  35. case getType(actions.setTopicMessagesFetchingStatus):
  36. return {
  37. ...state,
  38. isFetching: action.payload,
  39. };
  40. case getType(actions.clearMessagesTopicAction.success):
  41. return {
  42. ...state,
  43. messages: [],
  44. };
  45. default:
  46. return state;
  47. }
  48. };
  49. export default reducer;