From 1319aad9b6c02e137c7f294cc8c6ce5dc80c4260 Mon Sep 17 00:00:00 2001 From: Vula Builder Date: Tue, 15 Sep 2026 18:02:57 +0000 Subject: [PATCH] Deploy --- .../sections/ChiropracticServicesSection.tsx | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 src/components/sections/ChiropracticServicesSection.tsx diff --git a/src/components/sections/ChiropracticServicesSection.tsx b/src/components/sections/ChiropracticServicesSection.tsx new file mode 100644 index 0000000..b0a1842 --- /dev/null +++ b/src/components/sections/ChiropracticServicesSection.tsx @@ -0,0 +1,143 @@ +'use client' + +import Image from "next/image" +import Link from "next/link" +import { Activity, ArrowRight } from 'lucide-react' +import { useProducts } from "@/hooks/useProducts" +import Button from "@/components/ui/Button" +import { Card } from "@/components/ui/Card" + +const CURRENCY_SYMBOLS: Record = { + zar: "R", + usd: "$", + eur: "€", + gbp: "£", + kes: "KSh", + ngn: "₦", + ghs: "₵", +} + +const formatPrice = (amount: number, code?: string) => { + const symbol = CURRENCY_SYMBOLS[(code ?? "zar").toLowerCase()] ?? (code ? code.toUpperCase() : "R") + return symbol + (amount / 100).toFixed(0) +} + +const conditions = [ + "Neck, back and joint pain", + "Headaches and migraines", + "Nerve impingement", + "Sports and accident recovery", + "Spinal decompression", + "Fibromyalgia and infant colic", +] + +const skeletonKeys = ["one", "two", "three", "four"] + +export default function ChiropracticServicesSection() { + const { products, loading } = useProducts(8) + + return ( +
+
+
+

Services

+

+ A plan shaped by your body, not a queue +

+

+ Book the appointment that fits. Every session opens with a proper diagnosis and closes + with something you can do at home before the next visit. +

+
+ +
+ {conditions.map((condition) => ( + + + {condition} + + ))} +
+ + {loading ? ( +
+ {skeletonKeys.map((key) => ( +
+
+
+
+
+
+
+
+ ))} +
+ ) : ( +
+ {products.map((service) => { + const price = service.variants?.[0]?.prices?.[0] + return ( + + +
+ {service.thumbnail ? ( + {service.title} + ) : ( +
+ +
+ )} +
+
+

{service.title}

+ {service.description ? ( +

+ {service.description} +

+ ) : null} +
+ {price ? ( + + {formatPrice(price.amount, price.currency_code)} + + ) : ( + Enquire at booking + )} + + Book + + +
+
+ +
+ ) + })} +
+ )} + +
+

+ Choose a time online — the practice confirms it with you. Babies from six weeks, + pregnant moms, athletes and desk workers are all welcome. +

+ +
+
+
+ ) +} \ No newline at end of file