feat: add award detail view with QSO count per slot and mode filter
- Award detail page now shows QSO counts per (entity, band, mode) slot - Click count to open modal with all QSOs for that slot - Click QSO in list to view full details - Add mode filter: "Mixed Mode" aggregates by band, specific modes show (band, mode) columns - Backend groups by slot and collects all confirmed QSOs in qsos array - Frontend displays clickable count links (removed blue bubbles) Backend changes: - calculateDOKAwardProgress(): groups by (DOK, band, mode), collects qsos array - calculatePointsAwardProgress(): updated for all count modes with qsos array - getAwardEntityBreakdown(): groups by (entity, band, mode) slots Frontend changes: - Add mode filter dropdown with "Mixed Mode" default - Update grouping logic to handle mixed mode vs specific mode - Replace count badges with simple clickable links - Add QSO list modal showing all QSOs per slot - Add Mode column to QSO list (useful in mixed mode) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
50
CLAUDE.md
50
CLAUDE.md
@@ -754,3 +754,53 @@ AND (dclQslRstatus IS NULL OR dclQslRstatus != 'Y')
|
||||
- Tracks updated QSOs (restores previous state)
|
||||
- Only allows canceling failed jobs or stale running jobs (>1 hour)
|
||||
- Server-side validation prevents unauthorized cancellations
|
||||
|
||||
### Award Detail View (January 2025)
|
||||
|
||||
**Overview**: The award detail page (`src/frontend/src/routes/awards/[id]/+page.svelte`) displays award progress in a pivot table format with entities as rows and band/mode combinations as columns.
|
||||
|
||||
**Key Features**:
|
||||
- **QSO Count per Slot**: Each table cell shows the count of confirmed QSOs for that (entity, band, mode) combination
|
||||
- **Drill-Down**: Click a count to open a modal showing all QSOs for that slot
|
||||
- **QSO Detail**: Click any QSO in the list to view full QSO details
|
||||
- **Mode Filter**: Filter by specific mode or view "Mixed Mode" (aggregates all modes by band)
|
||||
|
||||
**Backend Changes** (`src/backend/services/awards.service.js`):
|
||||
- `calculateDOKAwardProgress()`: Groups by (DOK, band, mode) slots, collects all confirmed QSOs in `qsos` array
|
||||
- `calculatePointsAwardProgress()`: Updated for all count modes (perBandMode, perStation, perQso) with `qsos` array
|
||||
- `getAwardEntityBreakdown()`: Groups by (entity, band, mode) slots for entity awards
|
||||
|
||||
**Response Structure**:
|
||||
```javascript
|
||||
{
|
||||
entity: "F03",
|
||||
band: "80m",
|
||||
mode: "CW",
|
||||
worked: true,
|
||||
confirmed: true,
|
||||
qsos: [
|
||||
{ qsoId: 123, callsign: "DK0MU", mode: "CW", qsoDate: "20250115", timeOn: "123456", confirmed: true },
|
||||
{ qsoId: 456, callsign: "DL1ABC", mode: "CW", qsoDate: "20250120", timeOn: "234500", confirmed: true }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**Mode Filter**:
|
||||
- **Mixed Mode (default)**: Shows bands as columns, aggregates all modes
|
||||
- Example: Columns are "80m", "40m", "20m"
|
||||
- Clicking a count shows all QSOs for that band across all modes
|
||||
- **Specific Mode**: Shows (band, mode) combinations as columns
|
||||
- Example: Columns are "80m CW", "80m SSB", "40m CW"
|
||||
- Filters to only show QSOs with that mode
|
||||
|
||||
**Frontend Components**:
|
||||
- **Mode Filter Dropdown**: Located between summary cards and table
|
||||
- Dynamically populated with available modes from the data
|
||||
- Clear button appears when specific mode is selected
|
||||
- **Count Badges**: Blue clickable links showing QSO count (removed bubbles, kept links)
|
||||
- **QSO List Modal**: Shows all QSOs for selected slot with columns: Callsign, Date, Time, Mode
|
||||
- **QSO Detail Modal**: Full QSO information (existing feature)
|
||||
|
||||
**Files Modified**:
|
||||
- `src/backend/services/awards.service.js` - Backend grouping and QSO collection
|
||||
- `src/frontend/src/routes/awards/[id]/+page.svelte` - Frontend display and interaction
|
||||
|
||||
Reference in New Issue
Block a user