From bf38357c74ec9071af91e31701f9bb37265f40ca Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 3 Jun 2025 15:21:29 +0200 Subject: [PATCH] updates --- src/components/OffsetOrder.tsx | 392 +++++++++++++++------------------ 1 file changed, 179 insertions(+), 213 deletions(-) diff --git a/src/components/OffsetOrder.tsx b/src/components/OffsetOrder.tsx index e1e0e9f..b53fe37 100644 --- a/src/components/OffsetOrder.tsx +++ b/src/components/OffsetOrder.tsx @@ -40,207 +40,6 @@ const ProjectTypeIcon = ({ project }: ProjectTypeIconProps) => { } }; -// Project card component to improve readability and ensure consistent behavior -const ProjectCard = ({ - project, - index, - onSelect -}: { - project: OffsetProject; - index: number; - onSelect: (project: OffsetProject) => void; -}) => { - // Handler to ensure event propagation is stopped correctly - const handleClick = (e: React.MouseEvent) => { - e.preventDefault(); - e.stopPropagation(); - console.log('Project clicked:', project.name); - onSelect(project); - }; - - return ( - -
-
- -

{project.name}

-
- {project.percentage && ( - - {(project.percentage * 100).toFixed(1)}% - - )} -
- {project.imageUrl && ( -
- {project.name} -
- )} -

- {project.shortDescription || project.description} -

-
-
- Price per ton: - - ${project.pricePerTon.toFixed(2)} - -
-
-
- Click for details -
-
- ); -}; - -// Lightbox modal component -const ProjectLightbox = ({ - project, - onClose -}: { - project: OffsetProject | null; - onClose: () => void; -}) => { - // Close on Escape key - useEffect(() => { - const handleKeyDown = (e: KeyboardEvent) => { - if (e.key === 'Escape') onClose(); - }; - - window.addEventListener('keydown', handleKeyDown); - return () => window.removeEventListener('keydown', handleKeyDown); - }, [onClose]); - - // Prevent body scrolling when modal is open - useEffect(() => { - document.body.style.overflow = 'hidden'; - return () => { - document.body.style.overflow = 'auto'; - }; - }, []); - - if (!project) return null; - - return ( -
- {/* Backdrop */} - ))} )} @@ -621,8 +476,119 @@ export function OffsetOrder({ tons, monetaryAmount, onBack, calculatorType }: Pr ) : null} - {/* Project Lightbox Modal - Rendered directly without AnimatePresence for better compatibility */} - {selectedProject && } + {/* Debug info */} + {selectedProject && ( +
+ Selected: {selectedProject.name} +
+ )} + + {/* Project Lightbox Modal */} + + {selectedProject && ( + handleCloseLightbox(e)} + initial={{ opacity: 0 }} + animate={{ opacity: 1 }} + exit={{ opacity: 0 }} + > + {/* Modal Content */} +
e.stopPropagation()} + > + {/* Close Button */} + + + {/* Project Image */} + {selectedProject.imageUrl && ( +
+ {selectedProject.name} +
+
+

{selectedProject.name}

+
+ + {selectedProject.type || 'Environmental Project'} +
+
+
+ )} + + {/* Project Details */} +
+ {!selectedProject.imageUrl && ( + <> +

{selectedProject.name}

+
+ + {selectedProject.type || 'Environmental Project'} +
+ + )} + +

+ {selectedProject.description || selectedProject.shortDescription} +

+ +
+
+

Price per Ton

+

${selectedProject.pricePerTon.toFixed(2)}

+
+ {selectedProject.percentage && ( +
+

Portfolio Allocation

+

{(selectedProject.percentage * 100).toFixed(1)}%

+
+ )} +
+ + {(selectedProject.location || selectedProject.verificationStandard) && ( +
+ {selectedProject.location && ( +
+ Location: + {selectedProject.location} +
+ )} + {selectedProject.verificationStandard && ( +
+ Verification Standard: + {selectedProject.verificationStandard} +
+ )} +
+ )} + + {selectedProject.impactMetrics && selectedProject.impactMetrics.co2Reduced > 0 && ( +
+

Impact Metrics

+

+ {selectedProject.impactMetrics.co2Reduced.toLocaleString()} tons CO₂ reduced +

+
+ )} +
+
+ + )} + ); }