From 1693d000d610145ca7f73b3048ae9356d56a9e60 Mon Sep 17 00:00:00 2001 From: David Edler Date: Tue, 25 Jun 2024 08:22:20 +0200 Subject: [PATCH] fix(instance) ensure instance name is unique and ot matched against previous name on renaming Signed-off-by: David Edler --- src/components/RenameHeader.tsx | 12 +++++------- src/pages/instances/InstanceDetailHeader.tsx | 2 +- src/util/instances.tsx | 9 +++++++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/components/RenameHeader.tsx b/src/components/RenameHeader.tsx index 120b0c87ad..62407fbc42 100644 --- a/src/components/RenameHeader.tsx +++ b/src/components/RenameHeader.tsx @@ -35,14 +35,14 @@ const RenameHeader: FC = ({ renameDisabledReason, }) => { const canRename = renameDisabledReason === undefined; - const enableRename = () => { - window.dispatchEvent(new Event("resize")); + const toggleRename = () => { + setTimeout(() => window.dispatchEvent(new Event("resize")), 10); if (!canRename || !formik) { return; } void formik.setValues({ ...formik.values, - isRenaming: true, + isRenaming: !formik.values.isRenaming, }); }; @@ -82,9 +82,7 @@ const RenameHeader: FC = ({ @@ -101,7 +99,7 @@ const RenameHeader: FC = ({ ) : (
  • = ({ const controllerState = useState(null); const RenameSchema = Yup.object().shape({ - name: instanceNameValidation(project, controllerState).required( + name: instanceNameValidation(project, controllerState, name).required( "Instance name is required", ), }); diff --git a/src/util/instances.tsx b/src/util/instances.tsx index 1cac666a55..3dd93e7c9d 100644 --- a/src/util/instances.tsx +++ b/src/util/instances.tsx @@ -30,10 +30,15 @@ export const instanceLinkFromOperation = (args: { export const instanceNameValidation = ( project: string, controllerState: AbortControllerState, + oldName?: string, ): Yup.StringSchema => Yup.string() - .test("deduplicate", "An instance with this name already exists", (value) => - checkDuplicateName(value, project, controllerState, "instances"), + .test( + "deduplicate", + "An instance with this name already exists", + (value) => + oldName === value || + checkDuplicateName(value, project, controllerState, "instances"), ) .test( "size",