All files / webview/hooks useConversationState.ts

78.57% Statements 11/14
0% Branches 0/2
40% Functions 2/5
78.57% Lines 11/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37        515x 515x 515x       515x 9x 9x 9x     515x       515x       515x       515x                
import { useState } from 'react'
import type { MessageRouter } from './useMessageRouter'
 
export function useConversationState(router: MessageRouter) {
  const [conversations, setConversations] = useState<{ id: string; title: string; updatedAt: number }[]>([])
  const [activeConversationId, setActiveConversationId] = useState<string | null>(null)
  const [conversationSearchResults, setConversationSearchResults] = useState<
    { id: string; title: string; updatedAt: number; snippet: string }[] | null
  >(null)
 
  router.register('conversationList', (msg) => {
    setConversations(msg.conversations as typeof conversations)
    setActiveConversationId(msg.activeId as string | null)
    setConversationSearchResults(null)
  })
 
  router.register('conversationSearchResults', (msg) => {
    setConversationSearchResults((msg.results as typeof conversationSearchResults) ?? [])
  })
 
  router.register('conversationLoaded', (msg) => {
    setActiveConversationId((msg.conversation as { id: string }).id)
  })
 
  router.register('conversationSwitched', (msg) => {
    setActiveConversationId((msg.conversation as { id: string | null }).id)
  })
 
  return {
    conversations,
    setConversations,
    activeConversationId,
    conversationSearchResults,
    setConversationSearchResults,
  }
}