mirror of
https://github.com/langgenius/dify.git
synced 2026-06-22 11:11:09 +08:00
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>
55 lines
1.6 KiB
TypeScript
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,
|
|
}
|
|
}
|