mirror of
https://github.com/langgenius/dify.git
synced 2025-11-24 08:52:43 +00:00
Signed-off-by: -LAN- <laipz8200@outlook.com> Co-authored-by: twwu <twwu@dify.ai> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> Co-authored-by: jyong <718720800@qq.com> Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com> Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com> Co-authored-by: lyzno1 <yuanyouhuilyz@gmail.com> Co-authored-by: quicksand <quicksandzn@gmail.com> Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com> Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com> Co-authored-by: zxhlyh <jasonapring2015@outlook.com> Co-authored-by: Yongtao Huang <yongtaoh2022@gmail.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: nite-knite <nkCoding@gmail.com> Co-authored-by: Hanqing Zhao <sherry9277@gmail.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Harry <xh001x@hotmail.com>
113 lines
4.6 KiB
TypeScript
113 lines
4.6 KiB
TypeScript
import { useTheme } from 'next-themes'
|
|
import {
|
|
RiArrowRightUpLine,
|
|
RiArrowUpDoubleLine,
|
|
} from '@remixicon/react'
|
|
import { useTranslation } from 'react-i18next'
|
|
import type { useMarketplace } from './hooks'
|
|
import List from '@/app/components/plugins/marketplace/list'
|
|
import Loading from '@/app/components/base/loading'
|
|
import { getLocaleOnClient } from '@/i18n-config'
|
|
import { getMarketplaceUrl } from '@/utils/var'
|
|
|
|
type MarketplaceProps = {
|
|
searchPluginText: string
|
|
filterPluginTags: string[]
|
|
isMarketplaceArrowVisible: boolean
|
|
showMarketplacePanel: () => void
|
|
marketplaceContext: ReturnType<typeof useMarketplace>
|
|
}
|
|
const Marketplace = ({
|
|
searchPluginText,
|
|
filterPluginTags,
|
|
isMarketplaceArrowVisible,
|
|
showMarketplacePanel,
|
|
marketplaceContext,
|
|
}: MarketplaceProps) => {
|
|
const locale = getLocaleOnClient()
|
|
const { t } = useTranslation()
|
|
const { theme } = useTheme()
|
|
const {
|
|
isLoading,
|
|
marketplaceCollections,
|
|
marketplaceCollectionPluginsMap,
|
|
plugins,
|
|
page,
|
|
} = marketplaceContext
|
|
|
|
return (
|
|
<>
|
|
<div className='sticky bottom-0 flex shrink-0 flex-col bg-background-default-subtle px-12 pb-[14px] pt-2'>
|
|
{isMarketplaceArrowVisible && (
|
|
<RiArrowUpDoubleLine
|
|
className='absolute left-1/2 top-2 z-10 h-4 w-4 -translate-x-1/2 cursor-pointer text-text-quaternary'
|
|
onClick={showMarketplacePanel}
|
|
/>
|
|
)}
|
|
<div className='pb-3 pt-4'>
|
|
<div className='title-2xl-semi-bold bg-gradient-to-r from-[rgba(11,165,236,0.95)] to-[rgba(21,90,239,0.95)] bg-clip-text text-transparent'>
|
|
{t('plugin.marketplace.moreFrom')}
|
|
</div>
|
|
<div className='body-md-regular flex items-center text-center text-text-tertiary'>
|
|
{t('plugin.marketplace.discover')}
|
|
<span className="body-md-medium relative ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
|
|
{t('plugin.category.models')}
|
|
</span>
|
|
,
|
|
<span className="body-md-medium relative ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
|
|
{t('plugin.category.tools')}
|
|
</span>
|
|
,
|
|
<span className="body-md-medium relative ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
|
|
{t('plugin.category.datasources')}
|
|
</span>
|
|
,
|
|
<span className="body-md-medium relative ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
|
|
{t('plugin.category.agents')}
|
|
</span>
|
|
,
|
|
<span className="body-md-medium relative ml-1 mr-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
|
|
{t('plugin.category.extensions')}
|
|
</span>
|
|
{t('plugin.marketplace.and')}
|
|
<span className="body-md-medium relative ml-1 mr-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
|
|
{t('plugin.category.bundles')}
|
|
</span>
|
|
{t('common.operation.in')}
|
|
<a
|
|
href={getMarketplaceUrl('', { language: locale, q: searchPluginText, tags: filterPluginTags.join(','), theme })}
|
|
className='system-sm-medium ml-1 flex items-center text-text-accent'
|
|
target='_blank'
|
|
>
|
|
{t('plugin.marketplace.difyMarketplace')}
|
|
<RiArrowRightUpLine className='h-4 w-4' />
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className='mt-[-14px] shrink-0 grow bg-background-default-subtle px-12 pb-2'>
|
|
{
|
|
isLoading && page === 1 && (
|
|
<div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2'>
|
|
<Loading />
|
|
</div>
|
|
)
|
|
}
|
|
{
|
|
(!isLoading || page > 1) && (
|
|
<List
|
|
marketplaceCollections={marketplaceCollections || []}
|
|
marketplaceCollectionPluginsMap={marketplaceCollectionPluginsMap || {}}
|
|
plugins={plugins}
|
|
showInstallButton
|
|
locale={locale}
|
|
/>
|
|
)
|
|
}
|
|
</div>
|
|
</>
|
|
)
|
|
}
|
|
|
|
export default Marketplace
|