chore: sync submodule state (parent ref update)

Made-with: Cursor
This commit is contained in:
defiQUG
2026-03-02 12:14:09 -08:00
parent 50ab378da9
commit 5efe36b1e0
1100 changed files with 155024 additions and 8674 deletions

View File

@@ -0,0 +1,71 @@
import { Outlet, Link, useLocation } from 'react-router-dom';
import { useAuthStore } from '../stores/authStore';
import { LogOut, Key, Network, Factory, BarChart3 } from 'lucide-react';
import toast from 'react-hot-toast';
export default function Layout() {
const { user, logout } = useAuthStore();
const location = useLocation();
const handleLogout = () => {
logout();
toast.success('Logged out successfully');
};
const navigation = [
{ name: 'Dashboard', href: '/', icon: BarChart3 },
{ name: 'API Keys', href: '/api-keys', icon: Key },
{ name: 'Endpoints', href: '/endpoints', icon: Network },
{ name: 'DEX Factories', href: '/dex-factories', icon: Factory },
];
return (
<div className="min-h-screen bg-gray-50">
<nav className="bg-white shadow-sm border-b border-gray-200">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between h-16">
<div className="flex">
<div className="flex-shrink-0 flex items-center">
<h1 className="text-xl font-bold text-gray-900">Token Aggregation Control Panel</h1>
</div>
<div className="hidden sm:ml-6 sm:flex sm:space-x-8">
{navigation.map((item) => {
const Icon = item.icon;
const isActive = location.pathname === item.href;
return (
<Link
key={item.name}
to={item.href}
className={`inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium ${
isActive
? 'border-primary-500 text-gray-900'
: 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700'
}`}
>
<Icon className="mr-2 h-4 w-4" />
{item.name}
</Link>
);
})}
</div>
</div>
<div className="flex items-center space-x-4">
<span className="text-sm text-gray-700">{user?.username}</span>
<button
onClick={handleLogout}
className="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none"
>
<LogOut className="h-4 w-4 mr-2" />
Logout
</button>
</div>
</div>
</div>
</nav>
<main className="max-w-7xl mx-auto py-6 sm:px-6 lg:px-8">
<Outlet />
</main>
</div>
);
}

View File

@@ -0,0 +1,16 @@
import { Navigate } from 'react-router-dom';
import { useAuthStore } from '../stores/authStore';
interface ProtectedRouteProps {
children: React.ReactNode;
}
export default function ProtectedRoute({ children }: ProtectedRouteProps) {
const { isAuthenticated } = useAuthStore();
if (!isAuthenticated) {
return <Navigate to="/login" replace />;
}
return <>{children}</>;
}