2.2.4
Fix hover
This commit is contained in:
@@ -94,15 +94,17 @@
|
|||||||
background: transparent;
|
background: transparent;
|
||||||
border: 1px solid #c9b08a;
|
border: 1px solid #c9b08a;
|
||||||
color: #b09870;
|
color: #b09870;
|
||||||
transition: color 0.2s, border-color 0.2s;
|
transition: color 0.2s, border-color 0.2s, background-color 0.2s, filter 0.15s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.utci-day-tab + .utci-day-tab {
|
.utci-day-tab + .utci-day-tab {
|
||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Each tab's background is an inline per-day weather gradient, so we darken
|
||||||
|
the whole tab with a filter on hover (!important to beat the inline filter). */
|
||||||
.utci-day-tab:hover {
|
.utci-day-tab:hover {
|
||||||
color: #6b4f2a;
|
filter: brightness(0.93) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.utci-day-tab.active {
|
.utci-day-tab.active {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
// fetchedAt - Date the forecast data was last fetched or read from cache
|
// fetchedAt - Date the forecast data was last fetched or read from cache
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
import { useState, useEffect } from '../../vendor/preact-hooks.js';
|
import { useState, useEffect, useRef } from '../../vendor/preact-hooks.js';
|
||||||
|
|
||||||
const FIVE_MIN_MS = 5 * 60 * 1000;
|
const FIVE_MIN_MS = 5 * 60 * 1000;
|
||||||
const FIFTEEN_MIN_MS = 15 * 60 * 1000;
|
const FIFTEEN_MIN_MS = 15 * 60 * 1000;
|
||||||
@@ -127,6 +127,11 @@ export function useForecast(location) {
|
|||||||
const [now, setNow] = useState(new Date());
|
const [now, setNow] = useState(new Date());
|
||||||
const [fetchedAt, setFetchedAt] = useState(null);
|
const [fetchedAt, setFetchedAt] = useState(null);
|
||||||
|
|
||||||
|
// Mirrors the latest forecast so the loader's catch block can tell whether
|
||||||
|
// data is already on screen, even inside stale setInterval closures.
|
||||||
|
const forecastRef = useRef(null);
|
||||||
|
useEffect(() => { forecastRef.current = forecast; }, [forecast]);
|
||||||
|
|
||||||
// ─── FORECAST LOADER ──────────────────────────────────────────────
|
// ─── FORECAST LOADER ──────────────────────────────────────────────
|
||||||
//
|
//
|
||||||
// Waterfall:
|
// Waterfall:
|
||||||
@@ -134,7 +139,8 @@ export function useForecast(location) {
|
|||||||
// 2. Cache stale / missing → fetch main auto API
|
// 2. Cache stale / missing → fetch main auto API
|
||||||
// 3. Main API soil is null → try ICON for soil data
|
// 3. Main API soil is null → try ICON for soil data
|
||||||
// 4. ICON fails → fall back to stale cache (any age)
|
// 4. ICON fails → fall back to stale cache (any age)
|
||||||
// 5. No cache at all → show error
|
// 5. No cache but data shown → keep existing data (don't show error)
|
||||||
|
// 6. Nothing loaded at all → show error
|
||||||
//
|
//
|
||||||
async function loadForecast(loc) {
|
async function loadForecast(loc) {
|
||||||
const key = forecastCacheKey(loc);
|
const key = forecastCacheKey(loc);
|
||||||
@@ -178,8 +184,12 @@ export function useForecast(location) {
|
|||||||
if (staleCache) {
|
if (staleCache) {
|
||||||
setForecast(staleCache.data);
|
setForecast(staleCache.data);
|
||||||
setFetchedAt(new Date(staleCache.ts)); // old timestamp signals stale data
|
setFetchedAt(new Date(staleCache.ts)); // old timestamp signals stale data
|
||||||
|
} else if (forecastRef.current) {
|
||||||
|
// Step 5 — no cache (e.g. an auto-refresh cleared it first), but data
|
||||||
|
// is already on screen. Keep showing it rather than replacing the page
|
||||||
|
// with a transient network error.
|
||||||
} else {
|
} else {
|
||||||
setError(e.message); // Step 5 — nothing to fall back to
|
setError(e.message); // Step 6 — nothing loaded yet, surface the error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally { setLoading(false); }
|
finally { setLoading(false); }
|
||||||
|
|||||||
Reference in New Issue
Block a user