From a56fcbd785b43e8093ccdc78b1096d74c8a687ed Mon Sep 17 00:00:00 2001 From: Bastiaan <17990055+bbassie@users.noreply.github.com> Date: Fri, 26 Jun 2026 18:21:52 +0200 Subject: [PATCH] Fix antd deprecation and TreeSelect duplicate-value warnings (#940) Rename the deprecated Modal `destroyOnClose` prop to `destroyOnHidden` (antd 5.25+) across the web UI. Skip a version-tree child equal to its major.minor group key in InputVersion, which triggered "Same value exist in the tree" warnings when the version list contained bare major.minor entries (the ApiVersions fallback shown before the version fetch resolves). Co-authored-by: Claude Opus 4.8 (1M context) --- packages/web_ui/src/components/AssignInstanceModal.tsx | 2 +- packages/web_ui/src/components/CreateSaveModal.tsx | 2 +- packages/web_ui/src/components/InputVersion.tsx | 5 ++++- packages/web_ui/src/components/InstancesPage.tsx | 2 +- packages/web_ui/src/components/LoadScenarioModal.tsx | 2 +- packages/web_ui/src/components/ModPackViewPage.tsx | 2 +- packages/web_ui/src/components/NpmButton.tsx | 2 +- packages/web_ui/src/components/RolesPage.tsx | 2 +- packages/web_ui/src/components/SavesList.tsx | 2 +- packages/web_ui/src/components/UsersPage.tsx | 4 ++-- 10 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/web_ui/src/components/AssignInstanceModal.tsx b/packages/web_ui/src/components/AssignInstanceModal.tsx index 6cb19383..8c1ba5aa 100644 --- a/packages/web_ui/src/components/AssignInstanceModal.tsx +++ b/packages/web_ui/src/components/AssignInstanceModal.tsx @@ -67,7 +67,7 @@ export default function AssignInstanceModal(props: AssignInstanceModalProps) { confirmLoading={applying} onOk={handleAssign} onCancel={handleCancel} - destroyOnClose + destroyOnHidden > Select a Host to assign this instance to. Assignment diff --git a/packages/web_ui/src/components/CreateSaveModal.tsx b/packages/web_ui/src/components/CreateSaveModal.tsx index 67dd7b61..8025af17 100644 --- a/packages/web_ui/src/components/CreateSaveModal.tsx +++ b/packages/web_ui/src/components/CreateSaveModal.tsx @@ -106,7 +106,7 @@ export default function CreateSaveModal(props: CreateSaveModalProps) { confirmLoading={creatingSave} onOk={createSave} onCancel={handleCancel} - destroyOnClose + destroyOnHidden >
diff --git a/packages/web_ui/src/components/InputVersion.tsx b/packages/web_ui/src/components/InputVersion.tsx index 1648e546..e42bf1f4 100644 --- a/packages/web_ui/src/components/InputVersion.tsx +++ b/packages/web_ui/src/components/InputVersion.tsx @@ -74,7 +74,10 @@ function InputVersion< title: majorMinor, value: majorMinor, key: majorMinor, - children: patchVersions.map((v) => ({ + // Skip a patch equal to the group key (a bare major.minor version, + // e.g. the ApiVersions fallback): the selectable group node already + // represents it, and a duplicate value warns in the TreeSelect. + children: patchVersions.filter((v) => v !== majorMinor).map((v) => ({ title: v, value: v, key: v, diff --git a/packages/web_ui/src/components/InstancesPage.tsx b/packages/web_ui/src/components/InstancesPage.tsx index cfa24922..b62f6970 100644 --- a/packages/web_ui/src/components/InstancesPage.tsx +++ b/packages/web_ui/src/components/InstancesPage.tsx @@ -53,7 +53,7 @@ function CreateInstanceButton(props: { instances: ReturnType { createInstance().catch(notifyErrorHandler("Error creating instance")); }} onCancel={() => { setOpen(false); }} - destroyOnClose + destroyOnHidden > diff --git a/packages/web_ui/src/components/LoadScenarioModal.tsx b/packages/web_ui/src/components/LoadScenarioModal.tsx index 15a03ce6..b83edb6c 100644 --- a/packages/web_ui/src/components/LoadScenarioModal.tsx +++ b/packages/web_ui/src/components/LoadScenarioModal.tsx @@ -103,7 +103,7 @@ export default function LoadScenarioModal(props: LoadScenarioModalProps) { confirmLoading={loadingScenario} onOk={loadScenario} onCancel={handleCancel} - destroyOnClose + destroyOnHidden > diff --git a/packages/web_ui/src/components/ModPackViewPage.tsx b/packages/web_ui/src/components/ModPackViewPage.tsx index d2640d18..b6327a72 100644 --- a/packages/web_ui/src/components/ModPackViewPage.tsx +++ b/packages/web_ui/src/components/ModPackViewPage.tsx @@ -1052,7 +1052,7 @@ function ExportButton(props: { modPack: lib.ModPack }) { open={open} onOk={close} onCancel={close} - destroyOnClose + destroyOnHidden footer={ diff --git a/packages/web_ui/src/components/NpmButton.tsx b/packages/web_ui/src/components/NpmButton.tsx index aa01c7b4..1a5a83e2 100644 --- a/packages/web_ui/src/components/NpmButton.tsx +++ b/packages/web_ui/src/components/NpmButton.tsx @@ -170,7 +170,7 @@ export function NpmButton(props: { okButtonProps={{disabled: formAction === undefined}} onOk={() => { onOk().catch(notifyErrorHandler(`Error running ${formAction}`)); }} onCancel={() => { setOpen(false); }} - destroyOnClose + destroyOnHidden > diff --git a/packages/web_ui/src/components/RolesPage.tsx b/packages/web_ui/src/components/RolesPage.tsx index a44bd2e1..1d01f847 100644 --- a/packages/web_ui/src/components/RolesPage.tsx +++ b/packages/web_ui/src/components/RolesPage.tsx @@ -47,7 +47,7 @@ function CreateRoleButton() { open={open} onOk={() => { createRole().catch(notifyErrorHandler("Error creating role")); }} onCancel={() => { setOpen(false); }} - destroyOnClose + destroyOnHidden > diff --git a/packages/web_ui/src/components/SavesList.tsx b/packages/web_ui/src/components/SavesList.tsx index 9089335a..d4a84465 100644 --- a/packages/web_ui/src/components/SavesList.tsx +++ b/packages/web_ui/src/components/SavesList.tsx @@ -119,7 +119,7 @@ function TransferModal(props: ModalProps) { open={open} onOk={() => form.submit()} onCancel={() => setOpen(false)} - destroyOnClose + destroyOnHidden > { createUser().catch(notifyErrorHandler("Error creating user")); }} onCancel={() => { setOpen(false); }} - destroyOnClose + destroyOnHidden > @@ -345,7 +345,7 @@ function BulkUserActionButton() { okButtonProps={{ disabled: formAction === undefined }} onOk={() => { onOk().catch(notifyErrorHandler(`Error running ${formAction}`)); }} onCancel={() => { setOpen(false); }} - destroyOnClose + destroyOnHidden >