From 3e9c3d0bb7274bd4b5bf8cf17fe5d8ba0fab7b8c Mon Sep 17 00:00:00 2001 From: Joel Date: Sat, 8 Feb 2025 11:31:55 +0800 Subject: [PATCH] fix: install installed plugin problem (#13384) --- .../hooks/use-check-installed.tsx | 1 + .../steps/install.tsx | 34 ++++++------------- web/app/components/plugins/types.ts | 1 + web/service/use-plugins.ts | 19 ++++++++--- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/web/app/components/plugins/install-plugin/hooks/use-check-installed.tsx b/web/app/components/plugins/install-plugin/hooks/use-check-installed.tsx index e72648fcec5278..e9d83c8c873da3 100644 --- a/web/app/components/plugins/install-plugin/hooks/use-check-installed.tsx +++ b/web/app/components/plugins/install-plugin/hooks/use-check-installed.tsx @@ -16,6 +16,7 @@ const useCheckInstalled = (props: Props) => { const res: Record = {} data?.plugins.forEach((plugin) => { res[plugin.plugin_id] = { + installedId: plugin.id, installedVersion: plugin.declaration.version, uniqueIdentifier: plugin.plugin_unique_identifier, } diff --git a/web/app/components/plugins/install-plugin/install-from-local-package/steps/install.tsx b/web/app/components/plugins/install-plugin/install-from-local-package/steps/install.tsx index 19baa86d73bac0..1deb8d8282d159 100644 --- a/web/app/components/plugins/install-plugin/install-from-local-package/steps/install.tsx +++ b/web/app/components/plugins/install-plugin/install-from-local-package/steps/install.tsx @@ -8,8 +8,9 @@ import Button from '@/app/components/base/button' import { Trans, useTranslation } from 'react-i18next' import { RiLoader2Line } from '@remixicon/react' import checkTaskStatus from '../../base/check-task-status' -import { useInstallPackageFromLocal, usePluginTaskList, useUpdatePackageFromMarketPlace } from '@/service/use-plugins' +import { useInstallPackageFromLocal, usePluginTaskList } from '@/service/use-plugins' import useCheckInstalled from '@/app/components/plugins/install-plugin/hooks/use-check-installed' +import { uninstallPlugin } from '@/service/plugins' import Version from '../../base/version' const i18nPrefix = 'plugin.installModal' @@ -50,7 +51,6 @@ const Installed: FC = ({ const [isInstalling, setIsInstalling] = React.useState(false) const { mutateAsync: installPackageFromLocal } = useInstallPackageFromLocal() - const { mutateAsync: updatePackageFromMarketPlace } = useUpdatePackageFromMarketPlace() const { check, @@ -69,27 +69,15 @@ const Installed: FC = ({ onStartToInstall?.() try { - let taskId - let isInstalled - if (hasInstalled) { - const { - all_installed, - task_id, - } = await updatePackageFromMarketPlace({ - original_plugin_unique_identifier: installedInfoPayload.uniqueIdentifier, - new_plugin_unique_identifier: uniqueIdentifier, - }) - taskId = task_id - isInstalled = all_installed - } - else { - const { - all_installed, - task_id, - } = await installPackageFromLocal(uniqueIdentifier) - taskId = task_id - isInstalled = all_installed - } + if (hasInstalled) + await uninstallPlugin(installedInfoPayload.installedId) + + const { + all_installed, + task_id, + } = await installPackageFromLocal(uniqueIdentifier) + const taskId = task_id + const isInstalled = all_installed if (isInstalled) { onInstalled() diff --git a/web/app/components/plugins/types.ts b/web/app/components/plugins/types.ts index e9f78842574a4a..9a94f7740c6660 100644 --- a/web/app/components/plugins/types.ts +++ b/web/app/components/plugins/types.ts @@ -373,6 +373,7 @@ export type VersionListResponse = { } export type VersionInfo = { + installedId: string, // use to uninstall installedVersion: string, uniqueIdentifier: string } diff --git a/web/service/use-plugins.ts b/web/service/use-plugins.ts index a1cf1a62e67d7d..841e4bfc11eb63 100644 --- a/web/service/use-plugins.ts +++ b/web/service/use-plugins.ts @@ -30,6 +30,7 @@ import { } from '@tanstack/react-query' import { useInvalidateAllBuiltInTools } from './use-tools' import usePermission from '@/app/components/plugins/plugin-page/use-permission' +import { uninstallPlugin } from '@/service/plugins' const NAME_SPACE = 'plugins' @@ -237,10 +238,20 @@ export const useInstallOrUpdate = ({ } } if (isInstalled) { - await updatePackageFromMarketPlace({ - original_plugin_unique_identifier: installedPayload?.uniqueIdentifier, - new_plugin_unique_identifier: uniqueIdentifier, - }) + if (item.type === 'package') { + await uninstallPlugin(installedPayload.installedId) + await post('/workspaces/current/plugin/install/pkg', { + body: { + plugin_unique_identifiers: [uniqueIdentifier], + }, + }) + } + else { + await updatePackageFromMarketPlace({ + original_plugin_unique_identifier: installedPayload?.uniqueIdentifier, + new_plugin_unique_identifier: uniqueIdentifier, + }) + } } return ({ success: true }) }