Merge branch 'main' into feat/trigger

This commit is contained in:
Yeuoly
2025-10-21 11:09:26 +08:00
538 changed files with 29462 additions and 12789 deletions

View File

@ -6,7 +6,7 @@ import MarketplaceItem from '../item/marketplace-item'
import GithubItem from '../item/github-item'
import { useFetchPluginsInMarketPlaceByInfo } from '@/service/use-plugins'
import useCheckInstalled from '@/app/components/plugins/install-plugin/hooks/use-check-installed'
import produce from 'immer'
import { produce } from 'immer'
import PackageItem from '../item/package-item'
import LoadingError from '../../base/loading-error'
import { useGlobalPublicStore } from '@/context/global-public-context'

View File

@ -15,15 +15,15 @@ const ActionList = ({
detail,
}: Props) => {
const { t } = useTranslation()
const providerBriefInfo = detail.declaration.tool.identity
const providerKey = `${detail.plugin_id}/${providerBriefInfo.name}`
const providerBriefInfo = detail.declaration?.tool?.identity
const providerKey = providerBriefInfo ? `${detail.plugin_id}/${providerBriefInfo.name}` : ''
const { data: collectionList = [] } = useAllToolProviders()
const provider = useMemo(() => {
return collectionList.find(collection => collection.name === providerKey)
}, [collectionList, providerKey])
const { data } = useBuiltinTools(providerKey)
if (!data || !provider)
if (!providerKey || !data || !provider)
return null
return (

View File

@ -1,6 +1,6 @@
import { useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next'
import produce from 'immer'
import { produce } from 'immer'
import {
RiArrowRightUpLine,
RiBracesLine,

View File

@ -1,6 +1,6 @@
'use client'
import type { ReactNode } from 'react'
import type { ReactNode, RefObject } from 'react'
import {
useMemo,
useRef,
@ -17,7 +17,7 @@ import { PLUGIN_PAGE_TABS_MAP, usePluginPageTabs } from '../hooks'
import { useGlobalPublicStore } from '@/context/global-public-context'
export type PluginPageContextValue = {
containerRef: React.RefObject<HTMLDivElement>
containerRef: RefObject<HTMLDivElement | null>
currentPluginID: string | undefined
setCurrentPluginID: (pluginID?: string) => void
filters: FilterState
@ -27,8 +27,10 @@ export type PluginPageContextValue = {
options: Array<{ value: string, text: string }>
}
const emptyContainerRef: RefObject<HTMLDivElement | null> = { current: null }
export const PluginPageContext = createContext<PluginPageContextValue>({
containerRef: { current: null },
containerRef: emptyContainerRef,
currentPluginID: undefined,
setCurrentPluginID: noop,
filters: {
@ -53,7 +55,7 @@ export function usePluginPageContext(selector: (value: PluginPageContextValue) =
export const PluginPageContextProvider = ({
children,
}: PluginPageContextProviderProps) => {
const containerRef = useRef<HTMLDivElement>(null)
const containerRef = useRef<HTMLDivElement | null>(null)
const [filters, setFilters] = useState<FilterState>({
categories: [],
tags: [],

View File

@ -1,8 +1,9 @@
import { useEffect, useRef, useState } from 'react'
import type { RefObject } from 'react'
type UploaderHookProps = {
onFileChange: (file: File | null) => void
containerRef: React.RefObject<HTMLDivElement>
containerRef: RefObject<HTMLDivElement | null>
enabled?: boolean
}

View File

@ -21,7 +21,7 @@ const i18nPrefix = 'plugin.upgrade'
type Props = {
payload: UpdateFromMarketPlacePayload
pluginId: string
pluginId?: string
onSave: () => void
onCancel: () => void
isShowDowngradeWarningModal?: boolean
@ -113,9 +113,11 @@ const UpdatePluginModal: FC<Props> = ({
const { mutateAsync } = useRemoveAutoUpgrade()
const invalidateReferenceSettings = useInvalidateReferenceSettings()
const handleExcludeAndDownload = async () => {
await mutateAsync({
plugin_id: pluginId,
})
if (pluginId) {
await mutateAsync({
plugin_id: pluginId,
})
}
invalidateReferenceSettings()
handleConfirm()
}