feat: restructure flow to date-first and add support for long/short days and activities

This commit is contained in:
2026-08-12 13:13:54 +02:00
parent 3d7da6c8da
commit fc01c503b7
9 changed files with 191 additions and 58 deletions
+17 -15
View File
@@ -7,7 +7,6 @@
"Juli", "August", "September", "Oktober", "November", "Dezember",
];
const activitySummary = document.getElementById("activitySummary");
const monthLabel = document.getElementById("monthLabel");
const weekdayRow = document.getElementById("weekdayRow");
const dayGrid = document.getElementById("dayGrid");
@@ -15,21 +14,14 @@
const nextMonthBtn = document.getElementById("nextMonthBtn");
const continueBtn = document.getElementById("continueBtn");
// Ohne gewählte Aktivität ergibt diese Seite keinen Sinn.
const selectedActivity = localStorage.getItem("selectedActivity");
if (!selectedActivity) {
window.location.href = "activity.html";
return;
}
activitySummary.textContent = `Für unser Date: „${selectedActivity}`;
const today = new Date();
today.setHours(0, 0, 0, 0);
let availableDates = new Set();
let availableDatesMap = new Map();
let viewYear = today.getFullYear();
let viewMonth = today.getMonth();
let selectedDate = null;
let selectedDateType = "long";
WEEKDAYS.forEach((day) => {
const span = document.createElement("span");
@@ -47,9 +39,16 @@
fetch("appsettings.json")
.then((response) => response.json())
.then((settings) => {
availableDates = new Set(settings.availableDates || []);
const datesList = settings.availableDates || [];
datesList.forEach((item) => {
if (typeof item === "string") {
availableDatesMap.set(item, { type: "long" });
} else if (item && item.date) {
availableDatesMap.set(item.date, { type: item.type || "long" });
}
});
const upcoming = Array.from(availableDates)
const upcoming = Array.from(availableDatesMap.keys())
.map((dateKey) => new Date(`${dateKey}T00:00:00`))
.filter((date) => date >= today)
.sort((a, b) => a - b);
@@ -82,12 +81,14 @@
for (let day = 1; day <= daysInMonth; day++) {
const cellDate = new Date(viewYear, viewMonth, day);
const key = toDateKey(cellDate);
const button = document.createElement("button");
button.type = "button";
button.className = "day-cell";
button.textContent = String(day);
const isAvailable = availableDates.has(toDateKey(cellDate));
const dateInfo = availableDatesMap.get(key);
const isAvailable = Boolean(dateInfo);
const isToday = cellDate.getTime() === today.getTime();
const isSelected = selectedDate && cellDate.getTime() === selectedDate.getTime();
@@ -104,6 +105,7 @@
button.addEventListener("click", () => {
selectedDate = cellDate;
selectedDateType = dateInfo ? dateInfo.type : "long";
renderCalendar();
updateContinueState();
});
@@ -141,9 +143,9 @@
if (!selectedDate) {
return;
}
// Ablage für die spätere Anbindung an Datenbank/Storage
localStorage.setItem("selectedDate", toDateKey(selectedDate));
window.location.href = "name.html";
localStorage.setItem("selectedDateType", selectedDateType);
window.location.href = "activity.html";
});
})();