superset/superset-frontend/src/embedded/api.tsx

69 lines
2.0 KiB
TypeScript

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import getBootstrapData from 'src/utils/getBootstrapData';
import { store } from '../views/store';
import { getDashboardPermalink as getDashboardPermalinkUtil } from '../utils/urlUtils';
const bootstrapData = getBootstrapData();
type Size = {
width: number;
height: number;
};
type EmbeddedSupersetApi = {
getScrollSize: () => Size;
getDashboardPermalink: ({ anchor }: { anchor: string }) => Promise<string>;
getActiveTabs: () => string[];
};
const getScrollSize = (): Size => ({
width: document.body.scrollWidth,
height: document.body.scrollHeight,
});
const getDashboardPermalink = async ({
anchor,
}: {
anchor: string;
}): Promise<string> => {
const state = store?.getState();
const { dashboardId, dataMask, activeTabs } = {
dashboardId:
state?.dashboardInfo?.id || bootstrapData?.embedded!.dashboard_id,
dataMask: state?.dataMask,
activeTabs: state.dashboardState?.activeTabs,
};
return getDashboardPermalinkUtil({
dashboardId,
dataMask,
activeTabs,
anchor,
});
};
const getActiveTabs = () => store?.getState()?.dashboardState?.activeTabs || [];
export const embeddedApi: EmbeddedSupersetApi = {
getScrollSize,
getDashboardPermalink,
getActiveTabs,
};