ButtonGroup

The ButtonGroup action set is used to group together Button action set instances. The ButtonGroup action set can be passed into your app’s TitleBar action set.

Setup

Create an app and import the Button and ButtonGroup modules from @shopify/app-bridge/actions. Note that we'll be referring to this sample application throughout the examples below.

import createApp from '@shopify/app-bridge';
import {Button, ButtonGroup} from '@shopify/app-bridge/actions';

const app = createApp({
  apiKey: '12345',
  shopOrigin: shopOrigin,
});

Create a button group

Generate a primary button with the label More actions and two buttons with the label Settings and Help:

const button1 = Button.create(app, {label: 'Settings'});
const button2 = Button.create(app, {label: 'Help'});
const myGroupButton = ButtonGroup.create(app, {label: 'More actions', buttons: [button1, button2]});

Subscribe to updates

You can subscribe to the button group update action by calling subscribe. This returns a function that you can call to unsubscribe from the action:

// Using the same button group as above
const updateUnsubscribe = myGroupButton.subscribe(ButtonGroup.Action.UPDATE, data => {
  // Do something when the button group is updated
  // The data is in the following shape: {id: string, label: string, buttons: [{id: string, label: string, disabled: boolean,} ...]}
});

// Unsubscribe
updateUnsubscribe();

Unsubscribe

You call unsubscribe to remove all subscriptions on the button group and its children:

const button1 = Button.create(app, {label: 'Settings'});
const button2 = Button.create(app, {label: 'Help'});
const myGroupButton = ButtonGroup.create(app, {label: 'More actions', buttons: [button1, button2]});
// Using the same button group as above
myGroupButton.subscribe(ButtonGroup.Action.UPDATE, data => {
  // Do something when the button group is updated
  // The data is in the following format: {id: string, label: string, buttons: [{id: string, label: string, disabled: boolean} ...]}
});

button1.subscribe(Button.Action.CLICK, () => {
  //Do something with the click action
});

button2.subscribe(Button.Action.CLICK, () => {
  //Do something with the click action
});

// Unsubscribe from the button group update action
// Unsubscribe from button1 and button2 click actions
myGroupButton.unsubscribe();

Unsubscribe from button group actions only

You call unsubscribe with false to remove only button group subscriptions while leaving child subscriptions intact. For example, you might want to unsubscribe from the button group but keep button listeners so that the buttons can be reused in a different actions (such as a modal).

const button1 = Button.create(app, {label: 'Settings'});
const button2 = Button.create(app, {label: 'Help'});
const myGroupButton = ButtonGroup.create(app, {label: 'More actions', buttons: [button1, button2]});
// Using the same button group as above
myGroupButton.subscribe(ButtonGroup.Action.UPDATE, data => {
  // Do something when the button group is updated
  // The data is in the following format: {id: string, label: string, buttons: [{id: string, label: string, disabled: boolean} ...]}
});

button1.subscribe(Button.Action.CLICK, () => {
  //Do something with the click action
});

button2.subscribe(Button.Action.CLICK, () => {
  //Do something with the click action
});

// Unsubscribe from only the button group update action
myGroupButton.unsubscribe(false);

// Reuse button1 and button2 in a modal
const modalOptions = {
  title: 'My Modal',
  message: 'Hello world!',
  footer: {secondary: [button1, button2]},
};

const myModal = Modal.create(app, modalOptions);

Update options

You can call the set method with partial button group options to update the options of an existing button group. This automatically triggers the update action on the button group and merges the new given options with existing options.

const button1 = Button.create(app, {label: 'Settings'});
const button2 = Button.create(app, {label: 'Help'});
const myGroupButton = ButtonGroup.create(app, {label: 'More actions', buttons: [button1, button2]});
myGroupButton.set({disabled: true});

Update buttons

You can update buttons attached to a button group. Any updates made to the button group's children automatically trigger an update action on the button group.

const button1 = Button.create(app, {label: 'Settings'});
const button2 = Button.create(app, {label: 'Help'});
const myGroupButton = ButtonGroup.create(app, {label: 'More actions', buttons: [button1, button2]});
button1.set({disabled: true});

Sign up for a Partner account to get started.

Sign up