feat(monitor-webui): make stats cards interactive filters
- Add click event listeners to stats cards to filter issue list - Add hover effects and cursor pointer to stats cards - Update filter logic to sync with stats card clicks
This commit is contained in:
@@ -29,19 +29,19 @@
|
||||
<div class="card stats-card">
|
||||
<h2>Statistics</h2>
|
||||
<div class="stats-grid" id="stats-grid">
|
||||
<div class="stat-item">
|
||||
<div class="stat-item" id="stat-item-total">
|
||||
<div class="stat-value" id="stat-total">-</div>
|
||||
<div class="stat-label">Total Issues</div>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<div class="stat-item" id="stat-item-in-progress">
|
||||
<div class="stat-value" id="stat-in-progress">-</div>
|
||||
<div class="stat-label">In Progress</div>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<div class="stat-item" id="stat-item-open">
|
||||
<div class="stat-value" id="stat-open">-</div>
|
||||
<div class="stat-label">Open</div>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<div class="stat-item" id="stat-item-closed">
|
||||
<div class="stat-value" id="stat-closed">-</div>
|
||||
<div class="stat-label">Closed</div>
|
||||
</div>
|
||||
|
||||
@@ -107,6 +107,13 @@ h1, h2, h3, h4, h5, h6 {
|
||||
padding: 1rem;
|
||||
background: #f9f9fa;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
transition: transform 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
|
||||
.stat-item:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
|
||||
@@ -299,6 +299,32 @@ document.getElementById('clear-text').addEventListener('click', function() {
|
||||
filterIssues();
|
||||
});
|
||||
|
||||
// Stat click listeners
|
||||
function setStatusFilter(statuses) {
|
||||
const statusSelect = document.getElementById('filter-status');
|
||||
const options = Array.from(statusSelect.options);
|
||||
|
||||
options.forEach(opt => {
|
||||
if (statuses === 'all') {
|
||||
opt.selected = true;
|
||||
} else {
|
||||
opt.selected = statuses.includes(opt.value);
|
||||
}
|
||||
});
|
||||
|
||||
// Update toggle button text
|
||||
const allSelected = options.every(opt => opt.selected);
|
||||
const btn = document.getElementById('toggle-status');
|
||||
btn.textContent = allSelected ? 'Select None' : 'Select All';
|
||||
|
||||
filterIssues();
|
||||
}
|
||||
|
||||
document.getElementById('stat-item-total').addEventListener('click', () => setStatusFilter('all'));
|
||||
document.getElementById('stat-item-open').addEventListener('click', () => setStatusFilter(['open']));
|
||||
document.getElementById('stat-item-in-progress').addEventListener('click', () => setStatusFilter(['in_progress']));
|
||||
document.getElementById('stat-item-closed').addEventListener('click', () => setStatusFilter(['closed']));
|
||||
|
||||
// Reload button listener
|
||||
document.getElementById('reload-button').addEventListener('click', reloadData);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user