Skip to content

Commit 254619e

Browse files
committed
feat: add loading indicator for panorama chart
Show indeterminate progress bar while panorama data is loading. Uses existing map-progress CSS pattern with centered layout. Part of #772
1 parent 7e485e3 commit 254619e

2 files changed

Lines changed: 41 additions & 1 deletion

File tree

src/components/PanoramaChart.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ export function PanoramaChart({ isExpanded, onToggleExpanded, showExpandToggle =
249249
const [basePanorama, setBasePanorama] = useState<PanoramaResult | null>(null);
250250
const [detailPanoramas, setDetailPanoramas] = useState<PanoramaResult[]>([]);
251251
const [panoramasReadyEpoch, setPanoramasReadyEpoch] = useState(0);
252+
const [panoramaLoading, setPanoramaLoading] = useState(false);
252253

253254
const selectedSiteEffective = useMemo(() => {
254255
if (!selectedSite) return null;
@@ -353,9 +354,12 @@ export function PanoramaChart({ isExpanded, onToggleExpanded, showExpandToggle =
353354
if (!selectedSiteEffective || !selectedNetwork) {
354355
setBasePanorama(null);
355356
setDetailPanoramas([]);
357+
setPanoramaLoading(false);
356358
return;
357359
}
358360

361+
setPanoramaLoading(true);
362+
359363
const effectiveLink = links[0]
360364
? {
361365
...links[0],
@@ -483,6 +487,7 @@ export function PanoramaChart({ isExpanded, onToggleExpanded, showExpandToggle =
483487
}
484488
setBasePanorama(result);
485489
setPanoramasReadyEpoch(Date.now());
490+
setPanoramaLoading(false);
486491
},
487492
} satisfies LatestOnlyTask);
488493
}
@@ -525,6 +530,7 @@ export function PanoramaChart({ isExpanded, onToggleExpanded, showExpandToggle =
525530
return next.slice(-12);
526531
});
527532
setPanoramasReadyEpoch(Date.now());
533+
setPanoramaLoading(false);
528534
},
529535
} satisfies LatestOnlyTask);
530536
}
@@ -1470,7 +1476,18 @@ export function PanoramaChart({ isExpanded, onToggleExpanded, showExpandToggle =
14701476
ref={chartHostRef}
14711477
>
14721478
{!geometry || !panorama ? (
1473-
<div className="chart-empty" aria-hidden="true" />
1479+
panoramaLoading ? (
1480+
<div className="chart-empty chart-loading">
1481+
<div className="panorama-loading-indicator">
1482+
<div className="map-progress-track panorama-loading-track">
1483+
<div className="map-progress-fill-indeterminate" />
1484+
</div>
1485+
<span className="panorama-loading-text">Loading panorama...</span>
1486+
</div>
1487+
</div>
1488+
) : (
1489+
<div className="chart-empty" aria-hidden="true" />
1490+
)
14741491
) : (
14751492
<>
14761493
<canvas aria-hidden className="panorama-terrain-canvas" ref={terrainCanvasRef} />

src/index.css

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2770,6 +2770,29 @@ html.panorama-gesture-lock body {
27702770
font-size: 0.9rem;
27712771
}
27722772

2773+
.chart-loading {
2774+
display: grid;
2775+
place-items: center;
2776+
min-height: 120px;
2777+
row-gap: 12px;
2778+
}
2779+
2780+
.panorama-loading-indicator {
2781+
display: flex;
2782+
flex-direction: column;
2783+
align-items: center;
2784+
row-gap: 8px;
2785+
}
2786+
2787+
.panorama-loading-track {
2788+
width: 120px;
2789+
}
2790+
2791+
.panorama-loading-text {
2792+
color: var(--muted);
2793+
font-size: 0.85rem;
2794+
}
2795+
27732796
.chart-grid line {
27742797
stroke: color-mix(in srgb, var(--border) 82%, transparent);
27752798
stroke-width: 1;

0 commit comments

Comments
 (0)