feat: enhance mobile stats display in manage hunt view
All checks were successful
Build Images and Deploy / Update-PROD-Stack (push) Successful in 29s

This commit is contained in:
2026-03-19 23:58:28 -04:00
parent bd4bf20228
commit 8551aa1417
2 changed files with 57 additions and 35 deletions

View File

@@ -722,6 +722,26 @@ tr:hover {
font-size: 0.7rem;
}
/* Manage hunt: on mobile, show Total Scans, Discovery Rate, Starts, Expires */
.manage-stats {
display: flex;
flex-direction: column;
}
.manage-stats-row-1 {
order: 2;
}
.manage-stats-row-2 {
order: 1;
}
.manage-stats-row-1 .stat-box:nth-child(1),
.manage-stats-row-1 .stat-box:nth-child(2) {
display: none;
}
.hide-mobile {
display: none !important;
}
/* Package grid */
.package-grid {
grid-template-columns: 1fr;

View File

@@ -20,37 +20,39 @@
</div>
<% } %>
<div class="stats-row">
<div class="stat-box">
<div class="value"><%= hunt.package_count %></div>
<div class="label">Packages</div>
<div class="manage-stats">
<div class="stats-row manage-stats-row-1">
<div class="stat-box">
<div class="value"><%= hunt.package_count %></div>
<div class="label">Packages</div>
</div>
<div class="stat-box">
<div class="value"><%= packages.filter(p => p.scan_count > 0).length %></div>
<div class="label">Found</div>
</div>
<div class="stat-box">
<div class="value"><% if (hunt.start_date) { %><time datetime="<%= hunt.start_date %>"><%= new Date(hunt.start_date).toLocaleDateString() %></time><% } else { %>—<% } %></div>
<div class="label">Starts</div>
</div>
<div class="stat-box">
<div class="value"><% if (hunt.expiry_date) { %><time datetime="<%= hunt.expiry_date %>"><%= new Date(hunt.expiry_date).toLocaleDateString() %></time><% } else { %>Never<% } %></div>
<div class="label">Expires</div>
</div>
</div>
<div class="stat-box">
<div class="value"><%= packages.filter(p => p.scan_count > 0).length %></div>
<div class="label">Found</div>
<div class="stats-row manage-stats-row-2">
<div class="stat-box">
<div class="value"><%= packages.reduce((sum, p) => sum + p.scan_count, 0) %></div>
<div class="label">Total Scans</div>
</div>
<div class="stat-box hide-mobile">
<div class="value"><%= typeof stats !== 'undefined' ? stats.uniquePlayers : 0 %></div>
<div class="label">Players</div>
</div>
<div class="stat-box">
<div class="value"><%= typeof stats !== 'undefined' ? stats.discoveryRate + '%' : '0%' %></div>
<div class="label">Discovery Rate</div>
</div>
</div>
<div class="stat-box">
<div class="value"><%= packages.reduce((sum, p) => sum + p.scan_count, 0) %></div>
<div class="label">Total Scans</div>
</div>
<div class="stat-box">
<div class="value"><%= typeof stats !== 'undefined' ? stats.uniquePlayers : 0 %></div>
<div class="label">Players</div>
</div>
<div class="stat-box">
<div class="value"><%= typeof stats !== 'undefined' ? stats.discoveryRate + '%' : '0%' %></div>
<div class="label">Discovery Rate</div>
</div>
<div class="stat-box">
<div class="value"><% if (hunt.expiry_date) { %><time datetime="<%= hunt.expiry_date %>"><%= new Date(hunt.expiry_date).toLocaleDateString() %></time><% } else { %>Never<% } %></div>
<div class="label">Expires</div>
</div>
<% if (hunt.start_date) { %>
<div class="stat-box">
<div class="value"><time datetime="<%= hunt.start_date %>"><%= new Date(hunt.start_date).toLocaleDateString() %></time></div>
<div class="label">Starts</div>
</div>
<% } %>
</div>
<% if (typeof stats !== 'undefined' && stats.topFinders.length > 0) { %>
@@ -101,10 +103,10 @@
<table>
<thead>
<tr>
<th>#</th>
<th class="hide-mobile">#</th>
<th>Code</th>
<th>Scans</th>
<th>First Scanner</th>
<th class="hide-mobile">Scans</th>
<th class="hide-mobile">First Scanner</th>
<th>Last Scanner</th>
<th>Actions</th>
</tr>
@@ -112,10 +114,10 @@
<tbody>
<% packages.forEach(pkg => { %>
<tr>
<td><strong><%= pkg.card_number %></strong></td>
<td class="hide-mobile"><strong><%= pkg.card_number %></strong></td>
<td style="font-family: monospace;"><%= pkg.unique_code %></td>
<td><%= pkg.scan_count %></td>
<td><% if (pkg.first_scanner_name) { %><a href="/player/<%= pkg.first_scanner_name %>"><%= pkg.first_scanner_name %></a><% } else { %>---<% } %></td>
<td class="hide-mobile"><%= pkg.scan_count %></td>
<td class="hide-mobile"><% if (pkg.first_scanner_name) { %><a href="/player/<%= pkg.first_scanner_name %>"><%= pkg.first_scanner_name %></a><% } else { %>---<% } %></td>
<td><% if (pkg.last_scanner_name) { %><a href="/player/<%= pkg.last_scanner_name %>"><%= pkg.last_scanner_name %></a><% } else { %>---<% } %></td>
<td>
<div style="display: flex; gap: 0.4rem; align-items: stretch;">