document.addEventListener('DOMContentLoaded', () => {
const main = document.getElementById('main');
const syncStatus = document.getElementById('syncStatus');
const countBadge = document.getElementById('countBadge');
async function load() {
try {
const res = await chrome.runtime.sendMessage({ type: 'getReviewTasks' });
if (res.error) {
syncStatus.textContent = '';
renderError(res.error);
return;
}
const review = res.review || [];
const total = res.total || 0;
const autoArchiveCount = res.autoArchiveCount || 0;
syncStatus.textContent = `${total} total tasks synced`;
if (review.length === 0) {
countBadge.style.display = 'none';
renderEmpty();
}
else {
countBadge.textContent = String(review.length);
countBadge.style.display = 'inline-block';
renderStats(review, autoArchiveCount);
}
}
catch (e) {
syncStatus.textContent = '';
renderError(e.message);
}
}
function renderEmpty() {
main.innerHTML = `
No decayed tasks found. Great job keeping up!
Open Settings
`;
document.getElementById('syncBtn')?.addEventListener('click', doSync);
}
function renderError(msg) {
main.innerHTML = `
${escapeHtml(msg)}
Open Settings
`;
document.getElementById('syncBtn')?.addEventListener('click', doSync);
}
function renderStats(review, autoArchiveCount) {
const hot = review.filter((r) => r.score.score >= 70).length;
const warm = review.filter((r) => r.score.score >= 40 && r.score.score < 70).length;
const cold = review.filter((r) => r.score.score < 40).length;
const oldest = review.reduce((a, b) => a.score.ageDays > b.score.ageDays ? a : b);
main.innerHTML = `
Hot (≥70)${hot}
Warm (40-69)${warm}
Cold (<40)${cold}
Oldest task${Math.round(oldest.score.ageDays)} days
${autoArchiveCount > 0 ? `Auto-archive ready${autoArchiveCount}
` : ''}
Open Settings
`;
document.getElementById('reviewBtn')?.addEventListener('click', () => {
chrome.runtime.sendMessage({ type: 'openReview' });
window.close();
});
document.getElementById('syncBtn')?.addEventListener('click', doSync);
}
async function doSync() {
const btn = document.getElementById('syncBtn');
if (btn)
btn.textContent = 'Syncing...';
try {
const res = await chrome.runtime.sendMessage({ type: 'sync' });
if (res.error) {
renderError(res.error);
return;
}
await load();
}
catch (e) {
renderError(e.message);
}
}
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
load();
});
export {};