How to test Web Components

  • 25 April 2023
  • 1 reply
  • 122 views

Userlevel 3

Web Components are a great way to embed the GoodData dashboards into your application. They are much easier to set up compared to the GoodData.UI React SDK and its <Dashboard /> component, and they beat iframes in performance and flexibility.

This article aims to describe the most simple integration of the <gd-dashboard /> Web Component into plain HTML served via HTTPS. This is only meant as a how-to and may not comply with the best security practices for production deployment.

Authentication tokens are hardcoded in the code below. Do not do this in production!

index.html

First, create a new blank file index.html that looks like this:

<!DOCTYPE html>
<html lang="en">
<head>
<script
type="module"
src="https://jirizajic.demo.cloud.gooddata.com/components/ecommerce-parent.js?auth=sso">
</script>
</head>

<body>
<h1>heading</h1>
<gd-dashboard dashboard="092929af-375a-4e9c-964f-2add8cdbd259"></gd-dashboard>
</body>
</html>

Replace all the occurrences of jirizajic.demo.cloud.gooddata.com with your domain.

Replace all the occurrences of ecommerce-parent with your workspace id.

Replace 092929af-375a-4e9c-964f-2add8cdbd259 with your dashboard id.

https://localhost

Due to CORS limitations it is not possible to simply open this file:/// in your browser. We need to properly serve it over HTTPS. One of many ways to do this is to use the https-localhost utility. Simply open your favorite command line terminal, navigate to the destination where you created your index.html file, and run npx https-localhost. If you’re not familiar with npx, search the internet for some tutorials and examples on npm/npx, and then come back here to continue.

Once your https-localhost server is up you should be able to access your index.html at https://localhost in your browser.

CORS

There’s a good chance you are going to run into the following Cross-Origin Resource Sharing (CORS) error:

Access to script at 'https://jirizajic.demo.cloud.gooddata.com/components/ecommerce-parent.js?auth=sso' from origin 'https://localhost' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

To fix this, navigate to https://your.gooddata.domain.com/settings and look into the Developer section to Manage your Cross-origin resource sharing. Add https://localhost to the list of allowed origins. The dashboard should now render:

Access Token Authentication

The example above uses SSO as a method for authentication. If you want, you can authenticate programmatically using the personal access token. To do this, you’ll need to update your index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<script type="module">
import { setContext } from "https://jirizajic.demo.cloud.gooddata.com/components/my-workspace.js";
import factory, { TigerTokenAuthProvider } from "https://jirizajic.demo.cloud.gooddata.com/components/tigerBackend.js";

setContext({
backend: factory()
.onHostname("https://jirizajic.demo.cloud.gooddata.com")
.withAuthentication(new TigerTokenAuthProvider("superSecretToken")),
workspaceId: "ecommerce-parent",
});
</script>
</head>

<body>
<h1>heading</h1>
<gd-dashboard dashboard="092929af-375a-4e9c-964f-2add8cdbd259"></gd-dashboard>
</body>
</html>

Again, don’t forget to replace all the occurrences of jirizajic.demo.cloud.gooddata.com with your domain, all the occurrences of ecommerce-parent with your workspace id, 092929af-375a-4e9c-964f-2add8cdbd259 with your dashboard id, and superSecretToken with your token.

If you don’t have a token, navigate to https://your.gooddata.domain.com/settings and look into the Developer section for Personal access tokens and create a new token.

Conclusion

Web Components are available for GoodData Cloud as well as GoodData.CN. There are currently two components available, <gd-dashboard /> and <gd-insight />. Authentication is supported via SSO and using personal access tokens. Read more about Web Components in the official documentation at https://sdk.gooddata.com/gooddata-ui/docs/webcomponents_intro.html.


1 reply

thanks!

Reply