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

View File

@@ -242,7 +242,7 @@ export function createDayCard(day) {
header.className = 'card-header'; header.className = 'card-header';
const dateStr = cardDate.toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit' }); 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 = ''; let headerClass = '';
const hasAnyOrder = day.items && day.items.some(item => { const hasAnyOrder = day.items && day.items.some(item => {
@@ -358,10 +358,7 @@ export function createDayCard(day) {
let tagsHtml = ''; let tagsHtml = '';
if (matchedTags.length > 0) { if (matchedTags.length > 0) {
let badges = ''; 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>`, '');
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>`;
}
tagsHtml = `<div class="matched-tags">${badges}</div>`; tagsHtml = `<div class="matched-tags">${badges}</div>`;
} }
@@ -732,15 +729,21 @@ export function updateAlarmBell() {
if (anyAvailable) break; 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'; let timeStr = 'gerade eben';
if (!lastUpdatedStr) { if (latestTime === 0) {
lastUpdatedStr = new Date().toISOString(); const now = new Date().toISOString();
localStorage.setItem('kantine_last_checked', lastUpdatedStr); localStorage.setItem('kantine_last_checked', now);
latestTime = new Date(now).getTime();
} }
const lastUpdated = new Date(lastUpdatedStr); timeStr = getRelativeTime(new Date(latestTime));
timeStr = getRelativeTime(lastUpdated);
bellBtn.title = `Zuletzt geprüft: ${timeStr}`; bellBtn.title = `Zuletzt geprüft: ${timeStr}`;