| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | 
							- import type { FC } from 'react'
 - import { useMemo } from 'react'
 - import { useNodes } from 'reactflow'
 - import { useTranslation } from 'react-i18next'
 - import { RiLoader2Line, RiStopCircleFill } from '@remixicon/react'
 - import Tooltip from '@/app/components/base/tooltip'
 - import { useStore } from '../store'
 - import useCurrentVars from '../hooks/use-inspect-vars-crud'
 - import { WorkflowRunningStatus } from '@/app/components/workflow/types'
 - import { NodeRunningStatus } from '@/app/components/workflow/types'
 - import type { CommonNodeType } from '@/app/components/workflow/types'
 - import { useEventEmitterContextContext } from '@/context/event-emitter'
 - import { EVENT_WORKFLOW_STOP } from '@/app/components/workflow/variable-inspect/types'
 - import cn from '@/utils/classnames'
 - import { useNodesReadOnly } from '../hooks/use-workflow'
 - 
 - const VariableInspectTrigger: FC = () => {
 -   const { t } = useTranslation()
 -   const { eventEmitter } = useEventEmitterContextContext()
 - 
 -   const showVariableInspectPanel = useStore(s => s.showVariableInspectPanel)
 -   const setShowVariableInspectPanel = useStore(s => s.setShowVariableInspectPanel)
 - 
 -   const environmentVariables = useStore(s => s.environmentVariables)
 -   const setCurrentFocusNodeId = useStore(s => s.setCurrentFocusNodeId)
 -   const {
 -     conversationVars,
 -     systemVars,
 -     nodesWithInspectVars,
 -     deleteAllInspectorVars,
 -   } = useCurrentVars()
 -   const currentVars = useMemo(() => {
 -     const allVars = [...environmentVariables, ...conversationVars, ...systemVars, ...nodesWithInspectVars]
 -     return allVars
 -   }, [environmentVariables, conversationVars, systemVars, nodesWithInspectVars])
 -   const {
 -     nodesReadOnly,
 -     getNodesReadOnly,
 -   } = useNodesReadOnly()
 -   const workflowRunningData = useStore(s => s.workflowRunningData)
 -   const nodes = useNodes<CommonNodeType>()
 -   const isStepRunning = useMemo(() => nodes.some(node => node.data._singleRunningStatus === NodeRunningStatus.Running), [nodes])
 -   const isPreviewRunning = useMemo(() => {
 -     if (!workflowRunningData)
 -       return false
 -     return workflowRunningData.result.status === WorkflowRunningStatus.Running
 -   }, [workflowRunningData])
 -   const isRunning = useMemo(() => isPreviewRunning || isStepRunning, [isPreviewRunning, isStepRunning])
 - 
 -   const handleStop = () => {
 -     eventEmitter?.emit({
 -       type: EVENT_WORKFLOW_STOP,
 -     } as any)
 -   }
 - 
 -   const handleClearAll = () => {
 -     deleteAllInspectorVars()
 -     setCurrentFocusNodeId('')
 -   }
 - 
 -   if (showVariableInspectPanel)
 -     return null
 - 
 -   return (
 -     <div className={cn('flex items-center gap-1')}>
 -       {!isRunning && !currentVars.length && (
 -         <div
 -           className={cn('system-2xs-semibold-uppercase flex h-5 cursor-pointer items-center gap-1 rounded-md border-[0.5px] border-effects-highlight bg-components-actionbar-bg px-2 text-text-tertiary shadow-lg backdrop-blur-sm hover:bg-background-default-hover',
 -             nodesReadOnly && 'cursor-not-allowed text-text-disabled hover:bg-transparent hover:text-text-disabled',
 -           )}
 -           onClick={() => {
 -             if (getNodesReadOnly())
 -               return
 -             setShowVariableInspectPanel(true)
 -           }}
 -         >
 -           {t('workflow.debug.variableInspect.trigger.normal')}
 -         </div>
 -       )}
 -       {!isRunning && currentVars.length > 0 && (
 -         <>
 -           <div
 -             className={cn('system-xs-medium flex h-6 cursor-pointer items-center gap-1 rounded-md border-[0.5px] border-effects-highlight bg-components-actionbar-bg px-2 text-text-accent shadow-lg backdrop-blur-sm hover:bg-components-actionbar-bg-accent',
 -               nodesReadOnly && 'cursor-not-allowed text-text-disabled hover:bg-transparent hover:text-text-disabled',
 -             )}
 -             onClick={() => {
 -               if (getNodesReadOnly())
 -                 return
 -               setShowVariableInspectPanel(true)
 -             }}
 -           >
 -             {t('workflow.debug.variableInspect.trigger.cached')}
 -           </div>
 -           <div
 -             className={cn('system-xs-medium flex h-6 cursor-pointer items-center rounded-md border-[0.5px] border-effects-highlight bg-components-actionbar-bg px-1 text-text-tertiary shadow-lg backdrop-blur-sm hover:bg-components-actionbar-bg-accent hover:text-text-accent',
 -               nodesReadOnly && 'cursor-not-allowed text-text-disabled hover:bg-transparent hover:text-text-disabled',
 -             )}
 -             onClick={handleClearAll}
 -           >
 -             {t('workflow.debug.variableInspect.trigger.clear')}
 -           </div>
 -         </>
 -       )}
 -       {isRunning && (
 -         <>
 -           <div
 -             className='system-xs-medium flex h-6 cursor-pointer items-center gap-1 rounded-md border-[0.5px] border-effects-highlight bg-components-actionbar-bg px-2 text-text-accent shadow-lg backdrop-blur-sm hover:bg-components-actionbar-bg-accent'
 -             onClick={() => setShowVariableInspectPanel(true)}
 -           >
 -             <RiLoader2Line className='h-4 w-4 animate-spin' />
 -             <span className='text-text-accent'>{t('workflow.debug.variableInspect.trigger.running')}</span>
 -           </div>
 -           {isPreviewRunning && (
 -             <Tooltip
 -               popupContent={t('workflow.debug.variableInspect.trigger.stop')}
 -             >
 -               <div
 -                 className='flex h-6 cursor-pointer items-center rounded-md border-[0.5px] border-effects-highlight bg-components-actionbar-bg px-1 shadow-lg backdrop-blur-sm hover:bg-components-actionbar-bg-accent'
 -                 onClick={handleStop}
 -               >
 -                 <RiStopCircleFill className='h-4 w-4 text-text-accent' />
 -               </div>
 -             </Tooltip>
 -           )}
 -         </>
 -       )}
 -     </div>
 -   )
 - }
 - 
 - export default VariableInspectTrigger
 
 
  |