Jako, że zmiana kilku różnych wartości powinna spowodować wysłanie requestu do backendu w celu pobrania nowych danych, które pochodzą w sumie z 6 różnych komponentów - postanowiłem zrobić własną implementację @ngrx/component-store (w ngrxowej implementacji stora czegoś mi brakuje). Pomyślałem, że dobrym rozwiązaniem będzie wydzielić state do osobnego serwisu i combineLatest sobie wyciągnę wszystkie wartości które wpływają na dane wysyłane w RequestBody

I to jak dotąd działa. Nie działa mi ustawianie flagi isLoading dla Boo. Problem jest w kolejności w jakiej są pobudzane Observers. W ngOnInit nasłuchuję na zmianę foo.data i jeżeli się zmieni i data będzie - to ustawiam boo.isLoading=true i pobieram boos. Tylko kolejność pobudzania Observerów jest inna niż bym chciał:

  1. Ustawiam foo.isLoading i pobieram foos.
  2. Zmieniam state i update'uje foos.data
  3. Pobudza się observer którego zadaniem jest pobranie boos.
  4. Ustawia boo.isLoading=true
  5. Pobudzają się boo.isLoading observers z wartością true
  6. Ale jako, że state był zmieniony dwukrotnie - pobudzone są zaległe boo.isLoading observers z wartością false - więc ostatnia wartość zamiast oczekiwanego true jest false.

Próbowałem to rozwiązać przez zmianę select tak, żeby switchMapą zmapować state.value na of(state.value), żeby mi switchMapa odsubskrybowała starą subksrypcję która wisi ale to tak nie działa. Source code do stackblitza: https://stackblitz.com/edit/angular-ivy-qgbdxx