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.

user-context.js 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { createContext, useContext, useState } from 'react';
  2. import {
  3. getStorage,
  4. removeStorage,
  5. setStorage,
  6. } from '../utils/helpers/storage';
  7. const UserContext = createContext({
  8. userStorage: [],
  9. });
  10. const UserDispatchContext = createContext({
  11. addUser: (userData) => {},
  12. clearUser: () => {},
  13. updateUserInfo: (newUserData) => {},
  14. });
  15. export const useUserData = () => {
  16. return useContext(UserContext);
  17. };
  18. export const useUserUpdate = () => {
  19. return useContext(UserDispatchContext);
  20. };
  21. const useUser = () => {
  22. const USER_KEY = 'user-data';
  23. const [userStorage, setUserStorage] = useState(getStorage(USER_KEY));
  24. const addUser = (userData) => {
  25. setStorage(USER_KEY, userData);
  26. setUserStorage(userData);
  27. };
  28. const updateUserInfo = (newUserData) => {
  29. setStorage(USER_KEY, newUserData);
  30. setUserStorage(newUserData);
  31. };
  32. const clearUser = () => {
  33. removeStorage(USER_KEY);
  34. setUserStorage(null);
  35. };
  36. return {
  37. userStorage,
  38. setUserStorage,
  39. addUser,
  40. updateUserInfo,
  41. clearUser,
  42. };
  43. };
  44. const UserProvider = ({ children }) => {
  45. const { userStorage, setUserStorage, addUser, updateUserInfo, clearUser } =
  46. useUser();
  47. return (
  48. <UserContext.Provider value={{ userStorage }}>
  49. <UserDispatchContext.Provider
  50. value={{
  51. setUserStorage,
  52. addUser,
  53. updateUserInfo,
  54. clearUser,
  55. }}
  56. >
  57. {children}
  58. </UserDispatchContext.Provider>
  59. </UserContext.Provider>
  60. );
  61. };
  62. export default UserProvider;