Я похожую задачу когда решал, разделил на две части первое построение блоков, оно реализованно на динамических компонентах использовал библиотеку
@thekiba ngxd, с ней очень просто биндить данные для блоко:), и формы потому что они у меня с большим количеством шагов и сделал их на formly.