rxjs не создан для замены всего кода. Его смысл в том, что "все на свете" можно представить единообразно в виде потоков, а потом их комбинировать, изменять, подписывать на них и т.п. Думайте о том, какие потоки Вам нужны.
В данном коде плохо то, что внутри промиса вызывается navigateByUrl. Это неправильно. Вы создаете поток, но при этом внутри него делаете что-то непонятное, чуждое этому потоку. Задача потока только эмитеть значения. Следует убрать сторонние вызовы. Надо сделать чистый промис, задача которого вернуть нечто, что позволит потом принять какие-то решения по навигации и т.п. Сам промис можно сконвертировать в Observable через FromPromise или сразу оформить через Observable. Это уже не суть. Промис - это тоже поток, только немного в другом формате, поэтому нет смысла ставить задачу переписать промис в Observable. Это тоже самое, как заменять let на const. Да, красивее, но смысл почти не меняется.
Поэтому просто сделайте промис чистым, а переход вынесите наружу.