chore: add description for apo node

pull/17608/head
keting lu 1 year ago
parent b15a8af990
commit 098fed4e4f

@ -12,22 +12,28 @@ import BlockIcon from '../block-icon'
type APOToolsProps = { type APOToolsProps = {
searchText: string; searchText: string;
onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void; onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void;
apoNodes?: ToolWithProvider[] apoNodes?: ToolWithProvider[];
} }
const APOTools = ({ searchText, onSelect, apoNodes = [] }: APOToolsProps) => { const APOTools = ({ searchText, onSelect, apoNodes = [] }: APOToolsProps) => {
const language = useGetLanguage() const language = useGetLanguage()
const [openKey, setOpenKey] = useState<Record<string, boolean>>({}) const [openKey, setOpenKey] = useState<Record<string, boolean>>({})
const [hoveredKey, setHoveredKey] = useState<Record<string, boolean>>({})
const filteredApoNodes = useMemo(() => { const filteredApoNodes = useMemo(() => {
const lowerCaseSearch = searchText.toLowerCase() const lowerCaseSearch = searchText.toLowerCase()
return apoNodes.filter(node => node.label[language]?.toLowerCase().includes(lowerCaseSearch)) return apoNodes.filter(node =>
node.label[language]?.toLowerCase().includes(lowerCaseSearch),
)
}, [searchText, apoNodes, language]) }, [searchText, apoNodes, language])
const handleOpenChange = (key: ApoToolTypeInfo, newOpen: boolean) => { const handleOpenChange = (key: ApoToolTypeInfo, newOpen: boolean) => {
setOpenKey(prev => ({ ...prev, [key]: newOpen })) setOpenKey(prev => ({ ...prev, [key]: newOpen }))
setHoveredKey({})
}
const handleHoverChange = (key: ApoToolTypeInfo, newOpen: boolean) => {
setHoveredKey(prev => ({ ...prev, [key]: newOpen }))
setOpenKey({})
} }
const hide = (key: ApoToolTypeInfo) => { const hide = (key: ApoToolTypeInfo) => {
setOpenKey(prev => ({ ...prev, [key]: false })) setOpenKey(prev => ({ ...prev, [key]: false }))
} }
@ -37,19 +43,52 @@ const APOTools = ({ searchText, onSelect, apoNodes = [] }: APOToolsProps) => {
{filteredApoNodes.map(node => ( {filteredApoNodes.map(node => (
<Popover <Popover
key={node.id} key={node.id}
placement='rightTop' placement="rightTop"
trigger={['click']} style={{ width: 500 }}
open={openKey[node.id]} arrow={false}
onOpenChange={newOpen => handleOpenChange(node.id, newOpen)} content={ <div>
content={ <BlockIcon
<ApoToolsPreview onSelect={onSelect} apoToolType={node.name} hidePopover={() => hide(node.name)} /> size='md'
} className='mb-2'
type={BlockEnum.Tool}
toolIcon={node.icon}
/>
<div className='mb-1 system-md-medium text-text-primary'> {node.label[language]}</div>
<div className='text-text-tertiary system-xs-regular'> {node.description[language]}</div>
</div>}
trigger="hover"
open={hoveredKey[node.id]}
onOpenChange={newOpen => handleHoverChange(node.id, newOpen)}
> >
<div className="flex items-center px-3 w-full h-8 rounded-lg hover:bg-state-base-hover cursor-pointer"> <Popover
<BlockIcon size="md" className="mr-2 shrink-0" type={BlockEnum.Tool} toolIcon={node.icon} /> key={node.id}
<div className={cn('grow text-sm text-gray-900 truncate')}>{node.label[language]}</div> placement="rightTop"
</div> trigger={['click']}
open={openKey[node.id]}
onOpenChange={newOpen => handleOpenChange(node.id, newOpen)}
content={
<ApoToolsPreview
onSelect={onSelect}
apoToolType={node.name}
hidePopover={() => hide(node.name)}
/>
}
>
<div className="flex items-center px-3 w-full h-8 rounded-lg hover:bg-state-base-hover cursor-pointer">
<BlockIcon
size="md"
className="mr-2 shrink-0"
type={BlockEnum.Tool}
toolIcon={node.icon}
/>
<div className={cn('grow text-sm text-gray-900 truncate')}>
{node.label[language]}
</div>
</div>
</Popover>
</Popover> </Popover>
))} ))}
</div> </div>
) )

Loading…
Cancel
Save