import type { FC } from 'react' import type { ApiBasedExtension } from '@/models/common' import { noop } from 'es-toolkit/function' import { useState } from 'react' import { useTranslation } from 'react-i18next' import Button from '@/app/components/base/button' import { BookOpen01 } from '@/app/components/base/icons/src/vender/line/education' import Modal from '@/app/components/base/modal' import { useToastContext } from '@/app/components/base/toast' import { useDocLink } from '@/context/i18n' import { addApiBasedExtension, updateApiBasedExtension, } from '@/service/common' export type ApiBasedExtensionData = { name?: string apiEndpoint?: string apiKey?: string } type ApiBasedExtensionModalProps = { data: ApiBasedExtension onCancel: () => void onSave?: (newData: ApiBasedExtension) => void } const ApiBasedExtensionModal: FC = ({ data, onCancel, onSave, }) => { const { t } = useTranslation() const docLink = useDocLink() const [localeData, setLocaleData] = useState(data) const [loading, setLoading] = useState(false) const { notify } = useToastContext() const handleDataChange = (type: string, value: string) => { setLocaleData({ ...localeData, [type]: value }) } const handleSave = async () => { setLoading(true) if (localeData && localeData.api_key && localeData.api_key?.length < 5) { notify({ type: 'error', message: t('apiBasedExtension.modal.apiKey.lengthError', { ns: 'common' }) }) setLoading(false) return } try { let res: ApiBasedExtension = {} if (!data.id) { res = await addApiBasedExtension({ url: '/api-based-extension', body: localeData, }) } else { res = await updateApiBasedExtension({ url: `/api-based-extension/${data.id}`, body: { ...localeData, api_key: data.api_key === localeData.api_key ? '[__HIDDEN__]' : localeData.api_key, }, }) notify({ type: 'success', message: t('actionMsg.modifiedSuccessfully', { ns: 'common' }) }) } if (onSave) onSave(res) } finally { setLoading(false) } } return (
{ data.name ? t('apiBasedExtension.modal.editTitle', { ns: 'common' }) : t('apiBasedExtension.modal.title', { ns: 'common' }) }
{t('apiBasedExtension.modal.name.title', { ns: 'common' })}
handleDataChange('name', e.target.value)} className="block h-9 w-full appearance-none rounded-lg bg-components-input-bg-normal px-3 text-sm text-text-primary outline-none" placeholder={t('apiBasedExtension.modal.name.placeholder', { ns: 'common' }) || ''} />
{t('apiBasedExtension.modal.apiEndpoint.title', { ns: 'common' })} {t('apiBasedExtension.link', { ns: 'common' })}
handleDataChange('api_endpoint', e.target.value)} className="block h-9 w-full appearance-none rounded-lg bg-components-input-bg-normal px-3 text-sm text-text-primary outline-none" placeholder={t('apiBasedExtension.modal.apiEndpoint.placeholder', { ns: 'common' }) || ''} />
{t('apiBasedExtension.modal.apiKey.title', { ns: 'common' })}
handleDataChange('api_key', e.target.value)} className="mr-2 block h-9 grow appearance-none rounded-lg bg-components-input-bg-normal px-3 text-sm text-text-primary outline-none" placeholder={t('apiBasedExtension.modal.apiKey.placeholder', { ns: 'common' }) || ''} />
) } export default ApiBasedExtensionModal