Добавлены обработчики изменений для полей ввода в модальном окне контактов, обновлены тексты в секциях контактов и отзывов, а также изменены описания проектов для улучшения информативности.
This commit is contained in:
@ -40,6 +40,10 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
|
||||
}
|
||||
};
|
||||
|
||||
const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
handleInputChange('name', e.target.value);
|
||||
};
|
||||
|
||||
const handlePhoneChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
let value = e.target.value.replace(/\D/g, '');
|
||||
|
||||
@ -59,6 +63,10 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
|
||||
handleInputChange('phone', formattedValue);
|
||||
};
|
||||
|
||||
const handleMessageChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
|
||||
handleInputChange('message', e.target.value);
|
||||
};
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
|
||||
@ -149,7 +157,7 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
|
||||
name="name"
|
||||
placeholder="Ваше имя"
|
||||
value={formData.name}
|
||||
onChange={handleInputChange}
|
||||
onChange={handleNameChange}
|
||||
className="w-full px-4 py-3 rounded-lg bg-white border border-gray-200 focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/20 transition-all duration-300 text-gray-800 placeholder-gray-500"
|
||||
required
|
||||
/>
|
||||
@ -161,7 +169,7 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
|
||||
name="phone"
|
||||
placeholder="Ваш телефон"
|
||||
value={formData.phone}
|
||||
onChange={handleInputChange}
|
||||
onChange={handlePhoneChange}
|
||||
className="w-full px-4 py-3 rounded-lg bg-white border border-gray-200 focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/20 transition-all duration-300 text-gray-800 placeholder-gray-500"
|
||||
required
|
||||
/>
|
||||
@ -173,7 +181,7 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
|
||||
placeholder="Ваше сообщение"
|
||||
rows={4}
|
||||
value={formData.message}
|
||||
onChange={handleInputChange}
|
||||
onChange={handleMessageChange}
|
||||
className="w-full px-4 py-3 rounded-lg bg-white border border-gray-200 focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/20 transition-all duration-300 text-gray-800 placeholder-gray-500 resize-none"
|
||||
required
|
||||
/>
|
||||
@ -201,7 +209,7 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
|
||||
</form>
|
||||
|
||||
<p className="text-xs text-gray-500 mt-4 text-center">
|
||||
Нажимая кнопку "Отправить сообщение", вы соглашаетесь с{' '}
|
||||
Нажимая кнопку “Отправить сообщение”, вы соглашаетесь с{' '}
|
||||
<a href="#" className="underline hover:text-blue-600 transition-colors duration-300">
|
||||
Политикой конфиденциальности
|
||||
</a>
|
||||
|
@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import { useState } from 'react';
|
||||
import { Phone, Mail, MapPin, CheckCircle, AlertCircle } from 'lucide-react';
|
||||
import { Phone, Mail, MapPin } from 'lucide-react';
|
||||
import FadeInSection from './FadeInSection';
|
||||
|
||||
const ContactSection = () => {
|
||||
@ -213,7 +213,7 @@ const ContactSection = () => {
|
||||
</form>
|
||||
|
||||
<p className="text-xs text-gray-500 mt-4 text-center">
|
||||
Нажимая кнопку "Отправить сообщение", вы соглашаетесь с{' '}
|
||||
Нажимая кнопку “Отправить сообщение”, вы соглашаетесь с{' '}
|
||||
<a href="#" className="underline hover:text-blue-600 transition-colors duration-300">
|
||||
Политикой конфиденциальности
|
||||
</a>
|
||||
|
@ -13,7 +13,7 @@ const projects = [
|
||||
{
|
||||
id: 1,
|
||||
title: 'Гармония',
|
||||
description: 'Дом 11х9м, общая площадь 101,4 кв.м., 3 спальни, 1 санузел',
|
||||
description: 'Общая площадь 200 кв.м.',
|
||||
images: [
|
||||
{ type: 'facade', src: '/images/garmony.png', alt: 'Фасад дома Гармония' },
|
||||
{ type: 'plan', src: '/images/2.jpg', alt: 'Планировка 1 этажа' },
|
||||
@ -24,7 +24,7 @@ const projects = [
|
||||
{
|
||||
id: 2,
|
||||
title: 'Горизонт',
|
||||
description: 'Дом 14х13 м, общая площадь 142,8 кв.м, 3 спальни, 2 санузла',
|
||||
description: 'Общая площадь 360 кв.м.',
|
||||
images: [
|
||||
{ type: 'facade', src: '/images/gorizont.png', alt: 'Фасад дома Горизонт' },
|
||||
{ type: 'plan', src: '/images/22.jpg', alt: 'Планировка 1 этажа' },
|
||||
@ -34,20 +34,20 @@ const projects = [
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
title: 'Филимонов',
|
||||
description: 'Дом 14,2х10,5 м, общая площадь 131,4 кв.м., 3 спальни, 2 санузла',
|
||||
title: 'Европейский квартал',
|
||||
description: 'Общая площадь 120 кв.м.',
|
||||
images: [
|
||||
{ type: 'facade', src: '/images/filimonov.png', alt: 'Фасад дома Филимонов' },
|
||||
{ type: 'facade', src: '/images/filimonov.png', alt: 'Фасад дома Европейский квартал' },
|
||||
{ type: 'plan', src: '/images/333.jpg', alt: 'Планировка дома' }
|
||||
],
|
||||
file: '/projects/filimonov.pdf',
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
title: 'Моронцов',
|
||||
description: 'Дом 12х8м, общая площадь 89,6 кв.м., 2 спальни, 1 санузел',
|
||||
title: 'Проект 12',
|
||||
description: 'Общая площадь 100 кв.м.',
|
||||
images: [
|
||||
{ type: 'facade', src: '/images/moronchov.png', alt: 'Фасад дома Моронцов' },
|
||||
{ type: 'facade', src: '/images/moronchov.png', alt: 'Фасад дома Проект 12' },
|
||||
{ type: 'plan', src: '/images/3333.jpg', alt: 'Планировка дома' }
|
||||
],
|
||||
file: '/projects/moronchov.pdf',
|
||||
@ -55,7 +55,7 @@ const projects = [
|
||||
{
|
||||
id: 5,
|
||||
title: 'Ранчо',
|
||||
description: 'Дом 15х12м, общая площадь 156,8 кв.м., 4 спальни, 2 санузла',
|
||||
description: 'Общая площадь 96 кв.м.',
|
||||
images: [
|
||||
{ type: 'facade', src: '/images/rancho.png', alt: 'Фасад дома Ранчо' },
|
||||
{ type: 'plan', src: '/images/111.jpg', alt: 'Планировка 1 этажа' },
|
||||
@ -66,7 +66,7 @@ const projects = [
|
||||
{
|
||||
id: 6,
|
||||
title: 'Тихие Зори',
|
||||
description: 'Дом 13х9м, общая площадь 118,2 кв.м., 3 спальни, 1 санузел',
|
||||
description: 'Общая площадь 130 кв.м.',
|
||||
images: [
|
||||
{ type: 'facade', src: '/images/zori.png', alt: 'Фасад дома Тихие Зори' },
|
||||
{ type: 'plan', src: '/images/122.jpg', alt: 'Планировка дома' }
|
||||
@ -76,7 +76,7 @@ const projects = [
|
||||
{
|
||||
id: 7,
|
||||
title: 'Уютное гнездышко',
|
||||
description: 'Дом 16х10м, общая площадь 168,4 кв.м., 4 спальни, 3 санузла',
|
||||
description: 'Общая площадь 98 кв.м.',
|
||||
images: [
|
||||
{ type: 'facade', src: '/images/gnezdo.png', alt: 'Фасад дома Уютное гнездышко' },
|
||||
{ type: 'plan', src: '/images/3333.jpg', alt: 'Планировка дома' }
|
||||
@ -86,7 +86,7 @@ const projects = [
|
||||
{
|
||||
id: 8,
|
||||
title: 'Аура',
|
||||
description: 'Дом 10х8м, общая площадь 78,6 кв.м., 2 спальни, 1 санузел',
|
||||
description: 'Общая площадь 73 кв.м.',
|
||||
images: [
|
||||
{ type: 'facade', src: '/images/aura.png', alt: 'Фасад дома Аура' },
|
||||
{ type: 'plan', src: '/images/444.jpg', alt: 'Планировка 1 этажа' },
|
||||
@ -97,7 +97,7 @@ const projects = [
|
||||
{
|
||||
id: 9,
|
||||
title: 'Надежда',
|
||||
description: 'Дом 18х12м, общая площадь 198,4 кв.м., 5 спален, 3 санузла',
|
||||
description: 'Общая площадь 100 кв.м.',
|
||||
images: [
|
||||
{ type: 'facade', src: '/images/nade.png', alt: 'Фасад дома Надежда' },
|
||||
{ type: 'plan', src: '/images/666.jpg', alt: 'Планировка дома' }
|
||||
|
@ -1,30 +1,38 @@
|
||||
'use client';
|
||||
|
||||
import Image from 'next/image';
|
||||
import { Star } from 'lucide-react';
|
||||
import FadeInSection from './FadeInSection';
|
||||
|
||||
const reviews = [
|
||||
{
|
||||
id: 1,
|
||||
name: 'Александр Петров',
|
||||
position: 'Владелец дома',
|
||||
text: 'Очень доволен качеством строительства. Команда профессионалов, все работы выполнены в срок и с соблюдением всех норм.',
|
||||
rating: 5,
|
||||
image: '/images/Sasha.jpg',
|
||||
project: 'Коттедж 150 м²',
|
||||
date: 'Сентябрь 2024',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: 'Елена Смирнова',
|
||||
position: 'Владелица дома',
|
||||
text: 'Спасибо за отличную работу! Дом построен качественно, все пожелания были учтены. Рекомендую всем!',
|
||||
rating: 5,
|
||||
image: '/images/Elena.jpg',
|
||||
project: 'Дом 120 м²',
|
||||
date: 'Август 2024',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: 'Дмитрий Иванов',
|
||||
position: 'Владелец дома',
|
||||
text: 'Профессиональный подход к делу. Все этапы строительства контролировались, результат превзошел ожидания.',
|
||||
rating: 5,
|
||||
image: '/images/Dmitry.jpg',
|
||||
project: 'Коттедж 180 м²',
|
||||
date: 'Июль 2024',
|
||||
},
|
||||
];
|
||||
|
||||
@ -85,7 +93,7 @@ const ReviewsSection = () => {
|
||||
</div>
|
||||
|
||||
<blockquote className="text-gray-600 leading-relaxed italic">
|
||||
"{review.text}"
|
||||
“{review.text}”
|
||||
</blockquote>
|
||||
|
||||
<div className="mt-4 pt-4 border-t border-gray-200">
|
||||
|
Reference in New Issue
Block a user