From ae760e191ac49a2d030dcd0a868a955fd5d66bdd Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 11 Jun 2026 14:39:50 +0100 Subject: [PATCH] refac --- .../src/lib/components/AdminPanel.svelte | 60 ----------------- .../src/lib/components/SettingsModal.svelte | 67 +++++++++++++++++-- .../src/lib/components/Sidebar.svelte | 24 ++----- 3 files changed, 67 insertions(+), 84 deletions(-) delete mode 100644 cptr/frontend/src/lib/components/AdminPanel.svelte diff --git a/cptr/frontend/src/lib/components/AdminPanel.svelte b/cptr/frontend/src/lib/components/AdminPanel.svelte deleted file mode 100644 index 7d953fa..0000000 --- a/cptr/frontend/src/lib/components/AdminPanel.svelte +++ /dev/null @@ -1,60 +0,0 @@ - - - - - -
- {#if activeTab === 'users'} - - {:else if activeTab === 'connections'} - - {:else if activeTab === 'models'} - - {:else if activeTab === 'settings'} - - {/if} -
-
diff --git a/cptr/frontend/src/lib/components/SettingsModal.svelte b/cptr/frontend/src/lib/components/SettingsModal.svelte index 44fb49a..49d2524 100644 --- a/cptr/frontend/src/lib/components/SettingsModal.svelte +++ b/cptr/frontend/src/lib/components/SettingsModal.svelte @@ -5,16 +5,47 @@ import Account from './Settings/Account.svelte'; import Keyboard from './Settings/Keyboard.svelte'; import About from './Settings/About.svelte'; + import Users from './Admin/Users.svelte'; + import Connections from './Admin/Connections.svelte'; + import Models from './Admin/Models.svelte'; + import AdminSettings from './Admin/Settings.svelte'; + import { session } from '$lib/session'; import { t } from '$lib/i18n'; + type Tab = + | 'general' + | 'keyboard' + | 'account' + | 'about' + | 'users' + | 'connections' + | 'models' + | 'admin_settings'; + interface Props { onclose: () => void; - initialTab?: 'general' | 'keyboard' | 'account' | 'about'; + initialTab?: Tab; } let { onclose, initialTab = 'general' }: Props = $props(); - let activeTab = $state<'general' | 'keyboard' | 'account' | 'about'>(initialTab); + let activeTab = $state(initialTab); + + const isAdmin = $derived($session?.role === 'admin'); + + const personalTabs: { id: Tab; label: string; icon: string }[] = [ + { id: 'general', label: 'General', icon: 'settings' }, + { id: 'keyboard', label: 'Keyboard', icon: 'terminal' }, + { id: 'account', label: 'Account', icon: 'user' }, + { id: 'about', label: 'About', icon: 'info' } + ]; + + const adminTabs: { id: Tab; label: string; icon: string }[] = [ + { id: 'users', label: 'Users', icon: 'user' }, + { id: 'connections', label: 'Connections', icon: 'plug' }, + { id: 'models', label: 'Models', icon: 'cube' }, + { id: 'admin_settings', label: 'Configuration', icon: 'shield' } + ]; {$t('settings.back')} - {#each [{ id: 'general', label: $t('settings.general'), icon: 'settings' }, { id: 'keyboard', label: 'Keyboard', icon: 'terminal' }, { id: 'account', label: $t('settings.account'), icon: 'user' }, { id: 'about', label: $t('settings.about'), icon: 'info' }] as tab} + + + {#each personalTabs as tab} {/each} + + + {#if isAdmin} + + + {#each adminTabs as tab} + + {/each} + {/if} @@ -56,6 +107,14 @@ {:else if activeTab === 'about'} + {:else if activeTab === 'users'} + + {:else if activeTab === 'connections'} + + {:else if activeTab === 'models'} + + {:else if activeTab === 'admin_settings'} + {/if} diff --git a/cptr/frontend/src/lib/components/Sidebar.svelte b/cptr/frontend/src/lib/components/Sidebar.svelte index 346f21e..74f8a44 100644 --- a/cptr/frontend/src/lib/components/Sidebar.svelte +++ b/cptr/frontend/src/lib/components/Sidebar.svelte @@ -21,7 +21,7 @@ import DirectoryPicker from './DirectoryPicker.svelte'; import DropdownMenu from './DropdownMenu.svelte'; import SettingsModal from './SettingsModal.svelte'; - import AdminPanel from './AdminPanel.svelte'; + import { tooltip } from '$lib/tooltip'; import { session, clearSession } from '$lib/session'; import { getWelcome } from '$lib/apis/state'; @@ -37,8 +37,7 @@ let showPicker = $state(false); let showMenu = $state(false); let showSettings = $state(false); - let settingsTab = $state<'general' | 'account' | 'about'>('general'); - let showAdmin = $state(false); + let settingsTab = $state('general'); let wsMenuPath = $state(null); let wsMenuAnchor = $state(null); @@ -508,25 +507,14 @@ image: $session.profile_image_url || '/user.png', onclick: () => { settingsTab = 'account'; + showMenu = false; showSettings = true; } } ] : []), ...($session ? [{ divider: true, label: '', onclick: () => {} }] : []), - { label: $t('sidebar.settings'), icon: 'settings', onclick: openSettings }, - ...($session?.role === 'admin' - ? [ - { - label: $t('sidebar.admin'), - icon: 'shield', - onclick: () => { - showMenu = false; - showAdmin = true; - } - } - ] - : []), + { label: $t('sidebar.settings'), icon: 'settings', shortcut: formatChord($keybindings.openSettings), onclick: openSettings }, { divider: true, label: '', onclick: () => {} }, { label: $t('sidebar.logOut'), icon: 'log-out', onclick: logout } ]} @@ -562,10 +550,6 @@ /> {/if} -{#if showAdmin} - (showAdmin = false)} /> -{/if} -