я вот так думаю:
1. Есть поток поиска, параметризуется значениями фильтра, направлением и полем сортировки, плюс еще каким-то хитрым финтом чтобы была бесконечная прокрутка, ненавижу ее.
2. Добавление, обновление и удаление объекта должно заставлять поток поиска делать новый запрос с его текущими параметрами.
3. изменение фильтров и сортировки приводит к выстреливанию их обсерваблов, которые опять-таки заставляют поток поиска делать новый запрос и все перерисовывать по-новой
4. скролл тоже вызывает новый запрос, но результаты конкатенируются к существующим, а не заменяют оные.
Но если хошь, смотри. У тебя есть один сабскрайб, который шлёт запрос за данными с сервера.
Он шлёт его при первой прогрузке компонента, при прокрутке, при сортировке, при удалении, при введении значений в поиск и при добавлении фильтров.
query$
deleteEvent$
filters$
pagination$
sort$
Добавляешь каждому какое надо преобразование, потом всех в combineLatest и подписываешься на это.
Можешь сделать объединения до, чтобы в конце просто иметь один объектик.
Фильтры и поиск можно выделить в один обзервабл, скролл(пагинация) + сортировка могут быть вместе. Можно ещё эти два объединить вместе и сделать listChanges$, а потом к нему добавить crud экшоны.
Но это какой-то оверхед. Хотя да, мало кода и вроде симпотично будет