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ł:
- Ustawiam foo.isLoading i pobieram foos.
- Zmieniam state i update'uje
foos.data - Pobudza się observer którego zadaniem jest pobranie
boos. - Ustawia
boo.isLoading=true - Pobudzają się
boo.isLoadingobservers z wartościątrue - Ale jako, że state był zmieniony dwukrotnie - pobudzone są zaległe
boo.isLoadingobservers z wartością false - więc ostatnia wartość zamiast oczekiwanegotruejestfalse.
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