26 lines
859 B
TypeScript
26 lines
859 B
TypeScript
import React, { useReducer } from "react";
|
|
import { ChatMessage, User } from "../../../shared";
|
|
import { ChatContext } from "../contexts/ChatContext";
|
|
import { chatReducer } from "../reducers/chatReducers";
|
|
|
|
export function ChatProvider({ children }: { children: React.ReactNode }) {
|
|
const [state, dispatch] = useReducer(chatReducer, {
|
|
messages: [],
|
|
currentUser: null,
|
|
isConnected: false,
|
|
});
|
|
|
|
const value = {
|
|
state,
|
|
dispatch,
|
|
actions: {
|
|
addMessage: (message: ChatMessage) =>
|
|
dispatch({ type: "ADD_MESSAGE", payload: message }),
|
|
setUser: (user: User) => dispatch({ type: "SET_USER", payload: user }),
|
|
setConnected: (isConnected: boolean) =>
|
|
dispatch({ type: "SET_CONNECTED", payload: isConnected }),
|
|
},
|
|
};
|
|
|
|
return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>;
|
|
}
|