Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions frontend/src/context/userContext.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ import React, { createContext, useState, useEffect } from "react";
import axiosInstance from "../utils/axiosinstance";
import { API_PATHS } from "../utils/apiPaths";
import toast from "react-hot-toast";
import {
isMockAuthEnabled,
getMockUser,
clearMockUser,
} from "../utils/mockAuth";


export const UserContext = createContext();
Expand All @@ -14,6 +19,15 @@ export const UserProvider = ({ children }) => {
useEffect(() => {
if (user) return;

if (isMockAuthEnabled()) {
const mockUser = getMockUser();
if (mockUser) {
setUser(mockUser);
}
setLoading(false);
return;
}

const accessToken =
localStorage.getItem("token") ||
sessionStorage.getItem("token");
Expand Down Expand Up @@ -45,17 +59,14 @@ export const UserProvider = ({ children }) => {

const updateUser = (userData) => {
setUser(userData);
const authToken = userData.token || userData.accessToken;
if (authToken) {
localStorage.setItem("token", authToken);
}
setLoading(false);
};
const clearUser = () => {
setUser(null);
setSheetProgress([]);
localStorage.removeItem("token");
sessionStorage.removeItem("token");
sessionStorage.removeItem("token");
clearMockUser();
};
// Optionally, add a function to refresh sheet progress
const refreshSheetProgress = async () => {
Expand All @@ -73,4 +84,4 @@ sessionStorage.removeItem("token");
);
};

export default UserProvider;
export default UserProvider;
25 changes: 21 additions & 4 deletions frontend/src/pages/Auth/Login.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ import { validateEmail } from "../../utils/helper";
import { API_PATHS } from "../../utils/apiPaths";
import { UserContext } from "../../context/userContext";
import axiosInstance from "../../utils/axiosinstance";
import {
isMockAuthEnabled,
mockLogin,
saveMockUser,
} from "../../utils/mockAuth";
import { LuArrowRight } from "react-icons/lu";

const Login = ({ setCurrentPage, onLoginSuccess }) => {
Expand Down Expand Up @@ -33,19 +38,31 @@ const Login = ({ setCurrentPage, onLoginSuccess }) => {
setLoading(true);

try {
const response = await axiosInstance.post(API_PATHS.AUTH.LOGIN, {
email,
password,
});
const response = isMockAuthEnabled()
? await mockLogin({ email, password })
: await axiosInstance.post(API_PATHS.AUTH.LOGIN, {
email,
password,
});
const { token, accessToken } = response.data;
const authToken = token || accessToken;

if (authToken) {
// Keep token storage in one place: the user's Remember Me choice.
if (rememberMe) {
sessionStorage.removeItem("token");
localStorage.setItem("token", authToken);
} else {
localStorage.removeItem("token");
sessionStorage.setItem("token", authToken);
}
if (isMockAuthEnabled()) {
saveMockUser({
...response.data,
password,
accessToken: authToken,
});
}
updateUser(response.data);
if (onLoginSuccess) {
onLoginSuccess();
Expand Down
Loading