Optimize UI render loops with reduce in ui_helpers.js

Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
This commit is contained in:
google-labs-jules[bot]
2026-03-10 14:17:20 +00:00
parent a28e8be326
commit 6129b3fb13
2 changed files with 16 additions and 12 deletions

View File

@@ -483,6 +483,7 @@ export async function refreshFlaggedItems() {
if (updated) {
saveMenuCache();
updateLastUpdatedTime(new Date().toISOString());
localStorage.setItem('kantine_flagged_items_last_checked', new Date().toISOString());
updateAlarmBell();
renderVisibleWeeks();
}
@@ -595,7 +596,7 @@ export async function pollFlaggedItems() {
await new Promise(r => setTimeout(r, 200));
}
}
localStorage.setItem('kantine_last_checked', new Date().toISOString());
localStorage.setItem('kantine_flagged_items_last_checked', new Date().toISOString());
updateAlarmBell();
}

View File

@@ -242,7 +242,7 @@ export function createDayCard(day) {
header.className = 'card-header';
const dateStr = cardDate.toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit' });
const badgesHtml = menuBadges.map(code => `<span class="menu-code-badge">${code}</span>`).join('');
const badgesHtml = menuBadges.reduce((acc, code) => acc + `<span class="menu-code-badge">${code}</span>`, '');
let headerClass = '';
const hasAnyOrder = day.items && day.items.some(item => {
@@ -358,10 +358,7 @@ export function createDayCard(day) {
let tagsHtml = '';
if (matchedTags.length > 0) {
let badges = '';
for (const t of matchedTags) {
badges += `<span class="tag-badge-small"><span class="material-icons-round" style="font-size:10px;margin-right:2px">star</span>${escapeHtml(t)}</span>`;
}
const badges = matchedTags.reduce((acc, t) => acc + `<span class="tag-badge-small"><span class="material-icons-round" style="font-size:10px;margin-right:2px">star</span>${escapeHtml(t)}</span>`, '');
tagsHtml = `<div class="matched-tags">${badges}</div>`;
}
@@ -732,15 +729,21 @@ export function updateAlarmBell() {
if (anyAvailable) break;
}
let lastUpdatedStr = localStorage.getItem('kantine_last_checked');
const lastCheckedStr = localStorage.getItem('kantine_last_checked');
const flaggedLastCheckedStr = localStorage.getItem('kantine_flagged_items_last_checked');
let latestTime = 0;
if (lastCheckedStr) latestTime = Math.max(latestTime, new Date(lastCheckedStr).getTime());
if (flaggedLastCheckedStr) latestTime = Math.max(latestTime, new Date(flaggedLastCheckedStr).getTime());
let timeStr = 'gerade eben';
if (!lastUpdatedStr) {
lastUpdatedStr = new Date().toISOString();
localStorage.setItem('kantine_last_checked', lastUpdatedStr);
if (latestTime === 0) {
const now = new Date().toISOString();
localStorage.setItem('kantine_last_checked', now);
latestTime = new Date(now).getTime();
}
const lastUpdated = new Date(lastUpdatedStr);
timeStr = getRelativeTime(lastUpdated);
timeStr = getRelativeTime(new Date(latestTime));
bellBtn.title = `Zuletzt geprüft: ${timeStr}`;