Auto close modal dialog - After server code is done, close dialog in Google Spreadsheet

The flow of events could be:

  • User does something
  • Triggers modal dialog
  • onLoad event of modal dialog triggers client side code
  • Client side google.script.run triggers a server side .gs function to run
  • Server function in .gs script file runs.
  • database updated from server.
  • server code sends a return value back to dialog
  • "withSuccessHandler()" in dialog detects the return from the server
  • "withSuccessHandler()" runs and closes the dialog using google.script.host.close();

You'll need a <script> tag in your modal dialog.

<script>
  window.onload = function() {    
    //console.log('window.onload ran!');

    google.script.run
      .withSuccessHandler(closeDialog)
      .theFunctionNameToUpdateDatabase()
  };

  window.closeDialog = function() {
    google.script.host.close();
  };
</script>

Right now you are using:

HtmlService.createHtmlOutput(the HTML here)

You could create the HTML from a file instead:

HtmlService.createHtmlOutputFromFile(filename)

//show dialog

var output = HtmlService.createHtmlOutput('<b>Please wait...</b>');
  SpreadsheetApp.getUi().showModalDialog(output, 'Saving...');

some code

//close dialog

  var output = HtmlService.createHtmlOutput('<script>google.script.host.close();</script>');
  SpreadsheetApp.getUi().showModalDialog(output, 'Loading...');

*optional

  ui.alert("Saved Successfully!")