mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-13 03:59:01 +08:00
Feat: add search params with theme in links of marketplace (#19648)
This commit is contained in:
parent
9dce0e40b5
commit
2c5f5b0c67
@ -1,4 +1,5 @@
|
|||||||
import { useCallback, useState } from 'react'
|
import { useCallback, useState } from 'react'
|
||||||
|
import { useTheme } from 'next-themes'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
import {
|
import {
|
||||||
@ -29,6 +30,7 @@ const InstallFromMarketplace = ({
|
|||||||
searchText,
|
searchText,
|
||||||
}: InstallFromMarketplaceProps) => {
|
}: InstallFromMarketplaceProps) => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const { theme } = useTheme()
|
||||||
const [collapse, setCollapse] = useState(false)
|
const [collapse, setCollapse] = useState(false)
|
||||||
const locale = getLocaleOnClient()
|
const locale = getLocaleOnClient()
|
||||||
const {
|
const {
|
||||||
@ -53,7 +55,7 @@ const InstallFromMarketplace = ({
|
|||||||
</div>
|
</div>
|
||||||
<div className='mb-2 flex items-center pt-2'>
|
<div className='mb-2 flex items-center pt-2'>
|
||||||
<span className='system-sm-regular pr-1 text-text-tertiary'>{t('common.modelProvider.discoverMore')}</span>
|
<span className='system-sm-regular pr-1 text-text-tertiary'>{t('common.modelProvider.discoverMore')}</span>
|
||||||
<Link target="_blank" href={`${MARKETPLACE_URL_PREFIX}`} className='system-sm-medium inline-flex items-center text-text-accent'>
|
<Link target="_blank" href={`${MARKETPLACE_URL_PREFIX}${theme ? `?theme=${theme}` : ''}`} className='system-sm-medium inline-flex items-center text-text-accent'>
|
||||||
{t('plugin.marketplace.difyMarketplace')}
|
{t('plugin.marketplace.difyMarketplace')}
|
||||||
<RiArrowRightUpLine className='h-4 w-4' />
|
<RiArrowRightUpLine className='h-4 w-4' />
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
'use client'
|
'use client'
|
||||||
|
import { useTheme } from 'next-themes'
|
||||||
import { RiArrowRightUpLine } from '@remixicon/react'
|
import { RiArrowRightUpLine } from '@remixicon/react'
|
||||||
import { getPluginLinkInMarketplace } from '../utils'
|
import { getPluginLinkInMarketplace } from '../utils'
|
||||||
import Card from '@/app/components/plugins/card'
|
import Card from '@/app/components/plugins/card'
|
||||||
@ -22,6 +23,7 @@ const CardWrapper = ({
|
|||||||
locale,
|
locale,
|
||||||
}: CardWrapperProps) => {
|
}: CardWrapperProps) => {
|
||||||
const { t } = useMixedTranslation(locale)
|
const { t } = useMixedTranslation(locale)
|
||||||
|
const { theme } = useTheme()
|
||||||
const [isShowInstallFromMarketplace, {
|
const [isShowInstallFromMarketplace, {
|
||||||
setTrue: showInstallFromMarketplace,
|
setTrue: showInstallFromMarketplace,
|
||||||
setFalse: hideInstallFromMarketplace,
|
setFalse: hideInstallFromMarketplace,
|
||||||
@ -54,7 +56,7 @@ const CardWrapper = ({
|
|||||||
>
|
>
|
||||||
{t('plugin.detailPanel.operation.install')}
|
{t('plugin.detailPanel.operation.install')}
|
||||||
</Button>
|
</Button>
|
||||||
<a href={`${getPluginLinkInMarketplace(plugin)}?language=${localeFromLocale}`} target='_blank' className='block w-[calc(50%-4px)] flex-1 shrink-0'>
|
<a href={`${getPluginLinkInMarketplace(plugin)}?language=${localeFromLocale}${theme ? `&theme=${theme}` : ''}`} target='_blank' className='block w-[calc(50%-4px)] flex-1 shrink-0'>
|
||||||
<Button
|
<Button
|
||||||
className='w-full gap-0.5'
|
className='w-full gap-0.5'
|
||||||
>
|
>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React, { useCallback, useMemo, useState } from 'react'
|
import React, { useCallback, useMemo, useState } from 'react'
|
||||||
|
import { useTheme } from 'next-themes'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { useBoolean } from 'ahooks'
|
import { useBoolean } from 'ahooks'
|
||||||
import {
|
import {
|
||||||
@ -49,6 +50,7 @@ const DetailHeader = ({
|
|||||||
onUpdate,
|
onUpdate,
|
||||||
}: Props) => {
|
}: Props) => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const { theme } = useTheme()
|
||||||
const locale = useGetLanguage()
|
const locale = useGetLanguage()
|
||||||
const { checkForUpdates, fetchReleases } = useGitHubReleases()
|
const { checkForUpdates, fetchReleases } = useGitHubReleases()
|
||||||
const { setShowUpdatePluginModal } = useModalContext()
|
const { setShowUpdatePluginModal } = useModalContext()
|
||||||
@ -85,9 +87,9 @@ const DetailHeader = ({
|
|||||||
if (isFromGitHub)
|
if (isFromGitHub)
|
||||||
return `https://github.com/${meta!.repo}`
|
return `https://github.com/${meta!.repo}`
|
||||||
if (isFromMarketplace)
|
if (isFromMarketplace)
|
||||||
return `${MARKETPLACE_URL_PREFIX}/plugins/${author}/${name}`
|
return `${MARKETPLACE_URL_PREFIX}/plugins/${author}/${name}${theme ? `?theme=${theme}` : ''}`
|
||||||
return ''
|
return ''
|
||||||
}, [author, isFromGitHub, isFromMarketplace, meta, name])
|
}, [author, isFromGitHub, isFromMarketplace, meta, name, theme])
|
||||||
|
|
||||||
const [isShowUpdateModal, {
|
const [isShowUpdateModal, {
|
||||||
setTrue: showUpdateModal,
|
setTrue: showUpdateModal,
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
'use client'
|
'use client'
|
||||||
import type { FC } from 'react'
|
import type { FC } from 'react'
|
||||||
import React, { useMemo } from 'react'
|
import React, { useMemo } from 'react'
|
||||||
|
import { useTheme } from 'next-themes'
|
||||||
import {
|
import {
|
||||||
RiArrowRightUpLine,
|
RiArrowRightUpLine,
|
||||||
RiBugLine,
|
RiBugLine,
|
||||||
@ -38,6 +39,7 @@ const PluginItem: FC<Props> = ({
|
|||||||
plugin,
|
plugin,
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const { theme } = useTheme()
|
||||||
const { categoriesMap } = useSingleCategories()
|
const { categoriesMap } = useSingleCategories()
|
||||||
const currentPluginID = usePluginPageContext(v => v.currentPluginID)
|
const currentPluginID = usePluginPageContext(v => v.currentPluginID)
|
||||||
const setCurrentPluginID = usePluginPageContext(v => v.setCurrentPluginID)
|
const setCurrentPluginID = usePluginPageContext(v => v.setCurrentPluginID)
|
||||||
@ -164,7 +166,7 @@ const PluginItem: FC<Props> = ({
|
|||||||
}
|
}
|
||||||
{source === PluginSource.marketplace
|
{source === PluginSource.marketplace
|
||||||
&& <>
|
&& <>
|
||||||
<a href={`${MARKETPLACE_URL_PREFIX}/plugins/${author}/${name}`} target='_blank' className='flex items-center gap-0.5'>
|
<a href={`${MARKETPLACE_URL_PREFIX}/plugins/${author}/${name}${theme ? `?theme=${theme}` : ''}`} target='_blank' className='flex items-center gap-0.5'>
|
||||||
<div className='system-2xs-medium-uppercase text-text-tertiary'>{t('plugin.from')} <span className='text-text-secondary'>marketplace</span></div>
|
<div className='system-2xs-medium-uppercase text-text-tertiary'>{t('plugin.from')} <span className='text-text-secondary'>marketplace</span></div>
|
||||||
<RiArrowRightUpLine className='h-3 w-3 text-text-tertiary' />
|
<RiArrowRightUpLine className='h-3 w-3 text-text-tertiary' />
|
||||||
</a>
|
</a>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
'use client'
|
'use client'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import type { FC } from 'react'
|
import type { FC } from 'react'
|
||||||
|
import { useTheme } from 'next-themes'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { RiArrowRightUpLine } from '@remixicon/react'
|
import { RiArrowRightUpLine } from '@remixicon/react'
|
||||||
import Badge from '../base/badge'
|
import Badge from '../base/badge'
|
||||||
@ -28,6 +29,7 @@ const ProviderCard: FC<Props> = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const getValueFromI18nObject = useRenderI18nObject()
|
const getValueFromI18nObject = useRenderI18nObject()
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const { theme } = useTheme()
|
||||||
const [isShowInstallFromMarketplace, {
|
const [isShowInstallFromMarketplace, {
|
||||||
setTrue: showInstallFromMarketplace,
|
setTrue: showInstallFromMarketplace,
|
||||||
setFalse: hideInstallFromMarketplace,
|
setFalse: hideInstallFromMarketplace,
|
||||||
@ -74,7 +76,7 @@ const ProviderCard: FC<Props> = ({
|
|||||||
className='grow'
|
className='grow'
|
||||||
variant='secondary'
|
variant='secondary'
|
||||||
>
|
>
|
||||||
<a href={`${getPluginLinkInMarketplace(payload)}?language=${locale}`} target='_blank' className='flex items-center gap-0.5'>
|
<a href={`${getPluginLinkInMarketplace(payload)}?language=${locale}${theme ? `&theme=${theme}` : ''}`} target='_blank' className='flex items-center gap-0.5'>
|
||||||
{t('plugin.detailPanel.operation.detail')}
|
{t('plugin.detailPanel.operation.detail')}
|
||||||
<RiArrowRightUpLine className='h-4 w-4' />
|
<RiArrowRightUpLine className='h-4 w-4' />
|
||||||
</a>
|
</a>
|
||||||
|
@ -2,6 +2,7 @@ import {
|
|||||||
useEffect,
|
useEffect,
|
||||||
useRef,
|
useRef,
|
||||||
} from 'react'
|
} from 'react'
|
||||||
|
import { useTheme } from 'next-themes'
|
||||||
import {
|
import {
|
||||||
RiArrowRightUpLine,
|
RiArrowRightUpLine,
|
||||||
RiArrowUpDoubleLine,
|
RiArrowUpDoubleLine,
|
||||||
@ -25,7 +26,7 @@ const Marketplace = ({
|
|||||||
}: MarketplaceProps) => {
|
}: MarketplaceProps) => {
|
||||||
const locale = getLocaleOnClient()
|
const locale = getLocaleOnClient()
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const { theme } = useTheme()
|
||||||
const {
|
const {
|
||||||
isLoading,
|
isLoading,
|
||||||
marketplaceCollections,
|
marketplaceCollections,
|
||||||
@ -83,7 +84,7 @@ const Marketplace = ({
|
|||||||
</span>
|
</span>
|
||||||
{t('common.operation.in')}
|
{t('common.operation.in')}
|
||||||
<a
|
<a
|
||||||
href={`${MARKETPLACE_URL_PREFIX}?language=${locale}&q=${searchPluginText}&tags=${filterPluginTags.join(',')}`}
|
href={`${MARKETPLACE_URL_PREFIX}?language=${locale}&q=${searchPluginText}&tags=${filterPluginTags.join(',')}${theme ? `&theme=${theme}` : ''}`}
|
||||||
className='system-sm-medium ml-1 flex items-center text-text-accent'
|
className='system-sm-medium ml-1 flex items-center text-text-accent'
|
||||||
target='_blank'
|
target='_blank'
|
||||||
>
|
>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
'use client'
|
'use client'
|
||||||
import type { FC } from 'react'
|
import type { FC } from 'react'
|
||||||
import React, { useCallback, useEffect, useRef, useState } from 'react'
|
import React, { useCallback, useEffect, useRef, useState } from 'react'
|
||||||
|
import { useTheme } from 'next-themes'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { RiMoreFill } from '@remixicon/react'
|
import { RiMoreFill } from '@remixicon/react'
|
||||||
import ActionButton from '@/app/components/base/action-button'
|
import ActionButton from '@/app/components/base/action-button'
|
||||||
@ -31,6 +32,7 @@ const OperationDropdown: FC<Props> = ({
|
|||||||
version,
|
version,
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const { theme } = useTheme()
|
||||||
const openRef = useRef(open)
|
const openRef = useRef(open)
|
||||||
const setOpen = useCallback((v: boolean) => {
|
const setOpen = useCallback((v: boolean) => {
|
||||||
onOpenChange(v)
|
onOpenChange(v)
|
||||||
@ -78,7 +80,7 @@ const OperationDropdown: FC<Props> = ({
|
|||||||
<PortalToFollowElemContent className='z-[9999]'>
|
<PortalToFollowElemContent className='z-[9999]'>
|
||||||
<div className='w-[112px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
|
<div className='w-[112px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
|
||||||
<div onClick={handleDownload} className='system-md-regular cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'>{t('common.operation.download')}</div>
|
<div onClick={handleDownload} className='system-md-regular cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'>{t('common.operation.download')}</div>
|
||||||
<a href={`${MARKETPLACE_URL_PREFIX}/plugins/${author}/${name}`} target='_blank' className='system-md-regular block cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'>{t('common.operation.viewDetails')}</a>
|
<a href={`${MARKETPLACE_URL_PREFIX}/plugins/${author}/${name}${theme ? `?theme=${theme}` : ''}`} target='_blank' className='system-md-regular block cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'>{t('common.operation.viewDetails')}</a>
|
||||||
</div>
|
</div>
|
||||||
</PortalToFollowElemContent>
|
</PortalToFollowElemContent>
|
||||||
</PortalToFollowElem>
|
</PortalToFollowElem>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user