diff --git a/web/app/components/workflow/apo/tool-preview/apo-tools-preview.tsx b/web/app/components/workflow/apo/tool-preview/apo-tools-preview.tsx index 5c9ea2c243..3ee5e6b6e8 100644 --- a/web/app/components/workflow/apo/tool-preview/apo-tools-preview.tsx +++ b/web/app/components/workflow/apo/tool-preview/apo-tools-preview.tsx @@ -11,6 +11,7 @@ import cn from '@/utils/classnames' import { debounce } from 'lodash-es' import { useGetLanguage } from '@/context/i18n' import Button from '@/app/components/base/button' +import { RiPushpinLine } from '@remixicon/react' type ApoToolsPreviewProps = { onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void; @@ -74,6 +75,7 @@ const ApoToolsPreview = ({ onSelect, apoToolType, hidePopover }: ApoToolsPreview const [provider, setProvider] = useState() const [searchText, setSearchText] = useState() const [openKey, setOpenKey] = useState(null) + const [selectedKey, setSelectedKey] = useState(null) const getAllTools = async () => { const tools = await fetchApoTools(apoToolType, searchText, language) @@ -107,12 +109,27 @@ const ApoToolsPreview = ({ onSelect, apoToolType, hidePopover }: ApoToolsPreview
setOpenKey(item.name + index)} + // onMouseEnter={() => setOpenKey(item.name + index)} + onMouseEnter={() => { + if (!selectedKey) setOpenKey(item.name + index) + }} + onClick={() => { + const key = item.name + index + if (selectedKey === key) { + setSelectedKey(null) + setOpenKey(null) + } + else { + setSelectedKey(key) + setOpenKey(key) + } + }} > -
+ {selectedKey === item.name + index && } +
{/*
)) - }, [tools, toolDetail, openKey]) + }, [tools, toolDetail, openKey, selectedKey]) useEffect(() => { const fetchTools = debounce(() => { @@ -151,13 +168,22 @@ const ApoToolsPreview = ({ onSelect, apoToolType, hidePopover }: ApoToolsPreview {tools?.length > 0 && convertMetricsListToMenuItems()}
- {openKey && tools?.length > 0 &&
- { - tools?.map((item, index) => ( -
- )) - } -
} + {(selectedKey || openKey) && tools?.length > 0 && ( +
+ { + tools?.map((item, index) => { + const key = item.name + index + const isVisible = key === (selectedKey ?? openKey) + return ( +
+ +
+ ) + }) + } +
+ )} + ) }