import { useState } from 'react' import type { ConversationItem } from '@/types/app' import produce from 'immer' const storageConversationIdKey = 'conversationIdInfo' type ConversationInfoType = Omit function useConversation() { const [conversationList, setConversationList] = useState([]) const [currConversationId, doSetCurrConversationId] = useState('-1') // when set conversation id, we do not have set appId const setCurrConversationId = (id: string, appId: string, isSetToLocalStroge = true, newConversationName = '') => { doSetCurrConversationId(id) if (isSetToLocalStroge && id !== '-1') { // conversationIdInfo: {[appId1]: conversationId1, [appId2]: conversationId2} const conversationIdInfo = globalThis.localStorage?.getItem(storageConversationIdKey) ? JSON.parse(globalThis.localStorage?.getItem(storageConversationIdKey) || '') : {} conversationIdInfo[appId] = id globalThis.localStorage?.setItem(storageConversationIdKey, JSON.stringify(conversationIdInfo)) } } const getConversationIdFromStorage = (appId: string) => { const conversationIdInfo = globalThis.localStorage?.getItem(storageConversationIdKey) ? JSON.parse(globalThis.localStorage?.getItem(storageConversationIdKey) || '') : {} const id = conversationIdInfo[appId] return id } const isNewConversation = currConversationId === '-1' // input can be updated by user const [newConversationInputs, setNewConversationInputs] = useState | null>(null) const resetNewConversationInputs = () => { if (!newConversationInputs) return setNewConversationInputs(produce(newConversationInputs, draft => { Object.keys(draft).forEach(key => { draft[key] = '' }) })) } const [existConversationInputs, setExistConversationInputs] = useState | null>(null) const currInputs = isNewConversation ? newConversationInputs : existConversationInputs const setCurrInputs = isNewConversation ? setNewConversationInputs : setExistConversationInputs // info is muted const [newConversationInfo, setNewConversationInfo] = useState(null) const [existConversationInfo, setExistConversationInfo] = useState(null) const currConversationInfo = isNewConversation ? newConversationInfo : existConversationInfo return { conversationList, setConversationList, currConversationId, setCurrConversationId, getConversationIdFromStorage, isNewConversation, currInputs, newConversationInputs, existConversationInputs, resetNewConversationInputs, setCurrInputs, currConversationInfo, setNewConversationInfo, setExistConversationInfo } } export default useConversation;