| @@ -1,3 +1,4 @@ | |||
| import React, { useEffect, useState } from 'react' | |||
| import Button from '@/app/components/base/button' | |||
| import Input from '@/app/components/base/input' | |||
| import Textarea from '@/app/components/base/textarea' | |||
| @@ -32,20 +33,31 @@ const MarkdownForm = ({ node }: any) => { | |||
| // </form> | |||
| 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 formValues: { [key: string]: any } = {} | |||
| const values: { [key: string]: 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) => { | |||
| e.preventDefault() | |||
| const format = node.properties.dataFormat || DATA_FORMAT.TEXT | |||
| const result = getFormValues(node.children) | |||
| if (format === DATA_FORMAT.JSON) { | |||
| onSend?.(JSON.stringify(result)) | |||
| } | |||
| @@ -77,25 +89,22 @@ const MarkdownForm = ({ node }: any) => { | |||
| </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) { | |||
| return ( | |||
| @@ -103,10 +112,12 @@ const MarkdownForm = ({ node }: any) => { | |||
| key={index} | |||
| name={child.properties.name} | |||
| placeholder={child.properties.placeholder} | |||
| value={child.properties.value} | |||
| value={formValues[child.properties.name]} | |||
| onChange={(e) => { | |||
| e.preventDefault() | |||
| child.properties.value = e.target.value | |||
| setFormValues(prevValues => ({ | |||
| ...prevValues, | |||
| [child.properties.name]: e.target.value, | |||
| })) | |||
| }} | |||
| /> | |||
| ) | |||