| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | 'use client'import type { FC } from 'react'import React, { useEffect, useState } from 'react'import { useTranslation } from 'react-i18next'import { addDefaultValue, toolCredentialToFormSchemas } from '../../utils/to-form-schema'import type { Collection } from '../../types'import cn from '@/utils/classnames'import Drawer from '@/app/components/base/drawer-plus'import Button from '@/app/components/base/button'import Toast from '@/app/components/base/toast'import { fetchBuiltInToolCredential, fetchBuiltInToolCredentialSchema } from '@/service/tools'import Loading from '@/app/components/base/loading'import Form from '@/app/components/header/account-setting/model-provider-page/model-modal/Form'import { LinkExternal02 } from '@/app/components/base/icons/src/vender/line/general'import { useLanguage } from '@/app/components/header/account-setting/model-provider-page/hooks'type Props = {  collection: Collection  onCancel: () => void  onSaved: (value: Record<string, any>) => void  isHideRemoveBtn?: boolean  onRemove?: () => void}const ConfigCredential: FC<Props> = ({  collection,  onCancel,  onSaved,  isHideRemoveBtn,  onRemove = () => { },}) => {  const { t } = useTranslation()  const language = useLanguage()  const [credentialSchema, setCredentialSchema] = useState<any>(null)  const { name: collectionName } = collection  const [tempCredential, setTempCredential] = React.useState<any>({})  useEffect(() => {    fetchBuiltInToolCredentialSchema(collectionName).then(async (res) => {      const toolCredentialSchemas = toolCredentialToFormSchemas(res)      const credentialValue = await fetchBuiltInToolCredential(collectionName)      setTempCredential(credentialValue)      const defaultCredentials = addDefaultValue(credentialValue, toolCredentialSchemas)      setCredentialSchema(toolCredentialSchemas)      setTempCredential(defaultCredentials)    })  }, [])  const handleSave = () => {    for (const field of credentialSchema) {      if (field.required && !tempCredential[field.name]) {        Toast.notify({ type: 'error', message: t('common.errorMsg.fieldRequired', { field: field.label[language] || field.label.en_US }) })        return      }    }    onSaved(tempCredential)  }  return (    <Drawer      isShow      onHide={onCancel}      title={t('tools.auth.setupModalTitle') as string}      titleDescription={t('tools.auth.setupModalTitleDescription') as string}      panelClassName='mt-2 !w-[405px]'      maxWidthClassName='!max-w-[405px]'      height='calc(100vh - 16px)'      contentClassName='!bg-gray-100'      headerClassName='!border-b-black/5'      body={        <div className='px-6 py-3 h-full'>          {!credentialSchema            ? <Loading type='app' />            : (              <>                <Form                  value={tempCredential}                  onChange={(v) => {                    setTempCredential(v)                  }}                  formSchemas={credentialSchema}                  isEditMode={true}                  showOnVariableMap={{}}                  validating={false}                  inputClassName='!bg-gray-50'                  fieldMoreInfo={item => item.url                    ? (<a                      href={item.url}                      target='_blank' rel='noopener noreferrer'                      className='inline-flex items-center text-xs text-primary-600'                    >                      {t('tools.howToGet')}                      <LinkExternal02 className='ml-1 w-3 h-3' />                    </a>)                    : null}                />                <div className={cn((collection.is_team_authorization && !isHideRemoveBtn) ? 'justify-between' : 'justify-end', 'mt-2 flex ')} >                  {                    (collection.is_team_authorization && !isHideRemoveBtn) && (                      <Button onClick={onRemove}>{t('common.operation.remove')}</Button>                    )                  }                  < div className='flex space-x-2'>                    <Button onClick={onCancel}>{t('common.operation.cancel')}</Button>                    <Button variant='primary' onClick={handleSave}>{t('common.operation.save')}</Button>                  </div>                </div>              </>            )          }        </div >      }      isShowMask={true}      clickOutsideNotOpen={false}    />  )}export default React.memo(ConfigCredential)
 |