import { useMemo } from 'react'; import styled from '@emotion/styled'; import { v4 } from 'uuid'; import { IconCheck, IconDotsVertical, IconTrash, IconX, } from '@/ui/display/icon'; import { LightIconButton } from '@/ui/input/button/components/LightIconButton'; import { TextInput } from '@/ui/input/components/TextInput'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { DropdownMenu } from '@/ui/layout/dropdown/components/DropdownMenu'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { DropdownScope } from '@/ui/layout/dropdown/scopes/DropdownScope'; import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem'; import { SettingsObjectFieldSelectFormOption } from '../types/SettingsObjectFieldSelectFormOption'; type SettingsObjectFieldSelectFormOptionRowProps = { isDefault?: boolean; onChange: (value: SettingsObjectFieldSelectFormOption) => void; onRemove?: () => void; option: SettingsObjectFieldSelectFormOption; }; const StyledRow = styled.div` align-items: center; display: flex; height: ${({ theme }) => theme.spacing(6)}; padding: ${({ theme }) => theme.spacing(1)} 0; `; const StyledOptionInput = styled(TextInput)` flex: 1 0 auto; margin-right: ${({ theme }) => theme.spacing(2)}; & input { height: ${({ theme }) => theme.spacing(2)}; } `; export const SettingsObjectFieldSelectFormOptionRow = ({ isDefault, onChange, onRemove, option, }: SettingsObjectFieldSelectFormOptionRowProps) => { const dropdownScopeId = useMemo(() => `select-field-option-row-${v4()}`, []); const { closeDropdown } = useDropdown({ dropdownScopeId }); return ( onChange({ ...option, label })} RightIcon={isDefault ? IconCheck : undefined} /> } dropdownComponents={ {isDefault ? ( { onChange({ ...option, isDefault: false }); closeDropdown(); }} /> ) : ( { onChange({ ...option, isDefault: true }); closeDropdown(); }} /> )} {!!onRemove && ( { onRemove(); closeDropdown(); }} /> )} } /> ); };