| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 
							- 'use client'
 
- import type { FC } from 'react'
 
- import React, { useEffect, useReducer } from 'react'
 
- import { useTranslation } from 'react-i18next'
 
- import useSWR from 'swr'
 
- import StatusWithAction from './status-with-action'
 
- import { getErrorDocs, retryErrorDocs } from '@/service/datasets'
 
- import type { IndexingStatusResponse } from '@/models/datasets'
 
- type Props = {
 
-   datasetId: string
 
- }
 
- type IIndexState = {
 
-   value: string
 
- }
 
- type ActionType = 'retry' | 'success' | 'error'
 
- type IAction = {
 
-   type: ActionType
 
- }
 
- const indexStateReducer = (state: IIndexState, action: IAction) => {
 
-   const actionMap = {
 
-     retry: 'retry',
 
-     success: 'success',
 
-     error: 'error',
 
-   }
 
-   return {
 
-     ...state,
 
-     value: actionMap[action.type] || state.value,
 
-   }
 
- }
 
- const RetryButton: FC<Props> = ({ datasetId }) => {
 
-   const { t } = useTranslation()
 
-   const [indexState, dispatch] = useReducer(indexStateReducer, { value: 'success' })
 
-   const { data: errorDocs, isLoading } = useSWR({ datasetId }, getErrorDocs)
 
-   const onRetryErrorDocs = async () => {
 
-     dispatch({ type: 'retry' })
 
-     const document_ids = errorDocs?.data.map((doc: IndexingStatusResponse) => doc.id) || []
 
-     const res = await retryErrorDocs({ datasetId, document_ids })
 
-     if (res.result === 'success')
 
-       dispatch({ type: 'success' })
 
-     else
 
-       dispatch({ type: 'error' })
 
-   }
 
-   useEffect(() => {
 
-     if (errorDocs?.total === 0)
 
-       dispatch({ type: 'success' })
 
-     else
 
-       dispatch({ type: 'error' })
 
-   }, [errorDocs?.total])
 
-   if (isLoading || indexState.value === 'success')
 
-     return null
 
-   return (
 
-     <StatusWithAction
 
-       type='warning'
 
-       description={`${errorDocs?.total} ${t('dataset.docsFailedNotice')}`}
 
-       actionText={t('dataset.retry')}
 
-       disabled={indexState.value === 'retry'}
 
-       onAction={indexState.value === 'error' ? onRetryErrorDocs : () => { }}
 
-     />
 
-   )
 
- }
 
- export default RetryButton
 
 
  |