| import React, { useEffect, useState } from 'react' | |||||
| import Button from '@/app/components/base/button' | import Button from '@/app/components/base/button' | ||||
| import Input from '@/app/components/base/input' | import Input from '@/app/components/base/input' | ||||
| import Textarea from '@/app/components/base/textarea' | import Textarea from '@/app/components/base/textarea' | ||||
| // </form> | // </form> | ||||
| const { onSend } = useChatContext() | const { onSend } = useChatContext() | ||||
| const [formValues, setFormValues] = useState<{ [key: string]: any }>({}) | |||||
| useEffect(() => { | |||||
| const initialValues: { [key: string]: any } = {} | |||||
| node.children.forEach((child: any) => { | |||||
| if ([SUPPORTED_TAGS.INPUT, SUPPORTED_TAGS.TEXTAREA].includes(child.tagName)) | |||||
| initialValues[child.properties.name] = child.properties.value | |||||
| }) | |||||
| setFormValues(initialValues) | |||||
| }, [node.children]) | |||||
| const getFormValues = (children: any) => { | const getFormValues = (children: any) => { | ||||
| const formValues: { [key: string]: any } = {} | |||||
| const values: { [key: string]: any } = {} | |||||
| children.forEach((child: any) => { | children.forEach((child: any) => { | ||||
| if (child.tagName === SUPPORTED_TAGS.INPUT) | |||||
| formValues[child.properties.name] = child.properties.value | |||||
| if (child.tagName === SUPPORTED_TAGS.TEXTAREA) | |||||
| formValues[child.properties.name] = child.properties.value | |||||
| if ([SUPPORTED_TAGS.INPUT, SUPPORTED_TAGS.TEXTAREA].includes(child.tagName)) | |||||
| values[child.properties.name] = formValues[child.properties.name] | |||||
| }) | }) | ||||
| return formValues | |||||
| return values | |||||
| } | } | ||||
| const onSubmit = (e: any) => { | const onSubmit = (e: any) => { | ||||
| e.preventDefault() | e.preventDefault() | ||||
| const format = node.properties.dataFormat || DATA_FORMAT.TEXT | const format = node.properties.dataFormat || DATA_FORMAT.TEXT | ||||
| const result = getFormValues(node.children) | const result = getFormValues(node.children) | ||||
| if (format === DATA_FORMAT.JSON) { | if (format === DATA_FORMAT.JSON) { | ||||
| onSend?.(JSON.stringify(result)) | onSend?.(JSON.stringify(result)) | ||||
| } | } | ||||
| </label> | </label> | ||||
| ) | ) | ||||
| } | } | ||||
| if (child.tagName === SUPPORTED_TAGS.INPUT) { | |||||
| if (Object.values(SUPPORTED_TYPES).includes(child.properties.type)) { | |||||
| return ( | |||||
| <Input | |||||
| key={index} | |||||
| type={child.properties.type} | |||||
| name={child.properties.name} | |||||
| placeholder={child.properties.placeholder} | |||||
| value={child.properties.value} | |||||
| onChange={(e) => { | |||||
| e.preventDefault() | |||||
| child.properties.value = e.target.value | |||||
| }} | |||||
| /> | |||||
| ) | |||||
| } | |||||
| else { | |||||
| return <p key={index}>Unsupported input type: {child.properties.type}</p> | |||||
| } | |||||
| if (child.tagName === SUPPORTED_TAGS.INPUT && Object.values(SUPPORTED_TYPES).includes(child.properties.type)) { | |||||
| return ( | |||||
| <Input | |||||
| key={index} | |||||
| type={child.properties.type} | |||||
| name={child.properties.name} | |||||
| placeholder={child.properties.placeholder} | |||||
| value={formValues[child.properties.name]} | |||||
| onChange={(e) => { | |||||
| setFormValues(prevValues => ({ | |||||
| ...prevValues, | |||||
| [child.properties.name]: e.target.value, | |||||
| })) | |||||
| }} | |||||
| /> | |||||
| ) | |||||
| } | } | ||||
| if (child.tagName === SUPPORTED_TAGS.TEXTAREA) { | if (child.tagName === SUPPORTED_TAGS.TEXTAREA) { | ||||
| return ( | return ( | ||||
| key={index} | key={index} | ||||
| name={child.properties.name} | name={child.properties.name} | ||||
| placeholder={child.properties.placeholder} | placeholder={child.properties.placeholder} | ||||
| value={child.properties.value} | |||||
| value={formValues[child.properties.name]} | |||||
| onChange={(e) => { | onChange={(e) => { | ||||
| e.preventDefault() | |||||
| child.properties.value = e.target.value | |||||
| setFormValues(prevValues => ({ | |||||
| ...prevValues, | |||||
| [child.properties.name]: e.target.value, | |||||
| })) | |||||
| }} | }} | ||||
| /> | /> | ||||
| ) | ) |