mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			183 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import type { FC } from 'react'
 | |
| import React from 'react'
 | |
| import { useTranslation } from 'react-i18next'
 | |
| import cn from 'classnames'
 | |
| import useConfig from './use-config'
 | |
| import ApiInput from './components/api-input'
 | |
| import KeyValue from './components/key-value'
 | |
| import EditBody from './components/edit-body'
 | |
| import AuthorizationModal from './components/authorization'
 | |
| import type { HttpNodeType } from './types'
 | |
| import Timeout from './components/timeout'
 | |
| import Field from '@/app/components/workflow/nodes/_base/components/field'
 | |
| import Split from '@/app/components/workflow/nodes/_base/components/split'
 | |
| import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars'
 | |
| import { Settings01 } from '@/app/components/base/icons/src/vender/line/general'
 | |
| import type { NodePanelProps } from '@/app/components/workflow/types'
 | |
| import BeforeRunForm from '@/app/components/workflow/nodes/_base/components/before-run-form'
 | |
| import ResultPanel from '@/app/components/workflow/run/result-panel'
 | |
| 
 | |
| const i18nPrefix = 'workflow.nodes.http'
 | |
| 
 | |
| const Panel: FC<NodePanelProps<HttpNodeType>> = ({
 | |
|   id,
 | |
|   data,
 | |
| }) => {
 | |
|   const { t } = useTranslation()
 | |
| 
 | |
|   const {
 | |
|     readOnly,
 | |
|     inputs,
 | |
|     handleMethodChange,
 | |
|     handleUrlChange,
 | |
|     headers,
 | |
|     setHeaders,
 | |
|     addHeader,
 | |
|     params,
 | |
|     setParams,
 | |
|     addParam,
 | |
|     setBody,
 | |
|     isShowAuthorization,
 | |
|     showAuthorization,
 | |
|     hideAuthorization,
 | |
|     setAuthorization,
 | |
|     setTimeout,
 | |
|     // single run
 | |
|     isShowSingleRun,
 | |
|     hideSingleRun,
 | |
|     runningStatus,
 | |
|     handleRun,
 | |
|     handleStop,
 | |
|     varInputs,
 | |
|     inputVarValues,
 | |
|     setInputVarValues,
 | |
|     runResult,
 | |
|   } = useConfig(id, data)
 | |
| 
 | |
|   return (
 | |
|     <div className='mt-2'>
 | |
|       <div className='px-4 pb-4 space-y-4'>
 | |
|         <Field
 | |
|           title={t(`${i18nPrefix}.api`)}
 | |
|           operations={
 | |
|             <div
 | |
|               onClick={showAuthorization}
 | |
|               className={cn(!readOnly && 'cursor-pointer hover:bg-gray-50', 'flex items-center h-6 space-x-1 px-2 rounded-md ')}
 | |
|             >
 | |
|               {!readOnly && <Settings01 className='w-3 h-3 text-gray-500' />}
 | |
|               <div className='text-xs font-medium text-gray-500'>
 | |
|                 {t(`${i18nPrefix}.authorization.authorization`)}
 | |
|                 <span className='ml-1 text-gray-700'>{t(`${i18nPrefix}.authorization.${inputs.authorization.type}`)}</span>
 | |
|               </div>
 | |
|             </div>
 | |
|           }
 | |
|         >
 | |
|           <ApiInput
 | |
|             nodeId={id}
 | |
|             readonly={readOnly}
 | |
|             method={inputs.method}
 | |
|             onMethodChange={handleMethodChange}
 | |
|             url={inputs.url}
 | |
|             onUrlChange={handleUrlChange}
 | |
|           />
 | |
|         </Field>
 | |
|         <Field
 | |
|           title={t(`${i18nPrefix}.headers`)}
 | |
|         >
 | |
|           <KeyValue
 | |
|             nodeId={id}
 | |
|             list={headers}
 | |
|             onChange={setHeaders}
 | |
|             onAdd={addHeader}
 | |
|             readonly={readOnly}
 | |
|           />
 | |
|         </Field>
 | |
|         <Field
 | |
|           title={t(`${i18nPrefix}.params`)}
 | |
|         >
 | |
|           <KeyValue
 | |
|             nodeId={id}
 | |
|             list={params}
 | |
|             onChange={setParams}
 | |
|             onAdd={addParam}
 | |
|             readonly={readOnly}
 | |
|           />
 | |
|         </Field>
 | |
|         <Field
 | |
|           title={t(`${i18nPrefix}.body`)}
 | |
|         >
 | |
|           <EditBody
 | |
|             nodeId={id}
 | |
|             readonly={readOnly}
 | |
|             payload={inputs.body}
 | |
|             onChange={setBody}
 | |
|           />
 | |
|         </Field>
 | |
|       </div>
 | |
|       <Split />
 | |
|       <div className='px-4 pt-4 pb-4'>
 | |
|         <Timeout
 | |
|           nodeId={id}
 | |
|           readonly={readOnly}
 | |
|           payload={inputs.timeout}
 | |
|           onChange={setTimeout}
 | |
|         />
 | |
|       </div>
 | |
|       {(isShowAuthorization && !readOnly) && (
 | |
|         <AuthorizationModal
 | |
|           isShow
 | |
|           onHide={hideAuthorization}
 | |
|           payload={inputs.authorization}
 | |
|           onChange={setAuthorization}
 | |
|         />
 | |
|       )}
 | |
|       <Split />
 | |
|       <div className='px-4 pt-4 pb-2'>
 | |
|         <OutputVars>
 | |
|           <>
 | |
|             <VarItem
 | |
|               name='body'
 | |
|               type='string'
 | |
|               description={t(`${i18nPrefix}.outputVars.body`)}
 | |
|             />
 | |
|             <VarItem
 | |
|               name='status_code'
 | |
|               type='number'
 | |
|               description={t(`${i18nPrefix}.outputVars.statusCode`)}
 | |
|             />
 | |
|             <VarItem
 | |
|               name='headers'
 | |
|               type='object'
 | |
|               description={t(`${i18nPrefix}.outputVars.headers`)}
 | |
|             />
 | |
|             <VarItem
 | |
|               name='files'
 | |
|               type='Array[File]'
 | |
|               description={t(`${i18nPrefix}.outputVars.files`)}
 | |
|             />
 | |
|           </>
 | |
|         </OutputVars>
 | |
|       </div>
 | |
|       {isShowSingleRun && (
 | |
|         <BeforeRunForm
 | |
|           nodeName={inputs.title}
 | |
|           onHide={hideSingleRun}
 | |
|           forms={[
 | |
|             {
 | |
|               inputs: varInputs,
 | |
|               values: inputVarValues,
 | |
|               onChange: setInputVarValues,
 | |
|             },
 | |
|           ]}
 | |
|           runningStatus={runningStatus}
 | |
|           onRun={handleRun}
 | |
|           onStop={handleStop}
 | |
|           result={<ResultPanel {...runResult} showSteps={false} />}
 | |
|         />
 | |
|       )}
 | |
|     </div >
 | |
|   )
 | |
| }
 | |
| 
 | |
| export default React.memo(Panel)
 | 
