| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import type { FC } from 'react' | 
					
						
							| 
									
										
										
										
											2024-05-09 17:18:51 +08:00
										 |  |  | import { memo } from 'react' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import { useTranslation } from 'react-i18next' | 
					
						
							| 
									
										
										
										
											2024-04-28 17:09:56 +08:00
										 |  |  | import cn from 'classnames' | 
					
						
							| 
									
										
										
										
											2024-05-09 17:18:51 +08:00
										 |  |  | import { useStore } from '../store' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import { | 
					
						
							|  |  |  |   useIsChatMode, | 
					
						
							|  |  |  |   useWorkflowRun, | 
					
						
							| 
									
										
										
										
											2024-05-09 17:18:51 +08:00
										 |  |  |   useWorkflowStartRun, | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | } from '../hooks' | 
					
						
							| 
									
										
										
										
											2024-05-09 17:18:51 +08:00
										 |  |  | import { WorkflowRunningStatus } from '../types' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import ViewHistory from './view-history' | 
					
						
							|  |  |  | import { | 
					
						
							|  |  |  |   Play, | 
					
						
							|  |  |  |   StopCircle, | 
					
						
							|  |  |  | } from '@/app/components/base/icons/src/vender/line/mediaAndDevices' | 
					
						
							|  |  |  | import { Loading02 } from '@/app/components/base/icons/src/vender/line/general' | 
					
						
							| 
									
										
										
										
											2024-04-28 17:09:56 +08:00
										 |  |  | import { MessagePlay } from '@/app/components/base/icons/src/vender/line/communication' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | const RunMode = memo(() => { | 
					
						
							|  |  |  |   const { t } = useTranslation() | 
					
						
							| 
									
										
										
										
											2024-05-09 17:18:51 +08:00
										 |  |  |   const { handleWorkflowStartRunInWorkflow } = useWorkflowStartRun() | 
					
						
							|  |  |  |   const { handleStopRun } = useWorkflowRun() | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |   const workflowRunningData = useStore(s => s.workflowRunningData) | 
					
						
							|  |  |  |   const isRunning = workflowRunningData?.result.status === WorkflowRunningStatus.Running | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <> | 
					
						
							|  |  |  |       <div | 
					
						
							| 
									
										
										
										
											2024-04-28 17:09:56 +08:00
										 |  |  |         className={cn( | 
					
						
							|  |  |  |           'flex items-center px-1.5 h-7 rounded-md text-[13px] font-medium text-primary-600', | 
					
						
							|  |  |  |           'hover:bg-primary-50 cursor-pointer', | 
					
						
							|  |  |  |           isRunning && 'bg-primary-50 !cursor-not-allowed', | 
					
						
							|  |  |  |         )} | 
					
						
							| 
									
										
										
										
											2024-05-09 17:18:51 +08:00
										 |  |  |         onClick={() => handleWorkflowStartRunInWorkflow()} | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |       > | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           isRunning | 
					
						
							|  |  |  |             ? ( | 
					
						
							|  |  |  |               <> | 
					
						
							|  |  |  |                 <Loading02 className='mr-1 w-4 h-4 animate-spin' /> | 
					
						
							|  |  |  |                 {t('workflow.common.running')} | 
					
						
							|  |  |  |               </> | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             : ( | 
					
						
							|  |  |  |               <> | 
					
						
							|  |  |  |                 <Play className='mr-1 w-4 h-4' /> | 
					
						
							|  |  |  |                 {t('workflow.common.run')} | 
					
						
							|  |  |  |               </> | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         isRunning && ( | 
					
						
							|  |  |  |           <div | 
					
						
							|  |  |  |             className='flex items-center justify-center ml-0.5 w-7 h-7 cursor-pointer hover:bg-black/5 rounded-md' | 
					
						
							|  |  |  |             onClick={() => handleStopRun(workflowRunningData?.task_id || '')} | 
					
						
							|  |  |  |           > | 
					
						
							|  |  |  |             <StopCircle className='w-4 h-4 text-gray-500' /> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     </> | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | RunMode.displayName = 'RunMode' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const PreviewMode = memo(() => { | 
					
						
							|  |  |  |   const { t } = useTranslation() | 
					
						
							| 
									
										
										
										
											2024-05-09 17:18:51 +08:00
										 |  |  |   const { handleWorkflowStartRunInChatflow } = useWorkflowStartRun() | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <div | 
					
						
							| 
									
										
										
										
											2024-04-28 17:09:56 +08:00
										 |  |  |       className={cn( | 
					
						
							|  |  |  |         'flex items-center px-1.5 h-7 rounded-md text-[13px] font-medium text-primary-600', | 
					
						
							|  |  |  |         'hover:bg-primary-50 cursor-pointer', | 
					
						
							|  |  |  |       )} | 
					
						
							| 
									
										
										
										
											2024-05-09 17:18:51 +08:00
										 |  |  |       onClick={() => handleWorkflowStartRunInChatflow()} | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |     > | 
					
						
							| 
									
										
										
										
											2024-04-28 17:09:56 +08:00
										 |  |  |       <MessagePlay className='mr-1 w-4 h-4' /> | 
					
						
							|  |  |  |       {t('workflow.common.debugAndPreview')} | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |     </div> | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | PreviewMode.displayName = 'PreviewMode' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const RunAndHistory: FC = () => { | 
					
						
							|  |  |  |   const isChatMode = useIsChatMode() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <div className='flex items-center px-0.5 h-8 rounded-lg border-[0.5px] border-gray-200 bg-white shadow-xs'> | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         !isChatMode && <RunMode /> | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         isChatMode && <PreviewMode /> | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       <div className='mx-0.5 w-[0.5px] h-8 bg-gray-200'></div> | 
					
						
							|  |  |  |       <ViewHistory /> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default memo(RunAndHistory) |