Files
dockhand/routes/settings/+page.svelte
Jarek Krochmalski 62e3c6439e Initial commit
2025-12-28 21:16:03 +01:00

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>