Spaces:
Building
Building
import type { FC } from 'react' | |
import React from 'react' | |
import { useTranslation } from 'react-i18next' | |
import { | |
RiQuestionLine, | |
} from '@remixicon/react' | |
import { CodeLanguage } from '../code/types' | |
import useConfig from './use-config' | |
import type { TemplateTransformNodeType } from './types' | |
import VarList from '@/app/components/workflow/nodes/_base/components/variable/var-list' | |
import AddButton from '@/app/components/base/button/add-button' | |
import Field from '@/app/components/workflow/nodes/_base/components/field' | |
import Split from '@/app/components/workflow/nodes/_base/components/split' | |
import CodeEditor from '@/app/components/workflow/nodes/_base/components/editor/code-editor/editor-support-vars' | |
import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars' | |
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.templateTransform' | |
const Panel: FC<NodePanelProps<TemplateTransformNodeType>> = ({ | |
id, | |
data, | |
}) => { | |
const { t } = useTranslation() | |
const { | |
readOnly, | |
inputs, | |
availableVars, | |
handleVarListChange, | |
handleVarNameChange, | |
handleAddVariable, | |
handleAddEmptyVariable, | |
handleCodeChange, | |
filterVar, | |
// 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}.inputVars`)} | |
operations={ | |
!readOnly ? <AddButton onClick={handleAddEmptyVariable} /> : undefined | |
} | |
> | |
<VarList | |
nodeId={id} | |
readonly={readOnly} | |
list={inputs.variables} | |
onChange={handleVarListChange} | |
onVarNameChange={handleVarNameChange} | |
filterVar={filterVar} | |
/> | |
</Field> | |
<Split /> | |
<CodeEditor | |
availableVars={availableVars} | |
varList={inputs.variables} | |
onAddVar={handleAddVariable} | |
isInNode | |
readOnly={readOnly} | |
language={CodeLanguage.python3} | |
title={ | |
<div className='uppercase'>{t(`${i18nPrefix}.code`)}</div> | |
} | |
headerRight={ | |
<div className='flex items-center'> | |
<a | |
className='flex items-center space-x-0.5 h-[18px] text-xs font-normal text-gray-500' | |
href="https://jinja.palletsprojects.com/en/3.1.x/templates/" | |
target='_blank'> | |
<span>{t(`${i18nPrefix}.codeSupportTip`)}</span> | |
<RiQuestionLine className='w-3 h-3' /> | |
</a> | |
<div className='mx-1.5 w-px h-3 bg-gray-200'></div> | |
</div> | |
} | |
value={inputs.template} | |
onChange={handleCodeChange} | |
/> | |
</div> | |
<Split /> | |
<div className='px-4 pt-4 pb-2'> | |
<OutputVars> | |
<> | |
<VarItem | |
name='output' | |
type='string' | |
description={t(`${i18nPrefix}.outputVars.output`)} | |
/> | |
</> | |
</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) | |