fix: settings form select menu (#9179)
Closes: #8647 Closes: #8649 **Changes & Why** 1. Added a Search Input to `SettingsDataModelFieldAddressForm` & `SettingsDataModelFieldCurrencyForm` as `Select` component already accepts it as a prop. 2. Gave a fixed width to the dropdown of both the above components to ensure it doesn't shrink on search for the menu items with low word count. 3. Added countries Flag to `SettingsDataModelFieldAddressForm`. 4. Replaced `MenuItem` with `MenuItemSelect` to get the desired highlighted background for the selected item with `IconCheck` to differentiate the current selected item. This is useful across all the select components throughout the app. 5. I realized that in some components we might not need IconCheck and only need a highlighted background for the selected item. For ex: `SettingsDataModelFieldBooleanForm` . Therefore, I created a prop `needIconCheck` with default as true so it doesn't break the existing `MenuItemSelect` and we can pass that prop as false wherever needed. [Screencast from 2024-12-21 12-08-08.webm](https://github.com/user-attachments/assets/4f8070a8-f339-4556-a137-bbbad58b171c)
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import styled from '@emotion/styled';
|
||||
import { MouseEvent, useMemo, useRef, useState } from 'react';
|
||||
import { IconComponent, MenuItem } from 'twenty-ui';
|
||||
import { IconComponent, MenuItem, MenuItemSelect } from 'twenty-ui';
|
||||
|
||||
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
|
||||
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
|
||||
@ -43,6 +43,7 @@ export type SelectProps<Value extends SelectValue> = {
|
||||
options: SelectOption<Value>[];
|
||||
value?: Value;
|
||||
withSearchInput?: boolean;
|
||||
needIconCheck?: boolean;
|
||||
callToActionButton?: CallToActionButton;
|
||||
};
|
||||
|
||||
@ -73,6 +74,7 @@ export const Select = <Value extends SelectValue>({
|
||||
options,
|
||||
value,
|
||||
withSearchInput,
|
||||
needIconCheck,
|
||||
callToActionButton,
|
||||
}: SelectProps<Value>) => {
|
||||
const selectContainerRef = useRef<HTMLDivElement>(null);
|
||||
@ -148,10 +150,12 @@ export const Select = <Value extends SelectValue>({
|
||||
{!!filteredOptions.length && (
|
||||
<DropdownMenuItemsContainer hasMaxHeight>
|
||||
{filteredOptions.map((option) => (
|
||||
<MenuItem
|
||||
<MenuItemSelect
|
||||
key={`${option.value}-${option.label}`}
|
||||
LeftIcon={option.Icon}
|
||||
text={option.label}
|
||||
selected={selectedOption.value === option.value}
|
||||
needIconCheck={needIconCheck}
|
||||
onClick={() => {
|
||||
onChange?.(option.value);
|
||||
onBlur?.();
|
||||
|
||||
Reference in New Issue
Block a user