reducer.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { Action, TopicsState } from 'redux/interfaces';
  2. import { getType } from 'typesafe-actions';
  3. import * as actions from 'redux/actions';
  4. import * as _ from 'lodash';
  5. import { SortOrder, TopicColumnsToSort } from 'generated-sources';
  6. export const initialState: TopicsState = {
  7. byName: {},
  8. allNames: [],
  9. totalPages: 1,
  10. search: '',
  11. orderBy: TopicColumnsToSort.NAME,
  12. sortOrder: SortOrder.ASC,
  13. consumerGroups: [],
  14. };
  15. // eslint-disable-next-line @typescript-eslint/default-param-last
  16. const reducer = (state = initialState, action: Action): TopicsState => {
  17. switch (action.type) {
  18. case getType(actions.fetchTopicsListAction.success):
  19. case getType(actions.fetchTopicDetailsAction.success):
  20. case getType(actions.fetchTopicConfigAction.success):
  21. case getType(actions.createTopicAction.success):
  22. case getType(actions.fetchTopicConsumerGroupsAction.success):
  23. case getType(actions.updateTopicAction.success):
  24. return action.payload;
  25. case getType(actions.deleteTopicAction.success): {
  26. const newState: TopicsState = { ...state };
  27. delete newState.byName[action.payload];
  28. newState.allNames = newState.allNames.filter(
  29. (name) => name !== action.payload
  30. );
  31. return newState;
  32. }
  33. case getType(actions.setTopicsSearchAction): {
  34. return {
  35. ...state,
  36. search: action.payload,
  37. };
  38. }
  39. case getType(actions.setTopicsOrderByAction): {
  40. return {
  41. ...state,
  42. orderBy: action.payload,
  43. sortOrder:
  44. state.orderBy === action.payload && state.sortOrder === SortOrder.ASC
  45. ? SortOrder.DESC
  46. : SortOrder.ASC,
  47. };
  48. }
  49. case getType(actions.fetchTopicMessageSchemaAction.success): {
  50. const { topicName, schema } = action.payload;
  51. const newState = _.cloneDeep(state);
  52. newState.byName[topicName] = {
  53. ...newState.byName[topicName],
  54. messageSchema: schema,
  55. };
  56. return newState;
  57. }
  58. default:
  59. return state;
  60. }
  61. };
  62. export default reducer;