diff --git a/src/backend/services/awards.service.js b/src/backend/services/awards.service.js index f9c96dd..5f84a71 100644 --- a/src/backend/services/awards.service.js +++ b/src/backend/services/awards.service.js @@ -896,7 +896,19 @@ export async function getAwardEntityBreakdown(userId, awardId) { } displayName = String(rawValue || entity); } else { - displayName = qso.entity || qso.state || qso.grid || qso.callsign || String(entity); + // Smart default based on entityType when displayField is not specified + const defaultDisplayField = { + 'dxcc': 'entity', + 'state': 'state', + 'grid': 'grid', + 'callsign': 'callsign' + }[rules.entityType] || 'entity'; + + let rawValue = qso[defaultDisplayField]; + if (defaultDisplayField === 'grid' && rawValue && rawValue.length > 4) { + rawValue = rawValue.substring(0, 4); + } + displayName = String(rawValue || entity); } if (!slotMap.has(slotKey)) { diff --git a/src/frontend/src/routes/admin/awards/[id]/+page.svelte b/src/frontend/src/routes/admin/awards/[id]/+page.svelte index 6d51abb..ec4f7a7 100644 --- a/src/frontend/src/routes/admin/awards/[id]/+page.svelte +++ b/src/frontend/src/routes/admin/awards/[id]/+page.svelte @@ -804,7 +804,7 @@ bind:value={formData.rules.displayField} placeholder="e.g., entity, state, grid" /> - Field to display as entity name (defaults to entity value) + Field to display as entity name (defaults based on entityType)
diff --git a/src/frontend/src/routes/admin/awards/components/TestAwardModal.svelte b/src/frontend/src/routes/admin/awards/components/TestAwardModal.svelte index 1ae2546..2e96115 100644 --- a/src/frontend/src/routes/admin/awards/components/TestAwardModal.svelte +++ b/src/frontend/src/routes/admin/awards/components/TestAwardModal.svelte @@ -197,15 +197,21 @@ } // Check if displayField matches the default for the entity type - if (rules.entityType && rules.displayField) { + if (rules.entityType) { const defaults = { 'dxcc': 'entity', 'state': 'state', 'grid': 'grid', 'callsign': 'callsign' }; - if (defaults[rules.entityType] === rules.displayField) { - info.push(`displayField="${rules.displayField}" is the default for entityType="${rules.entityType}". It can be omitted.`); + const defaultField = defaults[rules.entityType]; + + if (rules.displayField) { + if (defaultField === rules.displayField) { + info.push(`displayField="${rules.displayField}" is the default for entityType="${rules.entityType}". It can be omitted.`); + } + } else if (defaultField) { + info.push(`displayField will default to "${defaultField}" for entityType="${rules.entityType}".`); } } diff --git a/src/frontend/src/routes/admin/awards/create/+page.svelte b/src/frontend/src/routes/admin/awards/create/+page.svelte index 2843c5e..514d8b1 100644 --- a/src/frontend/src/routes/admin/awards/create/+page.svelte +++ b/src/frontend/src/routes/admin/awards/create/+page.svelte @@ -829,7 +829,7 @@ bind:value={formData.rules.displayField} placeholder="e.g., entity, state, grid" /> - Field to display as entity name (defaults to entity value) + Field to display as entity name (defaults based on entityType)