fix: use composing atom to switch between cache and local storage

This commit is contained in:
Louis 2024-12-17 16:44:34 +07:00
parent 2b0a4c433c
commit 1395aa40eb
No known key found for this signature in database
GPG Key ID: 44FA9F4D33C37DE2

View File

@ -6,7 +6,7 @@ import {
} from '@janhq/core'
import { atom } from 'jotai'
import { atomWithStorage, createJSONStorage } from 'jotai/utils'
import { atomWithStorage } from 'jotai/utils'
import {
getActiveThreadIdAtom,
@ -16,17 +16,23 @@ import {
import { TokenSpeed } from '@/types/token'
const CHAT_MESSAGE_NAME = 'chatMessages'
const storage = createJSONStorage<Record<string, ThreadMessage[]>>(
() => sessionStorage
)
/**
* Stores all chat messages for all threads
*/
export const chatMessages = atomWithStorage<Record<string, ThreadMessage[]>>(
CHAT_MESSAGE_NAME,
{},
storage,
{ getOnInit: true }
export const chatMessagesStorage = atomWithStorage<
Record<string, ThreadMessage[]>
>(CHAT_MESSAGE_NAME, {}, undefined, { getOnInit: true })
export const cachedMessages = atom<Record<string, ThreadMessage[]>>()
/**
* Retrieve chat messages for all threads
*/
export const chatMessages = atom(
(get) => get(cachedMessages) ?? get(chatMessagesStorage),
(_get, set, newValue: Record<string, ThreadMessage[]>) => {
set(cachedMessages, newValue)
;(() => set(chatMessagesStorage, newValue))()
}
)
/**