When opening a dialog with the following code
this.dialog.open(MyComponent, {
      ...
      disableClose: false,
      ...
    });
a dialog will be opened as we expect and when pressing ESC, that dialog is then closed. This behaviour is fine until we instead want to prevent closing. E.g. there is a form in that dialog and when material closes that dialog when the user presses ESC, it should give us the opportunity to do anything. In my case, pop up a new dialog with a question: 'Do you wish to save your changes' and then a 'yes', 'no' and 'cancel' button.
- The 'yes' will save and regular flow continues (i.e. dialog close after click) 
- The 'no' will simply let the regular flow continue (i.e. dialog close after click) 
- The 'cancel' should neither save nor close the dialog. 
I have set up this functionality by doing custom logic through prohibiting the framework to close it on pressing ESC.
this.dialog.open(MyComponent, {
      ...
      disableClose: true,
      ...
    });
and then manually listening to the ESC button to close the most upper dialog (since dialogs can be above eachother). This functionality is a bit dirty but does the trick but it then breaks again when for example the dialog which is to be closed has a form with a select box. This <select> box, when opened, is also closed when ESC has been pressed (as it should). But I do not want that ESC press to also close my dialog.
This is why I try to completely abandon the custom logic and want to fallback on the default behaviour. I just need a little tweak on it. I need to either intercept the closing.
A good way would be a beforeClose event. There is one present but the event args are abscent
const ref = this.dialog.open(MyComponent, args);
ref.beforeClosed().subscribe(async (evt) => {
  // This wont work since evt is undefined
  evt.cancel = await this.mayClose();
});
Another way would be able to asynchronously tell Material if it may even close at all before closing even initiates. E.g. through this fake property
this.dialog.open(MyComponent, {
      ...
      disableClose: false,
      mayClose: this.mayClose()
      ...
    });
private async mayClose()  : Promise<boolean> {
   // Open up a new dialog with the yes/no/cancel button and return true when yes/no and false when cancel
}
I believe my question differs from other questions in the part that I do not want to disable closing. I want to conditionally cancel the close.
