| 
					
				 | 
			
			
				@@ -28,6 +28,7 @@ import AutoHeightTextarea from '@/app/components/base/auto-height-textarea/commo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import Button from '@/app/components/base/button' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import NewSegmentModal from '@/app/components/datasets/documents/detail/new-segment-modal' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import TagInput from '@/app/components/base/tag-input' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { useEventEmitterContextContext } from '@/context/event-emitter' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export const SegmentIndexTag: FC<{ positionId: string | number; className?: string }> = ({ positionId, className }) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const localPositionId = useMemo(() => { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -66,6 +67,15 @@ export const SegmentDetail: FC<ISegmentDetailProps> = memo(({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const [question, setQuestion] = useState(segInfo?.content || '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const [answer, setAnswer] = useState(segInfo?.answer || '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const [keywords, setKeywords] = useState<string[]>(segInfo?.keywords || []) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const { eventEmitter } = useEventEmitterContextContext() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const [loading, setLoading] = useState(false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  eventEmitter?.useSubscription((v) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (v === 'update-segment') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      setLoading(true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      setLoading(false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const handleCancel = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     setIsEditing(false) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -129,7 +139,9 @@ export const SegmentDetail: FC<ISegmentDetailProps> = memo(({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             <Button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               type='primary' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               className='!h-7 !px-3 !py-[5px] text-xs font-medium !rounded-md' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              onClick={handleSave}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              onClick={handleSave} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              disabled={loading} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               {t('common.operation.save')} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             </Button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           </> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -225,6 +237,7 @@ const Completed: FC<ICompletedProps> = ({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const [allSegments, setAllSegments] = useState<Array<SegmentDetailModel[]>>([]) // all segments data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const [loading, setLoading] = useState(false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const [total, setTotal] = useState<number | undefined>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const { eventEmitter } = useEventEmitterContextContext() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const onChangeStatus = ({ value }: Item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     setSelectedStatus(value === 'all' ? 'all' : !!value) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -318,23 +331,29 @@ const Completed: FC<ICompletedProps> = ({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (keywords.length) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       params.keywords = keywords 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const res = await updateSegment({ datasetId, documentId, segmentId, body: params }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onCloseModal() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (const item of allSegments) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      for (const seg of item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (seg.id === segmentId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          seg.answer = res.data.answer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          seg.content = res.data.content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          seg.keywords = res.data.keywords 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          seg.word_count = res.data.word_count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          seg.hit_count = res.data.hit_count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          seg.index_node_hash = res.data.index_node_hash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          seg.enabled = res.data.enabled 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      eventEmitter?.emit('update-segment') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const res = await updateSegment({ datasetId, documentId, segmentId, body: params }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      onCloseModal() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      for (const item of allSegments) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (const seg of item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (seg.id === segmentId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            seg.answer = res.data.answer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            seg.content = res.data.content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            seg.keywords = res.data.keywords 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            seg.word_count = res.data.word_count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            seg.hit_count = res.data.hit_count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            seg.index_node_hash = res.data.index_node_hash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            seg.enabled = res.data.enabled 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      setAllSegments([...allSegments]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      eventEmitter?.emit('') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    setAllSegments([...allSegments]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   useEffect(() => { 
			 |