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' import { useChatContext } from '@/app/components/base/chat/chat/context' enum DATA_FORMAT { TEXT = 'text', JSON = 'json', } enum SUPPORTED_TAGS { LABEL = 'label', INPUT = 'input', TEXTAREA = 'textarea', BUTTON = 'button', } enum SUPPORTED_TYPES { TEXT = 'text', PASSWORD = 'password', EMAIL = 'email', NUMBER = 'number', } const MarkdownForm = ({ node }: any) => { // const supportedTypes = ['text', 'password', 'email', 'number'] //
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 values: { [key: string]: any } = {} children.forEach((child: any) => { if ([SUPPORTED_TAGS.INPUT, SUPPORTED_TAGS.TEXTAREA].includes(child.tagName)) values[child.properties.name] = formValues[child.properties.name] }) 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)) } else { const textResult = Object.entries(result) .map(([key, value]) => `${key}: ${value}`) .join('\n') onSend?.(textResult) } } return ( ) } MarkdownForm.displayName = 'MarkdownForm' export default MarkdownForm