File size: 2,784 Bytes
4304c6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import type { FC } from 'react'
import { memo } from 'react'
import { useContext } from 'use-context-selector'
import type { CodeBasedExtensionForm } from '@/models/common'
import I18n from '@/context/i18n'
import { PortalSelect } from '@/app/components/base/select'
import type { ModerationConfig } from '@/models/debug'

type FormGenerationProps = {
  forms: CodeBasedExtensionForm[]
  value: ModerationConfig['config']
  onChange: (v: Record<string, string>) => void
}
const FormGeneration: FC<FormGenerationProps> = ({

  forms,

  value,

  onChange,

}) => {
  const { locale } = useContext(I18n)

  const handleFormChange = (type: string, v: string) => {
    onChange({ ...value, [type]: v })
  }

  return (
    <>

      {

        forms.map((form, index) => (

          <div

            key={index}

            className='py-2'

          >

            <div className='flex items-center h-9 text-sm font-medium text-gray-900'>

              {locale === 'zh-Hans' ? form.label['zh-Hans'] : form.label['en-US']}

            </div>

            {

              form.type === 'text-input' && (

                <input

                  value={value?.[form.variable] || ''}

                  className='block px-3 w-full h-9 bg-gray-100 rounded-lg text-sm text-gray-900 outline-none appearance-none'

                  placeholder={form.placeholder}

                  onChange={e => handleFormChange(form.variable, e.target.value)}

                />

              )

            }

            {

              form.type === 'paragraph' && (

                <div className='relative px-3 py-2 h-[88px] bg-gray-100 rounded-lg'>

                  <textarea

                    value={value?.[form.variable] || ''}

                    className='block w-full h-full bg-transparent text-sm outline-none appearance-none resize-none'

                    placeholder={form.placeholder}

                    onChange={e => handleFormChange(form.variable, e.target.value)}

                  />

                </div>

              )

            }

            {

              form.type === 'select' && (

                <PortalSelect

                  value={value?.[form.variable]}

                  items={form.options.map((option) => {

                    return {

                      name: option.label[locale === 'zh-Hans' ? 'zh-Hans' : 'en-US'],

                      value: option.value,

                    }

                  })}

                  onSelect={item => handleFormChange(form.variable, item.value as string)}

                  popupClassName='w-[576px] !z-[102]'

                />

              )

            }

          </div>

        ))

      }

    </>
  )
}

export default memo(FormGeneration)