Skip to content

Commit 626a6a1

Browse files
committed
refactor(chat): streamline error handling and state management in ChatMessageTool component
1 parent d8d92ed commit 626a6a1

1 file changed

Lines changed: 22 additions & 26 deletions

File tree

apps/desktop/src/routes/_protected/database/$id/sql/-components/chat/chat-message-tools.tsx

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -238,16 +238,14 @@ function ChatMessageToolContent({ part }: { part: ToolUIPart }): ReactNode {
238238

239239
export function ChatMessageTool({ part, className }: { part: ToolUIPart, className?: string }) {
240240
const loading = part.state === 'input-streaming' || part.state === 'input-available'
241-
const error = part.state === 'output-error'
242-
243-
const errorMsg = error ? extractErrorMessage(part.output) : null
241+
const error = part.state === 'output-error' ? extractErrorMessage(part.output) : null
244242

245243
const Icon = ICONS[part.state]
246244
const title = getTitle(part)
247245

248-
const [open, setOpen] = useState(error)
246+
const [open, setOpen] = useState(!!error)
249247

250-
if (error && !open) {
248+
if (!!error && !open) {
251249
setOpen(true)
252250
}
253251

@@ -273,9 +271,9 @@ export function ChatMessageTool({ part, className }: { part: ToolUIPart, classNa
273271
open={open}
274272
onOpenChange={error ? undefined : setOpen}
275273
>
276-
<SingleAccordionTrigger className="gap-2 py-2" disabled={error}>
274+
<SingleAccordionTrigger className="gap-2 py-2" disabled={!!error}>
277275
<div className="flex min-w-0 flex-1 items-center gap-2">
278-
<Icon className={cn('size-4 shrink-0', error && 'text-red-600')} part={part} />
276+
<Icon className={cn('size-4 shrink-0', !!error && 'text-red-600')} part={part} />
279277
<span className="truncate text-sm">
280278
{title}
281279
</span>
@@ -284,26 +282,24 @@ export function ChatMessageTool({ part, className }: { part: ToolUIPart, classNa
284282
</SingleAccordionTrigger>
285283

286284
<SingleAccordionContent>
287-
<div className="mt-2 space-y-4 text-sm">
288-
{errorMsg
289-
? (
290-
<div className="space-y-2">
291-
<div className="text-xs text-muted-foreground uppercase">
292-
Error
293-
</div>
294-
<div
295-
className={`
296-
rounded-md border border-destructive/20 bg-destructive/10
297-
px-3 py-2 text-sm text-destructive
298-
`}
299-
role="alert"
300-
>
301-
{errorMsg}
302-
</div>
285+
{error
286+
? (
287+
<div className="space-y-2">
288+
<div className="text-xs text-muted-foreground uppercase">
289+
Error
303290
</div>
304-
)
305-
: <ChatMessageToolContent part={part} />}
306-
</div>
291+
<div
292+
className={`
293+
rounded-md border border-destructive/20 bg-destructive/10
294+
px-3 py-2 text-sm text-destructive
295+
`}
296+
role="alert"
297+
>
298+
{error}
299+
</div>
300+
</div>
301+
)
302+
: <ChatMessageToolContent part={part} />}
307303
</SingleAccordionContent>
308304
</SingleAccordion>
309305
)

0 commit comments

Comments
 (0)