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