import { useEffect, useRef, } from 'react' import { useTheme } from 'next-themes' import { RiArrowRightUpLine, RiArrowUpDoubleLine, } from '@remixicon/react' import { useTranslation } from 'react-i18next' import { useMarketplace } from './hooks' import List from '@/app/components/plugins/marketplace/list' import Loading from '@/app/components/base/loading' import { getLocaleOnClient } from '@/i18n' import { MARKETPLACE_URL_PREFIX } from '@/config' type MarketplaceProps = { searchPluginText: string filterPluginTags: string[] onMarketplaceScroll: () => void } const Marketplace = ({ searchPluginText, filterPluginTags, onMarketplaceScroll, }: MarketplaceProps) => { const locale = getLocaleOnClient() const { t } = useTranslation() const { theme } = useTheme() const { isLoading, marketplaceCollections, marketplaceCollectionPluginsMap, plugins, handleScroll, page, } = useMarketplace(searchPluginText, filterPluginTags) const containerRef = useRef(null) useEffect(() => { const container = containerRef.current if (container) container.addEventListener('scroll', handleScroll) return () => { if (container) container.removeEventListener('scroll', handleScroll) } }, [handleScroll]) return (
onMarketplaceScroll()} />
{t('plugin.marketplace.moreFrom')}
{t('plugin.marketplace.discover')} {t('plugin.category.models')} , {t('plugin.category.tools')} , {t('plugin.category.agents')} , {t('plugin.category.extensions')} {t('plugin.marketplace.and')} {t('plugin.category.bundles')} {t('common.operation.in')} {t('plugin.marketplace.difyMarketplace')}
{ isLoading && page === 1 && (
) } { (!isLoading || page > 1) && ( ) }
) } export default Marketplace