simple-chat/client/src/reducers/chatReducers.ts

39 lines
1,004 B
TypeScript

import { ChatAction, ChatState } from "../contexts/ChatContext";
export function chatReducer(state: ChatState, action: ChatAction): ChatState {
switch (action.type) {
case "DELETE_MESSAGE":
return {
...state,
messages: state.messages.filter((message) => {
// only potentially delete chat messages, dont touch system messages
if ("type" in message && message.type === "CHAT_MESSAGE") {
return message.payload.id !== action.payload;
}
return true;
}),
};
case "ADD_MESSAGE":
return {
...state,
messages: [...state.messages, action.payload],
};
case "SET_USER":
return {
...state,
currentUser: action.payload,
};
case "SET_CONNECTED":
return {
...state,
isConnected: action.payload,
};
case "CLEAR_MESSAGES":
return {
...state,
messages: [],
};
default:
return state;
}
}