'use client' import React, { useState } from 'react' import TextInput from './ui/TextInput' import axios from 'axios' import { useRouter } from 'next/navigation' interface AddressSelectorProps { is_search?: boolean } export default function AddressSelector({ is_search }: AddressSelectorProps) { const router = useRouter() const [fromAddress, setFromAddress] = useState('') const [toAddress, setToAddress] = useState('') const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState(null) const API_URL = process.env.NEXT_PUBLIC_API_URL const getCityName = async (searchText: string): Promise => { try { const encodedSearch = encodeURIComponent(searchText) const url = `${API_URL}/cities/?search=${encodedSearch}&russian_name=${encodedSearch}` const response = await axios.get(url) if (response.data && response.data.length > 0) { return response.data[0].value } throw new Error(`Город "${searchText}" не найден`) } catch (error) { if (error instanceof Error) { throw new Error(`Ошибка при поиске города "${searchText}": ${error.message}`) } throw error } } const formatAddress = (address: string) => { return address .toLowerCase() .trim() .replace(/[^a-zа-яё0-9\s-]/gi, '') .replace(/\s+/g, '-') } const getSearchUrl = async (category: 'mover' | 'customer') => { if (!fromAddress.trim() || !toAddress.trim()) { return `/search/${category}` } const [fromCity, toCity] = await Promise.all([getCityName(fromAddress), getCityName(toAddress)]) const from = formatAddress(fromCity) const to = formatAddress(toCity) return `/search/${category}/${from}-${to}` } const handleSearch = async (category: 'mover' | 'customer') => { setError(null) if (!fromAddress.trim() || !toAddress.trim()) { router.push(`/search/${category}`) return } setIsLoading(true) try { const url = await getSearchUrl(category) router.push(url) } catch (err) { setError(err instanceof Error ? err.message : 'Произошла ошибка при поиске') } finally { setIsLoading(false) } } return (
{is_search &&

Может поищем по городу?

}
{ setError(null) setFromAddress(e.target.value) }} name="fromAddress" style="main" error={error && !fromAddress.trim() ? 'Укажите город отправления' : undefined} />
{ setError(null) setToAddress(e.target.value) }} name="toAddress" style="main" error={error && !toAddress.trim() ? 'Укажите город назначения' : undefined} />
{error &&
{error}
}
) }