You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
1.0 KiB

11 months ago
  1. import React, { useState, createContext } from "react";
  2. import { AUTH_TIMESTAMP, AUTH_TOKEN, AUTH_USER } from "@/utils/constants";
  3. export const AuthContext = createContext(null);
  4. export function ContextWrapper(props) {
  5. const localUser = localStorage.getItem(AUTH_USER);
  6. const localAuthToken = localStorage.getItem(AUTH_TOKEN);
  7. const [store, setStore] = useState({
  8. user: localUser ? JSON.parse(localUser) : null,
  9. authToken: localAuthToken ? localAuthToken : null,
  10. });
  11. const [actions] = useState({
  12. updateUser: (user, authToken = "") => {
  13. localStorage.setItem(AUTH_USER, JSON.stringify(user));
  14. localStorage.setItem(AUTH_TOKEN, authToken);
  15. setStore({ user, authToken });
  16. },
  17. unsetUser: () => {
  18. localStorage.removeItem(AUTH_USER);
  19. localStorage.removeItem(AUTH_TOKEN);
  20. localStorage.removeItem(AUTH_TIMESTAMP);
  21. setStore({ user: null, authToken: null });
  22. },
  23. });
  24. return (
  25. <AuthContext.Provider value={{ store, actions }}>
  26. {props.children}
  27. </AuthContext.Provider>
  28. );
  29. }