search static method
dynamic
search(
- dynamic mapOrList,
- String query
)
Implementation
static dynamic search(dynamic mapOrList, String query) {
String getValue(dynamic item) {
if (item is Data) {
item = item.value;
} else if (item is MapEntry) {
item = getValue(item.value);
}
return item.toString();
}
if (mapOrList is Data) mapOrList = mapOrList.value;
if (mapOrList is List) {
if (query.isEmpty) {
return mapOrList.map(
(e) => {'value': e is Data ? e : Data(e), 'positions': Data([])},
);
}
List<dynamic> result = [];
for (final entry in mapOrList) {
final value = getValue(entry);
final fuzzy = DataSearch(needle: query, haystack: value);
if (fuzzy.hasMatch) {
result.add({
'value': value is Data ? value : Data(value),
'positions': Data(
fuzzy.positions.map((e) => Data(e.toString())).toList(),
),
});
}
}
return result;
} else if (mapOrList is Map) {
List<MapEntry> entries = [];
for (final entry in mapOrList.entries) {
final value = getValue(entry);
if (query.isEmpty) {
entries.add(
MapEntry(entry.key, {
'value': entry.value is Data ? entry.value : Data(entry.value),
'positions': Data([]),
}),
);
continue;
}
final fuzzy = DataSearch(needle: query, haystack: value);
if (fuzzy.hasMatch) {
entries.add(
MapEntry(entry.key, {
'value': entry.value is Data ? entry.value : Data(entry.value),
'positions': Data(
fuzzy.positions.map((e) => Data(e.toString())).toList(),
),
}),
);
}
}
return Map.fromEntries(entries);
}
return mapOrList;
}