Update dashboard, memory, root (+40 ~22 -2)

This commit is contained in:
Echo
2026-02-12 10:15:21 +00:00
parent 3ffd9332e9
commit e5d098305d
64 changed files with 9623 additions and 696 deletions

View File

@@ -688,7 +688,7 @@
}
.issue-checkbox.in-progress {
background: rgba(59, 130, 246, 0.3);
background: rgba(59, 130, 246, 0.5);
border-color: #3b82f6;
}
@@ -1071,6 +1071,10 @@
<i data-lucide="file-text"></i>
<span>KB</span>
</a>
<a href="/echo/habits.html" class="nav-item">
<i data-lucide="dumbbell"></i>
<span>Habits</span>
</a>
<a href="/echo/files.html" class="nav-item">
<i data-lucide="folder"></i>
<span>Files</span>
@@ -1448,7 +1452,7 @@
let issuesData = null;
let activityData = [];
let currentFilter = 'all';
let collapsedPriorities = new Set(['backlog']);
let collapsedPriorities = new Set(['backlog', 'done']);
// Priority labels
const priorityLabels = {
@@ -2171,39 +2175,40 @@
filtered = filtered.filter(i => i.owner === currentFilter);
}
// Group by priority
// Separate done from active
const activeIssues = filtered.filter(i => i.status !== 'done');
const doneIssues = filtered.filter(i => i.status === 'done');
// Group active by priority
const grouped = {};
priorityOrder.forEach(p => grouped[p] = []);
filtered.forEach(issue => {
activeIssues.forEach(issue => {
const p = issue.priority || 'backlog';
if (grouped[p]) grouped[p].push(issue);
else grouped['backlog'].push(issue);
});
// Sort each group: todo first, then by date
// Sort each group by date (newest first)
Object.keys(grouped).forEach(p => {
grouped[p].sort((a, b) => {
if (a.status === 'done' && b.status !== 'done') return 1;
if (a.status !== 'done' && b.status === 'done') return -1;
return new Date(b.created) - new Date(a.created);
});
grouped[p].sort((a, b) => new Date(b.created) - new Date(a.created));
});
let html = '';
// Render active issues by priority
priorityOrder.forEach(priority => {
const issues = grouped[priority];
if (issues.length === 0) return;
const isCollapsed = collapsedPriorities.has(priority);
const todoCount = issues.filter(i => i.status !== 'done').length;
html += `
<div class="priority-group">
<div class="priority-header ${isCollapsed ? 'collapsed' : ''}" onclick="togglePriority('${priority}')">
<i data-lucide="chevron-down"></i>
<span>${priorityLabels[priority]}</span>
<span style="margin-left: auto; opacity: 0.7">${todoCount}/${issues.length}</span>
<span style="margin-left: auto; opacity: 0.7">${issues.length}</span>
</div>
<div class="priority-content ${isCollapsed ? 'hidden' : ''}">
${issues.map(issue => renderIssueItem(issue)).join('')}
@@ -2212,6 +2217,25 @@
`;
});
// Render done issues separately at the end
if (doneIssues.length > 0) {
const isDoneCollapsed = collapsedPriorities.has('done');
doneIssues.sort((a, b) => new Date(b.completed || b.updated) - new Date(a.completed || a.updated));
html += `
<div class="priority-group">
<div class="priority-header ${isDoneCollapsed ? 'collapsed' : ''}" onclick="togglePriority('done')">
<i data-lucide="chevron-down"></i>
<span>✅ Executate</span>
<span style="margin-left: auto; opacity: 0.7">${doneIssues.length}</span>
</div>
<div class="priority-content ${isDoneCollapsed ? 'hidden' : ''}">
${doneIssues.map(issue => renderIssueItem(issue)).join('')}
</div>
</div>
`;
}
body.innerHTML = html;
lucide.createIcons();
}