From eedbf7875fe363db1d5dc8b4a23b9e7f875c8eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=A0=E9=99=90UCW?= <45730483+wuxianucw@users.noreply.github.com> Date: Fri, 23 Sep 2022 01:32:34 +0800 Subject: [PATCH] autocomplete: treat query as item (#430) --- .../autocomplete/components/AutoComplete.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/ui-default/components/autocomplete/components/AutoComplete.tsx b/packages/ui-default/components/autocomplete/components/AutoComplete.tsx index 949d0197..88299462 100644 --- a/packages/ui-default/components/autocomplete/components/AutoComplete.tsx +++ b/packages/ui-default/components/autocomplete/components/AutoComplete.tsx @@ -130,7 +130,7 @@ const AutoComplete = forwardRef(function Impl(props: AutoCompleteProps, re const dispatchChange = () => { if (!multi) onChange(inputRef.current?.value); - else onChange(selectedKeys.join(',')); + else onChange([...selectedKeys, inputRef.current?.value].filter((v) => v?.trim().length > 0).join(',')); }; let first = !multi; @@ -148,7 +148,7 @@ const AutoComplete = forwardRef(function Impl(props: AutoCompleteProps, re const handleInputChange = debounce((e?) => queryList(e ? e.target.value : ''), 300); - const toggleItem = (item: T, key = itemKey(item)) => { + const toggleItem = (item: T, key = itemKey(item), preserve = false) => { const shouldKeepOpen = allowEmptyQuery && inputRef.current.value === '' && !multi; if (multi) { const idx = selectedKeys.indexOf(key); @@ -167,14 +167,14 @@ const AutoComplete = forwardRef(function Impl(props: AutoCompleteProps, re setSelected((s) => [...s, item]); setSelectedKeys((s) => [...s, key]); } - inputRef.current.value = ''; + if (!preserve) inputRef.current.value = ''; inputRef.current.focus(); } else { setSelected([item]); setSelectedKeys([key]); inputRef.current.value = key; - dispatchChange(); } + dispatchChange(); if (!shouldKeepOpen) { setItemList([]); setCurrentItem(null); @@ -231,8 +231,8 @@ const AutoComplete = forwardRef(function Impl(props: AutoCompleteProps, re useImperativeHandle(ref, () => ({ getSelectedItems: () => selected, - getSelectedItemKeys: () => selectedKeys, - getSelectedItemsAsString: () => selectedKeys.join(','), + getSelectedItemKeys: () => [...selectedKeys, inputRef.current?.value].filter((v) => v?.trim().length > 0), + getSelectedItemsAsString: () => [...selectedKeys, inputRef.current?.value].filter((v) => v?.trim().length > 0).join(','), setSelectedItems: (items) => { setSelected(items); setSelectedKeys(items.map((i) => itemKey(i))); @@ -285,7 +285,7 @@ const AutoComplete = forwardRef(function Impl(props: AutoCompleteProps, re return (
{item ? itemText(item) : key}
- toggleItem(item, key)} /> + toggleItem(item, key, true)} />
); })}