import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { useDispatch, useSelector } from "react-redux"; import { logoutUser, clearDeleteStatus, } from "../features/slices/details-slice"; import { uploadFilesWithProgress } from "../features/slices/upload-slice"; import fetchDeleteUploaded from "../features/fetch-async/fetchDeleteUploaded"; import fetchLoginUser from "../features/fetch-async/fetchLoginUser"; import { TOKEN_UNDEFINED, GUEST_EMAIL, GUEST_PASSWORD, } from "../features/constants"; const GUEST_USERNAME = "Guest"; const DEFAULT_CONTEXT_FILE = "/guest-example.txt"; const EXAMPLE_QUESTIONS_FILE = "/context-questions.txt"; function HomePage() { const dispatch = useDispatch(); const navigate = useNavigate(); const [view, setView] = useState(null); const [fileContent, setFileContent] = useState(""); const [uploadingDefault, setUploadingDefault] = useState(false); const token = useSelector((state) => state.userDetails.token); const userId = useSelector((state) => state.userDetails.userId); const userName = useSelector((state) => state.userDetails.userName); const userEmail = useSelector((state) => state.userDetails.userEmail); const loadedFiles = useSelector((state) => state.userDetails.loadedFiles); const loading = useSelector((state) => state.userDetails.loading); const deleting = useSelector((state) => state.userDetails.deleting); const deleteSuccess = useSelector((state) => state.userDetails.deleteSuccess); const deletedCount = useSelector((state) => state.userDetails.deletedCount); const auth = typeof token === "string" && token !== TOKEN_UNDEFINED && token.trim() !== ""; const isGuest = userEmail === GUEST_EMAIL && userName === GUEST_USERNAME; const hasDefaultFile = loadedFiles.some( (f) => f.fileName === "guest-example.txt", ); const showUploadDefault = isGuest && !hasDefaultFile; const showViewExamples = isGuest && hasDefaultFile; const handleGuestLogin = () => { dispatch(fetchLoginUser({ email: GUEST_EMAIL, password: GUEST_PASSWORD })); }; const handleLogout = () => { dispatch(logoutUser()); }; const handleDeleteUploaded = () => { if (window.confirm("Are you sure you want to delete all uploaded files?")) { dispatch(fetchDeleteUploaded()); } }; const handleClearDeleteStatus = () => { dispatch(clearDeleteStatus()); }; const handleUploadDefaultFile = async () => { setUploadingDefault(true); try { const res = await fetch(DEFAULT_CONTEXT_FILE); const text = await res.text(); const file = new File([text], "guest-example.txt", { type: "text/plain", }); dispatch(uploadFilesWithProgress([file])); navigate("/upload"); } finally { setUploadingDefault(false); } }; const handleViewFile = async (filePath, viewName) => { const res = await fetch(filePath); const text = await res.text(); setFileContent(text); setView(viewName); }; // File viewer screen if (view) { const title = view === "context" ? "Example Context File" : "Example Questions"; return (

{title}

            {fileContent}
          
); } return (
{/* Header */}

RAG Viewer

Choose an option to start working with your text files and RAG queries.

{!auth ? (
) : (
{/* User Info Section */}

User Profile

{loading ? (

Loading...

) : (
ID {userId ?? "—"}
Username {userName}
Email {userEmail}
)}
{/* Delete Success Message */} {deleteSuccess && (

Successfully deleted {deletedCount} file(s)

)} {/* Loaded Files Section */}

Loaded Documents ({loadedFiles.length})

{loading ? (

Loading...

) : loadedFiles.length === 0 ? (

No documents uploaded yet

) : (
    {loadedFiles.map((file) => (
  • {file.fileName} #{file.id}
  • ))}
)}
{/* Action Buttons */}
{showUploadDefault && ( )} {showViewExamples && ( <> )}
)}
); } export default HomePage;