From 8eb7674dc443ddf6d5a3f71b54050443d2aadb53 Mon Sep 17 00:00:00 2001 From: George Voicu Date: Thu, 15 Jun 2023 12:24:06 +0200 Subject: [PATCH 1/4] feat(embedded-sdk): Pass query parameters to embedded dashboard --- superset-embedded-sdk/README.md | 5 ++++- superset-embedded-sdk/src/index.ts | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/superset-embedded-sdk/README.md b/superset-embedded-sdk/README.md index 7e05d94a6ce1d..cc41151d66abb 100644 --- a/superset-embedded-sdk/README.md +++ b/superset-embedded-sdk/README.md @@ -40,10 +40,13 @@ embedDashboard({ supersetDomain: "https://superset.example.com", mountPoint: document.getElementById("my-superset-container"), // any html element that can contain an iframe fetchGuestToken: () => fetchGuestTokenFromBackend(), - dashboardUiConfig: { // dashboard UI config: hideTitle, hideTab, hideChartControls, filters.visible, filters.expanded (optional) + dashboardUiConfig: { // dashboard UI config: hideTitle, hideTab, hideChartControls, filters.visible, filters.expanded (optional), urlParams (optional) hideTitle: true, filters: { expanded: true, + }, + urlParams: { + 'customParamName': 'customParamValue', } }, }); diff --git a/superset-embedded-sdk/src/index.ts b/superset-embedded-sdk/src/index.ts index d2513422fa104..e3f5a678fab75 100644 --- a/superset-embedded-sdk/src/index.ts +++ b/superset-embedded-sdk/src/index.ts @@ -42,6 +42,9 @@ export type UiConfigType = { visible?: boolean expanded?: boolean } + urlParams?: { + [key: string]: any + } } export type EmbedDashboardParams = { @@ -116,6 +119,8 @@ export async function embedDashboard({ + filterConfigKeys .map(key => DASHBOARD_UI_FILTER_CONFIG_URL_PARAM_KEY[key] + '=' + filterConfig[key]).join('&') : "" + const extraUrlParamsString = new URLSearchParams(dashboardUiConfig?.urlParams).toString() + const extraUrlParams = extraUrlParamsString ? "&" + extraUrlParamsString : "" // set up the iframe's sandbox configuration iframe.sandbox.add("allow-same-origin"); // needed for postMessage to work @@ -149,7 +154,7 @@ export async function embedDashboard({ resolve(new Switchboard({ port: ourPort, name: 'superset-embedded-sdk', debug })); }); - iframe.src = `${supersetDomain}/embedded/${id}${dashboardConfig}${filterConfigUrlParams}`; + iframe.src = `${supersetDomain}/embedded/${id}${dashboardConfig}${filterConfigUrlParams}${extraUrlParams}`; //@ts-ignore mountPoint.replaceChildren(iframe); log('placed the iframe') From d74bdd2e89457cd25acc2ca5a5274b48be930d06 Mon Sep 17 00:00:00 2001 From: George Voicu Date: Thu, 15 Jun 2023 14:01:29 +0200 Subject: [PATCH 2/4] feat(embedded-sdk): Simplify example --- superset-embedded-sdk/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superset-embedded-sdk/README.md b/superset-embedded-sdk/README.md index cc41151d66abb..1381d6d0f99d4 100644 --- a/superset-embedded-sdk/README.md +++ b/superset-embedded-sdk/README.md @@ -46,7 +46,7 @@ embedDashboard({ expanded: true, }, urlParams: { - 'customParamName': 'customParamValue', + customParamName: 'customParamValue', } }, }); From 4df479b861b23608f90266e024472fb2b060cc98 Mon Sep 17 00:00:00 2001 From: George Voicu Date: Thu, 15 Jun 2023 14:16:45 +0200 Subject: [PATCH 3/4] feat(embedded-sdk): Simplify example --- superset-embedded-sdk/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/superset-embedded-sdk/README.md b/superset-embedded-sdk/README.md index 1381d6d0f99d4..0b9a7b781b38b 100644 --- a/superset-embedded-sdk/README.md +++ b/superset-embedded-sdk/README.md @@ -46,7 +46,9 @@ embedDashboard({ expanded: true, }, urlParams: { - customParamName: 'customParamValue', + foo: 'value1', + bar: 'value2', + // ... } }, }); From e48a0f34381581beff4c109b0f1ea8e07e0f44d2 Mon Sep 17 00:00:00 2001 From: George Voicu Date: Tue, 20 Feb 2024 13:58:31 +0100 Subject: [PATCH 4/4] feat(embedded-sdk): Passed query parameters can override filter settings --- superset-embedded-sdk/package-lock.json | 4 ++-- superset-embedded-sdk/package.json | 2 +- superset-embedded-sdk/src/index.ts | 17 ++++++++--------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/superset-embedded-sdk/package-lock.json b/superset-embedded-sdk/package-lock.json index 6c0052ac3cebe..a1bd80d041789 100644 --- a/superset-embedded-sdk/package-lock.json +++ b/superset-embedded-sdk/package-lock.json @@ -1,12 +1,12 @@ { "name": "@superset-ui/embedded-sdk", - "version": "0.1.0-alpha.10", + "version": "0.1.0-alpha.11", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@superset-ui/embedded-sdk", - "version": "0.1.0-alpha.10", + "version": "0.1.0-alpha.11", "license": "Apache-2.0", "dependencies": { "@superset-ui/switchboard": "^0.18.26-0", diff --git a/superset-embedded-sdk/package.json b/superset-embedded-sdk/package.json index 55ed198598459..7e8fca1f481e8 100644 --- a/superset-embedded-sdk/package.json +++ b/superset-embedded-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@superset-ui/embedded-sdk", - "version": "0.1.0-alpha.10", + "version": "0.1.0-alpha.11", "description": "SDK for embedding resources from Superset into your own application", "access": "public", "keywords": [ diff --git a/superset-embedded-sdk/src/index.ts b/superset-embedded-sdk/src/index.ts index 06351455f2c74..4cbcb74ae73a6 100644 --- a/superset-embedded-sdk/src/index.ts +++ b/superset-embedded-sdk/src/index.ts @@ -115,16 +115,15 @@ export async function embedDashboard({ async function mountIframe(): Promise { return new Promise(resolve => { const iframe = document.createElement('iframe'); - const dashboardConfig = dashboardUiConfig ? `?uiConfig=${calculateConfig()}` : "" + const dashboardConfigUrlParams = dashboardUiConfig ? {uiConfig: `${calculateConfig()}`} : undefined; const filterConfig = dashboardUiConfig?.filters || {} const filterConfigKeys = Object.keys(filterConfig) - const filterConfigUrlParams = filterConfigKeys.length > 0 - ? "&" - + filterConfigKeys - .map(key => DASHBOARD_UI_FILTER_CONFIG_URL_PARAM_KEY[key] + '=' + filterConfig[key]).join('&') - : "" - const extraUrlParamsString = new URLSearchParams(dashboardUiConfig?.urlParams).toString() - const extraUrlParams = extraUrlParamsString ? "&" + extraUrlParamsString : "" + const filterConfigUrlParams = Object.fromEntries(filterConfigKeys.map( + key => [DASHBOARD_UI_FILTER_CONFIG_URL_PARAM_KEY[key], filterConfig[key]])) + + // Allow url query parameters from dashboardUiConfig.urlParams to override the ones from filterConfig + const urlParams = {...dashboardConfigUrlParams, ...filterConfigUrlParams, ...dashboardUiConfig?.urlParams} + const urlParamsString = Object.keys(urlParams).length ? '?' + new URLSearchParams(urlParams).toString() : '' // set up the iframe's sandbox configuration iframe.sandbox.add("allow-same-origin"); // needed for postMessage to work @@ -158,7 +157,7 @@ export async function embedDashboard({ resolve(new Switchboard({ port: ourPort, name: 'superset-embedded-sdk', debug })); }); - iframe.src = `${supersetDomain}/embedded/${id}${dashboardConfig}${filterConfigUrlParams}${extraUrlParams}`; + iframe.src = `${supersetDomain}/embedded/${id}${urlParamsString}`; //@ts-ignore mountPoint.replaceChildren(iframe); log('placed the iframe')