From 07c99745fac77a5cae4a028031e9ae706e6faeb2 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 27 Jun 2025 19:05:12 +0800 Subject: [PATCH] feat: handle downgrade install --- .../plugin-detail-panel/detail-header.tsx | 36 +------ ...arning-modal.tsx => downgrade-warning.tsx} | 9 +- .../update-plugin/from-market-place.tsx | 100 ++++++++++++------ 3 files changed, 71 insertions(+), 74 deletions(-) rename web/app/components/plugins/update-plugin/{downgrade-warning-modal.tsx => downgrade-warning.tsx} (87%) diff --git a/web/app/components/plugins/plugin-detail-panel/detail-header.tsx b/web/app/components/plugins/plugin-detail-panel/detail-header.tsx index 6a0e34c40a..4d4f3905e9 100644 --- a/web/app/components/plugins/plugin-detail-panel/detail-header.tsx +++ b/web/app/components/plugins/plugin-detail-panel/detail-header.tsx @@ -37,11 +37,9 @@ import { API_PREFIX } from '@/config' import cn from '@/utils/classnames' import { AutoUpdateLine } from '../../base/icons/src/vender/system' import { timeOfDayToDayjs } from '../reference-setting-modal/auto-update-setting/utils' -import DowngradeWarningModal from '../update-plugin/downgrade-warning-modal' import { getMarketplaceUrl } from '@/utils/var' import useReferenceSetting from '../plugin-page/use-reference-setting' import { AUTO_UPDATE_MODE } from '../reference-setting-modal/auto-update-setting/types' -import { useInvalidateReferenceSettings, useRemoveAutoUpgrade } from '@/service/use-plugins' const i18nPrefix = 'plugin.action' @@ -117,17 +115,10 @@ const DetailHeader = ({ return false }, [autoUpgradeInfo, plugin_id]) - const [isShowDowngradeWarningModal, { - setTrue: showDowngradeWarningModal, - setFalse: hideDowngradeWarningModal, - }] = useBoolean(false) - + const [isDowngrade, setIsDowngrade] = useState(false) const handleUpdate = async (isDowngrade?: boolean) => { if (isFromMarketplace) { - if(isAutoUpgradeEnabled && isDowngrade) { - showDowngradeWarningModal() - return - } + setIsDowngrade(!!isDowngrade) showUpdateModal() return } @@ -163,20 +154,6 @@ const DetailHeader = ({ const handleUpdatedFromMarketplace = () => { onUpdate() hideUpdateModal() - hideDowngradeWarningModal() - } - - const { mutateAsync } = useRemoveAutoUpgrade() - const invalidateReferenceSettings = useInvalidateReferenceSettings() - - const handleExcludeAndDownload = async () => { - await mutateAsync({ - plugin_id, - }) - invalidateReferenceSettings() - // TODO: missing do upgrade logic - handleUpdatedFromMarketplace() - hideDowngradeWarningModal() } const [isShowPluginInfo, { @@ -342,6 +319,7 @@ const DetailHeader = ({ { isShowUpdateModal && ( ) } - { isShowDowngradeWarningModal && ( - - )} ) } diff --git a/web/app/components/plugins/update-plugin/downgrade-warning-modal.tsx b/web/app/components/plugins/update-plugin/downgrade-warning.tsx similarity index 87% rename from web/app/components/plugins/update-plugin/downgrade-warning-modal.tsx rename to web/app/components/plugins/update-plugin/downgrade-warning.tsx index 9443a349ba..a5f6e40e41 100644 --- a/web/app/components/plugins/update-plugin/downgrade-warning-modal.tsx +++ b/web/app/components/plugins/update-plugin/downgrade-warning.tsx @@ -1,5 +1,4 @@ import { useTranslation } from 'react-i18next' -import Modal from '@/app/components/base/modal' import Button from '@/app/components/base/button' const i18nPrefix = 'plugin.autoUpdate.pluginDowngradeWarning' @@ -17,11 +16,7 @@ const DowngradeWarningModal = ({ const { t } = useTranslation() return ( - onCancel()} - className='w-[640px] max-w-[640px]' - > + <>
{t(`${i18nPrefix}.title`)}
@@ -33,7 +28,7 @@ const DowngradeWarningModal = ({
- + ) } diff --git a/web/app/components/plugins/update-plugin/from-market-place.tsx b/web/app/components/plugins/update-plugin/from-market-place.tsx index 98994d9b9c..70bc7399f5 100644 --- a/web/app/components/plugins/update-plugin/from-market-place.tsx +++ b/web/app/components/plugins/update-plugin/from-market-place.tsx @@ -13,13 +13,18 @@ import { updateFromMarketPlace } from '@/service/plugins' import checkTaskStatus from '@/app/components/plugins/install-plugin/base/check-task-status' import { usePluginTaskList } from '@/service/use-plugins' import Toast from '../../base/toast' +import DowngradeWarningModal from './downgrade-warning' +import { useInvalidateReferenceSettings, useRemoveAutoUpgrade } from '@/service/use-plugins' +import cn from '@/utils/classnames' const i18nPrefix = 'plugin.upgrade' type Props = { payload: UpdateFromMarketPlacePayload + pluginId: string onSave: () => void onCancel: () => void + isShowDowngradeWarningModal?: boolean } enum UploadStep { @@ -30,8 +35,10 @@ enum UploadStep { const UpdatePluginModal: FC = ({ payload, + pluginId, onSave, onCancel, + isShowDowngradeWarningModal, }) => { const { originalPackageInfo, @@ -103,51 +110,74 @@ const UpdatePluginModal: FC = ({ onSave() }, [onSave, uploadStep, check, originalPackageInfo.id, handleRefetch, targetPackageInfo.id]) + const { mutateAsync } = useRemoveAutoUpgrade() + const invalidateReferenceSettings = useInvalidateReferenceSettings() + const handleExcludeAndDownload = async () => { + await mutateAsync({ + plugin_id: pluginId, + }) + invalidateReferenceSettings() + handleConfirm() + } + const doShowDowngradeWarningModal = isShowDowngradeWarningModal && uploadStep === UploadStep.notStarted + return ( -
- {t(`${i18nPrefix}.description`)} -
-
- - - {`${originalPackageInfo.payload.version} -> ${targetPackageInfo.version}`} - - - } + {doShowDowngradeWarningModal && ( + -
-
- {uploadStep === UploadStep.notStarted && ( + )} + {!doShowDowngradeWarningModal && ( + <> +
+ {t(`${i18nPrefix}.description`)} +
+
+ + + {`${originalPackageInfo.payload.version} -> ${targetPackageInfo.version}`} + + + } + /> +
+
+ {uploadStep === UploadStep.notStarted && ( + + )} - )} - -
+
+ + )} +
) }