Files
rudarksh-frontend/app/contexts/mainContext.js
2025-02-19 17:00:55 +05:30

92 lines
3.2 KiB
JavaScript

'use client'
import axios from "axios";
import { createContext, useState } from "react";
import { useRouter } from "next/navigation";
import toast from "react-hot-toast";
const MainContext = createContext()
export const ContextProvider = ({ children }) => {
const router = useRouter()
const [token, setToken] = useState(() => {
if (typeof window !== 'undefined' && localStorage.getItem('token')) {
return localStorage.getItem('token');
}
return null;
});
const backendUrl = process.env.NEXT_PUBLIC_BACKEND_URL;
const loginUser = async (credentials) => {
try {
const response = await axios.post(`${backendUrl}/account/login/`, credentials);
console.log("Login Successful:", response.data);
setToken(response.data.token)
localStorage.setItem('token',response.data.token)
toast.success('Login Successful');
router.push('/')
return response.data
} catch (error) {
if (error.response) {
console.error("Error during login:", error.response.data);
const message = error.response.data.message || "Login failed. Please try again.";
toast.error(message);
} else if (error.request) {
console.error("No response during login:", error.request);
toast.error("Unable to connect to the server. Please try again later.");
} else {
console.error("Unexpected error during login:", error.message);
toast.error("An unexpected error occurred. Please try again.");
}
throw error;
}
};
const registerUser = async (credentials) => {
try {
const response = await axios.post(`${backendUrl}/account/register/`, credentials);
console.log("Register Successful:", response.data);
setToken(response.data.token)
localStorage.setItem('token',response.data.token)
toast.success('Registration Successful');
router.push('/')
return response.data;
} catch (error) {
if (error.response) {
console.error("Error during registration:", error.response.data);
const message = error.response.data.message || "Registration failed. Please try again.";
toast.error(message);
} else if (error.request) {
console.error("No response during registration:", error.request);
toast.error("Unable to connect to the server. Please try again later.");
} else {
console.error("Unexpected error during registration:", error.message);
toast.error("An unexpected error occurred. Please try again.");
}
throw error;
}
};
return (
<MainContext.Provider value={{
loginUser,
registerUser,
token,
setToken
}}>
{children}
</MainContext.Provider>
)
}
export default MainContext