UserContext.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React, { useState, FC, useContext } from "react";
  2. interface UserContextInterface {
  3. user?: User;
  4. isAuthenticated: boolean;
  5. login: (user: User) => void;
  6. logout: () => void;
  7. updateUser: (user: User) => void;
  8. }
  9. export const UserContext = React.createContext<UserContextInterface>({
  10. isAuthenticated: false,
  11. login: () => {},
  12. logout: () => {},
  13. updateUser: () => {},
  14. });
  15. const UserContextProvider: FC = ({ children }) => {
  16. const [user, setUser] = useState<User>();
  17. const [isAuthenticated, setIsAuthenticated] = useState(false);
  18. const login = (user: User) => {
  19. setIsAuthenticated(true);
  20. setUser(user);
  21. };
  22. const logout = () => {
  23. setIsAuthenticated(false);
  24. setUser(undefined);
  25. };
  26. const updateUser = (newUserData: User) => {
  27. if (user) {
  28. setUser({
  29. ...newUserData,
  30. id:
  31. typeof newUserData.id === "string"
  32. ? parseInt(newUserData.id)
  33. : newUserData.id,
  34. });
  35. }
  36. };
  37. return (
  38. <UserContext.Provider
  39. value={{ user, login, logout, updateUser, isAuthenticated }}
  40. >
  41. {children}
  42. </UserContext.Provider>
  43. );
  44. };
  45. export const useAuth = () => useContext(UserContext);
  46. export default UserContextProvider;