import { ExternalLink } from 'lucide-react' import { useTheme } from 'next-themes' import Image from 'next/image' import { useState } from 'react' import { cn, HoverCard, HoverCardContent, HoverCardTrigger, InfoIcon } from 'ui' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' import { getErrorCodeInfo } from './ErrorCodeTooltip.utils' import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' import { AiAssistantDropdown } from '@/components/ui/AiAssistantDropdown' import { useErrorCodesQuery } from '@/data/content-api/docs-error-codes-query' import { Service } from '@/data/graphql/graphql' import { BASE_PATH } from '@/lib/constants' import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state' interface ErrorCodeTooltipProps { errorCode: string service?: Service children: React.ReactNode } export const ErrorCodeTooltip = ({ errorCode, service, children }: ErrorCodeTooltipProps) => { const [isOpen, setIsOpen] = useState(false) const { resolvedTheme } = useTheme() const snap = useAiAssistantStateSnapshot() const { openSidebar } = useSidebarManagerSnapshot() const { definition, docsUrl: sharedDocsUrl } = getErrorCodeInfo(errorCode, service) const { data, isPending } = useErrorCodesQuery( { code: errorCode, service }, { enabled: isOpen && !definition } ) const errors = data?.errors?.nodes?.filter((e) => !!e.message) ?? [] const description = definition?.description ?? errors[0]?.message const docsUrl = sharedDocsUrl const buildPrompt = () => { const servicePart = service ? ` in Briven ${service}` : '' const descriptionPart = description ? `\n\nError description: ${description}` : '' return `I'm encountering error code \`${errorCode}\`${servicePart}.${descriptionPart}\n\nCan you explain what this error means and suggest steps to fix it?` } const handleOpenAssistant = () => { openSidebar(SIDEBAR_KEYS.AI_ASSISTANT) snap.newChat({ name: `Fix error ${errorCode}`, initialMessage: buildPrompt(), }) } return ( {children}

{errorCode}

{isPending && !definition ? (
) : !description ? (

No description available for this error code.

) : (

{description}

)}
{docsUrl && (
Briven DOCS
)} , href: docsUrl, }, ]} />
) }