fix: get vartype not pass caused page crash

This commit is contained in:
Joel 2025-03-26 15:16:54 +08:00
parent 7fc39d9d80
commit 5b54ff5ae4
4 changed files with 22 additions and 13 deletions

View File

@ -29,14 +29,14 @@ import { isConversationVar, isENV, isSystemVar } from '@/app/components/workflow
import Tooltip from '@/app/components/base/tooltip'
import { isExceptionVariable } from '@/app/components/workflow/utils'
import VarFullPathPanel from '@/app/components/workflow/nodes/_base/components/variable/var-full-path-panel'
import type { Type } from '@/app/components/workflow/nodes/llm/types'
import { Type } from '@/app/components/workflow/nodes/llm/types'
import type { ValueSelector } from '@/app/components/workflow/types'
type WorkflowVariableBlockComponentProps = {
nodeKey: string
variables: string[]
workflowNodesMap: WorkflowNodesMap
getVarType: (payload: {
getVarType?: (payload: {
nodeId: string,
valueSelector: ValueSelector,
}) => Type
@ -143,6 +143,9 @@ const WorkflowVariableBlockComponent = ({
)
}
if (!node)
return null
return (
<Tooltip
noDecoration
@ -150,10 +153,10 @@ const WorkflowVariableBlockComponent = ({
<VarFullPathPanel
nodeName={node.title}
path={variables.slice(1)}
varType={getVarType({
varType={getVarType ? getVarType({
nodeId: variables[0],
valueSelector: variables,
})}
}) : Type.string}
nodeType={node?.type}
/>}
disabled={!isShowAPart}

View File

@ -9,7 +9,7 @@ import {
} from 'lexical'
import { mergeRegister } from '@lexical/utils'
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
import type { WorkflowVariableBlockType } from '../../types'
import type { GetVarType, WorkflowVariableBlockType } from '../../types'
import {
$createWorkflowVariableBlockNode,
WorkflowVariableBlockNode,
@ -25,7 +25,7 @@ export type WorkflowVariableBlockProps = {
getWorkflowNode: (nodeId: string) => Node
onInsert?: () => void
onDelete?: () => void
getVarType: any
getVarType: GetVarType
}
const WorkflowVariableBlock = memo(({
workflowNodesMap,

View File

@ -2,18 +2,20 @@ import type { LexicalNode, NodeKey, SerializedLexicalNode } from 'lexical'
import { DecoratorNode } from 'lexical'
import type { WorkflowVariableBlockType } from '../../types'
import WorkflowVariableBlockComponent from './component'
import type { GetVarType } from '../../types'
export type WorkflowNodesMap = WorkflowVariableBlockType['workflowNodesMap']
export type SerializedNode = SerializedLexicalNode & {
variables: string[]
workflowNodesMap: WorkflowNodesMap
getVarType: any
getVarType?: GetVarType
}
export class WorkflowVariableBlockNode extends DecoratorNode<React.JSX.Element> {
__variables: string[]
__workflowNodesMap: WorkflowNodesMap
__getVarType: any
__getVarType?: GetVarType
static getType(): string {
return 'workflow-variable-block'
@ -68,6 +70,7 @@ export class WorkflowVariableBlockNode extends DecoratorNode<React.JSX.Element>
version: 1,
variables: this.getVariables(),
workflowNodesMap: this.getWorkflowNodesMap(),
getVarType: this.getVarType(),
}
}
@ -90,7 +93,7 @@ export class WorkflowVariableBlockNode extends DecoratorNode<React.JSX.Element>
return `{{#${this.getVariables().join('.')}#}}`
}
}
export function $createWorkflowVariableBlockNode(variables: string[], workflowNodesMap: WorkflowNodesMap, getVarType: any): WorkflowVariableBlockNode {
export function $createWorkflowVariableBlockNode(variables: string[], workflowNodesMap: WorkflowNodesMap, getVarType?: GetVarType): WorkflowVariableBlockNode {
return new WorkflowVariableBlockNode(variables, workflowNodesMap, getVarType)
}

View File

@ -1,3 +1,4 @@
import type { Type } from '../../workflow/nodes/llm/types'
import type { Dataset } from './plugins/context-block'
import type { RoleName } from './plugins/history-block'
import type {
@ -55,16 +56,18 @@ export type ExternalToolBlockType = {
onAddExternalTool?: () => void
}
export type GetVarType = (payload: {
nodeId: string,
valueSelector: ValueSelector,
}) => Type
export type WorkflowVariableBlockType = {
show?: boolean
variables?: NodeOutPutVar[]
workflowNodesMap?: Record<string, Pick<Node['data'], 'title' | 'type'>>
onInsert?: () => void
onDelete?: () => void
getVarType?: (payload: {
nodeId: string,
valueSelector: ValueSelector,
}) => string
getVarType?: GetVarType
}
export type MenuTextMatch = {