diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSelector/EnvironmentListContent/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSelector/EnvironmentListContent/index.js index 100cc888d..e343e4b4c 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSelector/EnvironmentListContent/index.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSelector/EnvironmentListContent/index.js @@ -36,8 +36,9 @@ const EnvironmentListContent = ({ className={`dropdown-item ${env.uid === activeEnvironmentUid ? 'active' : ''}`} onClick={() => onEnvironmentSelect(env)} data-tooltip-content={env.name} + data-tooltip-hidden={env.name?.length < 90} > - {env.name} + {env.name} ))} diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSelector/StyledWrapper.js b/packages/bruno-app/src/components/Environments/EnvironmentSelector/StyledWrapper.js index 75743c605..27320f11c 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSelector/StyledWrapper.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSelector/StyledWrapper.js @@ -45,8 +45,10 @@ const Wrapper = styled.div` } .tippy-box { - min-width: 11.875rem; - min-height: 15.0625rem; + width: ${(props) => props.width}px; + min-width: 12rem; + max-width: 35vw !important; + min-height: 15.5rem; max-height: 75vh; font-size: 0.8125rem; position: relative; diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSelector/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSelector/index.js index 8df143705..7a2e34b4c 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSelector/index.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSelector/index.js @@ -1,4 +1,4 @@ -import React, { useState, useRef, forwardRef } from 'react'; +import React, { useMemo, useState, useRef, forwardRef } from 'react'; import find from 'lodash/find'; import Dropdown from 'components/Dropdown'; import { IconWorld, IconDatabase, IconCaretDown, IconSettings, IconPlus, IconDownload } from '@tabler/icons'; @@ -114,6 +114,18 @@ const EnvironmentSelector = ({ collection }) => { dispatch(updateEnvironmentSettingsModalVisibility(false)); }; + // Calculate dropdown width based on the longest environment name. + // To prevent resizing while switching between collection and global environments. + const dropdownWidth = useMemo(() => { + const allEnvironments = [...environments, ...globalEnvironments]; + if (allEnvironments.length === 0) return 0; + + const maxCharLength = Math.max(...allEnvironments.map((env) => env.name?.length || 0)); + // 8 pixels per character: This is a rough estimate for the average character width in most fonts + // (monospace fonts are typically 8-10px, proportional fonts vary but 8px is a safe average) + return maxCharLength * 8; + }, [environments, globalEnvironments]); + // Create icon component for dropdown trigger const Icon = forwardRef((props, ref) => { const hasAnyEnv = activeGlobalEnvironment || activeCollectionEnvironment; @@ -129,6 +141,7 @@ const EnvironmentSelector = ({ collection }) => { toolhintId={`collection-env-${activeCollectionEnvironment.uid}`} place="bottom-start" delayShow={1000} + hidden={activeCollectionEnvironment.name?.length < 7} > {activeCollectionEnvironment.name} @@ -144,6 +157,7 @@ const EnvironmentSelector = ({ collection }) => { toolhintId={`global-env-${activeGlobalEnvironment.uid}`} place="bottom-start" delayShow={1000} + hidden={activeGlobalEnvironment.name?.length < 7} > {activeGlobalEnvironment.name} @@ -169,11 +183,11 @@ const EnvironmentSelector = ({ collection }) => { }); return ( - +
} placement="bottom-end"> {/* Tab Headers */} -
+
{tabs.map((tab) => (