|
import type { FC } 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 Textarea from '@/app/components/base/textarea' |
|
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'> |
|
<Textarea |
|
className='resize-none' |
|
value={value?.[form.variable] || ''} |
|
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 FormGeneration |
|
|