From 06398f078907eafd1f5c18b48d7b9f7be76e32c3 Mon Sep 17 00:00:00 2001 From: keting lu Date: Fri, 21 Mar 2025 17:14:50 +0800 Subject: [PATCH] chore: optimize memory usage in apo tools preview panel --- .../apo/tool-preview/apo-tools-preview.tsx | 112 ++++++++++-------- 1 file changed, 61 insertions(+), 51 deletions(-) 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 e977085327..5c9ea2c243 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 @@ -17,7 +17,55 @@ type ApoToolsPreviewProps = { apoToolType: ApoToolTypeInfo | null; hidePopover: any } +type ToolDetailProps = { + toolDetail: any + handleSelect: (item: any) => void + apoToolType: ApoToolTypeInfo | null; +} +const ToolDetail = ({ toolDetail, handleSelect, apoToolType }: ToolDetailProps) => { + const { t } = useTranslation() + const language = useGetLanguage() + return
+
+
{toolDetail.label[language]}
+ +
+
+
+ {t('apo.tool.desc')}:<>{toolDetail.description[language]} +
+
+ {apoToolType === 'apo_select' ? ( + <> + {toolDetail?.display.type === 'metric' &&
{t('apo.tool.unit')}:{toolDetail.display.unit}
} + {toolDetail?.display?.type &&
{t('apo.tool.output')}:{t(`apo.displayType.${toolDetail?.display?.type}`)}
} +
+
+
+
+ +
+ + ) : ( +
+ {t('apo.tool.input')}: +
+ {toolDetail?.parameters.map(parameter => ( + + ))} +
+
+ )} +
+
+
+} const ApoToolsPreview = ({ onSelect, apoToolType, hidePopover }: ApoToolsPreviewProps) => { const language = useGetLanguage() const { t } = useTranslation() @@ -25,15 +73,14 @@ const ApoToolsPreview = ({ onSelect, apoToolType, hidePopover }: ApoToolsPreview const [tools, setTools] = useState([]) const [provider, setProvider] = useState() const [searchText, setSearchText] = useState() + const [openKey, setOpenKey] = useState(null) + const getAllTools = async () => { const tools = await fetchApoTools(apoToolType, searchText, language) // setSearchText('') setProvider(tools[0]) setTools(tools[0]?.tools) } - const handlePopoverOpen = useCallback((item) => { - setToolDetail(item) - }, []) const handleSelect = (item) => { const params: Record = {} if (item.parameters) { @@ -58,12 +105,12 @@ const ApoToolsPreview = ({ onSelect, apoToolType, hidePopover }: ApoToolsPreview const convertMetricsListToMenuItems = useCallback(() => { return tools.map((item, index) => (
handlePopoverOpen(item)} + onMouseEnter={() => setOpenKey(item.name + index)} >
{/*
)) - }, [tools, handlePopoverOpen, toolDetail]) + }, [tools, toolDetail, openKey]) useEffect(() => { const fetchTools = debounce(() => { @@ -104,50 +151,13 @@ const ApoToolsPreview = ({ onSelect, apoToolType, hidePopover }: ApoToolsPreview {tools?.length > 0 && convertMetricsListToMenuItems()}
- {toolDetail && (
- -
-
-
{toolDetail.label[language]}
- -
-
-
- {t('apo.tool.desc')}:<>{toolDetail.description[language]} -
-
- {apoToolType === 'apo_select' ? ( - <> - {toolDetail?.display.type === 'metric' &&
{t('apo.tool.unit')}:{toolDetail.display.unit}
} - {toolDetail?.display?.type &&
{t('apo.tool.output')}:{t(`apo.displayType.${toolDetail?.display?.type}`)}
} -
-
-
-
- -
- - - ) : ( -
- {t('apo.tool.input')}: -
- {toolDetail?.parameters.map(parameter => ( - - ))} -
-
- )} -
-
-
-
- )} + {openKey && tools?.length > 0 &&
+ { + tools?.map((item, index) => ( +
+ )) + } +
}
) }