#591 - databases

This commit is contained in:
Saeed Vaziry
2025-05-20 17:35:20 +02:00
parent eb86204069
commit 2850c1fa59
30 changed files with 940 additions and 284 deletions

View File

@ -0,0 +1,59 @@
import { Server } from '@/types/server';
import { ReactNode } from 'react';
import ServerLayout from '@/layouts/server/layout';
import Container from '@/components/container';
import { NavigationMenu, NavigationMenuLink, NavigationMenuList } from '@/components/ui/navigation-menu';
import type { NavItem } from '@/types';
import { CloudUploadIcon, DatabaseIcon, UsersIcon } from 'lucide-react';
import { Link } from '@inertiajs/react';
export default function DatabaseLayout({ server, children }: { server: Server; children: ReactNode }) {
const navItems: NavItem[] = [
{
title: 'Databases',
href: route('databases', { server: server.id }),
icon: DatabaseIcon,
},
{
title: 'Users',
href: '/database-users',
icon: UsersIcon,
},
{
title: 'Backups',
href: '/backups',
icon: CloudUploadIcon,
},
];
return (
<ServerLayout server={server}>
<Container className="max-w-5xl">
<div className="bg-muted/10 inline-flex rounded-md border">
<NavigationMenu className="flex">
<NavigationMenuList>
{navItems.map((item: NavItem) => (
<NavigationMenuLink
key={item.title}
asChild
className={
(item.onlyActivePath ? window.location.href === item.href : window.location.href.startsWith(item.href)) ? 'bg-muted' : ''
}
>
<Link href={item.href}>
<div className="flex items-center gap-2">
{item.icon && <item.icon />}
{item.title}
</div>
</Link>
</NavigationMenuLink>
))}
</NavigationMenuList>
</NavigationMenu>
</div>
</Container>
{children}
</ServerLayout>
);
}

View File

@ -1,19 +1,5 @@
import { type NavItem } from '@/types';
import {
ChartPieIcon,
ClockIcon,
CogIcon,
DatabaseIcon,
FlameIcon,
FolderOpenIcon,
HomeIcon,
KeyIcon,
ListEndIcon,
LogsIcon,
MousePointerClickIcon,
Settings2Icon,
TerminalSquareIcon,
} from 'lucide-react';
import { CloudUploadIcon, DatabaseIcon, HomeIcon, UsersIcon } from 'lucide-react';
import { ReactNode } from 'react';
import { Server } from '@/types/server';
import ServerHeader from '@/pages/servers/components/header';
@ -28,68 +14,81 @@ export default function ServerLayout({ server, children }: { server: Server; chi
{
title: 'Overview',
href: route('servers.show', { server: server.id }),
onlyActivePath: route('servers.show', { server: server.id }),
icon: HomeIcon,
},
{
title: 'Databases',
href: '#',
title: 'Database',
href: route('databases', { server: server.id }),
icon: DatabaseIcon,
children: [
{
title: 'Databases',
href: route('databases', { server: server.id }),
icon: DatabaseIcon,
},
{
title: 'Users',
href: '/users',
icon: UsersIcon,
},
{
title: 'Backups',
href: '/backups',
icon: CloudUploadIcon,
},
],
},
{
title: 'Sites',
href: '#',
icon: MousePointerClickIcon,
},
{
title: 'File Manager',
href: '#',
icon: FolderOpenIcon,
},
{
title: 'Firewall',
href: '#',
icon: FlameIcon,
},
{
title: 'CronJobs',
href: '#',
icon: ClockIcon,
},
{
title: 'Workers',
href: '#',
icon: ListEndIcon,
},
{
title: 'SSH Keys',
href: '#',
icon: KeyIcon,
},
{
title: 'Services',
href: '#',
icon: CogIcon,
},
{
title: 'Metrics',
href: '#',
icon: ChartPieIcon,
},
{
title: 'Console',
href: '#',
icon: TerminalSquareIcon,
},
{
title: 'Logs',
href: '#',
icon: LogsIcon,
},
{
title: 'Settings',
href: '#',
icon: Settings2Icon,
},
// {
// title: 'Sites',
// href: '#',
// icon: MousePointerClickIcon,
// },
// {
// title: 'Firewall',
// href: '#',
// icon: FlameIcon,
// },
// {
// title: 'CronJobs',
// href: '#',
// icon: ClockIcon,
// },
// {
// title: 'Workers',
// href: '#',
// icon: ListEndIcon,
// },
// {
// title: 'SSH Keys',
// href: '#',
// icon: KeyIcon,
// },
// {
// title: 'Services',
// href: '#',
// icon: CogIcon,
// },
// {
// title: 'Metrics',
// href: '#',
// icon: ChartPieIcon,
// },
// {
// title: 'Console',
// href: '#',
// icon: TerminalSquareIcon,
// },
// {
// title: 'Logs',
// href: '#',
// icon: LogsIcon,
// },
// {
// title: 'Settings',
// href: '#',
// icon: Settings2Icon,
// },
];
return (