diff --git a/superset-frontend/src/components/URLShortLinkButton/index.jsx b/superset-frontend/src/components/URLShortLinkButton/index.jsx
index 35795f81a1..4a03e02d3e 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 09d646853d..86c73a09b6 100644
--- a/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx
+++ b/superset-frontend/src/dashboard/components/SliceHeaderControls/index.tsx
@@ -213,6 +213,8 @@ class SliceHeaderControls extends React.PureComponent<
render() {
const {
+ componentId,
+ dashboardId,
slice,
isFullSize,
cachedDttm = [],
@@ -221,7 +223,6 @@ class SliceHeaderControls extends React.PureComponent<
addDangerToast = () => {},
supersetCanShare = false,
isCached = [],
- formData,
} = this.props;
const crossFilterItems = getChartMetadataRegistry().items;
const isTable = slice.viz_type === 'table';
@@ -310,13 +311,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 c70e47dc3d..b196100734 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 { t, logging, QueryFormData } 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 be857517e0..bd570291f2 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,