find method
Implementation
Future<Iterable<Fractal>> find(
MP filter, {
int limit = 0,
MP order = const {'created_at': true},
}) async {
var r = <MP>[];
final col = <MP>[];
final filterFutures = <Future<EventFractal>>[];
for (var fe in filter.entries) {
if (fe.value case String fs when EventFractal.isHash(fs)) {
final key = fe.key;
filterFutures.add(
NetworkFractal.request<EventFractal>(fs).then((f) {
filter[key] = f.id;
return f;
}),
);
}
}
await Future.wait(filterFutures);
r = (await select(
where: filter,
limit: limit,
order: order,
//includeSubTypes: includeSubTypes,
))
.reversed
.where((m) {
final same = m['type'] == name;
if (!same) col.add(m);
return same;
}).toList();
final fus = <Future<Fractal?>>[
if (col.isNotEmpty) ...FilterF.collect(col),
];
for (MP item in r) {
final putF = put(MakeF(item)).then((f) => f, onError: (e) {
print('failed making same: $e');
});
fus.add(putF);
//fractals.add(f);
}
final items = await Future.wait(fus);
return items.whereType<Fractal>();
}