{letters.map(letter => (
handleIndexClick(letter)}>
diff --git a/web/app/components/workflow/block-selector/tool/tool-list-flat-view/list.tsx b/web/app/components/workflow/block-selector/tool/tool-list-flat-view/list.tsx
index 3639da5f2b..7f04a90bb3 100644
--- a/web/app/components/workflow/block-selector/tool/tool-list-flat-view/list.tsx
+++ b/web/app/components/workflow/block-selector/tool/tool-list-flat-view/list.tsx
@@ -1,16 +1,36 @@
'use client'
import type { FC } from 'react'
import React from 'react'
+import type { ToolWithProvider } from '../../../types'
+import type { BlockEnum } from '../../../types'
+import type { ToolDefaultValue } from '../../types'
+import Tool from '../tool'
+import { ViewType } from '../../view-type-select'
type Props = {
-
+ payload: ToolWithProvider[]
+ isShowLetterIndex: boolean
+ onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
}
-const ToolViewFlatView: FC
= () => {
+const ToolViewFlatView: FC = ({
+ payload,
+ isShowLetterIndex,
+ onSelect,
+}) => {
return (
- list...
+ {payload.map(tool => (
+
+ ))}
)
}
+
export default React.memo(ToolViewFlatView)
diff --git a/web/app/components/workflow/block-selector/tool/tool-list-tree-view/list.tsx b/web/app/components/workflow/block-selector/tool/tool-list-tree-view/list.tsx
index a621f08747..1b0dbddca6 100644
--- a/web/app/components/workflow/block-selector/tool/tool-list-tree-view/list.tsx
+++ b/web/app/components/workflow/block-selector/tool/tool-list-tree-view/list.tsx
@@ -1,20 +1,33 @@
'use client'
import type { FC } from 'react'
-import React from 'react'
+import React, { useCallback } from 'react'
import type { ToolWithProvider } from '../../../types'
import type { BlockEnum } from '../../../types'
import type { ToolDefaultValue } from '../../types'
import Item from './item'
+import { useTranslation } from 'react-i18next'
+import { CUSTOM_GROUP_NAME, WORKFLOW_GROUP_NAME } from '../../index-bar'
type Props = {
payload: Record
onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
}
-const OrgTools: FC = ({
+const ToolListTreeView: FC = ({
payload,
onSelect,
}) => {
+ const { t } = useTranslation()
+ const getI18nGroupName = useCallback((name: string) => {
+ if (name === CUSTOM_GROUP_NAME)
+ return t('workflow.tabs.customTool')
+
+ if (name === WORKFLOW_GROUP_NAME)
+ return t('workflow.tabs.workflowTool')
+
+ return name
+ }, [t])
+
if (!payload) return null
return (
@@ -22,7 +35,7 @@ const OrgTools: FC = ({
{Object.keys(payload).map(groupName => (
@@ -30,4 +43,5 @@ const OrgTools: FC = ({
)
}
-export default React.memo(OrgTools)
+
+export default React.memo(ToolListTreeView)
diff --git a/web/app/components/workflow/block-selector/tool/tool.tsx b/web/app/components/workflow/block-selector/tool/tool.tsx
index 3e9db61586..679f0b0e2e 100644
--- a/web/app/components/workflow/block-selector/tool/tool.tsx
+++ b/web/app/components/workflow/block-selector/tool/tool.tsx
@@ -1,6 +1,6 @@
'use client'
import type { FC } from 'react'
-import React from 'react'
+import React, { useMemo } from 'react'
import cn from '@/utils/classnames'
import { RiArrowDownSLine, RiArrowRightSLine } from '@remixicon/react'
import { useGetLanguage } from '@/context/i18n'
@@ -13,6 +13,7 @@ import ActonItem from './action-item'
import BlockIcon from '../../block-icon'
import { useBoolean } from 'ahooks'
+import { useTranslation } from 'react-i18next'
type Props = {
className?: string
@@ -29,8 +30,9 @@ const Tool: FC
= ({
isShowLetterIndex,
onSelect,
}) => {
+ const { t } = useTranslation()
const language = useGetLanguage()
- const isTreeView = viewType === ViewType.tree
+ const isFlatView = viewType === ViewType.flat
const actions = payload.tools
const hasAction = payload.type === CollectionType.builtIn
const [isFold, {
@@ -38,10 +40,23 @@ const Tool: FC = ({
}] = useBoolean(false)
const FoldIcon = isFold ? RiArrowDownSLine : RiArrowRightSLine
+ const groupName = useMemo(() => {
+ if (payload.type === CollectionType.builtIn)
+ return payload.author
+
+ if (payload.type === CollectionType.custom)
+ return t('workflow.tabs.customTool')
+
+ if (payload.type === CollectionType.workflow)
+ return t('workflow.tabs.workflowTool')
+
+ return ''
+ }, [payload.author, payload.type, t])
+
return (
= ({
/>
{payload.label[language]}
- {hasAction && (
-
- )}
+
+
+ {isFlatView && (
+
{groupName}
+ )}
+ {hasAction && (
+
+ )}
+
{hasAction && isFold && (
actions.map(action => (
10
/*
@@ -61,6 +60,16 @@ const Blocks = ({
return result
}, [withLetterAndGroupViewToolsData])
+ const listViewToolData = useMemo(() => {
+ const result: ToolWithProvider[] = []
+ Object.keys(withLetterAndGroupViewToolsData).forEach((letter) => {
+ Object.keys(withLetterAndGroupViewToolsData[letter]).forEach((groupName) => {
+ result.push(...withLetterAndGroupViewToolsData[letter][groupName])
+ })
+ })
+ return result
+ }, [withLetterAndGroupViewToolsData])
+
const toolRefs = useRef({})
return (
@@ -78,6 +87,9 @@ const Blocks = ({
{!!tools.length && (
isFlatView ? (
) : (