"use client"; import { useConfiguratorStore, type DoorType } from "@/lib/store"; import { useFormContext } from "@/components/offerte/form-context"; import { Check } from "lucide-react"; // Door type visual icons (inline SVGs) function TaatsIcon({ selected }: { selected: boolean }) { const stroke = selected ? "#C4D668" : "#1A2E2E"; const fill = selected ? "#C4D668" : "none"; return ( {/* Door frame */} {/* Glass */} {/* Pivot point (center) */} {/* Rotation arrow */} ); } function ScharnierIcon({ selected }: { selected: boolean }) { const stroke = selected ? "#C4D668" : "#1A2E2E"; const fill = selected ? "#C4D668" : "none"; return ( {/* Door frame */} {/* Glass */} {/* Hinge dots on left side */} {/* Rotation arrow from hinge side */} ); } function PaneelIcon({ selected }: { selected: boolean }) { const stroke = selected ? "#C4D668" : "#1A2E2E"; return ( {/* Door frame */} {/* Glass */} {/* Fixed indicator - lock symbol */} ); } const doorTypeIcons: Record React.ReactElement> = { taats: TaatsIcon, scharnier: ScharnierIcon, paneel: PaneelIcon, }; // Grid type visual illustrations (CSS-based rectangles with dividers) function GridIllustration({ dividers, selected }: { dividers: number; selected: boolean }) { const borderColor = selected ? "border-[#C4D668]" : "border-[#1A2E2E]/40"; const dividerBg = selected ? "bg-[#C4D668]" : "bg-[#1A2E2E]/30"; const glassBg = selected ? "bg-[#C4D668]/10" : "bg-gray-100"; return ( {dividers === 0 && ( )} {dividers > 0 && Array.from({ length: dividers + 1 }).map((_, i) => ( {i > 0 && } )) } ); } const doorTypes: Array<{ value: DoorType; label: string; description: string; }> = [ { value: "taats", label: "Taatsdeur", description: "Pivoterende deur", }, { value: "scharnier", label: "Scharnierdeur", description: "Zijscharnieren", }, { value: "paneel", label: "Vast Paneel", description: "Geen beweging", }, ]; const gridTypes: Array<{ value: "3-vlak" | "4-vlak" | "geen"; label: string; description: string; dividers: number; }> = [ { value: "geen", label: "Geen", description: "Volledig vlak", dividers: 0 }, { value: "3-vlak", label: "3-vlaks", description: "2 balken", dividers: 2 }, { value: "4-vlak", label: "4-vlaks", description: "3 balken", dividers: 3 }, ]; export function StepProduct() { const { nextStep } = useFormContext(); const { doorType, gridType, setDoorType, setGridType } = useConfiguratorStore(); return ( {/* Door Type Selection - Visual Tiles */} Kies uw deurtype Selecteer het type stalen deur dat u wilt configureren. {doorTypes.map((type) => { const selected = doorType === type.value; const IconComponent = doorTypeIcons[type.value]; return ( setDoorType(type.value)} className={`group relative flex flex-col items-center rounded-xl border-2 px-2 py-4 transition-all ${ selected ? "border-[#C4D668] bg-[#1A2E2E] text-white ring-2 ring-[#C4D668] shadow-lg shadow-[#C4D668]/20" : "border-gray-200 bg-white text-gray-900 hover:border-[#1A2E2E]/20 hover:shadow-md" }`} > {type.label} {type.description} {selected && ( )} ); })} {/* Grid Type Selection - Visual Tiles */} Verdeling Kies het aantal horizontale vlakken. {gridTypes.map((type) => { const selected = gridType === type.value; return ( setGridType(type.value)} className={`group relative flex flex-col items-center rounded-xl border-2 px-2 py-4 transition-all ${ selected ? "border-[#C4D668] bg-[#1A2E2E] text-white ring-2 ring-[#C4D668] shadow-lg shadow-[#C4D668]/20" : "border-gray-200 bg-white text-gray-900 hover:border-[#1A2E2E]/20 hover:shadow-md" }`} > {type.label} {type.description} {selected && ( )} ); })} {/* Continue Button */} nextStep()} className="w-full rounded-xl bg-[#C4D668] py-3 font-bold text-[#1A2E2E] transition-all hover:bg-[#b5c75a]" > Volgende stap ); }
Selecteer het type stalen deur dat u wilt configureren.
{type.description}
Kies het aantal horizontale vlakken.