| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | 
							- import { useContext } from 'use-context-selector'
 
- import { useTranslation } from 'react-i18next'
 
- import cn from 'classnames'
 
- import Button from '../../base/button'
 
- import Tag from '../../base/tag'
 
- import Tooltip from '../../base/tooltip'
 
- import { getIcon } from '../common/retrieval-method-info'
 
- import s from './style.module.css'
 
- import DatasetDetailContext from '@/context/dataset-detail'
 
- import type { HitTestingResponse } from '@/models/datasets'
 
- import { hitTesting } from '@/service/datasets'
 
- import { asyncRunSafe } from '@/utils'
 
- import { RETRIEVE_METHOD, type RetrievalConfig } from '@/types/app'
 
- type TextAreaWithButtonIProps = {
 
-   datasetId: string
 
-   onUpdateList: () => void
 
-   setHitResult: (res: HitTestingResponse) => void
 
-   loading: boolean
 
-   setLoading: (v: boolean) => void
 
-   text: string
 
-   setText: (v: string) => void
 
-   onClickRetrievalMethod: () => void
 
-   retrievalConfig: RetrievalConfig
 
-   isEconomy: boolean
 
-   onSubmit?: () => void
 
- }
 
- const TextAreaWithButton = ({
 
-   datasetId,
 
-   onUpdateList,
 
-   setHitResult,
 
-   setLoading,
 
-   loading,
 
-   text,
 
-   setText,
 
-   onClickRetrievalMethod,
 
-   retrievalConfig,
 
-   isEconomy,
 
-   onSubmit: _onSubmit,
 
- }: TextAreaWithButtonIProps) => {
 
-   const { t } = useTranslation()
 
-   const { indexingTechnique } = useContext(DatasetDetailContext)
 
-   function handleTextChange(event: any) {
 
-     setText(event.target.value)
 
-   }
 
-   const onSubmit = async () => {
 
-     setLoading(true)
 
-     const [e, res] = await asyncRunSafe<HitTestingResponse>(
 
-       hitTesting({
 
-         datasetId,
 
-         queryText: text,
 
-         retrieval_model: {
 
-           ...retrievalConfig,
 
-           search_method: isEconomy ? RETRIEVE_METHOD.keywordSearch : retrievalConfig.search_method,
 
-         },
 
-       }) as Promise<HitTestingResponse>,
 
-     )
 
-     if (!e) {
 
-       setHitResult(res)
 
-       onUpdateList?.()
 
-     }
 
-     setLoading(false)
 
-     _onSubmit && _onSubmit()
 
-   }
 
-   const retrievalMethod = isEconomy ? RETRIEVE_METHOD.invertedIndex : retrievalConfig.search_method
 
-   const Icon = getIcon(retrievalMethod)
 
-   return (
 
-     <>
 
-       <div className={s.wrapper}>
 
-         <div className='pt-2 rounded-tl-xl rounded-tr-xl bg-[#EEF4FF]'>
 
-           <div className="px-4 pb-2 flex justify-between h-8 items-center">
 
-             <span className="text-gray-800 font-semibold text-sm">
 
-               {t('datasetHitTesting.input.title')}
 
-             </span>
 
-             <Tooltip
 
-               selector={'change-retrieval-method'}
 
-               htmlContent={t('dataset.retrieval.changeRetrievalMethod')}
 
-             >
 
-               <div
 
-                 onClick={onClickRetrievalMethod}
 
-                 className='flex px-2 h-7 items-center space-x-1 bg-white hover:bg-[#ECE9FE] rounded-md shadow-sm cursor-pointer text-[#6927DA]'
 
-               >
 
-                 <Icon className='w-3.5 h-3.5'></Icon>
 
-                 <div className='text-xs font-medium'>{t(`dataset.retrieval.${retrievalMethod}.title`)}</div>
 
-               </div>
 
-             </Tooltip>
 
-           </div>
 
-           <div className='h-2 rounded-tl-xl rounded-tr-xl bg-white'></div>
 
-         </div>
 
-         <div className='px-4 pb-11'>
 
-           <textarea
 
-             value={text}
 
-             onChange={handleTextChange}
 
-             placeholder={t('datasetHitTesting.input.placeholder') as string}
 
-             className={s.textarea}
 
-           />
 
-           <div className="absolute inset-x-0 bottom-0 flex items-center justify-between mx-4 mt-2 mb-2">
 
-             {text?.length > 200
 
-               ? (
 
-                 <Tooltip
 
-                   content={t('datasetHitTesting.input.countWarning') as string}
 
-                   selector="hit-testing-warning"
 
-                 >
 
-                   <div>
 
-                     <Tag color="red" className="!text-red-600">
 
-                       {text?.length}
 
-                       <span className="text-red-300 mx-0.5">/</span>
 
-                       200
 
-                     </Tag>
 
-                   </div>
 
-                 </Tooltip>
 
-               )
 
-               : (
 
-                 <Tag
 
-                   color="gray"
 
-                   className={cn('!text-gray-500', text?.length ? '' : 'opacity-50')}
 
-                 >
 
-                   {text?.length}
 
-                   <span className="text-gray-300 mx-0.5">/</span>
 
-                   200
 
-                 </Tag>
 
-               )}
 
-             <div>
 
-               <Button
 
-                 onClick={onSubmit}
 
-                 variant="primary"
 
-                 loading={loading}
 
-                 disabled={(!text?.length || text?.length > 200)}
 
-               >
 
-                 {t('datasetHitTesting.input.testing')}
 
-               </Button>
 
-             </div>
 
-           </div>
 
-         </div>
 
-       </div>
 
-     </>
 
-   )
 
- }
 
- export default TextAreaWithButton
 
 
  |