This looks really nice. After 4ish projects across React and Angular, I have yet to find the Redux pattern remotely worth it... But I'll say that has a lot to do with particular executions...
Regardless, this seems like this would make life a lot easier. :)
One question, tho: is the shareReplay in completedTodos$ not redundant? It would call shareReplay twice in a row in the pipe.
To be honest I'm not sure, I've put it for good measure, but theoretically yes, i didn't have to use shareReplay on filtering considering that the original source is already multicast, I'll do some tests to confirm, and remove it later.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.