| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | 
                        - 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']
 -   //   <form data-format="text">
 -   //      <label for="username">Username:</label>
 -   //      <input type="text" name="username" />
 -   //      <label for="password">Password:</label>
 -   //      <input type="password" name="password" />
 -   //      <label for="content">Content:</label>
 -   //      <textarea name="content"></textarea>
 -   //      <button data-size="small" data-variant="primary">Login</button>
 -   //   </form>
 -   const { onSend } = useChatContext()
 - 
 -   const getFormValues = (children: any) => {
 -     const formValues: { [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
 -     })
 -     return formValues
 -   }
 -   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 (
 -     <form
 -       autoComplete="off"
 -       className='flex flex-col self-stretch'
 -       onSubmit={(e: any) => {
 -         e.preventDefault()
 -         e.stopPropagation()
 -       }}
 -     >
 -       {node.children.filter((i: any) => i.type === 'element').map((child: any, index: number) => {
 -         if (child.tagName === SUPPORTED_TAGS.LABEL) {
 -           return (
 -             <label
 -               key={index}
 -               htmlFor={child.properties.for}
 -               className="my-2 system-md-semibold text-text-secondary"
 -             >
 -               {child.children[0]?.value || ''}
 -             </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.TEXTAREA) {
 -           return (
 -             <Textarea
 -               key={index}
 -               name={child.properties.name}
 -               placeholder={child.properties.placeholder}
 -               value={child.properties.value}
 -               onChange={(e) => {
 -                 e.preventDefault()
 -                 child.properties.value = e.target.value
 -               }}
 -             />
 -           )
 -         }
 -         if (child.tagName === SUPPORTED_TAGS.BUTTON) {
 -           const variant = child.properties.dataVariant
 -           const size = child.properties.dataSize
 - 
 -           return (
 -             <Button
 -               variant={variant}
 -               size={size}
 -               className='mt-4'
 -               key={index}
 -               onClick={onSubmit}
 -             >
 -               <span className='text-[13px]'>{child.children[0]?.value || ''}</span>
 -             </Button>
 -           )
 -         }
 - 
 -         return <p key={index}>Unsupported tag: {child.tagName}</p>
 -       })}
 -     </form>
 -   )
 - }
 - MarkdownForm.displayName = 'MarkdownForm'
 - export default MarkdownForm
 
 
  |