22
33import * as React from 'react' ;
44import { Track } from 'livekit-client' ;
5- import { BarVisualizer } from '@livekit/components-react' ;
5+ import { BarVisualizer , useRemoteParticipants } from '@livekit/components-react' ;
66import { ChatTextIcon , PhoneDisconnectIcon } from '@phosphor-icons/react/dist/ssr' ;
77import { ChatInput } from '@/components/livekit/chat/chat-input' ;
88import { Button } from '@/components/ui/button' ;
@@ -37,9 +37,13 @@ export function AgentControlBar({
3737 onDeviceError,
3838 ...props
3939} : AgentControlBarProps ) {
40+ const participants = useRemoteParticipants ( ) ;
4041 const [ chatOpen , setChatOpen ] = React . useState ( false ) ;
4142 const [ isSendingMessage , setIsSendingMessage ] = React . useState ( false ) ;
4243
44+ const isAgentAvailable = participants . some ( ( p ) => p . isAgent ) ;
45+ const isInputDisabled = ! chatOpen || ! isAgentAvailable || isSendingMessage ;
46+
4347 const {
4448 micTrackRef,
4549 visibleControls,
@@ -90,7 +94,7 @@ export function AgentControlBar({
9094 ) }
9195 >
9296 < div className = "flex h-8 w-full" >
93- < ChatInput onSend = { handleSendMessage } disabled = { isSendingMessage } className = "w-full" />
97+ < ChatInput onSend = { handleSendMessage } disabled = { isInputDisabled } className = "w-full" />
9498 </ div >
9599 < hr className = "border-bg2 my-3" />
96100 </ div >
@@ -151,7 +155,7 @@ export function AgentControlBar({
151155 pending = { cameraToggle . pending }
152156 disabled = { cameraToggle . pending }
153157 onPressedChange = { cameraToggle . toggle }
154- className = "peer/track relative w-auto pr-3 pl-3 disabled:opacity-100 md:rounded-r-none md:border-r-0 md:pr-2"
158+ className = "peer/track relative w-auto rounded-r-none pr-3 pl-3 disabled:opacity-100 md:border-r-0 md:pr-2"
155159 />
156160 < hr className = "bg-separator1 peer-data-[state=off]/track:bg-separatorSerious relative z-10 -mr-px hidden h-4 w-px md:block" />
157161 < DeviceSelect
@@ -166,7 +170,7 @@ export function AgentControlBar({
166170 'peer-data-[state=off]/track:text-destructive-foreground' ,
167171 'hover:text-fg1 focus:text-fg1' ,
168172 'hover:peer-data-[state=off]/track:text-destructive-foreground focus:peer-data-[state=off]/track:text-destructive-foreground' ,
169- 'hidden rounded-l-none md:block ' ,
173+ 'rounded-l-none' ,
170174 ] ) }
171175 />
172176 </ div >
@@ -191,6 +195,7 @@ export function AgentControlBar({
191195 aria-label = "Toggle chat"
192196 pressed = { chatOpen }
193197 onPressedChange = { setChatOpen }
198+ disabled = { ! isAgentAvailable }
194199 className = "aspect-square h-full"
195200 >
196201 < ChatTextIcon weight = "bold" />
0 commit comments