dify/web/app/components/integrations/hooks/use-tool-marketplace-panel.ts
Jingyi 9b74df21d0
feat(web): refine onboarding UI (#37433)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: yyh <yuanyouhuilyz@gmail.com>
Co-authored-by: Joel <iamjoel007@gmail.com>
Co-authored-by: hjlarry <hjlarry@163.com>
Co-authored-by: fatelei <fatelei@gmail.com>
Co-authored-by: Asuka Minato <i@asukaminato.eu.org>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Xiyuan Chen <52963600+GareArc@users.noreply.github.com>
Co-authored-by: gigglewang <gigglewang@dify.ai>
Co-authored-by: Yunlu Wen <yunlu.wen@dify.ai>
Co-authored-by: chariri <w@chariri.moe>
Co-authored-by: Evan <2869018789@qq.com>
Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com>
2026-06-15 08:47:15 +00:00

55 lines
1.6 KiB
TypeScript

import type { RefObject } from 'react'
import { useCallback, useEffect, useRef, useState } from 'react'
import { useMarketplace } from '@/app/components/tools/marketplace/hooks'
type UseToolMarketplacePanelParams = {
containerRef: RefObject<HTMLDivElement | null>
keywords: string
tagFilterValue: string[]
}
export function useToolMarketplacePanel({
containerRef,
keywords,
tagFilterValue,
}: UseToolMarketplacePanelParams) {
const toolListTailRef = useRef<HTMLDivElement>(null)
const marketplaceContext = useMarketplace(keywords, tagFilterValue)
const { handleScroll } = marketplaceContext
const [isMarketplaceArrowVisible, setIsMarketplaceArrowVisible] = useState(true)
const showMarketplacePanel = useCallback(() => {
containerRef.current?.scrollTo({
top: toolListTailRef.current
? toolListTailRef.current.offsetTop - 80
: 0,
behavior: 'smooth',
})
}, [containerRef])
const onContainerScroll = useCallback((e: Event) => {
handleScroll(e)
if (containerRef.current && toolListTailRef.current)
setIsMarketplaceArrowVisible(containerRef.current.scrollTop < (toolListTailRef.current.offsetTop - 80))
}, [containerRef, handleScroll])
useEffect(() => {
const container = containerRef.current
if (container)
container.addEventListener('scroll', onContainerScroll)
return () => {
if (container)
container.removeEventListener('scroll', onContainerScroll)
}
}, [onContainerScroll])
return {
containerRef,
isMarketplaceArrowVisible,
marketplaceContext,
showMarketplacePanel,
toolListTailRef,
}
}