imetting_frontend/src/App.jsx

75 lines
2.2 KiB
JavaScript

import React, { useState, useEffect } from 'react';
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
import HomePage from './pages/HomePage';
import Dashboard from './pages/Dashboard';
import MeetingDetails from './pages/MeetingDetails';
import CreateMeeting from './pages/CreateMeeting';
import EditMeeting from './pages/EditMeeting';
import './App.css';
function App() {
const [user, setUser] = useState(null);
const [isLoading, setIsLoading] = useState(true);
// Load user from localStorage on app start
useEffect(() => {
const savedUser = localStorage.getItem('iMeetingUser');
console.log('Saved user from localStorage:', savedUser);
if (savedUser) {
try {
const parsedUser = JSON.parse(savedUser);
console.log('Parsed user:', parsedUser);
setUser(parsedUser);
} catch (error) {
console.error('Error parsing saved user:', error);
localStorage.removeItem('iMeetingUser');
}
}
setIsLoading(false);
}, []);
const handleLogin = (userData) => {
setUser(userData);
localStorage.setItem('iMeetingUser', JSON.stringify(userData));
};
const handleLogout = () => {
setUser(null);
localStorage.removeItem('iMeetingUser');
};
if (isLoading) {
return (
<div className="app-loading">
<div className="loading-spinner"></div>
<p>加载中...</p>
</div>
);
}
return (
<Router>
<div className="app">
<Routes>
<Route path="/" element={
user ? <Navigate to="/dashboard" /> : <HomePage onLogin={handleLogin} />
} />
<Route path="/dashboard" element={
user ? <Dashboard user={user} onLogout={handleLogout} /> : <Navigate to="/" />
} />
<Route path="/meetings/:meeting_id" element={
user ? <MeetingDetails user={user} /> : <Navigate to="/" />
} />
<Route path="/meetings/create" element={
user ? <CreateMeeting user={user} /> : <Navigate to="/" />
} />
<Route path="/meetings/edit/:meeting_id" element={
user ? <EditMeeting user={user} /> : <Navigate to="/" />
} />
</Routes>
</div>
</Router>
);
}
export default App;