import { useRecoilCallback } from 'recoil'; import { clearLocalStorage } from '~/utils/localStorage'; import store from '~/store'; export default function useClearStates() { const clearConversations = store.useClearConvoState(); const clearSubmissions = store.useClearSubmissionState(); const clearLatestMessages = store.useClearLatestMessages(); const clearStates = useRecoilCallback( ({ reset, snapshot }) => async (skipFirst?: boolean) => { await clearSubmissions(skipFirst); await clearConversations(skipFirst); await clearLatestMessages(skipFirst); const keys = await snapshot.getPromise(store.conversationKeysAtom); for (const key of keys) { if (skipFirst === true && key === 0) { continue; } reset(store.filesByIndex(key)); reset(store.presetByIndex(key)); reset(store.textByIndex(key)); reset(store.showStopButtonByIndex(key)); reset(store.abortScrollFamily(key)); reset(store.isSubmittingFamily(key)); reset(store.optionSettingsFamily(key)); reset(store.showAgentSettingsFamily(key)); reset(store.showPopoverFamily(key)); reset(store.showMentionPopoverFamily(key)); reset(store.showPlusPopoverFamily(key)); reset(store.showPromptsPopoverFamily(key)); reset(store.activePromptByIndex(key)); reset(store.globalAudioURLFamily(key)); reset(store.globalAudioFetchingFamily(key)); reset(store.globalAudioPlayingFamily(key)); reset(store.activeRunFamily(key)); reset(store.audioRunFamily(key)); reset(store.messagesSiblingIdxFamily(key.toString())); } clearLocalStorage(skipFirst); }, [], ); return clearStates; }