product details

This commit is contained in:
nabijonovdavronbek619@gmail.com
2025-12-11 20:15:55 +05:00
parent 003fa5ccce
commit 38d602a37c
3 changed files with 26 additions and 23 deletions

View File

@@ -7,17 +7,20 @@ import { sendContactMessage } from "@/lib/api";
import { Phone, MessageSquare, MapPin } from "lucide-react"; import { Phone, MessageSquare, MapPin } from "lucide-react";
import Image from "next/image"; import Image from "next/image";
import { useLanguage } from "@/context/language-context"; import { useLanguage } from "@/context/language-context";
import { useProductStore } from "@/lib/productZustand";
export function ContactForm() { export function ContactForm() {
const {t} = useLanguage(); const { t } = useLanguage();
const pathname = usePathname(); const pathname = usePathname();
const locale = (pathname.split("/")[1] || "uz") as "uz" | "ru"; const locale = (pathname.split("/")[1] || "uz") as "uz" | "ru";
const productName = useProductStore((state) => state.productName);
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
name: "", name: "",
phone: "", phone: "",
message: "", message: "",
productSlug: "", productName: "",
}); });
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
@@ -50,7 +53,7 @@ export function ContactForm() {
if (result.success) { if (result.success) {
setMessage({ type: "success", text: t.contact.success }); setMessage({ type: "success", text: t.contact.success });
setFormData({ name: "", phone: "", message: "", productSlug: "" }); setFormData({ name: "", phone: "", message: "", productName: "" });
} else { } else {
setMessage({ type: "error", text: t.contact.error }); setMessage({ type: "error", text: t.contact.error });
} }
@@ -71,7 +74,7 @@ export function ContactForm() {
className="object-cover" className="object-cover"
/> />
</div> </div>
<div className="absolute w-full h-full top-0 left-0 bg-black opacity-25 -z-40"/> <div className="absolute w-full h-full top-0 left-0 bg-black opacity-25 -z-40" />
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
{/* Header */} {/* Header */}
<motion.div <motion.div
@@ -100,9 +103,7 @@ export function ContactForm() {
<h3 className="text-2xl font-bold text-gray-900 mb-2"> <h3 className="text-2xl font-bold text-gray-900 mb-2">
{t.contact.title} {t.contact.title}
</h3> </h3>
<p className="text-gray-600 mb-8"> <p className="text-gray-600 mb-8">{t.contact.desc}</p>
{t.contact.desc}
</p>
</div> </div>
{/* Contact Methods */} {/* Contact Methods */}
@@ -202,17 +203,14 @@ export function ContactForm() {
<label className="block text-gray-700 font-medium mb-2"> <label className="block text-gray-700 font-medium mb-2">
{t.contact.product} {t.contact.product}
</label> </label>
<select <input
name="productSlug" type="text"
value={formData.productSlug} name="productName"
value={productName ? productName : formData.productName}
onChange={handleChange} onChange={handleChange}
placeholder={t.contact.product}
className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
> />
<option value="">Select a product...</option>
<option value="schotchik-pump">Schotchik Pump</option>
<option value="agregat-pump">Agregat Pump</option>
<option value="ccl-20-24-pump">CCL 20/24 Pump</option>
</select>
</div> </div>
{/* Message Alert */} {/* Message Alert */}

View File

@@ -1,12 +1,12 @@
"use client"; "use client";
import { motion, AnimatePresence } from "framer-motion"; import { motion, AnimatePresence } from "framer-motion";
import { X, Download } from "lucide-react"; import { X } from "lucide-react";
import Image from "next/image";
import { ProductViewer } from "./ProductViewer"; import { ProductViewer } from "./ProductViewer";
import type { Product } from "@/lib/products"; import type { Product } from "@/lib/products";
import { useLanguage } from "@/context/language-context"; import { useLanguage } from "@/context/language-context";
import Link from "next/link"; import Link from "next/link";
import { useProductStore } from "@/lib/productZustand";
interface ProductModalProps { interface ProductModalProps {
product: Product; product: Product;
@@ -15,6 +15,7 @@ interface ProductModalProps {
export function ProductModal({ product, onClose }: ProductModalProps) { export function ProductModal({ product, onClose }: ProductModalProps) {
const { t } = useLanguage(); const { t } = useLanguage();
const setProductName = useProductStore((state)=>state.setProductName);
return ( return (
<AnimatePresence> <AnimatePresence>
@@ -91,7 +92,7 @@ export function ProductModal({ product, onClose }: ProductModalProps) {
<div className="space-y-3"> <div className="space-y-3">
<Link href="#contact"> <Link href="#contact">
<motion.button <motion.button
onClick={onClose} onClick={()=>{onClose(); setProductName(product.nameKey)}}
whileHover={{ scale: 1.05 }} whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }} whileTap={{ scale: 0.95 }}
className="w-full px-6 py-3 bg-blue-600 text-white rounded-lg font-semibold hover:bg-blue-700 transition-colors" className="w-full px-6 py-3 bg-blue-600 text-white rounded-lg font-semibold hover:bg-blue-700 transition-colors"

View File

@@ -92,10 +92,10 @@ export const translations = {
}, },
more: "Ko'proq ko'rish", more: "Ko'proq ko'rish",
details: "Batafsil", details: "Batafsil",
empty_data:{ empty_data: {
description:"Mahsulot topilmadi!!!", description: "Mahsulot topilmadi!!!",
back:"Asosiy sahifaga qaytish" back: "Asosiy sahifaga qaytish",
} },
}, },
ru: { ru: {
@@ -195,5 +195,9 @@ export const translations = {
}, },
more: "Смотреть больше", more: "Смотреть больше",
details: "Подробнее", details: "Подробнее",
empty_data: {
description: "Товар не найден!!!",
back: "Вернуться на главную страницу",
},
}, },
}; };