first commit

This commit is contained in:
ghazall-ag
2025-10-23 21:52:07 +03:30
commit d63a5b8d99
15218 changed files with 1639961 additions and 0 deletions

109
src/App.jsx Normal file
View File

@@ -0,0 +1,109 @@
import React from 'react';
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
import { AuthProvider, useAuth } from './context/AuthContext';
import Sidebar from './components/Sidebar';
import Navbar from './components/Navbar';
import Login from './pages/Login';
import Dashboard from './pages/Dashboard';
import Transactions from './pages/Transactions';
import Settings from './pages/Settings';
// Protected Route Component
const ProtectedRoute = ({ children }) => {
const { isAuthenticated, loading } = useAuth();
if (loading) {
return (
<div className="min-h-screen bg-gray-50 dark:bg-gray-900 flex items-center justify-center">
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600"></div>
</div>
);
}
return isAuthenticated ? children : <Navigate to="/login" />;
};
// Main Layout Component
const Layout = ({ children }) => {
const [sidebarOpen, setSidebarOpen] = React.useState(false);
const toggleSidebar = () => {
setSidebarOpen(!sidebarOpen);
};
return (
<div className="flex min-h-screen bg-gray-50 dark:bg-gray-900">
{/* Sidebar */}
<Sidebar isOpen={sidebarOpen} onToggle={toggleSidebar} />
{/* Main Content Area */}
<div className="flex flex-col flex-1 min-h-screen">
{/* Navbar */}
<div className="sticky top-0 z-20 bg-gray-50 dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800">
<Navbar onSidebarToggle={toggleSidebar} />
</div>
{/* Page Content */}
<main className="flex-1 py-6 px-4 sm:px-6 lg:px-8 overflow-y-auto">
{children}
</main>
</div>
</div>
);
};
// App Routes Component
const AppRoutes = () => {
return (
<Routes>
<Route path="/login" element={<Login />} />
<Route
path="/"
element={
<ProtectedRoute>
<Layout>
<Dashboard />
</Layout>
</ProtectedRoute>
}
/>
<Route
path="/transactions"
element={
<ProtectedRoute>
<Layout>
<Transactions />
</Layout>
</ProtectedRoute>
}
/>
<Route
path="/settings"
element={
<ProtectedRoute>
<Layout>
<Settings />
</Layout>
</ProtectedRoute>
}
/>
<Route path="*" element={<Navigate to="/" />} />
</Routes>
);
};
// Main App Component
const App = () => {
return (
<AuthProvider>
<Router>
<div className="App">
<AppRoutes />
</div>
</Router>
</AuthProvider>
);
};
export default App;