39 lines
1,004 B
TypeScript
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;
|
|
}
|
|
}
|