refactor: update agent location display logic to prioritize state over city across UI and models
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user