Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

trigger.tsx 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import type { FC } from 'react'
  2. import { useMemo } from 'react'
  3. import { useNodes } from 'reactflow'
  4. import { useTranslation } from 'react-i18next'
  5. import { RiLoader2Line, RiStopCircleFill } from '@remixicon/react'
  6. import Tooltip from '@/app/components/base/tooltip'
  7. import { useStore } from '../store'
  8. import useCurrentVars from '../hooks/use-inspect-vars-crud'
  9. import { WorkflowRunningStatus } from '@/app/components/workflow/types'
  10. import { NodeRunningStatus } from '@/app/components/workflow/types'
  11. import type { CommonNodeType } from '@/app/components/workflow/types'
  12. import { useEventEmitterContextContext } from '@/context/event-emitter'
  13. import { EVENT_WORKFLOW_STOP } from '@/app/components/workflow/variable-inspect/types'
  14. import cn from '@/utils/classnames'
  15. import { useNodesReadOnly } from '../hooks/use-workflow'
  16. const VariableInspectTrigger: FC = () => {
  17. const { t } = useTranslation()
  18. const { eventEmitter } = useEventEmitterContextContext()
  19. const showVariableInspectPanel = useStore(s => s.showVariableInspectPanel)
  20. const setShowVariableInspectPanel = useStore(s => s.setShowVariableInspectPanel)
  21. const environmentVariables = useStore(s => s.environmentVariables)
  22. const setCurrentFocusNodeId = useStore(s => s.setCurrentFocusNodeId)
  23. const {
  24. conversationVars,
  25. systemVars,
  26. nodesWithInspectVars,
  27. deleteAllInspectorVars,
  28. } = useCurrentVars()
  29. const currentVars = useMemo(() => {
  30. const allVars = [...environmentVariables, ...conversationVars, ...systemVars, ...nodesWithInspectVars]
  31. return allVars
  32. }, [environmentVariables, conversationVars, systemVars, nodesWithInspectVars])
  33. const {
  34. nodesReadOnly,
  35. getNodesReadOnly,
  36. } = useNodesReadOnly()
  37. const workflowRunningData = useStore(s => s.workflowRunningData)
  38. const nodes = useNodes<CommonNodeType>()
  39. const isStepRunning = useMemo(() => nodes.some(node => node.data._singleRunningStatus === NodeRunningStatus.Running), [nodes])
  40. const isPreviewRunning = useMemo(() => {
  41. if (!workflowRunningData)
  42. return false
  43. return workflowRunningData.result.status === WorkflowRunningStatus.Running
  44. }, [workflowRunningData])
  45. const isRunning = useMemo(() => isPreviewRunning || isStepRunning, [isPreviewRunning, isStepRunning])
  46. const handleStop = () => {
  47. eventEmitter?.emit({
  48. type: EVENT_WORKFLOW_STOP,
  49. } as any)
  50. }
  51. const handleClearAll = () => {
  52. deleteAllInspectorVars()
  53. setCurrentFocusNodeId('')
  54. }
  55. if (showVariableInspectPanel)
  56. return null
  57. return (
  58. <div className={cn('flex items-center gap-1')}>
  59. {!isRunning && !currentVars.length && (
  60. <div
  61. 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',
  62. nodesReadOnly && 'cursor-not-allowed text-text-disabled hover:bg-transparent hover:text-text-disabled',
  63. )}
  64. onClick={() => {
  65. if (getNodesReadOnly())
  66. return
  67. setShowVariableInspectPanel(true)
  68. }}
  69. >
  70. {t('workflow.debug.variableInspect.trigger.normal')}
  71. </div>
  72. )}
  73. {!isRunning && currentVars.length > 0 && (
  74. <>
  75. <div
  76. 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',
  77. nodesReadOnly && 'cursor-not-allowed text-text-disabled hover:bg-transparent hover:text-text-disabled',
  78. )}
  79. onClick={() => {
  80. if (getNodesReadOnly())
  81. return
  82. setShowVariableInspectPanel(true)
  83. }}
  84. >
  85. {t('workflow.debug.variableInspect.trigger.cached')}
  86. </div>
  87. <div
  88. 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',
  89. nodesReadOnly && 'cursor-not-allowed text-text-disabled hover:bg-transparent hover:text-text-disabled',
  90. )}
  91. onClick={handleClearAll}
  92. >
  93. {t('workflow.debug.variableInspect.trigger.clear')}
  94. </div>
  95. </>
  96. )}
  97. {isRunning && (
  98. <>
  99. <div
  100. 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'
  101. onClick={() => setShowVariableInspectPanel(true)}
  102. >
  103. <RiLoader2Line className='h-4 w-4' />
  104. <span className='text-text-accent'>{t('workflow.debug.variableInspect.trigger.running')}</span>
  105. </div>
  106. {isPreviewRunning && (
  107. <Tooltip
  108. popupContent={t('workflow.debug.variableInspect.trigger.stop')}
  109. >
  110. <div
  111. 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'
  112. onClick={handleStop}
  113. >
  114. <RiStopCircleFill className='h-4 w-4 text-text-accent' />
  115. </div>
  116. </Tooltip>
  117. )}
  118. </>
  119. )}
  120. </div>
  121. )
  122. }
  123. export default VariableInspectTrigger