add rag-view frontend

This commit is contained in:
2026-02-27 20:50:03 +01:00
parent f20c422f01
commit 65ade24e1b
80 changed files with 9923 additions and 1 deletions

View File

@@ -0,0 +1,199 @@
import { createSlice } from "@reduxjs/toolkit";
import fetchLoginUser from "./fetch-async/fetchLoginUser";
import fetchRegisterUser from "./fetch-async/fetchRegisterUser";
import fetchRefreshToken from "./fetch-async/fetchRefreshToken";
import fetchUserProfile from "./fetch-async/fetchUserProfile";
import fetchDeleteUploaded from "./fetch-async/fetchDeleteUploaded";
import {
USER_NAME_UNDEFINED,
USER_EMAIL_UNDEFINED,
JWT_TOKEN,
JWT_REFRESH_TOKEN,
TYPE_WINDOW_UNDEFINED,
TOKEN_UNDEFINED,
UNKNOWN_ERROR,
} from "./constants";
const getInitialToken = () => {
if (typeof window === TYPE_WINDOW_UNDEFINED) return null;
const token = localStorage.getItem(JWT_TOKEN);
if (!token || token === TOKEN_UNDEFINED) return null;
return token;
};
const initialState = {
userId: null,
userName: USER_NAME_UNDEFINED,
userEmail: USER_EMAIL_UNDEFINED,
loadedFiles: [],
maxFilesToLoad: 0,
token: getInitialToken(),
refreshToken: localStorage.getItem(JWT_REFRESH_TOKEN),
loading: false,
deleting: false,
deleteSuccess: false,
deletedCount: 0,
error: null,
};
const userDetailsSlice = createSlice({
name: "userDetails",
initialState,
reducers: {
logoutUser(state) {
state.userId = null;
state.userName = USER_NAME_UNDEFINED;
state.userEmail = USER_EMAIL_UNDEFINED;
state.loadedFiles = [];
state.maxFilesToLoad = 0;
state.token = null;
state.refreshToken = null;
state.loading = false;
state.deleting = false;
state.deleteSuccess = false;
state.deletedCount = 0;
state.error = null;
localStorage.removeItem(JWT_TOKEN);
localStorage.removeItem(JWT_REFRESH_TOKEN);
},
clearError(state) {
state.error = null;
},
clearDeleteStatus(state) {
state.deleteSuccess = false;
state.deletedCount = 0;
},
addLoadedFiles(state, action) {
state.loadedFiles = [...state.loadedFiles, ...action.payload];
},
},
extraReducers: (builder) => {
builder.addCase(fetchRegisterUser.pending, (state) => {
state.loading = true;
state.error = null;
});
builder.addCase(fetchRegisterUser.fulfilled, (state, action) => {
state.loading = false;
state.error = null;
state.userName = action.payload.payload.username;
state.userEmail = action.payload.payload.email;
const token = action.payload.payload.token;
state.token = token || null;
if (token) {
localStorage.setItem(JWT_TOKEN, token);
} else {
localStorage.removeItem(JWT_TOKEN);
}
const refreshToken = action.payload.payload.refreshToken;
state.refreshToken = refreshToken || null;
if (refreshToken) {
localStorage.setItem(JWT_REFRESH_TOKEN, refreshToken);
} else {
localStorage.removeItem(JWT_REFRESH_TOKEN);
}
});
builder.addCase(fetchRegisterUser.rejected, (state, action) => {
state.loading = false;
state.error = action.payload?.status ?? 500;
});
builder.addCase(fetchLoginUser.pending, (state) => {
state.loading = true;
state.error = null;
});
builder.addCase(fetchLoginUser.fulfilled, (state, action) => {
state.loading = false;
state.error = null;
state.userName = action.payload.payload.username;
state.userEmail = action.payload.payload.email;
const token = action.payload.payload.token;
state.token = token || null;
if (token) {
localStorage.setItem(JWT_TOKEN, token);
} else {
localStorage.removeItem(JWT_TOKEN);
}
const refreshToken = action.payload.payload.refreshToken;
state.refreshToken = refreshToken || null;
if (refreshToken) {
localStorage.setItem(JWT_REFRESH_TOKEN, refreshToken);
} else {
localStorage.removeItem(JWT_REFRESH_TOKEN);
}
});
builder.addCase(fetchLoginUser.rejected, (state, action) => {
state.loading = false;
state.error = action.payload ?? { status: 500, message: "Unknown error" };
});
builder.addCase(fetchRefreshToken.fulfilled, (state, action) => {
const token = action.payload?.payload?.token;
const refreshToken = action.payload?.payload?.refreshToken;
state.token = token || null;
state.refreshToken = refreshToken || null;
if (token) localStorage.setItem(JWT_TOKEN, token);
else localStorage.removeItem(JWT_TOKEN);
if (refreshToken) localStorage.setItem(JWT_REFRESH_TOKEN, refreshToken);
else localStorage.removeItem(JWT_REFRESH_TOKEN);
});
builder.addCase(fetchRefreshToken.rejected, (state, action) => {
state.error = action.payload ?? { status: 500, message: UNKNOWN_ERROR };
});
builder.addCase(fetchUserProfile.pending, (state) => {
state.loading = true;
state.error = null;
});
builder.addCase(fetchUserProfile.fulfilled, (state, action) => {
state.loading = false;
state.error = null;
const p = action.payload?.payload;
if (p?.id) state.userId = p.id;
if (p?.username) state.userName = p.username;
if (p?.email) state.userEmail = p.email;
if (p?.loadedFiles) state.loadedFiles = p.loadedFiles;
if (p?.maxLoadedFiles != null) state.maxFilesToLoad = p.maxLoadedFiles;
});
builder.addCase(fetchUserProfile.rejected, (state, action) => {
state.loading = false;
state.error = action.payload ?? { status: 500, message: "Unknown error" };
});
// Delete uploaded files
builder.addCase(fetchDeleteUploaded.pending, (state) => {
state.deleting = true;
state.deleteSuccess = false;
state.deletedCount = 0;
state.error = null;
});
builder.addCase(fetchDeleteUploaded.fulfilled, (state, action) => {
state.deleting = false;
state.deleteSuccess = true;
state.deletedCount = action.payload?.payload ?? 0;
state.loadedFiles = [];
state.error = null;
});
builder.addCase(fetchDeleteUploaded.rejected, (state, action) => {
state.deleting = false;
state.deleteSuccess = false;
state.error = action.payload ?? { status: 500, message: "Unknown error" };
});
},
});
//export const { logoutUser, clearError, clearDeleteStatus, addLoadedFiles } = userDetailsSlice.actions;
//export default userDetailsSlice.reducer;