diff --git a/app/components/CitySelectModal.tsx b/app/components/CitySelectModal.tsx new file mode 100644 index 0000000..c41b105 --- /dev/null +++ b/app/components/CitySelectModal.tsx @@ -0,0 +1,134 @@ +'use client'; + +import { motion, AnimatePresence } from 'framer-motion'; +import { MapPin, X } from 'lucide-react'; +import { Button } from '@/components/ui/button'; + +interface CitySelectModalProps { + isOpen: boolean; + onClose: () => void; + onSelectCity: (city: 'Москва' | 'Чебоксары') => void; + currentCity: 'Москва' | 'Чебоксары'; +} + +const CitySelectModal = ({ + isOpen, + onClose, + onSelectCity, + currentCity, +}: CitySelectModalProps) => { + if (!isOpen) return null; + + const overlayVariants = { + hidden: { opacity: 0 }, + visible: { opacity: 1 }, + }; + + const modalVariants = { + hidden: { opacity: 0, y: 50, scale: 0.95 }, + visible: { + opacity: 1, + y: 0, + scale: 1, + transition: { duration: 0.3, ease: [0.16, 1, 0.3, 1] }, + }, + exit: { + opacity: 0, + y: 50, + scale: 0.95, + transition: { duration: 0.2 }, + }, + }; + + return ( + + {isOpen && ( + + + + + + Выберите город + + + + + + + + Пожалуйста, выберите ваш город для получения актуальной информации + о наших услугах и контактах + + + + { + onSelectCity('Москва'); + onClose(); + }} + className={`w-full py-3 px-4 rounded-lg text-left flex items-center ${ + currentCity === 'Москва' + ? 'bg-blue-50 text-blue-700 border border-blue-200' + : 'text-gray-700 hover:bg-gray-100 border border-gray-200' + }`} + > + + + Москва + + ул. Космонавта Волкова, д. 29к1 + + + + + { + onSelectCity('Чебоксары'); + onClose(); + }} + className={`w-full py-3 px-4 rounded-lg text-left flex items-center ${ + currentCity === 'Чебоксары' + ? 'bg-blue-50 text-blue-700 border border-blue-200' + : 'text-gray-700 hover:bg-gray-100 border border-gray-200' + }`} + > + + + Чебоксары + + ул. Зои Яковлевой, д. 54 + + + + + + + Продолжить + + + + )} + + ); +}; + +export default CitySelectModal; diff --git a/app/page.tsx b/app/page.tsx index 2f6ba17..4f4f7ee 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -13,12 +13,35 @@ import Contacts from './components/Contacts'; import ContactForm from './components/ContactForm'; import Footer from './components/Footer'; import Loader from './components/Loader'; +import CitySelectModal from './components/CitySelectModal'; export default function Home() { const [selectedCity, setSelectedCity] = useState<'Москва' | 'Чебоксары'>( 'Москва' ); const [isLoading, setIsLoading] = useState(true); + const [isCityModalOpen, setIsCityModalOpen] = useState(false); + + useEffect(() => { + // Проверяем, выбирал ли пользователь город ранее + const savedCity = localStorage.getItem('selectedCity'); + if (savedCity) { + setSelectedCity(savedCity as 'Москва' | 'Чебоксары'); + } else { + // Если город не выбран, показываем модальное окно после загрузки + // Устанавливаем таймер, чтобы сначала загрузка прошла, а потом показалось модальное окно + const timer = setTimeout(() => { + setIsCityModalOpen(true); + }, 2300); // Чуть больше времени, чем таймер загрузки + return () => clearTimeout(timer); + } + }, []); + + // Сохраняем выбор города в localStorage + const handleCityChange = (city: 'Москва' | 'Чебоксары') => { + setSelectedCity(city); + localStorage.setItem('selectedCity', city); + }; useEffect(() => { // Имитация загрузки ресурсов @@ -44,7 +67,7 @@ export default function Home() { > @@ -60,6 +83,13 @@ export default function Home() { )} + + setIsCityModalOpen(false)} + onSelectCity={handleCityChange} + currentCity={selectedCity} + /> > ); }
+ Пожалуйста, выберите ваш город для получения актуальной информации + о наших услугах и контактах +
+ ул. Космонавта Волкова, д. 29к1 +
+ ул. Зои Яковлевой, д. 54 +