diff --git a/app/client/src/components/ads/Dropdown.tsx b/app/client/src/components/ads/Dropdown.tsx index 40b1ab403f..3c9c7f017b 100644 --- a/app/client/src/components/ads/Dropdown.tsx +++ b/app/client/src/components/ads/Dropdown.tsx @@ -37,6 +37,7 @@ export interface RenderDropdownOptionType { isSelectedNode?: boolean; extraProps?: any; errorMsg?: string; + optionWidth: string; } type RenderOption = ({ @@ -44,6 +45,7 @@ type RenderOption = ({ index, option, optionClickHandler, + optionWidth, }: RenderDropdownOptionType) => ReactElement; export type DropdownProps = CommonComponentProps & @@ -67,6 +69,7 @@ export type DropdownProps = CommonComponentProps & isLoading?: boolean; errorMsg?: string; // If errorMsg is defined, we show dropDown's error state with the message. helperText?: string; + fillOptions?: boolean; }; export interface DefaultDropDownValueNodeProps { selected: DropdownOption; @@ -74,6 +77,7 @@ export interface DefaultDropDownValueNodeProps { isOpen?: boolean; errorMsg?: string; renderNode?: RenderOption; + optionWidth: string; } export interface RenderDropdownOptionType { @@ -192,6 +196,7 @@ const DropdownOptionsWrapper = styled.div<{ height: ${(props) => props.height}; max-height: ${(props) => props.maxHeight}; overflow-y: auto; + overflow-x: hidden; `; const OptionWrapper = styled.div<{ @@ -339,6 +344,7 @@ const HelperText = styled.span` function DefaultDropDownValueNode({ errorMsg, + optionWidth, renderNode, selected, showLabelOnly, @@ -355,7 +361,12 @@ function DefaultDropDownValueNode({ return ( {renderNode ? ( - renderNode({ isSelectedNode: true, option: selected, errorMsg }) + renderNode({ + isSelectedNode: true, + option: selected, + errorMsg, + optionWidth, + }) ) : ( <> {selected.icon ? ( @@ -378,10 +389,11 @@ interface DropdownOptionsProps extends DropdownProps, DropdownSearchProps { renderOption?: RenderOption; headerLabel?: string; selected: DropdownOption; + optionWidth: string; } export function RenderDropdownOptions(props: DropdownOptionsProps) { - const { onSearch, optionClickHandler, renderOption } = props; + const { onSearch, optionClickHandler, optionWidth, renderOption } = props; const [options, setOptions] = useState>(props.options); const [searchValue, setSearchValue] = useState(""); const onOptionSearch = (searchStr: string) => { @@ -398,10 +410,11 @@ export function RenderDropdownOptions(props: DropdownOptionsProps) { setOptions(filteredOptions); onSearch && onSearch(searchStr); }; + return options.length > 0 ? ( {props.enableSearch && ( ( + "100%", + ); + + const dropdownWrapperRef = useCallback( + (ref: HTMLDivElement) => { + if (ref) { + const { width } = ref.getBoundingClientRect(); + setDropdownWrapperWidth(`${width}px`); + } + }, + [setDropdownWrapperWidth], + ); + + const dropdownOptionWidth = props.fillOptions + ? dropdownWrapperWidth + : props.optionWidth || "260px"; + const dropdownTrigger = props.dropdownTriggerIcon ? ( {props.dropdownTriggerIcon} ) : ( - + ); + + const dropdownWidth = props.width || "260px"; + return ( {dropdownTrigger} diff --git a/app/client/src/constants/messages.ts b/app/client/src/constants/messages.ts index 7cfbb98231..0db86e8b5d 100644 --- a/app/client/src/constants/messages.ts +++ b/app/client/src/constants/messages.ts @@ -438,7 +438,7 @@ export const CONNECT_TO_GIT_SUBTITLE = () => "Choose an existing empty repository to host your project and keep it in sync"; export const REMOTE_URL_VIA = () => "REMOTE URL VIA"; -export const USER_PROFILE_SETTINGS_TITLE = () => "User Settings"; +export const USER_PROFILE_SETTINGS_TITLE = () => "USER SETTINGS"; export const AUTHOR_NAME = () => "AUTHOR NAME"; export const AUTHOR_EMAIL = () => "AUTHOR EMAIL"; diff --git a/app/client/src/pages/Editor/GeneratePage/components/DataSourceOption.tsx b/app/client/src/pages/Editor/GeneratePage/components/DataSourceOption.tsx index 2724354568..b1cbd7771a 100644 --- a/app/client/src/pages/Editor/GeneratePage/components/DataSourceOption.tsx +++ b/app/client/src/pages/Editor/GeneratePage/components/DataSourceOption.tsx @@ -90,7 +90,7 @@ const DatasourceImage = styled.img` interface DataSourceOptionType extends RenderDropdownOptionType { cypressSelector: string; - optionWidth?: string; + optionWidth: string; } function DataSourceOption({ diff --git a/app/client/src/pages/Editor/gitSync/components/UserGitProfileSettings/index.tsx b/app/client/src/pages/Editor/gitSync/components/UserGitProfileSettings/index.tsx index fe6ef26d69..9b93556512 100644 --- a/app/client/src/pages/Editor/gitSync/components/UserGitProfileSettings/index.tsx +++ b/app/client/src/pages/Editor/gitSync/components/UserGitProfileSettings/index.tsx @@ -48,12 +48,14 @@ const TitleWrapper = styled.div` const OptionWrapper = styled.div<{ selected: boolean; + width: string; }>` padding: ${(props) => props.theme.spaces[2] + 1}px ${(props) => props.theme.spaces[5]}px; cursor: pointer; display: flex; align-items: center; + width: ${(props) => props.width}; background-color: ${(props) => props.selected ? props.theme.colors.propertyPane.dropdownSelectBg : null}; @@ -75,21 +77,23 @@ function AuthConfig({ authType }: AuthConfigProps) { { // }} - // optionWidth="100%" options={SSH_PROFILE_OPTION} renderOption={({ isSelectedNode, option, optionClickHandler, + optionWidth, }) => ( optionClickHandler && optionClickHandler(option) } selected={!!isSelectedNode} + width={optionWidth || ""} > {option.label}