| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | import type { FC } from 'react'import React from 'react'import { useTranslation } from 'react-i18next'import Split from '../_base/components/split'import type { ToolNodeType } from './types'import useConfig from './use-config'import InputVarList from './components/input-var-list'import Button from '@/app/components/base/button'import Field from '@/app/components/workflow/nodes/_base/components/field'import type { NodePanelProps } from '@/app/components/workflow/types'import Form from '@/app/components/header/account-setting/model-provider-page/model-modal/Form'import ConfigCredential from '@/app/components/tools/setting/build-in/config-credentials'import Loading from '@/app/components/base/loading'import BeforeRunForm from '@/app/components/workflow/nodes/_base/components/before-run-form'import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars'import ResultPanel from '@/app/components/workflow/run/result-panel'const i18nPrefix = 'workflow.nodes.tool'const Panel: FC<NodePanelProps<ToolNodeType>> = ({  id,  data,}) => {  const { t } = useTranslation()  const {    readOnly,    inputs,    toolInputVarSchema,    setInputVar,    handleOnVarOpen,    filterVar,    toolSettingSchema,    toolSettingValue,    setToolSettingValue,    currCollection,    isShowAuthBtn,    showSetAuth,    showSetAuthModal,    hideSetAuthModal,    handleSaveAuth,    isLoading,    isShowSingleRun,    hideSingleRun,    singleRunForms,    runningStatus,    handleRun,    handleStop,    runResult,  } = useConfig(id, data)  if (isLoading) {    return <div className='flex h-[200px] items-center justify-center'>      <Loading />    </div>  }  return (    <div className='mt-2'>      {!readOnly && isShowAuthBtn && (        <>          <div className='px-4 pb-3'>            <Button              type='primary'              className='w-full !h-8'              onClick={showSetAuthModal}            >              {t(`${i18nPrefix}.toAuthorize`)}            </Button>          </div>        </>      )}      {!isShowAuthBtn && <>        <div className='px-4 pb-4 space-y-4'>          {toolInputVarSchema.length > 0 && (            <Field              title={t(`${i18nPrefix}.inputVars`)}            >              <InputVarList                readOnly={readOnly}                nodeId={id}                schema={toolInputVarSchema as any}                value={inputs.tool_parameters}                onChange={setInputVar}                filterVar={filterVar}                isSupportConstantValue                onOpen={handleOnVarOpen}              />            </Field>          )}          {toolInputVarSchema.length > 0 && toolSettingSchema.length > 0 && (            <Split />          )}          <Form            className='space-y-4'            itemClassName='!py-0'            fieldLabelClassName='!text-[13px] !font-semibold !text-gray-700 uppercase'            value={toolSettingValue}            onChange={setToolSettingValue}            formSchemas={toolSettingSchema as any}            isEditMode={false}            showOnVariableMap={{}}            validating={false}            inputClassName='!bg-gray-50'            readonly={readOnly}          />        </div>      </>}      {showSetAuth && (        <ConfigCredential          collection={currCollection!}          onCancel={hideSetAuthModal}          onSaved={handleSaveAuth}          isHideRemoveBtn        />      )}      <div className='px-4 pt-4 pb-2'>        <OutputVars>          <>            <VarItem              name='text'              type='String'              description={t(`${i18nPrefix}.outputVars.text`)}            />            <VarItem              name='files'              type='Array[File]'              description={t(`${i18nPrefix}.outputVars.files.title`)}            />          </>        </OutputVars>      </div>      {isShowSingleRun && (        <BeforeRunForm          nodeName={inputs.title}          onHide={hideSingleRun}          forms={singleRunForms}          runningStatus={runningStatus}          onRun={handleRun}          onStop={handleStop}          result={<ResultPanel {...runResult} showSteps={false} />}        />      )}    </div>  )}export default React.memo(Panel)
 |