Проверка на корретность ввода
This commit is contained in:
parent
c0a31edd60
commit
4f2a40631c
@ -8,12 +8,37 @@ const SearchBar = () => {
|
|||||||
const [query, setQuery] = useState(''); // Поисковый запрос
|
const [query, setQuery] = useState(''); // Поисковый запрос
|
||||||
const [results, setResults] = useState([]); // Результаты поиска
|
const [results, setResults] = useState([]); // Результаты поиска
|
||||||
const [selectedStreet, setSelectedStreet] = useState(null); // Выбранная улица
|
const [selectedStreet, setSelectedStreet] = useState(null); // Выбранная улица
|
||||||
|
const [error, setError] = useState(''); // Сообщение об ошибке
|
||||||
|
|
||||||
|
const handleInputChange = (e) => {
|
||||||
|
const value = e.target.value;
|
||||||
|
|
||||||
|
// Проверка на наличие цифр
|
||||||
|
if (/\d/.test(value)) {
|
||||||
|
setError('Ввод цифр запрещен. Пожалуйста, введите название улицы.');
|
||||||
|
} else {
|
||||||
|
setError('');
|
||||||
|
}
|
||||||
|
|
||||||
|
setQuery(value);
|
||||||
|
};
|
||||||
|
|
||||||
const handleSearch = async (e) => {
|
const handleSearch = async (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const data = await searchStreet(query);
|
|
||||||
setResults(data); // Установить результаты поиска
|
// Проверка перед выполнением поиска
|
||||||
setSelectedStreet(null); // Сбросить выбранный адрес
|
if (error) {
|
||||||
|
alert('Исправьте ошибки перед поиском.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const data = await searchStreet(query);
|
||||||
|
setResults(data);
|
||||||
|
setSelectedStreet(null);
|
||||||
|
} catch (err) {
|
||||||
|
setError('Ошибка поиска. Попробуйте снова.');
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -21,29 +46,32 @@ const SearchBar = () => {
|
|||||||
<form className="form-container d-flex mb-4" onSubmit={handleSearch}>
|
<form className="form-container d-flex mb-4" onSubmit={handleSearch}>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
className="form-control"
|
className={`form-control ${error ? 'is-invalid' : ''}`}
|
||||||
placeholder="Введите название улицы"
|
placeholder="Введите название улицы"
|
||||||
value={query}
|
value={query}
|
||||||
onChange={(e) => setQuery(e.target.value)}
|
onChange={handleInputChange}
|
||||||
aria-label="Search"
|
aria-label="Search"
|
||||||
/>
|
/>
|
||||||
<button className="btn btn-outline-success" type="submit">
|
<button className="btn btn-outline-success" type="submit" disabled={!!error}>
|
||||||
Поиск
|
Поиск
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
{/* Вывод сообщения об ошибке */}
|
||||||
|
{error && <div className="invalid-feedback d-block">{error}</div>}
|
||||||
|
|
||||||
{selectedStreet ? (
|
{selectedStreet ? (
|
||||||
<div className="table-container">
|
<div className="table-container">
|
||||||
<h2>Информация об адресе</h2>
|
<h2>Информация об адресе</h2>
|
||||||
<SearchResults
|
<SearchResults
|
||||||
selectedStreet={selectedStreet}
|
selectedStreet={selectedStreet}
|
||||||
onBack={() => setSelectedStreet(null)}
|
onBack={() => setSelectedStreet(null)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<SearchResults
|
<SearchResults
|
||||||
results={results}
|
results={results}
|
||||||
onSelect={(street) => setSelectedStreet(street)}
|
onSelect={(street) => setSelectedStreet(street)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user