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