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)