From a1684791fc97af896c8d9dc0276ad6fbf7d870e4 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 11 Mar 2025 18:32:43 +0800 Subject: [PATCH] feat: support choose var --- .../object-child-tree-panel/picker/field.tsx | 12 +++++++++++- .../object-child-tree-panel/picker/index.tsx | 10 +++++++--- .../_base/components/variable/var-reference-vars.tsx | 5 ++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/web/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/field.tsx b/web/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/field.tsx index 2a940f75e3..7c8ad80f88 100644 --- a/web/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/field.tsx +++ b/web/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/field.tsx @@ -8,22 +8,27 @@ import cn from '@/utils/classnames' import TreeIndentLine from '../tree-indent-line' import { RiMoreFill } from '@remixicon/react' import Tooltip from '@/app/components/base/tooltip' +import type { ValueSelector } from '@/app/components/workflow/types' import { useTranslation } from 'react-i18next' const MAX_DEPTH = 10 type Props = { + valueSelector: ValueSelector name: string, payload: FieldType, depth?: number readonly?: boolean + onSelect?: (valueSelector: ValueSelector) => void } const Field: FC = ({ + valueSelector, name, payload, depth = 1, readonly, + onSelect, }) => { const { t } = useTranslation() const isLastFieldHighlight = readonly @@ -34,7 +39,10 @@ const Field: FC = ({ return (
-
+
!readonly && onSelect?.([...valueSelector, name])} + >
{depth === MAX_DEPTH + 1 ? ( @@ -57,6 +65,8 @@ const Field: FC = ({ payload={payload.properties?.[name] as FieldType} depth={depth + 1} readonly={readonly} + valueSelector={[...valueSelector, name]} + onSelect={onSelect} /> ))}
diff --git a/web/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/index.tsx b/web/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/index.tsx index 7fa27fd585..305d29aeea 100644 --- a/web/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/index.tsx +++ b/web/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/index.tsx @@ -1,17 +1,18 @@ 'use client' import type { FC } from 'react' import React, { useRef } from 'react' -import type { Field as FieldType, StructuredOutput } from '../../../../../llm/types' +import type { StructuredOutput } from '../../../../../llm/types' import Field from './field' import cn from '@/utils/classnames' import { useHover } from 'ahooks' +import type { ValueSelector } from '@/app/components/workflow/types' type Props = { className?: string - root: { nodeName?: string, attrName: string } + root: { nodeId?: string, nodeName?: string, attrName: string } payload: StructuredOutput readonly?: boolean - onSelect?: (field: FieldType) => void + onSelect?: (valueSelector: ValueSelector) => void onHovering?: (value: boolean) => void } @@ -21,6 +22,7 @@ export const PickerPanelMain: FC = ({ payload, readonly, onHovering, + onSelect, }) => { const ref = useRef(null) useHover(ref, { @@ -59,6 +61,8 @@ export const PickerPanelMain: FC = ({ name={name} payload={schema.properties[name]} readonly={readonly} + valueSelector={[root.nodeId!, root.attrName]} + onSelect={onSelect} /> ))}
diff --git a/web/app/components/workflow/nodes/_base/components/variable/var-reference-vars.tsx b/web/app/components/workflow/nodes/_base/components/variable/var-reference-vars.tsx index 4d98d242be..64047dda84 100644 --- a/web/app/components/workflow/nodes/_base/components/variable/var-reference-vars.tsx +++ b/web/app/components/workflow/nodes/_base/components/variable/var-reference-vars.tsx @@ -138,9 +138,12 @@ const Item: FC = ({ }}> {isStructureOutput && ( { + onChange(valueSelector, itemData) + }} /> )} {(isObj && !isFile) && (