From eaa4f4e57bf842efbca6cd86064f25a9f662651f Mon Sep 17 00:00:00 2001 From: Sanjai Kumar <161328623+sanjaikumar-bruno@users.noreply.github.com> Date: Sun, 15 Dec 2024 16:47:08 +0530 Subject: [PATCH] Fix/global env duplicate name error (#3590) * fix: enhance environment name validation for global environments * fix: improve environment name validation logic in CreateEnvironment component * Update index.js --------- Co-authored-by: Anoop M D --- .../CreateEnvironment/index.js | 1 - .../CreateEnvironment/index.js | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSettings/CreateEnvironment/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSettings/CreateEnvironment/index.js index ee1b5dea8..c5130d038 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSettings/CreateEnvironment/index.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSettings/CreateEnvironment/index.js @@ -11,7 +11,6 @@ const CreateEnvironment = ({ collection, onClose }) => { const dispatch = useDispatch(); const inputRef = useRef(); - // todo: Add this to global env too. const validateEnvironmentName = (name) => { return !collection?.environments?.some((env) => env?.name?.toLowerCase().trim() === name?.toLowerCase().trim()); }; diff --git a/packages/bruno-app/src/components/GlobalEnvironments/EnvironmentSettings/CreateEnvironment/index.js b/packages/bruno-app/src/components/GlobalEnvironments/EnvironmentSettings/CreateEnvironment/index.js index 3103f9b4e..3bf8af65e 100644 --- a/packages/bruno-app/src/components/GlobalEnvironments/EnvironmentSettings/CreateEnvironment/index.js +++ b/packages/bruno-app/src/components/GlobalEnvironments/EnvironmentSettings/CreateEnvironment/index.js @@ -2,12 +2,19 @@ import React, { useEffect, useRef } from 'react'; import toast from 'react-hot-toast'; import { useFormik } from 'formik'; import * as Yup from 'yup'; -import { useDispatch } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import Portal from 'components/Portal'; import Modal from 'components/Modal'; import { addGlobalEnvironment } from 'providers/ReduxStore/slices/global-environments'; const CreateEnvironment = ({ onClose }) => { + const globalEnvs = useSelector((state) => state?.globalEnvironments?.globalEnvironments); + + const validateEnvironmentName = (name) => { + const trimmedName = name?.toLowerCase().trim(); + return globalEnvs.every((env) => env?.name?.toLowerCase().trim() !== trimmedName); + }; + const dispatch = useDispatch(); const inputRef = useRef(); const formik = useFormik({ @@ -17,9 +24,10 @@ const CreateEnvironment = ({ onClose }) => { }, validationSchema: Yup.object({ name: Yup.string() - .min(1, 'must be at least 1 character') - .max(50, 'must be 50 characters or less') - .required('name is required') + .min(1, 'Must be at least 1 character') + .max(50, 'Must be 50 characters or less') + .required('Name is required') + .test('duplicate-name', 'Global Environment already exists', validateEnvironmentName) }), onSubmit: (values) => { dispatch(addGlobalEnvironment({ name: values.name }))