From 0e5c16d0c281f088e176c4acf2b794e971e3b750 Mon Sep 17 00:00:00 2001 From: Joel Date: Sat, 12 Oct 2024 18:15:11 +0800 Subject: [PATCH] feat: view to ui and fix some ui promblem --- .../workflow/block-selector/all-tools.tsx | 1 + .../workflow/block-selector/index-bar.tsx | 5 +-- .../workflow/block-selector/tool-item.tsx | 33 +++++++++++-------- .../workflow/block-selector/tools.tsx | 16 ++++++--- 4 files changed, 36 insertions(+), 19 deletions(-) diff --git a/web/app/components/workflow/block-selector/all-tools.tsx b/web/app/components/workflow/block-selector/all-tools.tsx index 1338f4ef1a..f8947ad52a 100644 --- a/web/app/components/workflow/block-selector/all-tools.tsx +++ b/web/app/components/workflow/block-selector/all-tools.tsx @@ -75,6 +75,7 @@ const AllTools = ({ showWorkflowEmpty={activeTab === ToolTypeEnum.Workflow} tools={tools} onSelect={onSelect} + viewType={activeView} /> ) diff --git a/web/app/components/workflow/block-selector/index-bar.tsx b/web/app/components/workflow/block-selector/index-bar.tsx index 7432358c9c..8068d9ecbc 100644 --- a/web/app/components/workflow/block-selector/index-bar.tsx +++ b/web/app/components/workflow/block-selector/index-bar.tsx @@ -47,9 +47,10 @@ const IndexBar: FC = ({ letters, itemRefs }) => { element.scrollIntoView({ behavior: 'smooth' }) } return ( -
+
+
{letters.map(letter => ( -
handleIndexClick(letter)}> +
handleIndexClick(letter)}> {letter}
))} diff --git a/web/app/components/workflow/block-selector/tool-item.tsx b/web/app/components/workflow/block-selector/tool-item.tsx index a5e1639392..5ee3b399a5 100644 --- a/web/app/components/workflow/block-selector/tool-item.tsx +++ b/web/app/components/workflow/block-selector/tool-item.tsx @@ -1,7 +1,7 @@ 'use client' import type { FC } from 'react' import React from 'react' -import { RiArrowRightSLine } from '@remixicon/react' +import { RiArrowDownSLine, RiArrowRightSLine } from '@remixicon/react' import { useBoolean } from 'ahooks' import BlockIcon from '../block-icon' import type { ToolWithProvider } from '../types' @@ -10,8 +10,10 @@ import type { ToolDefaultValue } from './types' import Tooltip from '@/app/components/base/tooltip' import type { Tool } from '@/app/components/tools/types' import { useGetLanguage } from '@/context/i18n' +import cn from '@/utils/classnames' type Props = { + className?: string isToolPlugin: boolean // Tool plugin should choose action provider: ToolWithProvider payload: Tool @@ -19,6 +21,7 @@ type Props = { } const ToolItem: FC = ({ + className, isToolPlugin, provider, payload, @@ -27,7 +30,9 @@ const ToolItem: FC = ({ const language = useGetLanguage() const [isFold, { toggle: toggleFold, - }] = useBoolean(true) + }] = useBoolean(false) + + const FoldIcon = isFold ? RiArrowDownSLine : RiArrowRightSLine const actions = [ 'DuckDuckGo AI Search', @@ -52,9 +57,9 @@ const ToolItem: FC = ({
)} > -
+
{ if (isToolPlugin) { toggleFold() @@ -70,22 +75,24 @@ const ToolItem: FC = ({ }) }} > +
+ +
{payload.label[language]}
+
{isToolPlugin && ( - + )} - -
{payload.label[language]}
{(!isFold && isToolPlugin) && (
{actions.map(action => (
{ onSelect(BlockEnum.Tool, { provider_id: provider.id, @@ -97,7 +104,7 @@ const ToolItem: FC = ({ }) }} > -
{action}
+
{action}
))}
diff --git a/web/app/components/workflow/block-selector/tools.tsx b/web/app/components/workflow/block-selector/tools.tsx index a81378dd2d..43f44bf882 100644 --- a/web/app/components/workflow/block-selector/tools.tsx +++ b/web/app/components/workflow/block-selector/tools.tsx @@ -9,6 +9,7 @@ import { CollectionType } from '../../tools/types' import IndexBar, { groupItems } from './index-bar' import type { ToolDefaultValue } from './types' import ToolItem from './tool-item' +import { ViewType } from './view-type-select' import Empty from '@/app/components/tools/add-tool-modal/empty' import { useGetLanguage } from '@/context/i18n' @@ -16,14 +17,18 @@ type ToolsProps = { showWorkflowEmpty: boolean onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void tools: ToolWithProvider[] + viewType: ViewType } const Blocks = ({ showWorkflowEmpty, onSelect, tools, + viewType, }: ToolsProps) => { const { t } = useTranslation() const language = useGetLanguage() + const isListView = viewType === ViewType.list + const isTreeView = viewType === ViewType.tree const { letters, groups: groupedTools } = groupItems(tools, tool => tool.label[language][0]) const toolRefs = useRef({}) @@ -36,13 +41,16 @@ const Blocks = ({ key={toolWithProvider.id} className='mb-1 last-of-type:mb-0' > -
- {toolWithProvider.label[language]} -
+ {isTreeView && ( +
+ {toolWithProvider.label[language]} +
+ )} { list.map(tool => ( )} {!!tools.length && letters.map(renderLetterGroup)} - {tools.length > 10 && } + {isListView && tools.length > 10 && }
) }