diff --git a/frontend/assets/js/app.js b/frontend/assets/js/app.js index 9ad37cd..7b35e7f 100644 --- a/frontend/assets/js/app.js +++ b/frontend/assets/js/app.js @@ -272,6 +272,10 @@ async function loadEvents() { } let allTags = []; +const PAGE_SIZE = 25; +let renderedCount = 0; +let filteredEvents = []; +let isLoadingMore = false; async function loadAllTags() { try { @@ -290,24 +294,36 @@ function renderTimeline() { const tagFilter = document.getElementById('tagFilter').value; const search = document.getElementById('searchEvents').value.toLowerCase(); - let filtered = events; - if (teamFilter) filtered = filtered.filter(e => e.team_id == teamFilter); - if (tagFilter) filtered = filtered.filter(e => e.tags && e.tags.includes(tagFilter)); - if (search) filtered = filtered.filter(e => + filteredEvents = events; + if (teamFilter) filteredEvents = filteredEvents.filter(e => e.team_id == teamFilter); + if (tagFilter) filteredEvents = filteredEvents.filter(e => e.tags && e.tags.includes(tagFilter)); + if (search) filteredEvents = filteredEvents.filter(e => e.title.toLowerCase().includes(search) || (e.description && e.description.toLowerCase().includes(search)) || (e.tags && e.tags.some(t => t.includes(search))) ); - if (!filtered.length) { + renderedCount = 0; + container.innerHTML = ''; + container.removeAttribute('style'); + renderMoreEvents(); +} + +function renderMoreEvents() { + const container = document.getElementById('timelineContainer'); + + if (!filteredEvents.length) { container.innerHTML = '
No events yet. Create your first incident entry!