| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | 
							- import {
 
-   useCallback,
 
-   useEffect,
 
-   useMemo,
 
-   useRef,
 
-   useState,
 
- } from 'react'
 
- import {
 
-   useMarketplaceCollectionsAndPlugins,
 
-   useMarketplacePlugins,
 
- } from '@/app/components/plugins/marketplace/hooks'
 
- import { PluginType } from '@/app/components/plugins/types'
 
- import { getMarketplaceListCondition } from '@/app/components/plugins/marketplace/utils'
 
- import { useAllToolProviders } from '@/service/use-tools'
 
- export const useMarketplace = (searchPluginText: string, filterPluginTags: string[]) => {
 
-   const { data: toolProvidersData, isSuccess } = useAllToolProviders()
 
-   const exclude = useMemo(() => {
 
-     if (isSuccess)
 
-       return toolProvidersData?.filter(toolProvider => !!toolProvider.plugin_id).map(toolProvider => toolProvider.plugin_id!)
 
-   }, [isSuccess, toolProvidersData])
 
-   const {
 
-     isLoading,
 
-     marketplaceCollections,
 
-     marketplaceCollectionPluginsMap,
 
-     queryMarketplaceCollectionsAndPlugins,
 
-   } = useMarketplaceCollectionsAndPlugins()
 
-   const {
 
-     plugins,
 
-     resetPlugins,
 
-     queryPlugins,
 
-     queryPluginsWithDebounced,
 
-     isLoading: isPluginsLoading,
 
-     total: pluginsTotal,
 
-   } = useMarketplacePlugins()
 
-   const [page, setPage] = useState(1)
 
-   const pageRef = useRef(page)
 
-   const searchPluginTextRef = useRef(searchPluginText)
 
-   const filterPluginTagsRef = useRef(filterPluginTags)
 
-   useEffect(() => {
 
-     searchPluginTextRef.current = searchPluginText
 
-     filterPluginTagsRef.current = filterPluginTags
 
-   }, [searchPluginText, filterPluginTags])
 
-   useEffect(() => {
 
-     if ((searchPluginText || filterPluginTags.length) && isSuccess) {
 
-       setPage(1)
 
-       pageRef.current = 1
 
-       if (searchPluginText) {
 
-         queryPluginsWithDebounced({
 
-           category: PluginType.tool,
 
-           query: searchPluginText,
 
-           tags: filterPluginTags,
 
-           exclude,
 
-           type: 'plugin',
 
-           page: pageRef.current,
 
-         })
 
-         return
 
-       }
 
-       queryPlugins({
 
-         category: PluginType.tool,
 
-         query: searchPluginText,
 
-         tags: filterPluginTags,
 
-         exclude,
 
-         type: 'plugin',
 
-         page: pageRef.current,
 
-       })
 
-     }
 
-     else {
 
-       if (isSuccess) {
 
-         queryMarketplaceCollectionsAndPlugins({
 
-           category: PluginType.tool,
 
-           condition: getMarketplaceListCondition(PluginType.tool),
 
-           exclude,
 
-           type: 'plugin',
 
-         })
 
-         resetPlugins()
 
-       }
 
-     }
 
-   }, [searchPluginText, filterPluginTags, queryPlugins, queryMarketplaceCollectionsAndPlugins, queryPluginsWithDebounced, resetPlugins, exclude, isSuccess])
 
-   const handleScroll = useCallback((e: Event) => {
 
-     const target = e.target as HTMLDivElement
 
-     const {
 
-       scrollTop,
 
-       scrollHeight,
 
-       clientHeight,
 
-     } = target
 
-     if (scrollTop + clientHeight >= scrollHeight - 5 && scrollTop > 0) {
 
-       const searchPluginText = searchPluginTextRef.current
 
-       const filterPluginTags = filterPluginTagsRef.current
 
-       if (pluginsTotal && plugins && pluginsTotal > plugins.length && (!!searchPluginText || !!filterPluginTags.length)) {
 
-         setPage(pageRef.current + 1)
 
-         pageRef.current++
 
-         queryPlugins({
 
-           category: PluginType.tool,
 
-           query: searchPluginText,
 
-           tags: filterPluginTags,
 
-           exclude,
 
-           type: 'plugin',
 
-           page: pageRef.current,
 
-         })
 
-       }
 
-     }
 
-   }, [exclude, plugins, pluginsTotal, queryPlugins])
 
-   return {
 
-     isLoading: isLoading || isPluginsLoading,
 
-     marketplaceCollections,
 
-     marketplaceCollectionPluginsMap,
 
-     plugins,
 
-     handleScroll,
 
-     page,
 
-   }
 
- }
 
 
  |