"use client" import { Popover, PopoverContent, PopoverTrigger, } from "@mdxui/primitives/popover" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from "@mdxui/primitives/dialog" import { toast } from "sonner" import { useState, useCallback } from "react" import { ReportIssueTrigger } from "./report-issue-trigger" import { ReportIssueContent } from "./report-issue-content" import type { MessageType, ReportIssueProps } from "./types" const TAB_TITLES: Record = { question: "Submit a Question", feedback: "Submit Feedback", bug: "Report an Issue", } export function ReportIssue({ variant = "modal", side = "top", triggerLabel = "Report Issue", defaultTab = "question", defaultValues, topics, severityOptions, user, context, captureMetadata = true, onSubmit, apiEndpoint, apiHeaders, submitLabel, successMessage = "Thanks! We'll look into this right away.", open: controlledOpen, onOpenChange, children, className, }: ReportIssueProps) { const [uncontrolledOpen, setUncontrolledOpen] = useState(false) const [activeTab, setActiveTab] = useState(defaultTab) const [errorMessage, setErrorMessage] = useState("") const isControlled = controlledOpen !== undefined const open = isControlled ? controlledOpen : uncontrolledOpen const setOpen = useCallback( (value: boolean) => { if (!isControlled) setUncontrolledOpen(value) onOpenChange?.(value) }, [isControlled, onOpenChange] ) const title = TAB_TITLES[activeTab] const handleSuccess = () => { setOpen(false) toast.success(successMessage) } const handleError = (error: string) => { setErrorMessage(error) } const handleOpenChange = (value: boolean) => { setOpen(value) if (!value) { setTimeout(() => setErrorMessage(""), 200) } } const trigger = children ?? ( ) const formContent = ( <> {errorMessage && (

{errorMessage}

)} ) if (variant === "modal") { return ( {trigger} {title} {formContent} ) } return ( {trigger}

{title}

{formContent}
) }