From dc5b5b4f24de3c101d8c69df51ef6fee1e470a6c Mon Sep 17 00:00:00 2001 From: mcharnou Date: Wed, 4 Feb 2026 00:39:56 +0300 Subject: [PATCH 1/3] feat: add additional props to autocomplete --- .../autocompleteMenu/autocompleteMenu.module.scss | 14 ++++++++++++++ .../common/autocompleteMenu/autocompleteMenu.tsx | 13 ++++++++++++- .../multipleAutocomplete/multipleAutocomplete.tsx | 2 ++ .../singleAutocomplete/singleAutocomplete.tsx | 2 ++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.module.scss b/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.module.scss index 05540794..289efdd4 100644 --- a/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.module.scss +++ b/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.module.scss @@ -41,4 +41,18 @@ $Z-INDEX-POPUP: 10; &.dark { background-color: var(--rp-ui-base-dark-e-400); } + + .limitation-item { + pointer-events: none; + min-height: 36px; + padding: 4px 12px; + cursor: pointer; + box-sizing: border-box; + color: var(--rp-ui-color-text-secondary); + align-items: center; + text-align: center; + width: 100%; + font-family: var(--rp-ui-base-font-family); + font-size: 13px; + } } diff --git a/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.tsx b/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.tsx index 081c0460..155726d3 100644 --- a/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.tsx +++ b/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.tsx @@ -33,6 +33,8 @@ type AutocompleteMenuProps = { minLength?: number | null; inputValue?: string; className?: string; + optionsLimit?: number; + limitationText?: string; } & AutocompleteOptionsProps; export const AutocompleteMenu = forwardRef( @@ -44,6 +46,8 @@ export const AutocompleteMenu = forwardRef( isDropdownMode, inputValue = '', className = '', + limitationText = '', + optionsLimit = 0, ...props }: AutocompleteMenuProps, ref: ForwardedRef, @@ -58,7 +62,14 @@ export const AutocompleteMenu = forwardRef( )} style={style} > - + 0 ? props.options.slice(0, optionsLimit) : props.options} + /> + {props?.options?.length > optionsLimit && limitationText ? ( +

{limitationText}

+ ) : null} ); }, diff --git a/src/components/autocompletes/multipleAutocomplete/multipleAutocomplete.tsx b/src/components/autocompletes/multipleAutocomplete/multipleAutocomplete.tsx index 1d4f8335..415dcb18 100644 --- a/src/components/autocompletes/multipleAutocomplete/multipleAutocomplete.tsx +++ b/src/components/autocompletes/multipleAutocomplete/multipleAutocomplete.tsx @@ -86,6 +86,8 @@ export interface MultipleAutocompleteProps { customNoMatchesMessage?: string; useFixedPositioning?: boolean; newItemButtonText?: string; + optionsLimit?: number; + limitationText?: string; } export const MultipleAutocomplete = (componentsProps: MultipleAutocompleteProps) => { diff --git a/src/components/autocompletes/singleAutocomplete/singleAutocomplete.tsx b/src/components/autocompletes/singleAutocomplete/singleAutocomplete.tsx index ba00be8a..fb57343a 100644 --- a/src/components/autocompletes/singleAutocomplete/singleAutocomplete.tsx +++ b/src/components/autocompletes/singleAutocomplete/singleAutocomplete.tsx @@ -75,6 +75,8 @@ export interface SingleAutocompleteProps { customEmptyListMessage?: string; customNoMatchesMessage?: string; newItemButtonText?: string; + optionsLimit?: number; + limitationText?: string; } export const SingleAutocomplete = (componentProps: SingleAutocompleteProps) => { From 82a5d94713dbe269b22200dc10c9997b181bc0c9 Mon Sep 17 00:00:00 2001 From: mcharnou Date: Tue, 10 Feb 2026 23:00:34 +0300 Subject: [PATCH 2/3] fix: move limitation flow deeper --- .../autocompleteMenu/autocompleteMenu.module.scss | 14 -------------- .../common/autocompleteMenu/autocompleteMenu.tsx | 11 +---------- .../common/autocompleteOptions.module.scss | 14 ++++++++++++++ .../autocompletes/common/autocompleteOptions.tsx | 7 +++++++ 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.module.scss b/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.module.scss index 289efdd4..05540794 100644 --- a/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.module.scss +++ b/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.module.scss @@ -41,18 +41,4 @@ $Z-INDEX-POPUP: 10; &.dark { background-color: var(--rp-ui-base-dark-e-400); } - - .limitation-item { - pointer-events: none; - min-height: 36px; - padding: 4px 12px; - cursor: pointer; - box-sizing: border-box; - color: var(--rp-ui-color-text-secondary); - align-items: center; - text-align: center; - width: 100%; - font-family: var(--rp-ui-base-font-family); - font-size: 13px; - } } diff --git a/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.tsx b/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.tsx index 155726d3..8de78fc1 100644 --- a/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.tsx +++ b/src/components/autocompletes/common/autocompleteMenu/autocompleteMenu.tsx @@ -46,8 +46,6 @@ export const AutocompleteMenu = forwardRef( isDropdownMode, inputValue = '', className = '', - limitationText = '', - optionsLimit = 0, ...props }: AutocompleteMenuProps, ref: ForwardedRef, @@ -62,14 +60,7 @@ export const AutocompleteMenu = forwardRef( )} style={style} > - 0 ? props.options.slice(0, optionsLimit) : props.options} - /> - {props?.options?.length > optionsLimit && limitationText ? ( -

{limitationText}

- ) : null} + ); }, diff --git a/src/components/autocompletes/common/autocompleteOptions.module.scss b/src/components/autocompletes/common/autocompleteOptions.module.scss index a79975da..bcd794b3 100644 --- a/src/components/autocompletes/common/autocompleteOptions.module.scss +++ b/src/components/autocompletes/common/autocompleteOptions.module.scss @@ -25,3 +25,17 @@ padding: 8px 12px; text-align: center; } + +.limitation-item { + pointer-events: none; + min-height: 36px; + padding: 4px 12px; + cursor: pointer; + box-sizing: border-box; + color: var(--rp-ui-color-text-secondary); + align-items: center; + text-align: center; + width: 100%; + font-family: var(--rp-ui-base-font-family); + font-size: 13px; +} diff --git a/src/components/autocompletes/common/autocompleteOptions.tsx b/src/components/autocompletes/common/autocompleteOptions.tsx index 4ecc14ac..a4cbbfc1 100644 --- a/src/components/autocompletes/common/autocompleteOptions.tsx +++ b/src/components/autocompletes/common/autocompleteOptions.tsx @@ -48,6 +48,8 @@ export interface AutocompleteOptionsProps { customNoMatchesMessage?: string; getUniqKey?: (item: T) => string; newItemButtonText: string; + limitationText?: string; + optionsLimit?: number; } export const AutocompleteOptions = (props: AutocompleteOptionsProps) => { @@ -65,6 +67,8 @@ export const AutocompleteOptions = (props: AutocompleteOptionsProps) => { getUniqKey, getItemProps, parseValueToString, + limitationText = 'Too many results. Type to search', + optionsLimit = 1, } = props; const filterStaticOptions = useCallback(() => { @@ -159,6 +163,9 @@ export const AutocompleteOptions = (props: AutocompleteOptionsProps) => {
{!isEmpty(availableOptions) ? renderItems(availableOptions) : renderEmptyList()} + {availableOptions?.length > optionsLimit && limitationText ? ( +

{limitationText}

+ ) : null}
{!createWithoutConfirmation && renderNewItem(availableOptions)}
From 047107b098f0ef811b0d3a010b2bb3f829a5af6c Mon Sep 17 00:00:00 2001 From: mcharnou Date: Thu, 12 Feb 2026 18:35:08 +0300 Subject: [PATCH 3/3] fix: options default value --- .../autocompletes/common/autocompleteOptions.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/autocompletes/common/autocompleteOptions.tsx b/src/components/autocompletes/common/autocompleteOptions.tsx index a4cbbfc1..51e2f4e1 100644 --- a/src/components/autocompletes/common/autocompleteOptions.tsx +++ b/src/components/autocompletes/common/autocompleteOptions.tsx @@ -68,7 +68,7 @@ export const AutocompleteOptions = (props: AutocompleteOptionsProps) => { getItemProps, parseValueToString, limitationText = 'Too many results. Type to search', - optionsLimit = 1, + optionsLimit = 0, } = props; const filterStaticOptions = useCallback(() => { @@ -163,8 +163,10 @@ export const AutocompleteOptions = (props: AutocompleteOptionsProps) => {
{!isEmpty(availableOptions) ? renderItems(availableOptions) : renderEmptyList()} - {availableOptions?.length > optionsLimit && limitationText ? ( -

{limitationText}

+ {availableOptions?.length > optionsLimit && optionsLimit > 0 && limitationText ? ( + ) : null}
{!createWithoutConfirmation && renderNewItem(availableOptions)}