/** * HailRiskStep — Screen 6 "Hail risk" (spec §6). * Runs geocode → /api/storm-history → Poisson model, freezes the snapshot into * the session (spec §12), and renders the historical-only risk card + map. */ import React, { useEffect } from 'react'; import { Loader2, AlertCircle } from 'lucide-react'; import { useEstimateWizard } from '../../EstimateWizardContext'; import { useWizardHailRisk } from '../../hooks/useWizardHailRisk'; import PropertyMap from '../PropertyMap'; import HailRiskSnapshot from '../HailRiskSnapshot'; const HailRiskStep = () => { const { inputs, session, patchSession, tenantConfig, logEvent } = useEstimateWizard(); // Reuse a previously frozen snapshot if the user navigates back/forward. const alreadyHave = !!session.hailSnapshot; const { loading, error, property, snapshot } = useWizardHailRisk({ address: inputs.address, property: session.property, enabled: !alreadyHave, stormSettings: tenantConfig.stormSettings, }); // Freeze property + snapshot into the session once resolved. useEffect(() => { if (alreadyHave) return; if (snapshot && property) { patchSession({ property, hailSnapshot: snapshot }); logEvent('hail_snapshot_generated', { exposureTier: snapshot.exposureTier, p10Base: snapshot.probability10yr.base, confidence: snapshot.confidence, }); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [snapshot, property, alreadyHave]); const shownProperty = session.property || property; const shownSnapshot = session.hailSnapshot || snapshot; if (loading && !shownSnapshot) { return (
Checking historical storm reports for your area…
Storm history unavailable
We couldn’t load storm data right now — your rep will review local hail history during your visit. You can still continue.