Data Sharing Between Apps

Setting a Context

The Shared Contexts API is accessible through the glue.contexts object.

See the JavaScript Shared Contexts example on GitHub.

To create a shared context or replace entirely the value of an existing one, use the set() method:

const newContext = { backgroundColor: "purple" };

// This will create a new shared context, or if the context already exists,
// will completely overwrite its value.
await glue.contexts.set("app-styling", newContext);

The set() method overwrites the existing value of the shared context object, as opposed to the update() method, which only updates the values of its properties.

Getting a Context

To get the value of a specific shared context, use the get() method:

const data = await glue.contexts.get("app-styling");

Listing All Contexts

To get the names of all currently available shared contexts, use the all() method:

// Returns a string array with the available context names.
const availableContexts = glue.contexts.all();

Updating a Context

To update the value of an existing shared context, use the update() method. New properties will be added, existing ones will be updated, and you can also remove shared context keys by setting them to null. If the specified shared context doesn't exist, it will be created:

const contextUpdate = {
    backgroundColor: "red",
    alternativeColor: "green"
};

await glue.contexts.update("app-styling", contextUpdate);

To remove a shared context key, set it to null:

const keyToRemove = { alternativeColor: null };

await glue.contexts.update("app-styling", keyToRemove);

Updating Specific Properties

You can use the setPath() and setPaths() methods to update specific shared context properties using a dot-separated string path to point to the location of the property within the shared context object. If the property (or the path) doesn't exist, it will be created. These methods are useful for updating or creating one or more nested properties within the shared context object.

To update or create a single property, use the setPath() method. It accepts the name of the shared context, a path to the property to update, and a value for the property:

const path = "text.color";
const value = "grey";

await glue.contexts.setPath("app-styling", path, value);

// Assuming the context already exists and has this shape:
// { backgroundColor: "red" }, it will be updated as follows:
// { backgroundColor: "red", text: { color: "grey" } }

To update or create multiple properties, use the setPaths() method. It accepts the name of the shared context and a list of PathValue objects each containing a path to the property to update and a value for it:

const updates = [
    { path: "table.cells", value: { width: 50, height: 30 } },
    { path: "text.color", value: "white" }
];

await glue.contexts.setPaths("app-styling", updates);

// Assuming the context already exists and has this shape:
// { backgroundColor: "red", text: { color: "grey" } }, it will be updated as follows:
//
// {
//     backgroundColor: "red",
//     text: {
//         color: "white"
//     },
//     table: {
//         cells: {
//             width: 50,
//             height: 30
//         }
//     }
// }

Subscribing for Context Updates

To subscribe for context updates, use the subscribe() method. It accepts the name of the shared context as a first required parameter and a function that will handle the context updates as a second required parameter:

const handler = (context, delta, removed) => {
    const bgColor = context.backgroundColor;

    console.log(bgColor);
};

await glue.contexts.subscribe("app-styling", handler);

Unsubscribing

The subscribe() method returns a Promise which resolves with a function you can use to unsubscribe from context updates:

const unsubscribe = await glue.contexts.subscribe("app-styling", handler);

unsubscribe();

Destroying a Context

To destroy a context object, use the destroy() method:

await glue.contexts.destroy("app-styling");

Reference

For a complete list of the available Shared Contexts API methods and properties, see the Shared Contexts API Reference Documentation.