"use client"; import { useConfiguratorStore, type DoorType, type GridType } from "@/lib/store"; import { useFormContext } from "@/components/offerte/form-context"; import { Check } from "lucide-react"; // ============================================ // DOOR TYPE ICONS (SVG) // ============================================ function TaatsIcon({ selected }: { selected: boolean }) { const stroke = selected ? "#C4D668" : "#1A2E2E"; const fill = selected ? "#C4D668" : "none"; return ( ); } function ScharnierIcon({ selected }: { selected: boolean }) { const stroke = selected ? "#C4D668" : "#1A2E2E"; const fill = selected ? "#C4D668" : "none"; return ( ); } function PaneelIcon({ selected }: { selected: boolean }) { const stroke = selected ? "#C4D668" : "#1A2E2E"; return ( ); } const doorTypeIcons: Record React.ReactElement> = { taats: TaatsIcon, scharnier: ScharnierIcon, paneel: PaneelIcon, }; // ============================================ // GRID PATTERN SVG ILLUSTRATIONS // ============================================ function GridSVG({ pattern, selected }: { pattern: GridType; selected: boolean }) { const stroke = selected ? "#C4D668" : "#1A2E2E"; const glass = selected ? "#C4D668" : "#e5e7eb"; const opacity = selected ? 0.15 : 0.3; const sw = 1.5; // Frame: outer rect with inner glass area const frame = (children: React.ReactNode) => ( {children} ); switch (pattern) { case "geen": return frame(null); case "2-vlak": return frame( ); case "3-vlak": return frame( <> > ); case "4-vlak": return frame( <> > ); case "6-vlak": return frame( <> > ); case "8-vlak": return frame( <> > ); case "kruis": return frame( <> > ); case "ongelijk-3": return frame( <> > ); case "boerderij": return frame( <> > ); case "herenhuis": return frame( <> > ); default: return frame(null); } } // ============================================ // DATA // ============================================ 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: GridType; label: string; description: string; }> = [ { value: "geen", label: "Geen", description: "Volledig vlak" }, { value: "2-vlak", label: "2-vlaks", description: "1 balk" }, { value: "3-vlak", label: "3-vlaks", description: "2 balken" }, { value: "4-vlak", label: "4-vlaks", description: "3 balken" }, { value: "kruis", label: "Kruis", description: "1H + 1V" }, { value: "6-vlak", label: "6-vlaks", description: "2H + 1V" }, { value: "8-vlak", label: "8-vlaks", description: "3H + 1V" }, { value: "ongelijk-3", label: "Ongelijk", description: "3 ongelijk" }, { value: "boerderij", label: "Boerderij", description: "2+2 onder" }, { value: "herenhuis", label: "Herenhuis", description: "3 horizontaal" }, ]; // ============================================ // MAIN COMPONENT // ============================================ export function StepProduct() { const { nextStep } = useFormContext(); const { doorType, gridType, setDoorType, setGridType } = useConfiguratorStore(); return ( {/* Door Type Selection */} 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 - 10 patterns */} Verdeling Kies het patroon van de glasverdeling. {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-1 py-3 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 patroon van de glasverdeling.