refactor: update agent location display logic to prioritize state over city across UI and models

This commit is contained in:
pradeepkumar
2026-04-11 22:52:13 +05:30
parent 9c63ee70d9
commit 1ef02383a6
4 changed files with 57 additions and 36 deletions

View File

@@ -594,29 +594,49 @@ class _AgentCardState extends State<_AgentCard> {
const SizedBox(width: 4),
Builder(builder: (_) {
final allParts = <String>[];
// Extract all cities/states from fieldValues arrays
// Extract states first, then cities (state-first display)
List<String> extractValues(dynamic fv) {
final out = <String>[];
if (fv.jsonValue is List) {
for (final v in (fv.jsonValue as List)) {
final s = v.toString().trim();
if (s.isEmpty) continue;
out.add(s
.split('_')
.map((w) => w.isNotEmpty
? '${w[0].toUpperCase()}${w.substring(1).toLowerCase()}'
: '')
.join(' '));
}
} else if (fv.textValue != null &&
(fv.textValue as String).isNotEmpty) {
out.add(fv.textValue as String);
}
return out;
}
void addUnique(String value) {
if (!allParts.any((p) =>
p.toLowerCase() == value.toLowerCase())) {
allParts.add(value);
}
}
// 1. States first
for (final fv in agent.fieldValues) {
final slug = fv.fieldSlug.toLowerCase();
if (slug == 'city' || slug == 'city_name' ||
slug == 'state' || slug == 'state_name') {
if (fv.jsonValue is List) {
for (final v in (fv.jsonValue as List)) {
final s = v.toString().trim();
if (s.isEmpty) continue;
final display = s
.split('_')
.map((w) => w.isNotEmpty
? '${w[0].toUpperCase()}${w.substring(1).toLowerCase()}'
: '')
.join(' ');
if (!allParts.any((p) =>
p.toLowerCase() == display.toLowerCase())) {
allParts.add(display);
}
}
} else if (fv.textValue != null &&
fv.textValue!.isNotEmpty) {
allParts.add(fv.textValue!);
if (slug == 'state' || slug == 'state_name') {
for (final v in extractValues(fv)) {
addUnique(v);
}
}
}
// 2. Cities next
for (final fv in agent.fieldValues) {
final slug = fv.fieldSlug.toLowerCase();
if (slug == 'city' || slug == 'city_name') {
for (final v in extractValues(fv)) {
addUnique(v);
}
}
}