| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | 
							- 'use client'
 
- import type { FC } from 'react'
 
- import React, { useState } from 'react'
 
- import { useTranslation } from 'react-i18next'
 
- import { useClickAway } from 'ahooks'
 
- import Toast from '../../base/toast'
 
- import { Plus } from '../../base/icons/src/vender/line/general'
 
- import { ChevronDown } from '../../base/icons/src/vender/line/arrows'
 
- import examples from './examples'
 
- import Button from '@/app/components/base/button'
 
- import { importSchemaFromURL } from '@/service/tools'
 
- type Props = {
 
-   onChange: (value: string) => void
 
- }
 
- const GetSchema: FC<Props> = ({
 
-   onChange,
 
- }) => {
 
-   const { t } = useTranslation()
 
-   const [showImportFromUrl, setShowImportFromUrl] = useState(false)
 
-   const [importUrl, setImportUrl] = useState('')
 
-   const [isParsing, setIsParsing] = useState(false)
 
-   const handleImportFromUrl = async () => {
 
-     if (!importUrl.startsWith('http://') && !importUrl.startsWith('https://')) {
 
-       Toast.notify({
 
-         type: 'error',
 
-         message: t('tools.createTool.urlError'),
 
-       })
 
-       return
 
-     }
 
-     setIsParsing(true)
 
-     try {
 
-       const { schema } = await importSchemaFromURL(importUrl) as any
 
-       setImportUrl('')
 
-       onChange(schema)
 
-     }
 
-     finally {
 
-       setIsParsing(false)
 
-       setShowImportFromUrl(false)
 
-     }
 
-   }
 
-   const importURLRef = React.useRef(null)
 
-   useClickAway(() => {
 
-     setShowImportFromUrl(false)
 
-   }, importURLRef)
 
-   const [showExamples, setShowExamples] = useState(false)
 
-   const showExamplesRef = React.useRef(null)
 
-   useClickAway(() => {
 
-     setShowExamples(false)
 
-   }, showExamplesRef)
 
-   return (
 
-     <div className='flex space-x-1 justify-end relative w-[224px]'>
 
-       <div ref={importURLRef}>
 
-         <Button
 
-           className='flex items-center !h-6 !px-2 space-x-1 '
 
-           onClick={() => { setShowImportFromUrl(!showImportFromUrl) }}
 
-         >
 
-           <Plus className='w-3 h-3' />
 
-           <div className='text-xs font-medium text-gray-700'>{t('tools.createTool.importFromUrl')}</div>
 
-         </Button>
 
-         {showImportFromUrl && (
 
-           <div className=' absolute left-[-35px] top-[26px] p-2 rounded-lg border border-gray-200 bg-white shadow-lg'>
 
-             <div className='relative'>
 
-               <input
 
-                 type='text'
 
-                 className='w-[244px] h-8 pl-1.5 pr-[44px] overflow-x-auto border border-gray-200 rounded-lg text-[13px]'
 
-                 placeholder={t('tools.createTool.importFromUrlPlaceHolder')!}
 
-                 value={importUrl}
 
-                 onChange={e => setImportUrl(e.target.value)}
 
-               />
 
-               <Button
 
-                 className='absolute top-1 right-1 !h-6 !px-2 text-xs font-medium'
 
-                 type='primary'
 
-                 disabled={!importUrl}
 
-                 onClick={handleImportFromUrl}
 
-                 loading={isParsing}
 
-               >
 
-                 {isParsing ? '' : t('common.operation.ok')}
 
-               </Button>
 
-             </div>
 
-           </div>
 
-         )}
 
-       </div>
 
-       <div className='relative' ref={showExamplesRef}>
 
-         <Button
 
-           className='flex items-center !h-6 !px-2 space-x-1'
 
-           onClick={() => { setShowExamples(!showExamples) }}
 
-         >
 
-           <div className='text-xs font-medium text-gray-700'>{t('tools.createTool.examples')}</div>
 
-           <ChevronDown className='w-3 h-3' />
 
-         </Button>
 
-         {showExamples && (
 
-           <div className='absolute top-7 right-0 p-1 rounded-lg bg-white shadow-sm'>
 
-             {examples.map(item => (
 
-               <div
 
-                 key={item.key}
 
-                 onClick={() => {
 
-                   onChange(item.content)
 
-                   setShowExamples(false)
 
-                 }}
 
-                 className='px-3 py-1.5 rounded-lg hover:bg-gray-50 leading-5 text-sm font-normal text-gray-700 cursor-pointer whitespace-nowrap'
 
-               >
 
-                 {t(`tools.createTool.exampleOptions.${item.key}`)}
 
-               </div>
 
-             ))}
 
-           </div>
 
-         )}
 
-       </div>
 
-     </div>
 
-   )
 
- }
 
- export default React.memo(GetSchema)
 
 
  |