"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 ( ); })}
{/* Grid Type Selection - 10 patterns */}

Verdeling

Kies het patroon van de glasverdeling.

{gridTypes.map((type) => { const selected = gridType === type.value; return ( ); })}
{/* Continue Button */}
); }