TIF_E41253310/App.js

80 lines
3.0 KiB
JavaScript

import { useEffect } from "react";
import { Routes, Route, Navigate, useNavigate, useLocation } from "react-router-dom";
import LoginPage from "./src/Login/login";
import Dashboard from "./src/dashboard";
import AlumniForm from "./src/form-alumni";
import ExportKlasifikasi from "./src/Export-Klasifikasi";
import ForgotPassword from "./src/forgot-password";
import ProsesKlasifikasi from "./src/proses-klasifikasi";
import ResetPassword from "./src/reset-password";
import TahunAngkatan from "./src/tahun-angkatan";
import ImportData from "./src/ImportData";
import KuesionerAlumni from "./src/kuesioner-alumni";
import KamusKataKunci from "./src/kamus-kata-kunci";
function ProtectedRoute({ children }) {
const navigate = useNavigate();
const location = useLocation();
useEffect(() => {
const checkAuth = () => {
const token = localStorage.getItem('token');
const username = localStorage.getItem('username');
if (!token || !username) {
navigate('/', { replace: true });
}
};
checkAuth();
// Dengarkan saat logout dari tab browser lain
const handleStorageChange = (e) => {
if (e.key === 'token' || e.key === 'username' || e.key === null) {
checkAuth();
}
};
window.addEventListener('storage', handleStorageChange);
return () => window.removeEventListener('storage', handleStorageChange);
}, [navigate, location]);
const token = localStorage.getItem('token');
const username = localStorage.getItem('username');
if (!token || !username) {
return <Navigate to="/" replace />;
}
return children;
}
function App() {
return (
<Routes>
{/* Rute Publik */}
<Route path="/" element={<LoginPage />} />
<Route path="/register" element={<Navigate to="/" replace />} />
<Route path="/forgot-password" element={<ForgotPassword />} />
<Route path="/reset-password" element={<ResetPassword />} />
<Route path="/kuesioner" element={<KuesionerAlumni />} />
<Route path="/tracer-study" element={<KuesionerAlumni />} />
{/* Rute Terproteksi (Wajib Login) */}
<Route path="/dashboard" element={<ProtectedRoute><Dashboard /></ProtectedRoute>} />
<Route path="/alumni" element={<ProtectedRoute><AlumniForm /></ProtectedRoute>} />
<Route path="/export-klasifikasi" element={<ProtectedRoute><ExportKlasifikasi /></ProtectedRoute>} />
<Route path="/proses-klasifikasi" element={<ProtectedRoute><ProsesKlasifikasi /></ProtectedRoute>} />
<Route path="/tahun-angkatan" element={<ProtectedRoute><TahunAngkatan /></ProtectedRoute>} />
<Route path="/import" element={<ProtectedRoute><ImportData standalone={true} /></ProtectedRoute>} />
<Route path="/keywords" element={<ProtectedRoute><KamusKataKunci standalone={true} /></ProtectedRoute>} />
<Route path="/kamus-kata-kunci" element={<ProtectedRoute><KamusKataKunci standalone={true} /></ProtectedRoute>} />
{/* Fallback jika route tidak ditemukan */}
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
);
}
export default App;