fix: all-day label top-aligned, weather 502 silent, toggle consistency

- All-day label column uses flex-start so label is visible in small area
- Weather API returns empty data (200) instead of 502 when forecast range
  is out of bounds, suppressing console noise on future/past navigation
- QuickSettings toggles for project icons and checkboxes now use effective
  (per-view-aware) value, consistent with other toggles

v1.81.13
This commit is contained in:
mARTin 2026-04-02 13:10:25 +02:00
parent 091004e87e
commit 86c462c920
3 changed files with 7 additions and 6 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "my-weekly-todo-list", "name": "my-weekly-todo-list",
"version": "1.81.12", "version": "1.81.13",
"description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view", "description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -40,7 +40,8 @@ export async function GET(request: NextRequest) {
const res = await fetch(url, { next: { revalidate: 900 } }); const res = await fetch(url, { next: { revalidate: 900 } });
if (!res.ok) { if (!res.ok) {
return NextResponse.json({ error: 'Weather API failed' }, { status: 502 }); // Silently return empty data (e.g. date out of forecast range)
return NextResponse.json({ hourly: {} });
} }
const raw = await res.json(); const raw = await res.json();

View File

@ -5208,10 +5208,10 @@ export default function WeeklyView() {
display: "flex", display: "flex",
flexDirection: "column", flexDirection: "column",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "flex-start",
cursor: "pointer", cursor: "pointer",
borderRight: "1px solid var(--weekly-border)", borderRight: "1px solid var(--weekly-border)",
padding: "2px 4px", padding: "4px 4px 2px",
gap: "0px", gap: "0px",
marginLeft: "-1px", marginLeft: "-1px",
position: "relative", position: "relative",
@ -5494,13 +5494,13 @@ export default function WeeklyView() {
</div> </div>
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}> <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
<span style={{ fontSize: "0.75rem", fontWeight: 600, color: darkMode ? "#9ca3af" : "#6b7280" }}>{profile.language === "de" ? "Checkboxen" : "Checkboxes"}</span> <span style={{ fontSize: "0.75rem", fontWeight: 600, color: darkMode ? "#9ca3af" : "#6b7280" }}>{profile.language === "de" ? "Checkboxen" : "Checkboxes"}</span>
<button onClick={() => { const v = !profile.showTaskCheckboxes; setProfile({ ...profile, showTaskCheckboxes: v }); saveSetting("showTaskCheckboxes", v); }} style={{ background: "none", border: "none", cursor: "pointer", padding: "2px", color: darkMode ? "#9ca3af" : "#6b7280" }}> <button onClick={() => { const v = !effectiveShowTaskCheckboxes; saveSetting("showTaskCheckboxes", v); }} style={{ background: "none", border: "none", cursor: "pointer", padding: "2px", color: darkMode ? "#9ca3af" : "#6b7280" }}>
{effectiveShowTaskCheckboxes ? <Eye size={16} /> : <EyeOff size={16} />} {effectiveShowTaskCheckboxes ? <Eye size={16} /> : <EyeOff size={16} />}
</button> </button>
</div> </div>
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}> <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
<span style={{ fontSize: "0.75rem", fontWeight: 600, color: darkMode ? "#9ca3af" : "#6b7280" }}>{profile.language === "de" ? "Projekt-Icons" : "Project Icons"}</span> <span style={{ fontSize: "0.75rem", fontWeight: 600, color: darkMode ? "#9ca3af" : "#6b7280" }}>{profile.language === "de" ? "Projekt-Icons" : "Project Icons"}</span>
<button onClick={() => { const v = !profile.showProjectIcons; setProfile({ ...profile, showProjectIcons: v }); saveSetting("showProjectIcons", v); }} style={{ background: "none", border: "none", cursor: "pointer", padding: "2px", color: darkMode ? "#9ca3af" : "#6b7280" }}> <button onClick={() => { const v = !effectiveShowProjectIcons; saveSetting("showProjectIcons", v); }} style={{ background: "none", border: "none", cursor: "pointer", padding: "2px", color: darkMode ? "#9ca3af" : "#6b7280" }}>
{effectiveShowProjectIcons ? <Eye size={16} /> : <EyeOff size={16} />} {effectiveShowProjectIcons ? <Eye size={16} /> : <EyeOff size={16} />}
</button> </button>
</div> </div>