npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@stoddabr/react-tableau-embed-live

v0.3.29

Published

Embed your Tableau dashboards with confidence!

Downloads

13,660

Readme

Increment & Publish Deploy Example Site Test

React Tableau Embed Live

See the demo!

Embed your Tableau dashboards in React with confidence!

  • React is a mid-tier web framework
  • Tableau is a dashboard tool that needs no introduction but I'll give one anyways. It's a fantastic data exploration tool which empowers anyone who can drag-and-drop to build beautiful data visualizations. Sometimes authors want to share this on a website with an...
  • Embed places a Tableau dashboard inside of a webpage where others can view and use it using the Tableau Embedding API.
  • Live previous Tableau libraries contained stale copies of the Tableau source code. This made staying up-to-date difficult so features lagged (often by years), bloated libraries with all that extra source code, and could lead to backward compatibility issues. This version loads the Tableau Embedding API live from the server given in the source URL. Currently, it's optimized for the Tableau Embedding API v3 with backwards compatibility to v2 planned.

Other features:

  • Typescript support! As much as Tableau gives us. Advanced might encounter any-holes and should refer to the Tableau official type reference (i.e., if you're using vizRef.current you're advanced). I have asked several times for full Tableau Embed API types and Tableau keeps saying they're "coming soon".
  • Both prop-based and event-based callback support! Because, as I have noticed, sometimes events only trigger on one (or none!).

Quickstart

Install via npm @stoddabr/react-tableau-embed-live:

npm install @stoddabr/react-tableau-embed-live

Then import, pass a source url and then badda-bing you're in bussiness.

Simple example using a public tableau embedding:

import * as React from "react";
import "./App.css";
import { TableauEmbed } from "@stoddabr/react-tableau-embed-live";

function App() {
  return (
    <div
      className="App"
      style={{
        alignItems: "center",
        display: "flex",
        justifyContent: "center",
        flexDirection: "column",
      }}
    >
      <h1>The Tableau Embedded API v3</h1>
      <h3>Now more lightweight, and backwards compatible!</h3>
      <TableauEmbed sourceUrl="https://public.tableau.com/views/WorldIndicators/GDPpercapita" />
    </div>
  );
}
export default App;

Demo

An example site lives in the folder example/react-tableau-embed-live-examples with useful wrapper components inside of example/react-tableau-embed-live-examples/src/tableau_examples.

To run demo on your machine:

# run once:
#   clone the repo
git clone https://github.com/stoddabr/react-tableau-embed-live.git
#   navigate to example folder
cd example/react-tableau-embed-live-examples
#   install example dependencies
npm i

# run every time:
#   run project in hot-reloading dev-mode
npm run dev

<TableauEmbed /> Props

Used internally by this library.

| Prop Name | Type | What do | Min. Library Version | | -------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | | sourceUrl | string | The URL of the Tableau dashboard. Can be a share or direct link. The host of this url will be used to fetch the Tableau API. | 0.3.X | | version | string | The version of the Tableau Embedding API to use. Defaults to "latest" which may change if you use Tableau Server or Cloud. Will always minify. If using a custom version, ensure the feature is available as per the changelog. Example: "3.1.0". | 0.3.X | | loadingSpinner | React.ReactElement | Custom loading spinner. By default this library uses a fork of lds-ripple | 0.3.19 | | ref | TableauVizRef (React.Ref) | Forwarded reference to underlying <tableau-viz/> WebComponent used in the Tableau Embed API. To be used with a useRef hook. Useful for advanced callbacks. See the "Add/Remove Filter Buttons" example. | 0.3.18 |

Props drilled directly into the Tableau Embed API's <tableau-viz> WebComponent. See documentation for full explination. This table simply explains how they are exposed. Because of Tableau Embed API idiosyncrasies, some of these may not work.

| Prop Name | Type | What do | Min. Library Version | | --------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | | height | React.CSSProperties["height"] (number or string) | Height of the Tableau Dashboard. Will default to the container (but may be glitchy). It's recommended to fix with same as authored Tableau dashboard. | 0.3.X | | width | React.CSSProperties["width"] (number or string) | Width of the Tableau Dashboard. Will default to the container (but may be glitchy). It's recommended to fix with same as authored Tableau dashboard. | 0.3.X | | ["hide-tabs"] | boolean | Will hide toolbars on the Tableau Dashboard. Note: to set to false (and show tabs), pass undefined not false. Tableau's API appears to cast this prop to a string which makes false-> "false" -> which is truthy (i.e., boolean("false") === true is true). See example below. | 0.3.X | | toolbar | "top" | "bottom" | "hidden" | Location of the toolbars. | 0.3.X | | device | "default" | "desktop" | "tablet" | "phone" | Device layout to use. Defaults to "default" | 0.3.X | | token | See Tableau docs | See Tableau docs | 0.3.22 | | ["instance-id-to-clone"] | See Tableau docs | See Tableau docs | 0.3.X | | ["disable-url-actions"] | See Tableau docs | See Tableau docs | 0.3.X | | SupportedEvent* | (event: any) => void | Callback function to be mounted directly on WebComponent. See list of supported events in the Tableau docs. For example onCustomViewLoaded={()=>console.log("hola world")} | 0.3.X | | onEventListener** SupportedEvent* ** | (event: any) => void | Callback function to be mounted using an event listener. This may result in a different behavior. Similar name to props in row above only with "onEventListener" instead of "on" prefix. Callback function to be mounted directly on WebComponent. See list of supported events in the Tableau docs. For example OnEventListenerCustomViewLoaded={()=>console.log("hola world")} | 0.3.X |

Note: some props in require odd syntax to pass due to how tableau has hyphenated fields which JS is allergic to. To sidestep future compatibility issues, this library recommends using an odd syntax which involes spreading a temporary object. An example of this syntax can be seen in the simple example below with hide-tabs.

<TableauEmbed
  sourceUrl="https://public.tableau.com/views/WorldIndicators/GDPpercapita"
  {...{ "hide-tabs": showTab ? undefined : true }}
/>

Styling

The styles of the parent component of TableauEmbed is important and tricky to get correct. By default, without any height/width props passed, it will take up the height/width in the parent container. However, this will only happen if the tableau dashboard being embedded is NOT set to fixed mode or the size it's attempting is larger than it's range (tableau docs). Fixed dashboards should always be set to their exact dimensions and then scaled using JS/CSS transforms (for example, "the react way" in this article).

Prior updates of the Tableau Embedded API have broken this styling (specifically v3.2 -> v3.4). It's recommended for any project using this library to implement integration-level snapshot tests that check to ensure the TableauEmbed component is styled correctly.

Licences

When using this library ensure you are following Tableau's licensing agreement.

Limitations

  • Only backwards comparible down to Tableau Embed API v3.0 (i.e., later than (Tableau server v2021.4)[https://help.tableau.com/current/api/embedding_api/en-us/docs/embedding_api_get.html])
  • Lacking full type safety (some types are scrapped from the Tableau source code)
  • Filtering not built-in (requires ref callbacks)
  • No tests!!!
  • Attempting to print the page when exporting an embedded tableau dashboard will not work. If you need to do this, consider using the Tableau REST API to generate an image. Most pdf-from-DOM-snapshot libraries will not work either (if you get one working, please please create a PR to update this readme).

If you discover anything other limitations please create an issue, and/or ping me on Twitter: @sliceofbrett

Contributions

Contributions welcome!!

To contribute, please fork, then create an atomic PR that describes the fix or feature. If you're not sure what to contribute, see the above list of limitations, or any open issues without an active dev branch.

This project is setup with some CICD github actions to make this process easier. Every push request will trigger actions to increment the npm patch version, build the project, publish the project to npm, build the examples site, and then publishes the example site to a dedicated branch.