diff --git a/web/containers/Layout/BottomPanel/SystemMonitor/TableActiveModel/index.tsx b/web/containers/Layout/BottomPanel/SystemMonitor/TableActiveModel/index.tsx index 36cdd317fa..7a7dd1e241 100644 --- a/web/containers/Layout/BottomPanel/SystemMonitor/TableActiveModel/index.tsx +++ b/web/containers/Layout/BottomPanel/SystemMonitor/TableActiveModel/index.tsx @@ -22,9 +22,7 @@ const TableActiveModel = () => {
- {activeModel && - engines && - isLocalEngine(engines, activeModel.engine) ? ( + {activeModel && isLocalEngine(engines, activeModel.engine) ? (
model.id === modelId) if (model) { if ( - engines?.[model.engine]?.[0].type === 'local' || - (engines?.[model.engine]?.[0].api_key?.length ?? 0) > 0 + engines?.[model.engine]?.[0]?.type === 'local' || + (engines?.[model.engine]?.[0]?.api_key?.length ?? 0) > 0 ) setSelectedModel(model) } else { diff --git a/web/containers/Providers/SWRConfigProvider.tsx b/web/containers/Providers/SWRConfigProvider.tsx new file mode 100644 index 0000000000..3463853439 --- /dev/null +++ b/web/containers/Providers/SWRConfigProvider.tsx @@ -0,0 +1,30 @@ +'use client' + +import * as React from 'react' + +import { SWRConfig } from 'swr' + +function SWRConfigProvider({ children }: { children: React.ReactNode }) { + // https://swr.vercel.app/docs/advanced/cache#localstorage-based-persistent-cache + // When initializing, we restore the data from `localStorage` into a map. + + const map = React.useMemo(() => new Map(), []) + React.useEffect(() => { + const savedCache = JSON.parse( + window.localStorage.getItem('app-cache') || '[]' + ) + savedCache.forEach(([key, value]: [string, object]) => { + map.set(key, value) + }) + + // Before unloading the app, we write back all the data into `localStorage`. + window.addEventListener('beforeunload', () => { + const appCache = JSON.stringify(Array.from(map.entries())) + window.localStorage.setItem('app-cache', appCache) + }) + }, [map]) + + return map }}>{children} +} + +export default SWRConfigProvider diff --git a/web/containers/Providers/index.tsx b/web/containers/Providers/index.tsx index 67778e30c4..bed0f07ecf 100644 --- a/web/containers/Providers/index.tsx +++ b/web/containers/Providers/index.tsx @@ -4,6 +4,8 @@ import { PropsWithChildren } from 'react' import { Toaster } from 'react-hot-toast' +import { SWRConfig } from 'swr' + import EventListener from '@/containers/Providers/EventListener' import JotaiWrapper from '@/containers/Providers/Jotai' @@ -18,27 +20,30 @@ import DeepLinkListener from './DeepLinkListener' import KeyListener from './KeyListener' import Responsive from './Responsive' +import SWRConfigProvider from './SWRConfigProvider' import SettingsHandler from './SettingsHandler' const Providers = ({ children }: PropsWithChildren) => { return ( - - - - - <> - - - - - - - - {children} - - - - + + + + + + <> + + + + + + + + {children} + + + + + ) } diff --git a/web/screens/Settings/MyModels/MyModelList/index.tsx b/web/screens/Settings/MyModels/MyModelList/index.tsx index ba21d79bd9..6824d1471f 100644 --- a/web/screens/Settings/MyModels/MyModelList/index.tsx +++ b/web/screens/Settings/MyModels/MyModelList/index.tsx @@ -2,7 +2,7 @@ import { memo, useState } from 'react' import { Model } from '@janhq/core' import { Badge, Button, Tooltip, useClickOutside } from '@janhq/joi' -import { useAtom, useAtomValue } from 'jotai' +import { useAtom } from 'jotai' import { MoreVerticalIcon, PlayIcon,