first commit

This commit is contained in:
2026-03-10 14:55:59 +05:30
commit 39d42663c0
134 changed files with 16311 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
// import axios from "axios";
import api from "../../app/api";
export const login = createAsyncThunk(
"auth/login",
async (credentials, thunkAPI) => {
try {
const response = await api.post("/auth/login", credentials);
console.log("Login response:", response.data);
const token = response.data?.token || response.data?.data?.token;
const user = response.data?.user || response.data?.data?.user;
if (!token) {
throw new Error("No token returned from server");
}
localStorage.setItem("token", token);
return { user, token };
} catch (error) {
return thunkAPI.rejectWithValue(
error.response?.data?.message || "Login failed"
);
}
}
);
const authSlice = createSlice({
name: "auth",
initialState: {
user: null,
loading: false,
error: null,
token: localStorage.getItem("token") || null,
},
reducers: {
logout: (state) => {
state.user = null;
state.token = null;
localStorage.removeItem("token");
},
},
extraReducers: (builder) => {
builder
.addCase(login.pending, (state) => {
state.loading = true;
state.error = null;
})
.addCase(login.fulfilled, (state, action) => {
state.loading = false;
state.user = action.payload.user;
state.token = action.payload.token;
})
.addCase(login.rejected, (state, action) => {
state.loading = false;
state.error = action.payload;
});
},
});
export const { logout } = authSlice.actions;
export default authSlice.reducer;