1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import { TopicMessage } from 'generated-sources';
- import { Action, TopicsState } from 'redux/interfaces';
- import { getType } from 'typesafe-actions';
- import * as actions from 'redux/actions';
- export const initialState: TopicsState = {
- byName: {},
- allNames: [],
- totalPages: 1,
- messages: [],
- search: '',
- orderBy: null,
- consumerGroups: [],
- };
- const transformTopicMessages = (
- state: TopicsState,
- messages: TopicMessage[]
- ): TopicsState => ({
- ...state,
- messages: messages.map((mes) => {
- const { content } = mes;
- let parsedContent = content;
- if (content) {
- try {
- parsedContent =
- typeof content !== 'object' ? JSON.parse(content) : content;
- } catch (_) {
- // do nothing
- }
- }
- return {
- ...mes,
- content: parsedContent,
- };
- }),
- });
- const reducer = (state = initialState, action: Action): TopicsState => {
- switch (action.type) {
- case getType(actions.fetchTopicsListAction.success):
- case getType(actions.fetchTopicDetailsAction.success):
- case getType(actions.fetchTopicConfigAction.success):
- case getType(actions.createTopicAction.success):
- case getType(actions.fetchTopicConsumerGroupsAction.success):
- case getType(actions.updateTopicAction.success):
- return action.payload;
- case getType(actions.fetchTopicMessagesAction.success):
- return transformTopicMessages(state, action.payload);
- case getType(actions.deleteTopicAction.success): {
- const newState: TopicsState = { ...state };
- delete newState.byName[action.payload];
- newState.allNames = newState.allNames.filter(
- (name) => name !== action.payload
- );
- return newState;
- }
- case getType(actions.clearMessagesTopicAction.success): {
- return {
- ...state,
- messages: [],
- };
- }
- case getType(actions.setTopicsSearchAction): {
- return {
- ...state,
- search: action.payload,
- };
- }
- case getType(actions.setTopicsOrderByAction): {
- return {
- ...state,
- orderBy: action.payload,
- };
- }
- default:
- return state;
- }
- };
- export default reducer;
|