🚀 Auto-deploy: GPI atualizado em 03/04/2026 20:31:33

This commit is contained in:
2026-04-03 20:31:33 +00:00
parent a927c01269
commit 0dace9ee00
2 changed files with 75 additions and 57 deletions

View File

@@ -1,4 +1,4 @@
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; import { BrowserRouter as Router, Routes, Route, Navigate, useLocation } from 'react-router-dom';
import { AuthProvider } from './context/AuthContext'; import { AuthProvider } from './context/AuthContext';
import { useAuth } from './context/useAuth'; import { useAuth } from './context/useAuth';
import { SystemSettingsProvider } from './context/SystemSettingsContext'; import { SystemSettingsProvider } from './context/SystemSettingsContext';
@@ -17,6 +17,7 @@ import { DeveloperDashboard } from './pages/DeveloperDashboard';
import { CalculatorDashboard } from './pages/CalculatorDashboard'; import { CalculatorDashboard } from './pages/CalculatorDashboard';
import { StockDashboard } from './pages/StockDashboard'; import { StockDashboard } from './pages/StockDashboard';
import { GuestDashboard } from './pages/GuestDashboard'; import { GuestDashboard } from './pages/GuestDashboard';
import { Login } from './pages/Login';
import InstrumentList from './pages/InstrumentList'; import InstrumentList from './pages/InstrumentList';
const DeveloperRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => { const DeveloperRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => {
@@ -29,64 +30,80 @@ const DeveloperRoute: React.FC<{ children: React.ReactNode }> = ({ children }) =
}; };
const AppContent: React.FC = () => { const AppContent: React.FC = () => {
const { isSignedIn, isLoading } = useAuth();
const location = useLocation();
if (isLoading) {
return (
<div className="min-h-screen bg-surface-soft flex items-center justify-center">
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary"></div>
</div>
);
}
// If not signed in and not on the callback page, show login
if (!isSignedIn && location.pathname !== '/callback') {
return <Login />;
}
return ( return (
<ToastProvider> <ToastProvider>
<AuthProvider> <SystemSettingsProvider>
<SystemSettingsProvider> <NotificationProvider>
<NotificationProvider> <Layout>
<Layout> <Routes>
<Routes> <Route path="/" element={<ProjectList />} />
<Route path="/" element={<ProjectList />} /> <Route path="/login" element={<Login />} />
<Route path="/guest-dashboard" element={<GuestDashboard />} /> <Route path="/guest-dashboard" element={<GuestDashboard />} />
<Route path="/projects" element={<ProjectList />} /> <Route path="/projects" element={<ProjectList />} />
<Route path="/project/:id" element={<ProjectDetails />} /> <Route path="/project/:id" element={<ProjectDetails />} />
<Route path="/schemes" element={<SchemesList />} /> <Route path="/schemes" element={<SchemesList />} />
<Route path="/inspections" element={<InspectionsList />} /> <Route path="/inspections" element={<InspectionsList />} />
<Route path="/library" element={ <Route path="/library" element={
<ProtectedRoute allowedRoles={['user', 'admin']}> <ProtectedRoute allowedRoles={['user', 'admin']}>
<DataSheetLibrary /> <DataSheetLibrary />
</ProtectedRoute>
} />
<Route path="/instruments" element={
<ProtectedRoute allowedRoles={['user', 'admin', 'guest']}>
<InstrumentList />
</ProtectedRoute>
} />
<Route path="/yield-study" element={
<ProtectedRoute allowedRoles={['user', 'admin']}>
<YieldStudyDashboard />
</ProtectedRoute>
} />
<Route path="/calculators" element={<CalculatorDashboard />} />
<Route
path="/admin"
element={
<ProtectedRoute allowedRoles={['admin']}>
<AdminDashboard />
</ProtectedRoute> </ProtectedRoute>
} /> }
<Route path="/instruments" element={ />
<Route
path="/stock"
element={
<ProtectedRoute allowedRoles={['user', 'admin', 'guest']}> <ProtectedRoute allowedRoles={['user', 'admin', 'guest']}>
<InstrumentList /> <StockDashboard />
</ProtectedRoute> </ProtectedRoute>
} /> }
<Route path="/yield-study" element={ />
<ProtectedRoute allowedRoles={['user', 'admin']}> <Route
<YieldStudyDashboard /> path="/developer"
</ProtectedRoute> element={
} /> <DeveloperRoute>
<Route path="/calculators" element={<CalculatorDashboard />} /> <DeveloperDashboard />
<Route </DeveloperRoute>
path="/admin" }
element={ />
<ProtectedRoute allowedRoles={['admin']}> <Route path="*" element={<Navigate to="/" replace />} />
<AdminDashboard /> </Routes>
</ProtectedRoute> </Layout>
} </NotificationProvider>
/> </SystemSettingsProvider>
<Route
path="/stock"
element={
<ProtectedRoute allowedRoles={['user', 'admin', 'guest']}>
<StockDashboard />
</ProtectedRoute>
}
/>
<Route
path="/developer"
element={
<DeveloperRoute>
<DeveloperDashboard />
</DeveloperRoute>
}
/>
</Routes>
</Layout>
</NotificationProvider>
</SystemSettingsProvider>
</AuthProvider>
</ToastProvider> </ToastProvider>
); );
}; };
@@ -94,7 +111,9 @@ const AppContent: React.FC = () => {
function App() { function App() {
return ( return (
<Router> <Router>
<AppContent /> <AuthProvider>
<AppContent />
</AuthProvider>
</Router> </Router>
); );
} }

View File

@@ -1,7 +1,6 @@
import React, { useState, useEffect, useCallback, useMemo } from 'react'; import React, { useState, useEffect, useCallback, useMemo } from 'react';
import type { AppUser, UserRole } from '../types'; import type { AppUser } from '../types';
import { AuthContext } from './AuthContextType'; import { AuthContext } from './AuthContextType';
import { getUser } from '../main';
import { setApiOrganizationId } from '../services/api'; import { setApiOrganizationId } from '../services/api';
interface AuthProviderProps { interface AuthProviderProps {