(function (app) { const { state } = app; state.timelineOffset = 0; state.timelineEvents = []; var TIMELINE_LIMIT = 100; var typeIcons = { document: '', condition: '', prescription: '', bill: '' }; var typeColors = { document: '#6366f1', condition: '#ef4444', prescription: '#22c55e', bill: '#f59e0b' }; app.loadTimeline = async function () { if (!state.selectedPersonId) return; state.timelineOffset = 0; state.timelineEvents = []; var res = await fetch(app.API + '/timeline?personId=' + state.selectedPersonId + '&offset=0&limit=' + TIMELINE_LIMIT); if (!res.ok) return; var events = await res.json(); state.timelineEvents = events; state.timelineOffset = events.length; app.renderTimeline(events); var btn = document.getElementById('timelineLoadMore'); if (btn) btn.style.display = events.length >= TIMELINE_LIMIT ? '' : 'none'; }; app.loadMoreTimeline = async function () { if (!state.selectedPersonId) return; var res = await fetch(app.API + '/timeline?personId=' + state.selectedPersonId + '&offset=' + state.timelineOffset + '&limit=' + TIMELINE_LIMIT); if (!res.ok) return; var events = await res.json(); state.timelineEvents = state.timelineEvents.concat(events); state.timelineOffset += events.length; app.renderTimeline(state.timelineEvents); var btn = document.getElementById('timelineLoadMore'); if (btn) btn.style.display = events.length >= TIMELINE_LIMIT ? '' : 'none'; }; app.renderTimeline = function (events) { var container = document.getElementById('timelineList'); if (!container) return; if (events.length === 0) { container.innerHTML = '
No timeline events yet.
'; return; } // Group by month/year var groups = {}; events.forEach(function (ev) { var d = ev.eventDate ? new Date(ev.eventDate) : new Date(ev.createdAt); var key = d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0'); var label = d.toLocaleDateString('en-US', { year: 'numeric', month: 'long' }); if (!groups[key]) groups[key] = { label: label, items: [] }; groups[key].items.push(ev); }); var html = ''; Object.keys(groups).sort().reverse().forEach(function (key) { var group = groups[key]; html += '
' + app.escapeHtml(group.label) + '
'; group.items.forEach(function (ev) { var icon = typeIcons[ev.eventType] || typeIcons.document; var color = typeColors[ev.eventType] || '#6366f1'; var dateStr = ev.eventDate ? app.formatDate(ev.eventDate) : app.formatDate(ev.createdAt); var subBadge = ev.subType ? '' + app.escapeHtml(app.formatLabel(ev.subType)) + '' : ''; var typeBadge = '' + app.escapeHtml(app.formatLabel(ev.eventType)) + ''; var detail = ev.detail ? '
' + app.escapeHtml(app.truncate(ev.detail, 120)) + '
' : ''; html += '
' + '
' + icon + '
' + '
' + '
' + dateStr + ' ' + typeBadge + ' ' + subBadge + '
' + '
' + app.escapeHtml(ev.label || 'Untitled') + '
' + detail + '
' + '
'; }); }); container.innerHTML = html; }; window.medDocsLoadMoreTimeline = function () { app.loadMoreTimeline(); }; })(MedDocs);