From c37e53a918370054559406aeea61424d38150344 Mon Sep 17 00:00:00 2001
From: Ville Brofeldt <33317356+villebro@users.noreply.github.com>
Date: Tue, 19 Apr 2022 22:34:41 +0300
Subject: [PATCH] fix(dashboard): copy permalink to dashboard chart (#19772)
* fix(dashboard): copy permalink to dashboard chart
* lint
* address comments
---
.../components/URLShortLinkButton/index.jsx | 8 +++---
.../components/SliceHeaderControls/index.tsx | 6 ++--
.../components/menu/ShareMenuItems/index.tsx | 28 ++++++++-----------
superset-frontend/src/utils/urlUtils.ts | 14 ++++++----
4 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/superset-frontend/src/components/URLShortLinkButton/index.jsx b/superset-frontend/src/components/URLShortLinkButton/index.jsx
index 35795f81a11fa..4a03e02d3ea5a 100644
--- a/superset-frontend/src/components/URLShortLinkButton/index.jsx
+++ b/superset-frontend/src/components/URLShortLinkButton/index.jsx
@@ -57,11 +57,11 @@ class URLShortLinkButton extends React.Component {
if (this.props.dashboardId) {
getFilterValue(this.props.dashboardId, nativeFiltersKey)
.then(filterState =>
- getDashboardPermalink(
- String(this.props.dashboardId),
+ getDashboardPermalink({
+ dashboardId: this.props.dashboardId,
filterState,
- this.props.anchorLinkId,
- )
+ hash: this.props.anchorLinkId,
+ })
.then(this.onShortUrlSuccess)
.catch(this.props.addDangerToast),
)
diff --git a/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx b/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx
index b9e1e304287af..37ced3ff5a6db 100644
--- a/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx
+++ b/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx
@@ -214,6 +214,8 @@ class SliceHeaderControls extends React.PureComponent<
render() {
const {
+ componentId,
+ dashboardId,
slice,
isFullSize,
cachedDttm = [],
@@ -222,7 +224,6 @@ class SliceHeaderControls extends React.PureComponent<
addDangerToast = () => {},
supersetCanShare = false,
isCached = [],
- formData,
} = this.props;
const crossFilterItems = getChartMetadataRegistry().items;
const isTable = slice.viz_type === 'table';
@@ -311,13 +312,14 @@ class SliceHeaderControls extends React.PureComponent<
{supersetCanShare && (
)}
diff --git a/superset-frontend/src/dashboard/components/menu/ShareMenuItems/index.tsx b/superset-frontend/src/dashboard/components/menu/ShareMenuItems/index.tsx
index 24e63ed2060b6..b196100734cc3 100644
--- a/superset-frontend/src/dashboard/components/menu/ShareMenuItems/index.tsx
+++ b/superset-frontend/src/dashboard/components/menu/ShareMenuItems/index.tsx
@@ -18,14 +18,10 @@
*/
import React from 'react';
import copyTextToClipboard from 'src/utils/copy';
-import { logging, QueryFormData, t } from '@superset-ui/core';
+import { t, logging } from '@superset-ui/core';
import { Menu } from 'src/components/Menu';
-import {
- getChartPermalink,
- getDashboardPermalink,
- getUrlParam,
-} from 'src/utils/urlUtils';
-import { RESERVED_DASHBOARD_URL_PARAMS, URL_PARAMS } from 'src/constants';
+import { getDashboardPermalink, getUrlParam } from 'src/utils/urlUtils';
+import { URL_PARAMS } from 'src/constants';
import { getFilterValue } from 'src/dashboard/components/nativeFilters/FilterBar/keyValue';
interface ShareMenuItemProps {
@@ -36,8 +32,8 @@ interface ShareMenuItemProps {
emailBody: string;
addDangerToast: Function;
addSuccessToast: Function;
- dashboardId?: string;
- formData?: Pick;
+ dashboardId: string | number;
+ dashboardComponentId?: string;
}
const ShareMenuItems = (props: ShareMenuItemProps) => {
@@ -49,23 +45,21 @@ const ShareMenuItems = (props: ShareMenuItemProps) => {
addDangerToast,
addSuccessToast,
dashboardId,
- formData,
+ dashboardComponentId,
...rest
} = props;
async function generateUrl() {
- // chart
- if (formData) {
- // we need to remove reserved dashboard url params
- return getChartPermalink(formData, RESERVED_DASHBOARD_URL_PARAMS);
- }
- // dashboard
const nativeFiltersKey = getUrlParam(URL_PARAMS.nativeFiltersKey);
let filterState = {};
if (nativeFiltersKey && dashboardId) {
filterState = await getFilterValue(dashboardId, nativeFiltersKey);
}
- return getDashboardPermalink(String(dashboardId), filterState);
+ return getDashboardPermalink({
+ dashboardId,
+ filterState,
+ hash: dashboardComponentId,
+ });
}
async function onCopyLink() {
diff --git a/superset-frontend/src/utils/urlUtils.ts b/superset-frontend/src/utils/urlUtils.ts
index be857517e06d0..bd570291f2cba 100644
--- a/superset-frontend/src/utils/urlUtils.ts
+++ b/superset-frontend/src/utils/urlUtils.ts
@@ -154,11 +154,15 @@ export function getChartPermalink(
});
}
-export function getDashboardPermalink(
- dashboardId: string,
- filterState: JsonObject,
- hash?: string,
-) {
+export function getDashboardPermalink({
+ dashboardId,
+ filterState,
+ hash, // the anchor part of the link which corresponds to the tab/chart id
+}: {
+ dashboardId: string | number;
+ filterState: JsonObject;
+ hash?: string;
+}) {
// only encode filter box state if non-empty
return getPermalink(`/api/v1/dashboard/${dashboardId}/permalink`, {
filterState,