File size: 3,142 Bytes
898b101
 
 
 
 
 
 
 
 
 
 
 
 
5dd0307
898b101
99dec8c
 
 
898b101
99dec8c
898b101
99dec8c
898b101
 
 
99dec8c
 
 
 
 
898b101
 
 
99dec8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
898b101
99dec8c
 
 
898b101
99dec8c
 
 
 
 
 
 
898b101
 
 
 
 
 
 
 
 
 
 
 
 
5dd0307
898b101
 
 
 
5dd0307
 
898b101
 
 
 
 
 
 
 
 
 
 
99dec8c
898b101
 
 
99dec8c
898b101
99dec8c
898b101
 
 
99dec8c
5dd0307
 
 
99dec8c
5dd0307
99dec8c
5dd0307
 
 
898b101
 
 
 
 
 
 
0156bac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import React from 'react';
import { BrowserRouter as Router, Routes, Route, Navigate, useLocation } from 'react-router-dom';
import './Styles.css';
import './Styles/auth.css';

import Header from './components/header';
import Footer from './components/footer';
import Hero from './components/hero';
import Features from './components/Features';
import Privacy from './components/Privacy';
import DiagnosisPage from './components/DiagnosisPage';
import Login from './components/Login';
import Register from './components/Register';
import AdminDashboard from './components/AdminDashboard';

// --- 1. PROTEKSI KHUSUS ADMIN ---
// Jika User biasa mencoba masuk, lempar ke /diagnosis
const AdminRoute = ({ children }) => {
  const token = localStorage.getItem("token");
  const role = localStorage.getItem("user_role");
  const location = useLocation();

  if (!token) {
    return <Navigate to="/login" state={{ from: location }} replace />;
  }

  if (role !== 'admin') {
    return <Navigate to="/diagnosis" replace />;
  }

  return children;
};

// --- 2. PROTEKSI KHUSUS USER BIASA ---
// Jika Admin mencoba masuk, lempar ke /admin
const UserRoute = ({ children }) => {
  const token = localStorage.getItem("token");
  const role = localStorage.getItem("user_role");
  const location = useLocation();

  if (!token) {
    return <Navigate to="/login" state={{ from: location }} replace />;
  }

  if (role === 'admin') {
    return <Navigate to="/admin" replace />;
  }

  return children;
};

// --- Halaman Home (Publik) ---
const HomePage = () => {
  const role = localStorage.getItem("user_role");
  
  // Logika tombol "Mulai" di Hero
  const navigateTo = (page) => {
    if (page === 'diagnosis') {
      if (role === 'admin') {
        window.location.href = '/admin';
      } else {
        window.location.href = '/diagnosis';
      }
    }
  };
  return (
    <>
      <Hero navigateTo={navigateTo} />
      <Features />
      <Privacy />
    </>
  );
};

const App = () => {
  const token = localStorage.getItem("token");
  const userFullname = localStorage.getItem("user_fullname") || "Pengguna";
  const userRole = localStorage.getItem("user_role") || "user"; 

  const authStatusData = {
    isLoggedIn: !!token,
    user: {
      name: userFullname,
      role: userRole
    }
  };

  return (
    <Router>
      <Header authStatus={authStatusData} />
      <Routes>
        <Route path="/" element={<HomePage />} />
        <Route path="/login" element={<Login />} />
        <Route path="/register" element={<Register />} />
        
        {/* Halaman Chat: HANYA USER BIASA */}
        <Route 
          path="/diagnosis" 
          element={
            <UserRoute>
              <DiagnosisPage />
            </UserRoute>
          } 
        />
        
        {/* Halaman Admin: HANYA ADMIN */}
        <Route 
          path="/admin" 
          element={
            <AdminRoute>
               <AdminDashboard />
            </AdminRoute>
          } 
        />
        
        <Route path="*" element={<Navigate to="/" replace />} />
      </Routes>
      <Footer />
    </Router>
  );
};

export default App;