- {sideBarNavs.map((item, index) => {
+ {filteredLinks().map((item, index) => {
const Wrapper = ({ children }) => <>{children}>;
return (
- {admin && (
- {
- setSelectedTab(defaultOrgName(item));
- if (item == 'Users') updateSidebarNAV('Users');
- else updateSidebarNAV(item);
- }}
- selectedItem={selectedTab == defaultOrgName(item)}
- renderBadgeForItems={['Workspace constants']}
- renderBadge={() => (
-
- new
-
- )}
- dataCy={item.toLowerCase().replace(/\s+/g, '-')}
- >
- {item}
-
- )}
+ {
+ setSelectedTab(item.id);
+ }}
+ selectedItem={selectedTab == item.id}
+ renderBadgeForItems={[]}
+ renderBadge={() => (
+
+ new
+
+ )}
+ dataCy={item.name.toLowerCase().replace(/\s+/g, '-')}
+ >
+ {item.name}
+
);
diff --git a/frontend/src/_components/OrganizationManager/CreateOrganization.jsx b/frontend/src/_components/OrganizationManager/CreateOrganization.jsx
index 0b777db87e..6357b000bb 100644
--- a/frontend/src/_components/OrganizationManager/CreateOrganization.jsx
+++ b/frontend/src/_components/OrganizationManager/CreateOrganization.jsx
@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useState, useRef, useEffect } from 'react';
import { organizationService } from '@/_services';
import AlertDialog from '@/_ui/AlertDialog';
import { useTranslation } from 'react-i18next';
@@ -18,10 +18,11 @@ export const CreateOrganization = ({ showCreateOrg, setShowCreateOrg }) => {
const [isSlugDisabled, setSlugDisabled] = useState(true);
const darkMode = localStorage.getItem('darkMode') === 'true';
const { t } = useTranslation();
+ const isSlugSet = useRef(false); // Flag to track if slug has been initially set
+ const sluginput = useRef('');
const createOrganization = () => {
let emptyError = false;
-
[name, slug].map((field, index) => {
if (!field?.value?.trim()) {
index === 0
@@ -77,7 +78,6 @@ export const CreateOrganization = ({ showCreateOrg, setShowCreateOrg }) => {
!(field === 'slug'),
field === 'slug'
);
-
/* If the basic validation is passing. then check the uniqueness */
if (error?.status === true) {
try {
@@ -92,7 +92,6 @@ export const CreateOrganization = ({ showCreateOrg, setShowCreateOrg }) => {
};
}
}
-
const disabled = !error?.status;
const updatedValue = {
value,
@@ -126,17 +125,47 @@ export const CreateOrganization = ({ showCreateOrg, setShowCreateOrg }) => {
setShowCreateOrg(false);
setNameDisabled(true);
setSlugDisabled(true);
+ isSlugSet.current = false;
};
const delayedSlugChange = _.debounce(async (value) => {
setSlugProgress(true);
await handleInputChange(value, 'slug');
}, 300);
-
const delayedNameChange = _.debounce(async (value) => {
setWorkspaceNameProgress(true);
await handleInputChange(value, 'name');
}, 300);
+ useEffect(() => {
+ if (!isSlugSet.current && name.value && !slugProgress && !workspaceNameProgress) {
+ const defaultValue =
+ name?.value
+ .replace(/\s+/g, '')
+ .toLowerCase()
+ .replace(/[^a-z0-9-\s]/g, '') || '';
+ setSlug({ value: defaultValue, error: '' });
+
+ const checkWorkspaceUniqueness = async () => {
+ try {
+ await organizationService.checkWorkspaceUniqueness(null, defaultValue);
+ sluginput.current.value = defaultValue;
+ } catch (errResponse) {
+ let error = {
+ status: false,
+ errorMsg: errResponse?.error,
+ };
+ setSlug({ value: defaultValue, error: error?.errorMsg });
+ }
+ };
+ checkWorkspaceUniqueness();
+ setSlugDisabled(false);
+ setSlugProgress(false);
+ }
+ if (slugProgress && !isSlugSet.current) {
+ // this is to denote that the user has tried editing the slug -- so now slug and name are independent of each other
+ isSlugSet.current = true;
+ }
+ }, [name.value, slug.value, slugProgress, workspaceNameProgress, isSlugSet]);
const isDisabled = isCreating || isNameDisabled || isSlugDisabled || slugProgress || workspaceNameProgress;
@@ -168,6 +197,8 @@ export const CreateOrganization = ({ showCreateOrg, setShowCreateOrg }) => {
+ ) : name.value && !workspaceNameProgress ? (
+
) : (
)}
+
{slug?.error ? (