'use client' import type { FC } from 'react' import React from 'react' import { useTranslation } from 'react-i18next' import { RiArrowRightUpLine, RiCloseLine } from '@remixicon/react' import ActionButton from '@/app/components/base/action-button' import Button from '@/app/components/base/button' import Drawer from '@/app/components/base/drawer' import Form from '@/app/components/header/account-setting/model-provider-page/model-modal/Form' import Toast from '@/app/components/base/toast' import { useRenderI18nObject } from '@/hooks/use-i18n' import cn from '@/utils/classnames' type Props = { formSchemas: any defaultValues?: any onCancel: () => void onSaved: (value: Record) => void } const extractDefaultValues = (schemas: any[]) => { const result: Record = {} for (const field of schemas) { if (field.default !== undefined) result[field.name] = field.default } return result } const EndpointModal: FC = ({ formSchemas, defaultValues = {}, onCancel, onSaved, }) => { const getValueFromI18nObject = useRenderI18nObject() const { t } = useTranslation() const initialValues = Object.keys(defaultValues).length > 0 ? defaultValues : extractDefaultValues(formSchemas) const [tempCredential, setTempCredential] = React.useState(initialValues) const handleSave = () => { for (const field of formSchemas) { if (field.required && !tempCredential[field.name]) { Toast.notify({ type: 'error', message: t('common.errorMsg.fieldRequired', { field: getValueFromI18nObject(field.label) }) }) return } } // Fix: Process boolean fields to ensure they are sent as proper boolean values const processedCredential = { ...tempCredential } formSchemas.forEach((field) => { if (field.type === 'boolean' && processedCredential[field.name] !== undefined) { const value = processedCredential[field.name] if (typeof value === 'string') processedCredential[field.name] = value === 'true' || value === '1' || value === 'True' else if (typeof value === 'number') processedCredential[field.name] = value === 1 else if (typeof value === 'boolean') processedCredential[field.name] = value } }) onSaved(processedCredential) } return ( <>
{t('plugin.detailPanel.endpointModalTitle')}
{t('plugin.detailPanel.endpointModalDesc')}
{ setTempCredential(v) }} formSchemas={formSchemas} isEditMode={true} showOnVariableMap={{}} validating={false} inputClassName='bg-components-input-bg-normal hover:bg-components-input-bg-hover' fieldMoreInfo={item => item.url ? ( {t('tools.howToGet')} ) : null} />
) } export default React.memo(EndpointModal)