dify/web/app/components/workflow/nodes/start/panel.tsx
Stephen Zhou a84c2d36a3
style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

117 lines
3.7 KiB
TypeScript

import type { FC } from 'react'
import type { StartNodeType } from './types'
import type { InputVar, NodePanelProps } from '@/app/components/workflow/types'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
import ConfigVarModal from '@/app/components/app/configuration/config-var/config-modal'
import Field from '@/app/components/workflow/nodes/_base/components/field'
import Split from '@/app/components/workflow/nodes/_base/components/split'
import RemoveEffectVarConfirm from '../_base/components/remove-effect-var-confirm'
import VarItem from './components/var-item'
import VarList from './components/var-list'
import useConfig from './use-config'
const i18nPrefix = 'nodes.start'
const Panel: FC<NodePanelProps<StartNodeType>> = ({ id, data }) => {
const { t } = useTranslation()
const {
readOnly,
isChatMode,
inputs,
isShowAddVarModal,
showAddVarModal,
handleAddVariable,
hideAddVarModal,
handleVarListChange,
isShowRemoveVarConfirm,
hideRemoveVarConfirm,
onRemoveVarConfirm,
} = useConfig(id, data)
const handleAddVarConfirm = (payload: InputVar) => {
const isValid = handleAddVariable(payload)
if (!isValid) return
hideAddVarModal()
}
return (
<div className="mt-2">
<div className="space-y-4 px-4 pb-2">
<Field
title={t(($) => $[`${i18nPrefix}.inputField`], { ns: 'workflow' })}
operations={
!readOnly ? (
<button
type="button"
aria-label={`${t(($) => $['operation.add'], { ns: 'common' })} ${t(($) => $[`${i18nPrefix}.inputField`], { ns: 'workflow' })}`}
className="cursor-pointer rounded-md border-none bg-transparent p-1 select-none hover:bg-state-base-hover focus-visible:ring-1 focus-visible:ring-components-input-border-active focus-visible:outline-hidden"
onClick={showAddVarModal}
>
<span className="i-ri-add-line size-4 text-text-tertiary" aria-hidden="true" />
</button>
) : undefined
}
>
<>
<VarList
readonly={readOnly}
list={inputs.variables || []}
onChange={handleVarListChange}
/>
<div className="mt-1 space-y-1">
<Split className="my-2" />
{isChatMode && (
<VarItem
readonly
payload={
{
variable: 'userinput.query',
} as any
}
rightContent={
<div className="text-xs font-normal text-text-tertiary">String</div>
}
/>
)}
<VarItem
readonly
showLegacyBadge={!isChatMode}
payload={
{
variable: 'userinput.files',
} as any
}
rightContent={
<div className="text-xs font-normal text-text-tertiary">Array[File]</div>
}
/>
</div>
</>
</Field>
</div>
{isShowAddVarModal && (
<ConfigVarModal
isCreate
supportFile
isShow={isShowAddVarModal}
onClose={hideAddVarModal}
onConfirm={handleAddVarConfirm}
varKeys={inputs.variables.map((v) => v.variable)}
/>
)}
<RemoveEffectVarConfirm
isShow={isShowRemoveVarConfirm}
onCancel={hideRemoveVarConfirm}
onConfirm={onRemoveVarConfirm}
/>
</div>
)
}
export default React.memo(Panel)