|
@@ -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,
|
|
|
+ }))
|
|
|
}}
|
|
|
/>
|
|
|
)
|