'use client' import React, { useEffect, useState } from 'react' import { PartialInquiry } from '@/lib/schema/inquiry' import { Input } from '../ui-v2/input' import { Checkbox } from '../ui-v2/checkbox' import { Button } from '../ui-v2/button' import { Card } from '../ui-v2/card' import { ArrowRight, Check, FastForward, Sparkles } from 'lucide-react' import { useActions, useStreamableValue, useUIState } from '@aigxion/isdk/rsc' import { AI } from '@/app/[locale]/morphic/action' import { IconLogo } from '../ui-v2/icons' import { cn } from '@/lib/utils' export type CopilotProps = { inquiry?: PartialInquiry } export const Copilot: React.FC = ({ inquiry }: CopilotProps) => { const [completed, setCompleted] = useState(false) const [query, setQuery] = useState('') const [skipped, setSkipped] = useState(false) const [data, error, pending] = useStreamableValue(inquiry) const [checkedOptions, setCheckedOptions] = useState<{ [key: string]: boolean }>({}) const [isButtonDisabled, setIsButtonDisabled] = useState(true) const [messages, setMessages] = useUIState() const { submit } = useActions() const handleInputChange = (event: React.ChangeEvent) => { setQuery(event.target.value) checkIfButtonShouldBeEnabled() } const handleOptionChange = (selectedOption: string) => { const updatedCheckedOptions = { ...checkedOptions, [selectedOption]: !checkedOptions[selectedOption] } setCheckedOptions(updatedCheckedOptions) checkIfButtonShouldBeEnabled(updatedCheckedOptions) } const checkIfButtonShouldBeEnabled = (currentOptions = checkedOptions) => { const anyCheckboxChecked = Object.values(currentOptions).some( checked => checked ) setIsButtonDisabled(!(anyCheckboxChecked || query)) } const updatedQuery = () => { const selectedOptions = Object.entries(checkedOptions) .filter(([, checked]) => checked) .map(([option]) => option) return [...selectedOptions, query].filter(Boolean).join(', ') } useEffect(() => { checkIfButtonShouldBeEnabled() // eslint-disable-next-line react-hooks/exhaustive-deps }, [query]) const onFormSubmit = async ( e: React.FormEvent, skip?: boolean ) => { e.preventDefault() setCompleted(true) setSkipped(skip || false) const formData = skip ? undefined : new FormData(e.target as HTMLFormElement) const responseMessage = await submit(formData, skip) setMessages(currentMessages => [...currentMessages, responseMessage]) } const handleSkip = (e: React.MouseEvent) => { onFormSubmit(e as unknown as React.FormEvent, true) } if (error) { return (
{`error: ${error}`}
) } if (skipped) { return null } if (completed) { return (
{updatedQuery()}
) } else { return (

{data?.question}

{data?.options?.map((option, index) => (
handleOptionChange(option?.label as string) } />
))}
{data?.allowsInput && (
)}
) } }