22
33import React , { useEffect , useRef , useState } from 'react' ;
44import { motion } from 'motion/react' ;
5+ import { useSessionMessages } from '@livekit/components-react' ;
56import type { AppConfig } from '@/app-config' ;
67import { ChatTranscript } from '@/components/app/chat-transcript' ;
78import { PreConnectMessage } from '@/components/app/preconnect-message' ;
@@ -10,7 +11,7 @@ import {
1011 AgentControlBar ,
1112 type ControlBarControls ,
1213} from '@/components/livekit/agent-control-bar/agent-control-bar' ;
13- import { useChatMessages } from '@/hooks/useChatMessages ' ;
14+ import { useAppSession } from '@/hooks/useAppSession ' ;
1415import { useConnectionTimeout } from '@/hooks/useConnectionTimout' ;
1516import { useDebugMode } from '@/hooks/useDebug' ;
1617import { cn } from '@/lib/utils' ;
@@ -58,6 +59,7 @@ export function Fade({ top = false, bottom = false, className }: FadeProps) {
5859 />
5960 ) ;
6061}
62+
6163interface SessionViewProps {
6264 appConfig : AppConfig ;
6365}
@@ -66,10 +68,11 @@ export const SessionView = ({
6668 appConfig,
6769 ...props
6870} : React . ComponentProps < 'section' > & SessionViewProps ) => {
69- useConnectionTimeout ( 200_000 ) ;
71+ useConnectionTimeout ( 20_000 ) ;
7072 useDebugMode ( { enabled : IN_DEVELOPMENT } ) ;
7173
72- const messages = useChatMessages ( ) ;
74+ const { session, isSessionActive, endSession } = useAppSession ( ) ;
75+ const { messages } = useSessionMessages ( session ) ;
7376 const [ chatOpen , setChatOpen ] = useState ( false ) ;
7477 const scrollAreaRef = useRef < HTMLDivElement > ( null ) ;
7578
@@ -90,6 +93,11 @@ export const SessionView = ({
9093 }
9194 } , [ messages ] ) ;
9295
96+ const handleDisconnect = ( ) => {
97+ // pass false so we can manually end the session when the exit animation completes
98+ endSession ( false ) ;
99+ } ;
100+
93101 return (
94102 < section className = "bg-background relative z-10 h-full w-full overflow-hidden" { ...props } >
95103 { /* Chat Transcript */ }
@@ -100,7 +108,7 @@ export const SessionView = ({
100108 ) }
101109 >
102110 < Fade top className = "absolute inset-x-4 top-0 h-40" />
103- < ScrollArea ref = { scrollAreaRef } className = "px-4 pt-40 pb-[150px] md:px-6 md:pb-[180px ]" >
111+ < ScrollArea ref = { scrollAreaRef } className = "px-4 pt-40 pb-[150px] md:px-6 md:pb-[200px ]" >
104112 < ChatTranscript
105113 hidden = { ! chatOpen }
106114 messages = { messages }
@@ -122,7 +130,12 @@ export const SessionView = ({
122130 ) }
123131 < div className = "bg-background relative mx-auto max-w-2xl pb-3 md:pb-12" >
124132 < Fade bottom className = "absolute inset-x-0 top-0 h-4 -translate-y-full" />
125- < AgentControlBar controls = { controls } onChatOpenChange = { setChatOpen } />
133+ < AgentControlBar
134+ controls = { controls }
135+ isSessionActive = { isSessionActive }
136+ onDisconnect = { handleDisconnect }
137+ onChatOpenChange = { setChatOpen }
138+ />
126139 </ div >
127140 </ MotionBottom >
128141 </ section >
0 commit comments