'use client'; import React, { useEffect, useState } from 'react'; import dynamic from 'next/dynamic'; import { useValidationStore } from '@/store/validation-store'; import { visualizationClient } from '@/lib/api/visualization-client'; const LeafletCompareMap = dynamic( () => import('./leaflet-compare-map'), { ssr: false, loading: () =>

Loading Comparison Map...

} ); export function ValidationViewer() { const { artifactId, groundTruthFileId, selectedVariable } = useValidationStore(); const [bounds, setBounds] = useState<[number, number, number, number] | undefined>(undefined); const [isBoundsLoading, setIsBoundsLoading] = useState(true); const varName = selectedVariable || "C13"; useEffect(() => { if (groundTruthFileId) { setIsBoundsLoading(true); visualizationClient.getBounds(groundTruthFileId, varName).then(res => { if (res.success && res.data && res.data.bounds) { const [[south, west], [north, east]] = res.data.bounds; setBounds([south, west, north, east]); } }).catch(console.error) .finally(() => setIsBoundsLoading(false)); } }, [groundTruthFileId, varName]); if (!artifactId || !groundTruthFileId) { return (

Missing alignment data.

); } if (isBoundsLoading) { return (

Fetching geographic coordinates...

); } const generatedUrl = visualizationClient.getLayerUrl(artifactId, varName, 0); const truthUrl = visualizationClient.getLayerUrl(groundTruthFileId, varName, 0); return (
Ground Truth (Left) AI Generated (Right)
); }