92 lines
3.2 KiB
JavaScript
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 |