From a1e443d682fff59efde56bedeb234af756a9ece3 Mon Sep 17 00:00:00 2001 From: anserwaseem Date: Wed, 22 Oct 2025 18:24:59 +0500 Subject: [PATCH] enhance MultiSelect with visibility control of new option via 'hideNoMatchesBlock' prop --- .changeset/wet-planets-share.md | 5 ++++ .../runtime/src/widgets/Form/MultiSelect.tsx | 24 +++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 .changeset/wet-planets-share.md diff --git a/.changeset/wet-planets-share.md b/.changeset/wet-planets-share.md new file mode 100644 index 000000000..57bc0ea2f --- /dev/null +++ b/.changeset/wet-planets-share.md @@ -0,0 +1,5 @@ +--- +"@ensembleui/react-runtime": patch +--- + +enhance MultiSelect with visibility control of new option via 'hideNoMatchesBlock' prop diff --git a/packages/runtime/src/widgets/Form/MultiSelect.tsx b/packages/runtime/src/widgets/Form/MultiSelect.tsx index fe8158a29..1e674aa0a 100644 --- a/packages/runtime/src/widgets/Form/MultiSelect.tsx +++ b/packages/runtime/src/widgets/Form/MultiSelect.tsx @@ -75,7 +75,10 @@ export type MultiSelectProps = { debounceMs: number; } & EnsembleAction; hintStyle?: EnsembleWidgetStyles; + /** Whether to allow creating new options */ allowCreateOptions?: boolean; + /** Whether to hide the "No matches" block */ + hideNoMatchesBlock?: Expression; /** The max number of items can be selected */ maxCount: Expression; /** Max tag count to show */ @@ -252,10 +255,8 @@ const MultiSelect: React.FC = (props) => { option?: MultiSelectOption, ): boolean => { return ( - option?.label - .toString() - ?.toLowerCase() - ?.startsWith(input.toLowerCase()) || false + option?.label.toString()?.toLowerCase()?.includes(input.toLowerCase()) || + false ); }; @@ -326,7 +327,11 @@ const MultiSelect: React.FC = (props) => { }; const newOptionRender = (menu: ReactElement): ReactElement => ( - + ); const notFoundContentRenderer = useMemo(() => { @@ -456,13 +461,18 @@ const MultiSelect: React.FC = (props) => { interface DropdownProps { menu: ReactElement; newOption: string; + hideNoMatchesBlock: boolean; } -const Dropdown: React.FC = ({ menu, newOption }) => { +const Dropdown: React.FC = ({ + menu, + newOption, + hideNoMatchesBlock, +}) => { return ( <> {menu} - {newOption ? ( + {newOption && !hideNoMatchesBlock ? (