Fix state persistence: save state before navigation
All checks were successful
Build and Push Docker Images / docker (push) Successful in 47s

Issue: Calculator inputs were not being saved before navigating to checkout
because navigation happened synchronously before useEffect could run.

Solution: Call saveState() directly in handleCalculate before navigation
in both TripCalculator and MobileCalculator components.

This ensures calculator inputs (fuel amount, distance, etc.) are properly
preserved when users click "Calculate Impact" and then cancel checkout.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Matt 2025-10-30 14:02:28 +01:00
parent 5e642794d8
commit 043cdf07b3
2 changed files with 28 additions and 2 deletions

View File

@ -82,6 +82,19 @@ export function MobileCalculator({ vesselData, onOffsetClick, onBack }: Props) {
const handleCalculate = useCallback((e: React.FormEvent) => { const handleCalculate = useCallback((e: React.FormEvent) => {
e.preventDefault(); e.preventDefault();
// Save state before setting results
saveState({
calculationType,
distance,
speed,
fuelRate,
fuelAmount,
fuelUnit,
customAmount,
offsetPercentage: 100,
});
if (calculationType === 'distance') { if (calculationType === 'distance') {
const estimate = calculateTripCarbon( const estimate = calculateTripCarbon(
vesselData, vesselData,
@ -99,7 +112,7 @@ export function MobileCalculator({ vesselData, onOffsetClick, onBack }: Props) {
co2Emissions co2Emissions
}); });
} }
}, [calculationType, distance, speed, fuelRate, fuelAmount, fuelUnit, vesselData]); }, [calculationType, distance, speed, fuelRate, fuelAmount, fuelUnit, customAmount, vesselData, saveState]);
const handleCustomAmountChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => { const handleCustomAmountChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {

View File

@ -66,6 +66,19 @@ export function TripCalculator({ vesselData, onOffsetClick }: Props) {
const handleCalculate = useCallback((e: React.FormEvent) => { const handleCalculate = useCallback((e: React.FormEvent) => {
e.preventDefault(); e.preventDefault();
// Save state before navigating
saveState({
calculationType,
distance,
speed,
fuelRate,
fuelAmount,
fuelUnit,
customAmount,
offsetPercentage: 100,
});
if (calculationType === 'distance') { if (calculationType === 'distance') {
const estimate = calculateTripCarbon( const estimate = calculateTripCarbon(
vesselData, vesselData,
@ -80,7 +93,7 @@ export function TripCalculator({ vesselData, onOffsetClick }: Props) {
// Immediately navigate to projects page without showing results // Immediately navigate to projects page without showing results
onOffsetClick?.(co2Emissions); onOffsetClick?.(co2Emissions);
} }
}, [calculationType, distance, speed, fuelRate, fuelAmount, fuelUnit, vesselData, onOffsetClick]); }, [calculationType, distance, speed, fuelRate, fuelAmount, fuelUnit, customAmount, vesselData, onOffsetClick, saveState]);
const handleCustomAmountChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => { const handleCustomAmountChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {