chore: tools query
parent
e285119619
commit
d36a67b289
@ -1,87 +1,58 @@
|
|||||||
|
import type { ToolWithProvider } from '../types'
|
||||||
import { BlockEnum } from '../types'
|
import { BlockEnum } from '../types'
|
||||||
import cn from '@/utils/classnames'
|
import cn from '@/utils/classnames'
|
||||||
import { useEffect, useState } from 'react'
|
import { useMemo, useState } from 'react'
|
||||||
import type { ToolDefaultValue } from './types'
|
import type { ToolDefaultValue } from './types'
|
||||||
import { Popover } from 'antd'
|
import { Popover } from 'antd'
|
||||||
import ApoToolsPreview from '../apo/tool-preview/apo-tools-preview'
|
import ApoToolsPreview from '../apo/tool-preview/apo-tools-preview'
|
||||||
import type { ApoToolTypeInfo } from '../apo/types'
|
import type { ApoToolTypeInfo } from '../apo/types'
|
||||||
import { fetchApoNode } from '@/service/tools'
|
|
||||||
import { useGetLanguage } from '@/context/i18n'
|
import { useGetLanguage } from '@/context/i18n'
|
||||||
import BlockIcon from '../block-icon'
|
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[]
|
||||||
}
|
}
|
||||||
const APOTools = ({ searchText, onSelect }: APOToolsProps) => {
|
|
||||||
|
const APOTools = ({ searchText, onSelect, apoNodes = [] }: APOToolsProps) => {
|
||||||
const language = useGetLanguage()
|
const language = useGetLanguage()
|
||||||
const [openKey, setOpenKey] = useState({
|
const [openKey, setOpenKey] = useState<Record<string, boolean>>({})
|
||||||
apo_select: false,
|
|
||||||
apo_analysis: false,
|
const filteredApoNodes = useMemo(() => {
|
||||||
apo_rule: false,
|
const lowerCaseSearch = searchText.toLowerCase()
|
||||||
})
|
return apoNodes.filter(node => node.label[language]?.toLowerCase().includes(lowerCaseSearch))
|
||||||
const [apoNodes, setApoNodes] = useState([])
|
}, [searchText, apoNodes, language])
|
||||||
const hide = (key: ApoToolTypeInfo) => {
|
|
||||||
setOpenKey(prev => ({
|
|
||||||
...prev,
|
|
||||||
[key]: false,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleOpenChange = (key: ApoToolTypeInfo, newOpen: boolean) => {
|
const handleOpenChange = (key: ApoToolTypeInfo, newOpen: boolean) => {
|
||||||
setOpenKey(prev => ({
|
setOpenKey(prev => ({ ...prev, [key]: newOpen }))
|
||||||
...prev,
|
|
||||||
[key]: newOpen,
|
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const getApoNodes = async () => {
|
const hide = (key: ApoToolTypeInfo) => {
|
||||||
const data = await fetchApoNode()
|
setOpenKey(prev => ({ ...prev, [key]: false }))
|
||||||
setApoNodes(data)
|
|
||||||
}
|
}
|
||||||
useEffect(() => {
|
|
||||||
getApoNodes()
|
|
||||||
}, [])
|
|
||||||
return (
|
return (
|
||||||
<>
|
<div className="mb-1 last-of-type:mb-0">
|
||||||
<div className="mb-1 last-of-type:mb-0">
|
{filteredApoNodes.map(node => (
|
||||||
{apoNodes?.map(node => (
|
<Popover
|
||||||
<Popover
|
key={node.id}
|
||||||
key={node.id}
|
placement='rightTop'
|
||||||
placement='rightTop'
|
trigger={['click']}
|
||||||
trigger={['click']}
|
open={openKey[node.id]}
|
||||||
open={openKey[node.id]}
|
onOpenChange={newOpen => handleOpenChange(node.id, newOpen)}
|
||||||
onOpenChange={newOpen => handleOpenChange(node.id, newOpen)}
|
content={
|
||||||
content={
|
<ApoToolsPreview onSelect={onSelect} apoToolType={node.name} hidePopover={() => hide(node.name)} />
|
||||||
<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">
|
||||||
<div
|
<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>
|
||||||
className="flex items-center px-3 w-full h-8 rounded-lg hover:bg-state-base-hover cursor-pointer"
|
</div>
|
||||||
>
|
</Popover>
|
||||||
<BlockIcon
|
))}
|
||||||
size="md"
|
</div>
|
||||||
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>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
{/* <AINodeRecommend
|
|
||||||
onSelect={handleSelect}
|
|
||||||
apoToolType={apoToolType}
|
|
||||||
showRecommendModal={showRecommendModal}
|
|
||||||
closeModal={() => {
|
|
||||||
setApoToolType(null)
|
|
||||||
setShowRecommendModal(false)
|
|
||||||
}}
|
|
||||||
/> */}
|
|
||||||
</>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default APOTools
|
export default APOTools
|
||||||
|
|||||||
Loading…
Reference in New Issue