feat: can choose all in agent node

This commit is contained in:
Joel
2025-05-09 18:21:59 +08:00
parent aaa5309ba0
commit 4ee5156afb
9 changed files with 81 additions and 13 deletions

View File

@ -5,10 +5,11 @@ import {
useState,
} from 'react'
import type {
BlockEnum,
OnSelectBlock,
ToolWithProvider,
} from '../types'
import type { ToolValue } from './types'
import type { ToolDefaultValue, ToolValue } from './types'
import { ToolTypeEnum } from './types'
import Tools from './tools'
import { useToolTabs } from './hooks'
@ -31,6 +32,7 @@ type AllToolsProps = {
workflowTools: ToolWithProvider[]
mcpTools: ToolWithProvider[]
onSelect: OnSelectBlock
onSelectMultiple: (type: BlockEnum, tools: ToolDefaultValue[]) => void
selectedTools?: ToolValue[]
}
@ -42,6 +44,7 @@ const AllTools = ({
searchText,
tags = DEFAULT_TAGS,
onSelect,
onSelectMultiple,
buildInTools,
workflowTools,
customTools,
@ -136,6 +139,7 @@ const AllTools = ({
showWorkflowEmpty={activeTab === ToolTypeEnum.Workflow}
tools={tools}
onSelect={onSelect}
onSelectMultiple={onSelectMultiple}
viewType={isSupportGroupView ? activeView : ViewType.flat}
hasSearchText={!!searchText}
selectedTools={selectedTools}

View File

@ -35,6 +35,7 @@ type Props = {
isShow: boolean
onShowChange: (isShow: boolean) => void
onSelect: (tool: ToolDefaultValue) => void
onSelectMultiple: (tools: ToolDefaultValue[]) => void
supportAddCustomTool?: boolean
scope?: string
selectedTools?: ToolValue[]
@ -48,6 +49,7 @@ const ToolPicker: FC<Props> = ({
isShow,
onShowChange,
onSelect,
onSelectMultiple,
supportAddCustomTool,
scope = 'all',
selectedTools,
@ -103,6 +105,10 @@ const ToolPicker: FC<Props> = ({
onSelect(tool!)
}
const handleSelectMultiple = (_type: BlockEnum, tools: ToolDefaultValue[]) => {
onSelectMultiple(tools)
}
const [isShowEditCollectionToolModal, {
setFalse: hideEditCustomCollectionModal,
setTrue: showEditCustomCollectionModal,
@ -164,6 +170,7 @@ const ToolPicker: FC<Props> = ({
tags={tags}
searchText={searchText}
onSelect={handleSelect}
onSelectMultiple={handleSelectMultiple}
buildInTools={builtinToolList || []}
customTools={customToolList || []}
workflowTools={workflowToolList || []}

View File

@ -13,6 +13,7 @@ type Props = {
isShowLetterIndex: boolean
hasSearchText: boolean
onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
onSelectMultiple: (type: BlockEnum, tools: ToolDefaultValue[]) => void
letters: string[]
toolRefs: any
selectedTools?: ToolValue[]
@ -24,6 +25,7 @@ const ToolViewFlatView: FC<Props> = ({
isShowLetterIndex,
hasSearchText,
onSelect,
onSelectMultiple,
toolRefs,
selectedTools,
}) => {
@ -53,6 +55,7 @@ const ToolViewFlatView: FC<Props> = ({
isShowLetterIndex={isShowLetterIndex}
hasSearchText={hasSearchText}
onSelect={onSelect}
onSelectMultiple={onSelectMultiple}
selectedTools={selectedTools}
/>
</div>

View File

@ -12,6 +12,7 @@ type Props = {
toolList: ToolWithProvider[]
hasSearchText: boolean
onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
onSelectMultiple: (type: BlockEnum, tools: ToolValue[]) => void
selectedTools?: ToolValue[]
}
@ -20,6 +21,7 @@ const Item: FC<Props> = ({
toolList,
hasSearchText,
onSelect,
onSelectMultiple,
selectedTools,
}) => {
return (
@ -36,6 +38,7 @@ const Item: FC<Props> = ({
isShowLetterIndex={false}
hasSearchText={hasSearchText}
onSelect={onSelect}
onSelectMultiple={onSelectMultiple}
selectedTools={selectedTools}
/>
))}

View File

@ -12,6 +12,7 @@ type Props = {
payload: Record<string, ToolWithProvider[]>
hasSearchText: boolean
onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
onSelectMultiple: (type: BlockEnum, tools: ToolValue[]) => void
selectedTools?: ToolValue[]
}
@ -19,6 +20,7 @@ const ToolListTreeView: FC<Props> = ({
payload,
hasSearchText,
onSelect,
onSelectMultiple,
selectedTools,
}) => {
const { t } = useTranslation()
@ -46,6 +48,7 @@ const ToolListTreeView: FC<Props> = ({
toolList={payload[groupName]}
hasSearchText={hasSearchText}
onSelect={onSelect}
onSelectMultiple={onSelectMultiple}
selectedTools={selectedTools}
/>
))}

View File

@ -22,6 +22,7 @@ type Props = {
isShowLetterIndex: boolean
hasSearchText: boolean
onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
onSelectMultiple: (type: BlockEnum, tools: ToolDefaultValue[]) => void
selectedTools?: ToolValue[]
}
@ -32,6 +33,7 @@ const Tool: FC<Props> = ({
isShowLetterIndex,
hasSearchText,
onSelect,
onSelectMultiple,
selectedTools,
}) => {
const { t } = useTranslation()
@ -44,7 +46,7 @@ const Tool: FC<Props> = ({
const isHovering = useHover(ref)
const getIsDisabled = (tool: ToolType) => {
if (!selectedTools || !selectedTools.length) return false
return selectedTools.some(selectedTool => selectedTool.provider_name === payload.name && selectedTool.tool_name === tool.name)
return selectedTools.some(selectedTool => (selectedTool.provider_name === payload.name || selectedTool.provider_name === payload.id) && selectedTool.tool_name === tool.name)
}
const totalToolsNum = actions.length
@ -54,7 +56,31 @@ const Tool: FC<Props> = ({
const selectedInfo = useMemo(() => {
if (isHovering && !isAllSelected) {
return (
<span className='system-xs-regular text-components-button-secondary-accent-text'>
<span className='system-xs-regular text-components-button-secondary-accent-text'
onClick={(e) => {
onSelectMultiple(BlockEnum.Tool, actions.filter(action => !getIsDisabled(action)).map((tool) => {
const params: Record<string, string> = {}
if (tool.parameters) {
tool.parameters.forEach((item) => {
params[item.name] = ''
})
}
return {
provider_id: payload.id,
provider_type: payload.type,
provider_name: payload.name,
tool_name: tool.name,
tool_label: tool.label[language],
tool_description: tool.description[language],
title: tool.label[language],
is_team_authorization: payload.is_team_authorization,
output_schema: tool.output_schema,
paramSchemas: tool.parameters,
params,
}
}))
}}
>
{t('workflow.tabs.addAll')}
</span>
)

View File

@ -17,6 +17,7 @@ import classNames from '@/utils/classnames'
type ToolsProps = {
showWorkflowEmpty: boolean
onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
onSelectMultiple: (type: BlockEnum, tools: ToolDefaultValue[]) => void
tools: ToolWithProvider[]
viewType: ViewType
hasSearchText: boolean
@ -27,6 +28,7 @@ type ToolsProps = {
const Blocks = ({
showWorkflowEmpty,
onSelect,
onSelectMultiple,
tools,
viewType,
hasSearchText,
@ -107,6 +109,7 @@ const Blocks = ({
isShowLetterIndex={isShowLetterIndex}
hasSearchText={hasSearchText}
onSelect={onSelect}
onSelectMultiple={onSelectMultiple}
selectedTools={selectedTools}
/>
) : (
@ -114,6 +117,7 @@ const Blocks = ({
payload={treeViewToolsData}
hasSearchText={hasSearchText}
onSelect={onSelect}
onSelectMultiple={onSelectMultiple}
selectedTools={selectedTools}
/>
)