My wife is a singing teacher and has been trained by these guys for a long time. The education and training has been a very high standard. As always your millage will vary depending on the teacher you choose and their level of experience.
...and the interactionContext handles back button clicks and makes sure the dialog is cancelled and our history is kept clean.
It even works with nested interactions (i.e. the dialog can start a new interaction in place). Again, the user can click the back button repeatedly to back out of the interaction and everything just works.
It's simple, you can place a component that provides dialogs near the root of your component tree and provide async functions which open such dialogs to the descendant components (e.g. via contexts). These functions can then be made to resolve only when the dialogs are closed. Thus, all descendant components can use dialogs in the same manner as shown in your example.
https://www.gallup.com/cliftonstrengths/
Edit: It's a paid service the product links are here:
https://www.gallup.com/cliftonstrengths/en/253868/popular-cl...
I've bought both, but 99% of the value for me was in the top 5.