Let Me Tink About It
Let Me Tink About It

Reputation: 16102

How to automatically update the UI after user updates a userProperty in Google Apps Script Workspace Add-ons for Google Sheets?

I want to automagically update the UI with a new user setting after the user updates that setting by submitting a user input from.

Currently, I am attempting to use the updateCard() method from the CardService as shown in the below code. The docs are here but they do not contain any example code.

I expect that after the user provides the input and submits it, the current card will be replaced by an updated card that will contain the new setting.

However, what’s actually happening is that the card I expect to update is not updating automatically. To see the change, the user has to manually refresh the app homepage. After, and only after, a manual refresh, does the homepage card update with the new setting.

How do I update the homepage automatically without requiring a manual refresh?

Code.gs
const changedProperty = PropertiesService.getUserProperties().getProperty( MY_SETTING );
const newNavigation = CardService.newNavigation();
const cardPoppedToRoot = newNavigation.popToRoot();
const homepageCard = getCardFromUiConfig( HOMEPAGE_UI_CONFIG, );
const updatedCard = cardPoppedToRoot.updateCard( homepageCard, );
return updatedCard;

I also tried the following code per this answer and the results are exactly the same as with the above code.

Code.gs
return CardService.newActionResponseBuilder()
  .setNavigation(
    CardService.newNavigation()
      .popToRoot()
      .updateCard( homepageCard, )
  ).build();

When I try to configure my appsscript.json file as shown in the answer as follows:

appsscript.json
      "homepageTrigger": {
        "runFunction": "onHomepage"
      },
      "contextualTriggers":[
        {
          "unconditional":{},
          "onTriggerFunction": "onHomepage"
        }
      ]

I get the following error:

"appsscript.json" has errors: Invalid manifest: unknown fields: [addOns.common.contextualTriggers]

Upvotes: 0

Views: 473

Answers (1)

Wicket
Wicket

Reputation: 38131

I think that that is only possible for Gmail add-ons.


contextualTriggers can't be child of common.

From https://developers.google.com/apps-script/manifest/addons#common (links not included):

Common

The manifest configuration for parameters that are common for every host application. Some values defined here are used as a default when specific values for a particular host are omitted.

{
  "homepageTrigger": {
    object (HomepageTrigger)
  },
  "layoutProperties": {
    object (LayoutProperties)
  },
  "logoUrl": string,
  "name": string,
  "openLinkUrlPrefixes": [
    string
  ],
  "universalActions": [
    {
      object (UniversalAction)
    }
  ],
  "useLocaleFromApp": boolean
}

AFAIK contextualTriggers can only be used with Gmail add-ons. From https://developers.google.com/apps-script/manifest/gmail-addons (links not included):

Gmail

The Google Workspace add-on manifest configuration for Gmail extensions. See Extending Gmail with Google Workspace add-ons for more information.
{
  "authorizationCheckFunction": string,
  "composeTrigger": {
    object (ComposeTrigger)
  },
  "contextualTriggers": [
    {
      object (ContextualTrigger)
    }
  ],
  "homepageTrigger": {
    object (HomepageTrigger)
  }
}

Related

Upvotes: 2

Related Questions