@override
Stream<Transition<ListEvent, ListState>>
transformEvents(Stream<ListEvent> events, transitionFn) {
final defferedEvents = events
.where((e) => e is SearchListEvent)
.debounceTime(const Duration(seconds: 1))
.distinct()
.switchMap(transitionFn);
final forwardedEvents = events
.where((e) => e is! SearchListEvent)
.asyncExpand(transitionFn);
return forwardedEvents.mergeWith([defferedEvents]);
}
@override
Stream<ListState> mapEventToState(ListEvent event,) async* {
if (event is SearchListEvent) {
yield ListLoadInProgressState();
final failureOrSearch = await getProduct(Params(
search: event.search,
offset: event.offset,
limit: event.limit,
));
yield* _eitherLoadedOrErrorState(failureOrSearch);
}
}