# Databricks AI / BI browser client

An API to assist developers in integrating AI/BI dashboards into their applications ([AWS](https://docs.databricks.com/en/dashboards/embed.html), [Azure](https://learn.microsoft.com/en-us/azure/databricks/dashboards/embed), [GCP](https://docs.gcp.databricks.com/en/dashboards/embed.html)).

## Usage

### Basic Usage

```ts
const dashboard = new DatabricksDashboard({
  workspaceId: '1234567890123456',
  instanceUrl: 'https://my-databricks-instance.com',
  container: document.getElementById('dashboard-container'),
  dashboardId: 'abcdedf123456',
  pageId: 'ab12cd34',
  token: tokenThatCanBeSeenByViewers,
});

dashboard.initialize();
```

### Handling Token Expiration for Seamless Viewer Experience

To support long-running dashboard, you can pass a `getNewToken` function that automatically refreshes the token when it is close to expiration.

```ts
const dashboard = new DatabricksDashboard({
  // ...other required options
  getNewToken: async () => {
    // Return a string literal token value to the API
  },
});
```

### Set up Color Scheme

You can configure the embedded dashboard's color scheme using the `colorScheme` option.

The `colorScheme` option maps to the [CSS `color-scheme`](https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme) property, which allows the embedded dashboard to respect or override the user's light or dark preference.

```ts
const dashboard = new DatabricksDashboard({
  // ...other required options
  colorScheme: 'light dark', // or "light", or "dark"
});
```

### Programmatic Navigation

You can navigate between dashboards or pages without reloading the iframe using the `navigate()` method. This provides a smooth transition for users switching between different dashboards.

```ts
const dashboard = new DatabricksDashboard({
  // ...other required options
});

dashboard.initialize();

// Navigate to a different dashboard
await dashboard.navigate({ dashboardId: 'xyz789' });

// Navigate to a specific page within a dashboard
await dashboard.navigate({ dashboardId: 'xyz789', pageId: 'page123' });
```

**Important Notes:**

- The `navigate()` method can only be called after the dashboard has been initialized and loaded
- The method will throw an error if called before the dashboard is ready or after it has been destroyed
