From 4a67425a6b7d1a353be22b9459f5b47d7b08568e Mon Sep 17 00:00:00 2001 From: "nabijonovdavronbek619@gmail.com" Date: Mon, 26 Jan 2026 19:13:57 +0500 Subject: [PATCH] products and product/slug page done --- app/products/[slug]/page.tsx | 39 +++++++ app/products/page.tsx | 11 ++ components/layout/navbar.tsx | 4 +- components/pages/products/index.ts | 5 + components/pages/products/productBanner.tsx | 43 +++++++ components/pages/products/productCard.tsx | 70 ++++++++++++ components/pages/products/products.tsx | 24 ++++ components/pages/products/slug/features.tsx | 27 +++++ components/pages/products/slug/rightSide.tsx | 112 +++++++++++++++++++ components/pages/products/slug/slider.tsx | 59 ++++++++++ lib/demoData.ts | 30 +++++ public/images/products/products.webp | Bin 0 -> 17092 bytes 12 files changed, 422 insertions(+), 2 deletions(-) create mode 100644 app/products/[slug]/page.tsx create mode 100644 app/products/page.tsx create mode 100644 components/pages/products/index.ts create mode 100644 components/pages/products/productBanner.tsx create mode 100644 components/pages/products/productCard.tsx create mode 100644 components/pages/products/products.tsx create mode 100644 components/pages/products/slug/features.tsx create mode 100644 components/pages/products/slug/rightSide.tsx create mode 100644 components/pages/products/slug/slider.tsx create mode 100644 lib/demoData.ts create mode 100644 public/images/products/products.webp diff --git a/app/products/[slug]/page.tsx b/app/products/[slug]/page.tsx new file mode 100644 index 0000000..df3fe0b --- /dev/null +++ b/app/products/[slug]/page.tsx @@ -0,0 +1,39 @@ +"use client"; + +import { DATA } from "@/lib/demoData"; +import { Features, RightSide, SliderComp } from "@/components/pages/products"; + +export default function SlugPage() { + const statusColor = + DATA[0].status === "full" + ? "text-green-500" + : DATA[0].status === "empty" + ? "text-red-600" + : "text-yellow-800"; + + const statusText = + DATA[0].status === "full" + ? "Sotuvda mavjud" + : DATA[0].status === "empty" + ? "Sotuvda qolmagan" + : "Buyurtma asosida"; + + return ( +
+
+
+ + + +
+ +
+
+ ); +} diff --git a/app/products/page.tsx b/app/products/page.tsx new file mode 100644 index 0000000..4c5e657 --- /dev/null +++ b/app/products/page.tsx @@ -0,0 +1,11 @@ +import { ProductBanner, Products } from "@/components/pages/products"; +import React from "react"; + +export default function Page() { + return ( +
+ + +
+ ); +} diff --git a/components/layout/navbar.tsx b/components/layout/navbar.tsx index 917f0b5..14f4898 100644 --- a/components/layout/navbar.tsx +++ b/components/layout/navbar.tsx @@ -71,7 +71,7 @@ export function Navbar() { Services Blog @@ -80,7 +80,7 @@ export function Navbar() { )} - + Products diff --git a/components/pages/products/index.ts b/components/pages/products/index.ts new file mode 100644 index 0000000..accacc6 --- /dev/null +++ b/components/pages/products/index.ts @@ -0,0 +1,5 @@ +export { ProductBanner } from "./productBanner"; +export { Products } from "./products"; +export { SliderComp } from "./slug/slider"; +export { RightSide } from "./slug/rightSide"; +export { Features } from "./slug/features"; diff --git a/components/pages/products/productBanner.tsx b/components/pages/products/productBanner.tsx new file mode 100644 index 0000000..29607f6 --- /dev/null +++ b/components/pages/products/productBanner.tsx @@ -0,0 +1,43 @@ +import DotAnimatsiya from "@/components/dot/DotAnimatsiya"; + +export function ProductBanner() { + return ( +
+ {/* Background Image */} +
+ + {/* Gradient Overlay - Bottom-left to top-right */} +
+ +
+
+
+ +

+ Ignum technology
At The Ready +

+
+
+ It emphasizes that these firefighters are there not just as public + servants but as a vital part of the community. +
+
+
+
+ ); +} diff --git a/components/pages/products/productCard.tsx b/components/pages/products/productCard.tsx new file mode 100644 index 0000000..730d699 --- /dev/null +++ b/components/pages/products/productCard.tsx @@ -0,0 +1,70 @@ +"use client"; + +import Image from "next/image"; +import Link from "next/link"; +import { ArrowRight } from "lucide-react"; + +interface ProductCardProps { + title: string; + name: string; + image: string; + slug: string; + status: "full" | "empty" | "withOrder"; +} + +export default function ProductCard({ + title, + name, + image, + slug, + status, +}: ProductCardProps) { + const statusColor = + status === "full" + ? "text-green-500" + : status === "empty" + ? "text-red-600" + : "text-yellow-800"; + + const statusText = + status === "full" + ? "Sotuvda mavjud" + : status === "empty" + ? "Sotuvda qolmagan" + : "Buyurtma asosida"; + return ( + +
+ {/* Image Container */} +
+ {title} +
+ + {/* Content Container */} +
+ {/* Title */} +

+ {title} +

+ + {/* Meta Information */} +
+ {name} + {statusText} +
+ + {/* Read More Link */} + + Read More + + +
+
+ + ); +} diff --git a/components/pages/products/products.tsx b/components/pages/products/products.tsx new file mode 100644 index 0000000..d8804e9 --- /dev/null +++ b/components/pages/products/products.tsx @@ -0,0 +1,24 @@ +import ProductCard from "./productCard"; + +export function Products() { + return ( +
+
+
+ {Array(9) + .fill(null) + .map((_, index) => ( + + ))} +
+
+
+ ); +} diff --git a/components/pages/products/slug/features.tsx b/components/pages/products/slug/features.tsx new file mode 100644 index 0000000..de8c8ea --- /dev/null +++ b/components/pages/products/slug/features.tsx @@ -0,0 +1,27 @@ +export function Features({ features }: { features: string[] }) { + return ( + + + + + + + + {features.map((feature, index) => ( + + + + ))} + +
+ Feature +
+ {feature} +
+ ); +} diff --git a/components/pages/products/slug/rightSide.tsx b/components/pages/products/slug/rightSide.tsx new file mode 100644 index 0000000..e2c6616 --- /dev/null +++ b/components/pages/products/slug/rightSide.tsx @@ -0,0 +1,112 @@ + +import { Facebook } from "lucide-react"; + +const socialLinks = [ + { name: "telegram", icon: "✈️", color: "#0088cc" }, + { name: "facebook", icon: , color: "#1877F2" }, + { name: "odnoklassniki", icon: "ok", color: "#ED7100" }, + { name: "vkontakte", icon: "VK", color: "#0077FF" }, + { name: "twitter", icon: "𝕏", color: "#1DA1F2" }, + { name: "whatsapp", icon: "W", color: "#25D366" }, +]; + +interface RightSideProps { + title: string; + name: string; + description: string; + statusText: string; + statusColor: string; +} + +export function RightSide({ + title, + name, + description, + statusColor, + statusText, +}: RightSideProps) { + return ( +
+ {/* Title */} +

+ {title} +

+ + {/* Article ID */} +
+

+ Artikul: + {name} +

+
+ + {/* Status Badge */} +
+ + {statusText} + +
+ + {/* description */} +
+

+ {description} +

+
+ + {/* Price Section */} +
+

+ 17.00$ +

+ + {/* Action Buttons */} +
+ {/* */} + + {/* */} +
+ + {/* Social Share Icons */} +
+
+ {socialLinks.map((social) => ( + + {social.icon} + + ))} +
+
+
+
+ ); +} diff --git a/components/pages/products/slug/slider.tsx b/components/pages/products/slug/slider.tsx new file mode 100644 index 0000000..70579ad --- /dev/null +++ b/components/pages/products/slug/slider.tsx @@ -0,0 +1,59 @@ +import { Swiper, SwiperSlide } from "swiper/react"; +import { Navigation } from "swiper/modules"; +import "swiper/css"; +import "swiper/css/navigation"; +import { DATA } from "@/lib/demoData"; + +// The custom CSS selectors for navigation +const navigationPrevEl = ".custom-swiper-prev"; +const navigationNextEl = ".custom-swiper-next"; + +export function SliderComp({ imgs }: { imgs: string[] }) { + return ( +
+
+ + {imgs.map((image, index) => ( + + {`${DATA[0].title} + + ))} + + {/* Custom buttons */} + + +
+
+ ); +} diff --git a/lib/demoData.ts b/lib/demoData.ts new file mode 100644 index 0000000..b44bcd3 --- /dev/null +++ b/lib/demoData.ts @@ -0,0 +1,30 @@ +export const DATA = [ + { + name: "P-0834405", + title: "Elektr yong'in detektori-Ypres ver.3", + status: "full", + description: `Xavfsizlik va yong'in qo'l detektori barcha turdagi qabul qilish va nazorat qilish moslamalari bilan ishlash uchun mo'ljallangan. + Detektor GOST R 53325-2012 bo'yicha a sinfiga mos keladi va himoya qopqog'ini ochib, qo'zg'aysan elementini - ishning markazidagi tugmachani + bosgandan so'ng signal signalini hosil qiladi.Detektor korpusining kichik qalinligi uni shikastlanishdan himoya qiladi, tashqi ko'rinishini + yaxshilaydi va faqat o'rnatish uchun qo'shimcha variantni ishlatishga imkon beradi. Elektr detektori-IPR ver.3 faqat HP signal kabellarida ishlashni ta'minlaydi. + Detektorning navbatchilik rejimi qizil rangdagi ko'rinishlar bilan ko'rsatiladi, "yong'in" rejimi - qizil indikatorni doimiy ravishda yoqish orqali. + Tugmani bosgandan va mahkamlagandan so'ng uni dastlabki holatiga qulay tarzda qaytarish( asbob bilan, maxsus kalitsiz); etkazib berish to'plamida shaffof himoya + qopqog'ining mavjudligi; tizimga texnik xizmat ko'rsatishni soddalashtirish uchun muhrlash qobiliyati.`, + features: [ + "Signal pallasida besleme zo'riqishida-9 + 28V;", + "Kutish rejimidagi iste'mol oqimi-40 mkA;", + 'Detektor orqali "yong\'in" rejimidagi oqim - 22 ma bilan cheklanishi kerak;', + "Harorat oralig'i: -40°C dan +70°C gacha;", + "Olchamlari-108x100x27 mm;", + "Og'irligi-0,11 kg;", + "Muvaffaqiyatsizlik uchun o'rtacha ish vaqti - 60 000 soat;", + "Detektorning ishlash muddati 10 yil.", + ], + images: [ + "/images/products/products.webp", + "/images/products/products.webp", + "/images/products/products.webp", + "/images/products/products.webp", + ], + }, +]; \ No newline at end of file diff --git a/public/images/products/products.webp b/public/images/products/products.webp new file mode 100644 index 0000000000000000000000000000000000000000..6f3c0ecbb9b07ec6579c8a359b556e655ecef099 GIT binary patch literal 17092 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 rTKn3WgC(*ckH}|t6>W^+oFxk z#~Yr999?Q1&Fz{IO>vc&TJ<3Z0)XmT)ZNvfiN)O~-%Ie%Phjb??ds#tS{_c;pW;Id^f6VKUaM#e+ z);aO^e6Pkf`W=ARMu>jUTdh_sLLG(TI?kL)aY<1cN+D8H%s$CV=xyd*g=aU-h7dr$ zBRmj=Vpi&3V+>JsLUD9mlC$!mSH?J+VMqd;GT`aO=x(0u$!+)7G3E4b@dLAKfL?hd zWRp={wj~GVce@=74uYJ4jjh7xJtvqiI}^_SPnmDFcCnHtWo;-*~p-?Mn;z z?gM#eba%g3>dYfDtwEXN2gjo_IARn`U#*7p=@w!(oiCs0BsnJISg3;N1@Y5J%!KS*+^J^AtfK z$xfX&X2op-!y}Y!Xer{gz<`Kt=%A*-eNnMUNog?P;PPajN@f@6H;_r-qIAZ& zIv|#$iET10tC^oUYh-$DV3JK62kyH%P-3#J%n#|`R{&C${&xCX#6iexuUgTmsq2we z5IT=m+3;2fhV4&4lR=s-;RY)W#CiaFA;tKvUZtdP@OZPa`filbp`yH6R2O0g@YV$| ziP=X=;b{FiotV0C^j|jjo~Hq##0SkP*%?iDL;5uo@Eg}(HhE`MTX!myso^Q7da29rpC?xBuMG?H4#Uu8% zylpLdPS|t){+fQBOTNnqU~EajRIndX&6$MUWe?c2kwrIyaU1K-7DW5`>F7I*)6i1!>>!3yz`T}pUX~cNyx4+|uKe-LXPFW*wC6LdL5$<)D-^Lr&ah&JEQ$$KrGdyK%?mw1`PSN1AiYg&a|ARNb$2!EH zw5d!sXHU=x;T^?yXJr`Pa*UHWj~`Ps#XBwFBOh9v6o8Yn;ONxH5wfHPe6uy=Zp!Zx zz7_LUT$bjS$rzgu%1ImFO|D@d% zj00-6s$Ys##vyC7(BdO;K05Gf<^hHRdHuE}B^JVrDvnpPYJp*` zsQPD7^-2IybY|Omp+u!`{)pUL6V$cM~fjj^bq-zhpzlAO|H z0W5IxH^p;Ux5rl{Ro)}pWU~ZjO_}}2bDF&>(#3D?!6r`+8uMj!B%o_{T03!D!cT|!_I zx*^;Vxkm#9WUu`SC!30O>t_)^3gn20QEj2COlteAqq4@5->ES`EyQr2NH`=jqwlJP zCp#TRE0jek#JnXi+iiC>n&dNcF?{*aidq6{eXc$`u!wUFqFf-OBI&tKDt87r4J>0A zg1+e;dz=C9<8r-D7l5-MXPzA%=aFWBRu($#cRANF(4kU&a`(sMaUdRE)vO2OduPKK z$-`+q`vX2Z*k|J==vJwouxwNKn|``_5Y)9>(Ch+d2!;o}L|CHQ3|&q}Qi+KM@<1Pu zpe<73zGmGCvN{fWD~<>cIgAOQ!LV!Zuxa$qxFJlr7^If7*-g?Zk88?t8M?`n^=v#! z%eYF#qu6z>uDFh#B(A}6DZI)uO((N6?+n5?27&++b4`E_Mp2NF$utH>2Omr