123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import type { FC } from 'react'
- import { useTranslation } from 'react-i18next'
- import Switch from '@/app/components/base/switch'
- import type { ModerationContentConfig } from '@/models/debug'
- type ModerationContentProps = {
- title: string
- info?: string
- showPreset?: boolean
- config: ModerationContentConfig
- onConfigChange: (config: ModerationContentConfig) => void
- }
- const ModerationContent: FC<ModerationContentProps> = ({
- title,
- info,
- showPreset = true,
- config,
- onConfigChange,
- }) => {
- const { t } = useTranslation()
- const handleConfigChange = (field: string, value: boolean | string) => {
- if (field === 'preset_response' && typeof value === 'string')
- value = value.slice(0, 100)
- onConfigChange({ ...config, [field]: value })
- }
- return (
- <div className='py-2'>
- <div className='rounded-lg bg-gray-50 border border-gray-200'>
- <div className='flex items-center justify-between px-3 h-10 rounded-lg'>
- <div className='shrink-0 text-sm font-medium text-gray-900'>{title}</div>
- <div className='grow flex items-center justify-end'>
- {
- info && (
- <div className='mr-2 text-xs text-gray-500 truncate' title={info}>{info}</div>
- )
- }
- <Switch
- size='l'
- defaultValue={config.enabled}
- onChange={v => handleConfigChange('enabled', v)}
- />
- </div>
- </div>
- {
- config.enabled && showPreset && (
- <div className='px-3 pt-1 pb-3 bg-white rounded-lg'>
- <div className='flex items-center justify-between h-8 text-[13px] font-medium text-gray-700'>
- {t('appDebug.feature.moderation.modal.content.preset')}
- <span className='text-xs font-normal text-gray-500'>{t('appDebug.feature.moderation.modal.content.supportMarkdown')}</span>
- </div>
- <div className='relative px-3 py-2 h-20 rounded-lg bg-gray-100'>
- <textarea
- value={config.preset_response || ''}
- className='block w-full h-full bg-transparent text-sm outline-none appearance-none resize-none'
- placeholder={t('appDebug.feature.moderation.modal.content.placeholder') || ''}
- onChange={e => handleConfigChange('preset_response', e.target.value)}
- />
- <div className='absolute bottom-2 right-2 flex items-center px-1 h-5 rounded-md bg-gray-50 text-xs font-medium text-gray-300'>
- <span>{(config.preset_response || '').length}</span>/<span className='text-gray-500'>100</span>
- </div>
- </div>
- </div>
- )
- }
- </div>
- </div>
- )
- }
- export default ModerationContent
|