diff --git a/src/components/OffsetOrder.tsx b/src/components/OffsetOrder.tsx index 093f67e..bff8c37 100644 --- a/src/components/OffsetOrder.tsx +++ b/src/components/OffsetOrder.tsx @@ -1,6 +1,9 @@ import React, { useState, useEffect } from 'react'; import { Check, AlertCircle, ArrowLeft, Loader2, Globe2, TreePine, Waves, Factory, Wind, X } from 'lucide-react'; +<<<<<<< HEAD import { motion, AnimatePresence } from 'framer-motion'; +======= +>>>>>>> 96496350ee59fb2fd226eb340094130203514ab8 import { createOffsetOrder, getPortfolios } from '../api/wrenClient'; import type { CurrencyCode, OffsetOrder as OffsetOrderType, Portfolio, OffsetProject } from '../types'; import { currencies, formatCurrency, getCurrencyByCode } from '../utils/currencies'; @@ -56,6 +59,9 @@ export function OffsetOrder({ tons, monetaryAmount, onBack, calculatorType }: Pr company: '', message: `I would like to offset ${tons.toFixed(2)} tons of CO2 from my yacht's ${calculatorType} emissions.` }); + + // lightbox state + const [selectedProject, setSelectedProject] = useState(null); useEffect(() => { if (!config.wrenApiKey) { @@ -66,6 +72,19 @@ export function OffsetOrder({ tons, monetaryAmount, onBack, calculatorType }: Pr fetchPortfolio(); }, []); +// handle Escape key to close lightbox +useEffect(() => { + const onKey = (e: KeyboardEvent) => { + if (e.key === 'Escape') setSelectedProject(null); + }; + if (selectedProject) { + document.addEventListener('keydown', onKey); + } + return () => { + document.removeEventListener('keydown', onKey); + }; +}, [selectedProject]); + const fetchPortfolio = async () => { try { const allPortfolios = await getPortfolios(); @@ -322,6 +341,7 @@ export function OffsetOrder({ tons, monetaryAmount, onBack, calculatorType }: Pr

{portfolio.projects && portfolio.projects.length > 0 && ( +<<<<<<< HEAD setSelectedProject(project)} > +======= +
+ {portfolio.projects.map((project) => ( +
setSelectedProject(project)} + className="cursor-pointer bg-gray-50 rounded-lg p-4 hover:shadow-md transition-shadow" +> +>>>>>>> 96496350ee59fb2fd226eb340094130203514ab8
@@ -378,12 +407,56 @@ export function OffsetOrder({ tons, monetaryAmount, onBack, calculatorType }: Pr )} +<<<<<<< HEAD +======= + {/* lightbox modal */} + {selectedProject && ( +
setSelectedProject(null)} + > +
e.stopPropagation()} + > + +

+ {selectedProject.name} +

+ {selectedProject.imageUrl && ( + {selectedProject.name} + )} +

+ {selectedProject.description} +

+
+ Type: + {selectedProject.type} +
+
+ Price per ton: + ${selectedProject.pricePerTon.toFixed(2)} +
+
+
+ )} +
+>>>>>>> 96496350ee59fb2fd226eb340094130203514ab8 Portfolio Price per Ton: {renderPortfolioPrice(portfolio)}