|
@@ -2,6 +2,10 @@ 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 DatePicker from '@/app/components/base/date-and-time-picker/date-picker'
|
|
|
+import TimePicker from '@/app/components/base/date-and-time-picker/time-picker'
|
|
|
+import Checkbox from '@/app/components/base/checkbox'
|
|
|
+import Select from '@/app/components/base/select'
|
|
|
import { useChatContext } from '@/app/components/base/chat/chat/context'
|
|
|
|
|
|
enum DATA_FORMAT {
|
|
@@ -19,18 +23,13 @@ enum SUPPORTED_TYPES {
|
|
|
PASSWORD = 'password',
|
|
|
EMAIL = 'email',
|
|
|
NUMBER = 'number',
|
|
|
+ DATE = 'date',
|
|
|
+ TIME = 'time',
|
|
|
+ DATETIME = 'datetime',
|
|
|
+ CHECKBOX = 'checkbox',
|
|
|
+ SELECT = 'select',
|
|
|
}
|
|
|
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 [formValues, setFormValues] = useState<{ [key: string]: any }>({})
|
|
@@ -90,6 +89,97 @@ const MarkdownForm = ({ node }: any) => {
|
|
|
)
|
|
|
}
|
|
|
if (child.tagName === SUPPORTED_TAGS.INPUT && Object.values(SUPPORTED_TYPES).includes(child.properties.type)) {
|
|
|
+ if (child.properties.type === SUPPORTED_TYPES.DATE || child.properties.type === SUPPORTED_TYPES.DATETIME) {
|
|
|
+ return (
|
|
|
+ <DatePicker
|
|
|
+ key={index}
|
|
|
+ value={formValues[child.properties.name]}
|
|
|
+ needTimePicker={child.properties.type === SUPPORTED_TYPES.DATETIME}
|
|
|
+ onChange={(date) => {
|
|
|
+ setFormValues(prevValues => ({
|
|
|
+ ...prevValues,
|
|
|
+ [child.properties.name]: date,
|
|
|
+ }))
|
|
|
+ }}
|
|
|
+ onClear={() => {
|
|
|
+ setFormValues(prevValues => ({
|
|
|
+ ...prevValues,
|
|
|
+ [child.properties.name]: undefined,
|
|
|
+ }))
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ }
|
|
|
+ if (child.properties.type === SUPPORTED_TYPES.TIME) {
|
|
|
+ return (
|
|
|
+ <TimePicker
|
|
|
+ key={index}
|
|
|
+ value={formValues[child.properties.name]}
|
|
|
+ onChange={(time) => {
|
|
|
+ setFormValues(prevValues => ({
|
|
|
+ ...prevValues,
|
|
|
+ [child.properties.name]: time,
|
|
|
+ }))
|
|
|
+ }}
|
|
|
+ onClear={() => {
|
|
|
+ setFormValues(prevValues => ({
|
|
|
+ ...prevValues,
|
|
|
+ [child.properties.name]: undefined,
|
|
|
+ }))
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ }
|
|
|
+ if (child.properties.type === SUPPORTED_TYPES.CHECKBOX) {
|
|
|
+ return (
|
|
|
+ <div className='mt-2 flex items-center h-6 space-x-2' key={index}>
|
|
|
+ <Checkbox
|
|
|
+ key={index}
|
|
|
+ checked={formValues[child.properties.name]}
|
|
|
+ onCheck={() => {
|
|
|
+ setFormValues(prevValues => ({
|
|
|
+ ...prevValues,
|
|
|
+ [child.properties.name]: !prevValues[child.properties.name],
|
|
|
+ }))
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <span>{child.properties.dataTip || child.properties['data-tip'] || ''}</span>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ if (child.properties.type === SUPPORTED_TYPES.SELECT) {
|
|
|
+ return (
|
|
|
+ <Select
|
|
|
+ key={index}
|
|
|
+ allowSearch={false}
|
|
|
+ className="w-full"
|
|
|
+ items={(() => {
|
|
|
+ let options = child.properties.dataOptions || child.properties['data-options'] || []
|
|
|
+ if (typeof options === 'string') {
|
|
|
+ try {
|
|
|
+ options = JSON.parse(options)
|
|
|
+ }
|
|
|
+ catch (e) {
|
|
|
+ console.error('Failed to parse options:', e)
|
|
|
+ options = []
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return options.map((option: string) => ({
|
|
|
+ name: option,
|
|
|
+ value: option,
|
|
|
+ }))
|
|
|
+ })()}
|
|
|
+ defaultValue={formValues[child.properties.name]}
|
|
|
+ onSelect={(item) => {
|
|
|
+ setFormValues(prevValues => ({
|
|
|
+ ...prevValues,
|
|
|
+ [child.properties.name]: item.value,
|
|
|
+ }))
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
return (
|
|
|
<Input
|
|
|
key={index}
|