From abe70d179383d9bb01604b9f516e685ea482ce5f Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 2 Oct 2025 13:26:41 -0500 Subject: [PATCH] refac --- src/routes/(app)/+layout.svelte | 182 ++++++++++++++++---------------- 1 file changed, 92 insertions(+), 90 deletions(-) diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index ad540ff663..e26c99bfc5 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -56,6 +56,92 @@ let version; + const clearChatInputStorage = () => { + const chatInputKeys = Object.keys(localStorage).filter((key) => key.startsWith('chat-input')); + if (chatInputKeys.length > 0) { + chatInputKeys.forEach((key) => { + localStorage.removeItem(key); + }); + } + }; + + const checkLocalDBChats = async () => { + try { + // Check if IndexedDB exists + DB = await openDB('Chats', 1); + + if (!DB) { + return; + } + + const chats = await DB.getAllFromIndex('chats', 'timestamp'); + localDBChats = chats.map((item, idx) => chats[chats.length - 1 - idx]); + + if (localDBChats.length === 0) { + await deleteDB('Chats'); + } + } catch (error) { + // IndexedDB Not Found + } + }; + + const setUserSettings = async (cb) => { + const userSettings = await getUserSettings(localStorage.token).catch((error) => { + console.error(error); + return null; + }); + + if (userSettings) { + await settings.set(userSettings.ui); + + if (cb) { + await cb(); + } + } + + try { + return JSON.parse(localStorage.getItem('settings') ?? '{}'); + } catch (e: unknown) { + console.error('Failed to parse settings from localStorage', e); + return {}; + } + }; + + const setModels = async () => { + models.set( + await getModels( + localStorage.token, + $config?.features?.enable_direct_connections ? ($settings?.directConnections ?? null) : null + ) + ); + }; + + const setToolServers = async () => { + let toolServersData = await getToolServersData($settings?.toolServers ?? []); + toolServersData = toolServersData.filter((data) => { + if (!data || data.error) { + toast.error( + $i18n.t(`Failed to connect to {{URL}} OpenAPI tool server`, { + URL: data?.url + }) + ); + return false; + } + return true; + }); + toolServers.set(toolServersData); + }; + + const setBanners = async () => { + const bannersData = await getBanners(localStorage.token); + banners.set(bannersData); + }; + + const setTools = async () => { + const toolsData = await getTools(localStorage.token); + tools.set(toolsData); + }; + onMount(async () => { if ($user === undefined || $user === null) { await goto('/auth'); @@ -65,97 +151,13 @@ return; } - const chatInputKeys = Object.keys(localStorage).filter((key) => key.startsWith('chat-input')); - if (chatInputKeys.length > 0) { - chatInputKeys.forEach((key) => { - localStorage.removeItem(key); - }); - } - - const loadChatsFromDB = async () => { - try { - // Check if IndexedDB exists - DB = await openDB('Chats', 1); - - if (!DB) { - return; - } - - const chats = await DB.getAllFromIndex('chats', 'timestamp'); - localDBChats = chats.map((item, idx) => chats[chats.length - 1 - idx]); - - if (localDBChats.length === 0) { - await deleteDB('Chats'); - } - } catch (error) { - // IndexedDB Not Found - } - }; - - const loadUserSettings = async (): Promise[0]> => { - const userSettings = await getUserSettings(localStorage.token).catch((error) => { - console.error(error); - return null; - }); - - if (userSettings) { - return userSettings.ui; - } - - try { - return JSON.parse(localStorage.getItem('settings') ?? '{}'); - } catch (e: unknown) { - console.error('Failed to parse settings from localStorage', e); - return {}; - } - }; - - const loadModels = async () => { - models.set( - await getModels( - localStorage.token, - $config?.features?.enable_direct_connections - ? ($settings?.directConnections ?? null) - : null - ) - ); - }; - - const loadToolServers = async () => { - let toolServersData = await getToolServersData($settings?.toolServers ?? []); - toolServersData = toolServersData.filter((data) => { - if (!data || data.error) { - toast.error( - $i18n.t(`Failed to connect to {{URL}} OpenAPI tool server`, { - URL: data?.url - }) - ); - return false; - } - return true; - }); - toolServers.set(toolServersData); - }; - - const loadBanners = async () => { - const bannersData = await getBanners(localStorage.token); - banners.set(bannersData); - }; - - const loadTools = async () => { - const toolsData = await getTools(localStorage.token); - tools.set(toolsData); - }; - - // Parallel loading + clearChatInputStorage(); await Promise.all([ - loadChatsFromDB(), - loadBanners(), - loadTools(), - loadUserSettings().then((loadedSettings) => { - settings.set(loadedSettings); - // The following functions are dependent on the settings - return Promise.all([loadModels(), loadToolServers()]); + checkLocalDBChats(), + setBanners(), + setTools(), + setUserSettings(async () => { + await Promise.all([setModels(), setToolServers()]); }) ]);