| import React, { createContext, useEffect, useState } from 'react' |
|
|
| import PropTypes from 'prop-types'; |
|
|
| export const UserDataContext = createContext(); |
|
|
| const UserDataContextProvider = ({ children }) => { |
| |
| const [isLoggedIn, setIsLoggedIn] = useState(JSON.parse(localStorage.getItem('loggedIn'))); |
| const [user, setUser] = useState(null); |
| const [errorMessage, setErrorMessage] = useState(""); |
|
|
| async function fetchUserDetails() { |
| try { |
| if (isLoggedIn) { |
| let userDetailsUrl = `${import.meta.env.VITE_BACKEND_HOST}/api/user` |
| const response = await fetch(userDetailsUrl, { |
| credentials: 'include' |
| }); |
| const resData = await response.json(); |
| if (response.ok) { |
| setUser(resData); |
| } else { |
| setErrorMessage(resData.message); |
| } |
| } |
| } catch (err) { |
| setErrorMessage("Something went wrong"); |
| } |
| } |
|
|
| useEffect(() => { |
| fetchUserDetails() |
| }, []); |
|
|
| return ( |
| <UserDataContext.Provider value={{ user, friends: user?.friends, games: user?.games, errorMessage, isLoggedIn, setIsLoggedIn }}> |
| {children} |
| </UserDataContext.Provider> |
| ) |
| } |
|
|
| UserDataContextProvider.propTypes = { |
| children: PropTypes.object |
| } |
|
|
|
|
| export default UserDataContextProvider |