mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-05 03:12:34 -06:00
2701-есть адекватный порядок для строк черновика и фикс пустого поиска
This commit is contained in:
@@ -25,6 +25,7 @@ export const CatalogSelect: React.FC<Props> = ({
|
||||
}) => {
|
||||
const [options, setOptions] = useState<SelectOption[]>([]);
|
||||
const [fetching, setFetching] = useState(false);
|
||||
const [notFound, setNotFound] = useState(false);
|
||||
|
||||
const fetchRef = useRef<number | null>(null);
|
||||
|
||||
@@ -45,6 +46,7 @@ export const CatalogSelect: React.FC<Props> = ({
|
||||
const fetchProducts = async (search: string) => {
|
||||
if (!search) {
|
||||
setOptions([]);
|
||||
setNotFound(false);
|
||||
return;
|
||||
}
|
||||
setFetching(true);
|
||||
@@ -57,8 +59,11 @@ export const CatalogSelect: React.FC<Props> = ({
|
||||
data: item,
|
||||
}));
|
||||
setOptions(newOptions);
|
||||
// Показываем "Не найдено" если результатов нет
|
||||
setNotFound(results.length === 0);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
setNotFound(true);
|
||||
} finally {
|
||||
setFetching(false);
|
||||
}
|
||||
@@ -68,6 +73,8 @@ export const CatalogSelect: React.FC<Props> = ({
|
||||
if (fetchRef.current !== null) {
|
||||
window.clearTimeout(fetchRef.current);
|
||||
}
|
||||
// Сбрасываем notFound при новом поиске
|
||||
setNotFound(false);
|
||||
// Запускаем поиск только если введено хотя бы 2 символа
|
||||
if (val.length < 2) {
|
||||
return;
|
||||
@@ -93,7 +100,13 @@ export const CatalogSelect: React.FC<Props> = ({
|
||||
placeholder="Начните вводить название товара..."
|
||||
filterOption={false}
|
||||
onSearch={handleSearch}
|
||||
notFoundContent={fetching ? <Spin size="small" /> : null}
|
||||
notFoundContent={
|
||||
fetching ? (
|
||||
<Spin size="small" />
|
||||
) : notFound ? (
|
||||
<div style={{ padding: "8px", color: "#999" }}>Товар не найден</div>
|
||||
) : null
|
||||
}
|
||||
options={options}
|
||||
value={value}
|
||||
onChange={handleChange}
|
||||
@@ -101,8 +114,11 @@ export const CatalogSelect: React.FC<Props> = ({
|
||||
style={{ width: "100%" }}
|
||||
listHeight={256}
|
||||
allowClear
|
||||
// При очистке сбрасываем опции, чтобы при следующем клике не вылезал старый товар
|
||||
onClear={() => setOptions([])}
|
||||
// При очистке сбрасываем опции и notFound, чтобы при следующем клике не вылезал старый товар
|
||||
onClear={() => {
|
||||
setOptions([]);
|
||||
setNotFound(false);
|
||||
}}
|
||||
// При клике (фокусе), если поле пустое - можно показать дефолтные опции или оставить пустым
|
||||
onFocus={() => {
|
||||
if (!value) setOptions([]);
|
||||
|
||||
Reference in New Issue
Block a user