fix: update event date and enhance address visibility logic
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
parent
4ff703b4ff
commit
ae631cd463
@ -87,7 +87,7 @@
|
|||||||
"title": "Japanese Delight",
|
"title": "Japanese Delight",
|
||||||
"location": "Zürich",
|
"location": "Zürich",
|
||||||
"address": "Limmatquai 92, 8001 Zürich",
|
"address": "Limmatquai 92, 8001 Zürich",
|
||||||
"date": "02. MAI. 2026",
|
"date": "24. April. 2026",
|
||||||
"time": "12:30 UHR",
|
"time": "12:30 UHR",
|
||||||
"category": "Lunch",
|
"category": "Lunch",
|
||||||
"diet": "Fisch",
|
"diet": "Fisch",
|
||||||
|
|||||||
@ -105,6 +105,19 @@
|
|||||||
localStorage.setItem(REGISTRATION_STORAGE_KEY, JSON.stringify(registrationMap));
|
localStorage.setItem(REGISTRATION_STORAGE_KEY, JSON.stringify(registrationMap));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getRegistrationIdsForUser(registrationMap, user) {
|
||||||
|
const userEmail = String(user?.email || '').trim().toLowerCase();
|
||||||
|
if (!userEmail) return [];
|
||||||
|
|
||||||
|
const matchingIds = Object.entries(registrationMap || {})
|
||||||
|
.filter(([email]) => String(email || '').trim().toLowerCase() === userEmail)
|
||||||
|
.flatMap(([, ids]) => (Array.isArray(ids) ? ids : []))
|
||||||
|
.map(id => Number(id))
|
||||||
|
.filter(id => Number.isFinite(id));
|
||||||
|
|
||||||
|
return Array.from(new Set(matchingIds));
|
||||||
|
}
|
||||||
|
|
||||||
function parseEventDateTime(event) {
|
function parseEventDateTime(event) {
|
||||||
if (!event?.date) return null;
|
if (!event?.date) return null;
|
||||||
const dateValue = String(event.date).trim();
|
const dateValue = String(event.date).trim();
|
||||||
@ -116,11 +129,39 @@
|
|||||||
month = Number(isoDateMatch[2]);
|
month = Number(isoDateMatch[2]);
|
||||||
day = Number(isoDateMatch[3]);
|
day = Number(isoDateMatch[3]);
|
||||||
} else {
|
} else {
|
||||||
const monthMap = { JAN:1, FEB:2, 'MÄR':3, MRZ:3, APR:4, MAI:5, JUN:6, JUL:7, AUG:8, SEP:9, OKT:10, NOV:11, DEZ:12 };
|
const monthMap = {
|
||||||
const localizedMatch = dateValue.match(/^(\d{1,2})\.\s*([A-ZÄÖÜ]{3})\.\s*(\d{4})$/);
|
jan: 1,
|
||||||
|
januar: 1,
|
||||||
|
feb: 2,
|
||||||
|
februar: 2,
|
||||||
|
'mär': 3,
|
||||||
|
mrz: 3,
|
||||||
|
mar: 3,
|
||||||
|
maerz: 3,
|
||||||
|
märz: 3,
|
||||||
|
apr: 4,
|
||||||
|
april: 4,
|
||||||
|
mai: 5,
|
||||||
|
jun: 6,
|
||||||
|
juni: 6,
|
||||||
|
jul: 7,
|
||||||
|
juli: 7,
|
||||||
|
aug: 8,
|
||||||
|
august: 8,
|
||||||
|
sep: 9,
|
||||||
|
sept: 9,
|
||||||
|
september: 9,
|
||||||
|
okt: 10,
|
||||||
|
oktober: 10,
|
||||||
|
nov: 11,
|
||||||
|
november: 11,
|
||||||
|
dez: 12,
|
||||||
|
dezember: 12
|
||||||
|
};
|
||||||
|
const localizedMatch = dateValue.match(/^(\d{1,2})\.\s*([A-Za-zÄÖÜäöü]{3,9})\.?\s*(\d{4})$/);
|
||||||
if (!localizedMatch) return null;
|
if (!localizedMatch) return null;
|
||||||
day = Number(localizedMatch[1]);
|
day = Number(localizedMatch[1]);
|
||||||
month = monthMap[localizedMatch[2]];
|
month = monthMap[String(localizedMatch[2]).toLowerCase()];
|
||||||
year = Number(localizedMatch[3]);
|
year = Number(localizedMatch[3]);
|
||||||
if (!month) return null;
|
if (!month) return null;
|
||||||
}
|
}
|
||||||
@ -150,8 +191,18 @@
|
|||||||
function isAddressVisibleWindow(event) {
|
function isAddressVisibleWindow(event) {
|
||||||
const eventDateTime = parseEventDateTime(event);
|
const eventDateTime = parseEventDateTime(event);
|
||||||
if (!eventDateTime || Number.isNaN(eventDateTime.getTime())) return false;
|
if (!eventDateTime || Number.isNaN(eventDateTime.getTime())) return false;
|
||||||
const msUntilStart = eventDateTime.getTime() - Date.now();
|
const now = Date.now();
|
||||||
return msUntilStart >= 0 && msUntilStart <= 24 * 60 * 60 * 1000;
|
const start = eventDateTime.getTime();
|
||||||
|
const revealStart = start - (24 * 60 * 60 * 1000);
|
||||||
|
const revealEnd = start + (1 * 60 * 60 * 1000);
|
||||||
|
return now >= revealStart && now <= revealEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isEventPastAddressWindow(event) {
|
||||||
|
const eventDateTime = parseEventDateTime(event);
|
||||||
|
if (!eventDateTime || Number.isNaN(eventDateTime.getTime())) return false;
|
||||||
|
const revealEnd = eventDateTime.getTime() + (1 * 60 * 60 * 1000);
|
||||||
|
return Date.now() > revealEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
function isEventOwnedByCurrentUser(event, user) {
|
function isEventOwnedByCurrentUser(event, user) {
|
||||||
@ -290,11 +341,10 @@
|
|||||||
const isFull = freePlaces === 0;
|
const isFull = freePlaces === 0;
|
||||||
const isRegistrationClosed = isRegistrationClosedForEvent(event);
|
const isRegistrationClosed = isRegistrationClosedForEvent(event);
|
||||||
const deregInfo = getDeregistrationInfo(event);
|
const deregInfo = getDeregistrationInfo(event);
|
||||||
const userRegistrations = currentUser?.email && Array.isArray(registrationMap[currentUser.email])
|
const userRegistrations = getRegistrationIdsForUser(registrationMap, currentUser);
|
||||||
? registrationMap[currentUser.email].map(id => Number(id)) : [];
|
|
||||||
const isRegistered = userRegistrations.includes(Number(event.id));
|
const isRegistered = userRegistrations.includes(Number(event.id));
|
||||||
const isListedParticipant = isUserListedInEventParticipants(event, currentUser);
|
const isListedParticipant = isUserListedInEventParticipants(event, currentUser);
|
||||||
const hasAddressAccess = isRegistered || isListedParticipant;
|
const hasAddressAccess = isRegistered || isListedParticipant || isOwnEvent;
|
||||||
|
|
||||||
const actionButtonLabel = isOwnEvent ? 'Dein Event!'
|
const actionButtonLabel = isOwnEvent ? 'Dein Event!'
|
||||||
: !currentUser ? 'Einloggen'
|
: !currentUser ? 'Einloggen'
|
||||||
@ -309,9 +359,21 @@
|
|||||||
: ' button-primary ';
|
: ' button-primary ';
|
||||||
|
|
||||||
const shouldRevealAddress = Boolean(event.address) && isAddressVisibleWindow(event) && hasAddressAccess;
|
const shouldRevealAddress = Boolean(event.address) && isAddressVisibleWindow(event) && hasAddressAccess;
|
||||||
|
let addressMessage = 'Wenn du dich anmeldest, wird die Adresse für diesen Event wird 24 Stunden vorher genau hier sichtbar sein.';
|
||||||
|
|
||||||
|
if (isOwnEvent) {
|
||||||
|
addressMessage = 'Deine Adresse für diesen Event wird 24 Stunden vorher genau hier für alle Teilnehmer sichtbar sein';
|
||||||
|
} else if (hasAddressAccess) {
|
||||||
|
addressMessage = 'Vielen Dank für die Anmeldung! Die Adresse für diesen Event wird 24 Stunden vorher genau hier sichtbar sein.';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEventPastAddressWindow(event)) {
|
||||||
|
addressMessage = 'Vielen Dank, dass du an diesem Event teilgenommen hast.';
|
||||||
|
}
|
||||||
|
|
||||||
const addressPanelMarkup = shouldRevealAddress
|
const addressPanelMarkup = shouldRevealAddress
|
||||||
? `<article class="detail-panel"><h2 class="detail-section-title">Adresse</h2><p>${event.address}</p></article>`
|
? `<article class="detail-panel"><h2 class="detail-section-title">Adresse</h2><p>${event.address}</p></article>`
|
||||||
: `<article class="detail-panel"><h2 class="detail-section-title">Adresse</h2><p>Vielen Dank für die Anmeldung! Die Adresse für diesen Event wird 24 Stunden vorher genau hier sichtbar sein.</p></article>`;
|
: `<article class="detail-panel"><h2 class="detail-section-title">Adresse</h2><p>${addressMessage}</p></article>`;
|
||||||
|
|
||||||
const detailChips = [
|
const detailChips = [
|
||||||
`<span class="event-tag">${eventCategory}</span>`,
|
`<span class="event-tag">${eventCategory}</span>`,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user