From 5371431be64a7009b5e7f85859567d0ec3e269d0 Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Fri, 9 May 2025 19:19:01 +0800 Subject: [PATCH] feat: plugin deleting --- .../plugin-form/PluginForm.tsx | 120 +++++++++++++++++- 1 file changed, 113 insertions(+), 7 deletions(-) diff --git a/web/src/app/home/plugins/plugin-installed/plugin-form/PluginForm.tsx b/web/src/app/home/plugins/plugin-installed/plugin-form/PluginForm.tsx index e9c7f8aa..f8899157 100644 --- a/web/src/app/home/plugins/plugin-installed/plugin-form/PluginForm.tsx +++ b/web/src/app/home/plugins/plugin-installed/plugin-form/PluginForm.tsx @@ -13,6 +13,12 @@ import { DialogFooter, } from "@/components/ui/dialog"; +enum PluginRemoveStatus { + WAIT_INPUT = 'WAIT_INPUT', + REMOVING = 'REMOVING', + ERROR = 'ERROR', +} + export default function PluginForm({ pluginAuthor, pluginName, @@ -28,6 +34,10 @@ export default function PluginForm({ const [pluginConfig, setPluginConfig] = useState(); const [isSaving, setIsLoading] = useState(false); + const [showDeleteConfirmModal, setShowDeleteConfirmModal] = useState(false); + const [pluginRemoveStatus, setPluginRemoveStatus] = useState(PluginRemoveStatus.WAIT_INPUT); + const [pluginRemoveError, setPluginRemoveError] = useState(null); + useEffect(() => { // 获取插件信息 httpClient.getPlugin(pluginAuthor, pluginName).then((res) => { @@ -55,8 +65,92 @@ export default function PluginForm({ return
加载中...
; } + function deletePlugin() { + setPluginRemoveStatus(PluginRemoveStatus.REMOVING); + httpClient.removePlugin(pluginAuthor, pluginName).then((res) => { + + const taskId = res.task_id; + + const interval = setInterval(() => { + httpClient.getAsyncTask(taskId).then((res) => { + if (res.runtime.done) { + clearInterval(interval); + if (res.runtime.exception) { + setPluginRemoveError(res.runtime.exception); + setPluginRemoveStatus(PluginRemoveStatus.ERROR); + } else { + setPluginRemoveStatus(PluginRemoveStatus.WAIT_INPUT); + setShowDeleteConfirmModal(false); + onFormSubmit(); + } + } + }); + }, 1000); + + }).catch((error) => { + setPluginRemoveError(error.message); + setPluginRemoveStatus(PluginRemoveStatus.ERROR); + }) + } + return (
+ + + + + 删除确认 + + + {pluginRemoveStatus === PluginRemoveStatus.WAIT_INPUT && ( +
+ 你确定要删除插件({pluginAuthor}/{pluginName})吗? +
+ )} + {pluginRemoveStatus === PluginRemoveStatus.REMOVING && ( +
删除中...
+ )} + {pluginRemoveStatus === PluginRemoveStatus.ERROR && ( +
+ 删除失败: +
{pluginRemoveError}
+
+ )} +
+ + {pluginRemoveStatus === PluginRemoveStatus.WAIT_INPUT && ( + + )} + {pluginRemoveStatus === PluginRemoveStatus.WAIT_INPUT && ( + + )} + {pluginRemoveStatus === PluginRemoveStatus.REMOVING && ( + + )} + {pluginRemoveStatus === PluginRemoveStatus.ERROR && ( + + )} + +
+
+ +
{pluginInfo.name}
@@ -66,13 +160,13 @@ export default function PluginForm({ { - let config = pluginConfig.config; - config = { - ...config, - ...values, - }; - setPluginConfig({ + onSubmit={(values) => { + let config = pluginConfig.config; + config = { + ...config, + ...values, + }; + setPluginConfig({ config: config, }); }} @@ -87,6 +181,18 @@ export default function PluginForm({
+ + +