| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | import { useState } from 'react'import produce from 'immer'import type { ConversationItem } from '@/models/share'const storageConversationIdKey = 'conversationIdInfo'type ConversationInfoType = Omit<ConversationItem, 'inputs' | 'id'>function useConversation() {  const [conversationList, setConversationList] = useState<ConversationItem[]>([])  const [pinnedConversationList, setPinnedConversationList] = useState<ConversationItem[]>([])  const [currConversationId, doSetCurrConversationId] = useState<string>('-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<Record<string, any> | null>(null)  const resetNewConversationInputs = () => {    if (!newConversationInputs)      return    setNewConversationInputs(produce(newConversationInputs, (draft) => {      Object.keys(draft).forEach((key) => {        draft[key] = ''      })    }))  }  const [existConversationInputs, setExistConversationInputs] = useState<Record<string, any> | null>(null)  const currInputs = isNewConversation ? newConversationInputs : existConversationInputs  const setCurrInputs = isNewConversation ? setNewConversationInputs : setExistConversationInputs  // info is muted  const [newConversationInfo, setNewConversationInfo] = useState<ConversationInfoType | null>(null)  const [existConversationInfo, setExistConversationInfo] = useState<ConversationInfoType | null>(null)  const currConversationInfo = isNewConversation ? newConversationInfo : existConversationInfo  return {    conversationList,    setConversationList,    pinnedConversationList,    setPinnedConversationList,    currConversationId,    setCurrConversationId,    getConversationIdFromStorage,    isNewConversation,    currInputs,    newConversationInputs,    existConversationInputs,    resetNewConversationInputs,    setCurrInputs,    currConversationInfo,    setNewConversationInfo,    setExistConversationInfo,  }}export default useConversation
 |