memberProvider.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. 'use client';
  2. import { createContext, useContext, useState, useEffect } from 'react';
  3. import { Member } from '@/types/account/member';
  4. import { useAuthContext } from '@/contexts/authProvider';
  5. const MemberContext = createContext<{
  6. member: Member|null;
  7. setMember: (member: Member|null) => void;
  8. isLoaded: boolean;
  9. }>({
  10. member: null,
  11. setMember: () => {},
  12. isLoaded: false,
  13. });
  14. export function MemberProvider({ children }: { children: React.ReactNode }) {
  15. const [member, setMember] = useState<Member|null>(null);
  16. const [isLoaded, setLoaded] = useState<boolean>(false);
  17. const {isLoading, isAuthenticated } = useAuthContext();
  18. // 로그인된 회원 정보 조회
  19. useEffect(() => {
  20. if (isLoading) {
  21. return;
  22. }
  23. const storedMember = localStorage.getItem("member");
  24. if (isAuthenticated && storedMember) {
  25. setMember(JSON.parse(storedMember));
  26. } else {
  27. setMember(null);
  28. }
  29. setLoaded(true);
  30. }, [isLoading, isAuthenticated]);
  31. return (
  32. <MemberContext.Provider value={{ member, setMember, isLoaded }}>
  33. {children}
  34. </MemberContext.Provider>
  35. );
  36. }
  37. export function useMemberContext() {
  38. return useContext(MemberContext);
  39. }