| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | import type { FC } from 'react'import React from 'react'import { useTranslation } from 'react-i18next'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 cn from '@/utils/classnames'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,    isDataReady,    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)  // To prevent prompt editor in body not update data.  if (!isDataReady)    return null  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          nodeId={id}          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)
 |