mirror of
https://github.com/khoaliber/dockhand.git
synced 2026-03-02 21:19:05 +00:00
130 lines
4.2 KiB
Svelte
130 lines
4.2 KiB
Svelte
<script lang="ts">
|
|
import { page } from '$app/stores';
|
|
import { goto } from '$app/navigation';
|
|
import * as Tabs from '$lib/components/ui/tabs';
|
|
import {
|
|
Settings,
|
|
Globe,
|
|
Download,
|
|
Layers,
|
|
Bell,
|
|
Crown,
|
|
Users,
|
|
Info,
|
|
GitBranch
|
|
} from 'lucide-svelte';
|
|
import PageHeader from '$lib/components/PageHeader.svelte';
|
|
|
|
// Import tab components
|
|
import GeneralTab from './general/GeneralTab.svelte';
|
|
import EnvironmentsTab from './environments/EnvironmentsTab.svelte';
|
|
import RegistriesTab from './registries/RegistriesTab.svelte';
|
|
import GitTab from './git/GitTab.svelte';
|
|
import ConfigSetsTab from './config-sets/ConfigSetsTab.svelte';
|
|
import NotificationsTab from './notifications/NotificationsTab.svelte';
|
|
import AuthTab from './auth/AuthTab.svelte';
|
|
import LicenseTab from './license/LicenseTab.svelte';
|
|
import AboutTab from './about/AboutTab.svelte';
|
|
|
|
// Tab state from URL
|
|
let activeTab = $derived($page.url.searchParams.get('tab') || 'general');
|
|
let editEnvId = $derived($page.url.searchParams.get('edit'));
|
|
let newEnv = $derived($page.url.searchParams.get('new') === 'true');
|
|
|
|
function handleTabChange(tab: string) {
|
|
goto(`/settings?tab=${tab}`, { replaceState: true, noScroll: true });
|
|
}
|
|
</script>
|
|
|
|
<div class="flex-1 min-h-0 flex flex-col gap-3 overflow-hidden">
|
|
<div class="flex flex-wrap justify-between items-center gap-3">
|
|
<PageHeader icon={Settings} title="Settings" showConnection={false} />
|
|
</div>
|
|
|
|
<Tabs.Root value={activeTab} onValueChange={handleTabChange} class="w-full flex-1 min-h-0 flex flex-col">
|
|
<Tabs.List class="w-full flex flex-wrap h-auto gap-1 p-1">
|
|
<Tabs.Trigger value="general" class="flex-1 flex items-center justify-center gap-1.5">
|
|
<Settings class="w-4 h-4" />
|
|
General
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="environments" class="flex-1 flex items-center justify-center gap-1.5">
|
|
<Globe class="w-4 h-4" />
|
|
Environments
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="registries" class="flex-1 flex items-center justify-center gap-1.5">
|
|
<Download class="w-4 h-4" />
|
|
Registries
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="git" class="flex-1 flex items-center justify-center gap-1.5">
|
|
<GitBranch class="w-4 h-4" />
|
|
Git
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="config-sets" class="flex-1 flex items-center justify-center gap-1.5">
|
|
<Layers class="w-4 h-4" />
|
|
Config sets
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="notifications" class="flex-1 flex items-center justify-center gap-1.5">
|
|
<Bell class="w-4 h-4" />
|
|
Notifications
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="auth" class="flex-1 flex items-center justify-center gap-1.5">
|
|
<Users class="w-4 h-4" />
|
|
Authentication
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="license" class="flex-1 flex items-center justify-center gap-1.5">
|
|
<Crown class="w-4 h-4" />
|
|
License
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="about" class="flex-1 flex items-center justify-center gap-1.5">
|
|
<Info class="w-4 h-4" />
|
|
About
|
|
</Tabs.Trigger>
|
|
</Tabs.List>
|
|
|
|
<!-- General Tab -->
|
|
<Tabs.Content value="general" class="flex-1 min-h-0 overflow-y-auto">
|
|
<GeneralTab />
|
|
</Tabs.Content>
|
|
|
|
<!-- Environments Tab -->
|
|
<Tabs.Content value="environments" class="flex-1 min-h-0 overflow-y-auto">
|
|
<EnvironmentsTab {editEnvId} {newEnv} />
|
|
</Tabs.Content>
|
|
|
|
<!-- Registries Tab -->
|
|
<Tabs.Content value="registries" class="flex-1 min-h-0 overflow-y-auto">
|
|
<RegistriesTab />
|
|
</Tabs.Content>
|
|
|
|
<!-- Git Tab -->
|
|
<Tabs.Content value="git" class="flex-1 min-h-0 overflow-y-auto">
|
|
<GitTab />
|
|
</Tabs.Content>
|
|
|
|
<!-- Config Sets Tab -->
|
|
<Tabs.Content value="config-sets" class="flex-1 min-h-0 overflow-y-auto">
|
|
<ConfigSetsTab />
|
|
</Tabs.Content>
|
|
|
|
<!-- Notifications Tab -->
|
|
<Tabs.Content value="notifications" class="flex-1 min-h-0 overflow-y-auto">
|
|
<NotificationsTab />
|
|
</Tabs.Content>
|
|
|
|
<!-- Auth Tab -->
|
|
<Tabs.Content value="auth" class="flex-1 min-h-0 flex flex-col">
|
|
<AuthTab onTabChange={handleTabChange} />
|
|
</Tabs.Content>
|
|
|
|
<!-- License Tab -->
|
|
<Tabs.Content value="license" class="flex-1 min-h-0 overflow-y-auto">
|
|
<LicenseTab />
|
|
</Tabs.Content>
|
|
|
|
<!-- About Tab -->
|
|
<Tabs.Content value="about" class="flex-1 min-h-0 overflow-y-auto">
|
|
<AboutTab />
|
|
</Tabs.Content>
|
|
</Tabs.Root>
|
|
</div>
|