2701-есть адекватный порядок для строк черновика и фикс пустого поиска

This commit is contained in:
2026-01-27 08:51:59 +03:00
parent 38a5143902
commit de4bd9c8d7
8 changed files with 148 additions and 5 deletions

View File

@@ -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([]);