Dashboard embed: Use port instead of callbackUrl (#73883)

This commit is contained in:
Alex Khomenko 2023-08-28 12:35:26 +03:00 committed by GitHub
parent 4ef98449ff
commit c6f0adf12d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,7 +2,7 @@ import { css } from '@emotion/css';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { GrafanaTheme2, PageLayoutType } from '@grafana/data'; import { GrafanaTheme2, PageLayoutType } from '@grafana/data';
import { getBackendSrv } from '@grafana/runtime'; import { getBackendSrv, locationService } from '@grafana/runtime';
import { TimeZone } from '@grafana/schema'; import { TimeZone } from '@grafana/schema';
import { Button, ModalsController, PageToolbar, useStyles2 } from '@grafana/ui'; import { Button, ModalsController, PageToolbar, useStyles2 } from '@grafana/ui';
import { Page } from 'app/core/components/Page/Page'; import { Page } from 'app/core/components/Page/Page';
@ -24,7 +24,7 @@ interface EmbeddedDashboardPageRouteParams {
} }
interface EmbeddedDashboardPageRouteSearchParams { interface EmbeddedDashboardPageRouteSearchParams {
callbackUrl?: string; serverPort?: string;
json?: string; json?: string;
accessToken?: string; accessToken?: string;
} }
@ -45,13 +45,13 @@ export default function EmbeddedDashboardPage({ route, queryParams }: Props) {
* Create dashboard model and initialize the dashboard from JSON * Create dashboard model and initialize the dashboard from JSON
*/ */
useEffect(() => { useEffect(() => {
const callbackUrl = queryParams.callbackUrl; const serverPort = queryParams.serverPort;
if (!callbackUrl) { if (!serverPort) {
throw new Error('No callback URL provided'); throw new Error('No serverPort provided');
} }
getBackendSrv() getBackendSrv()
.get(`${callbackUrl}/load-dashboard`) .get(`http://localhost:${serverPort}/load-dashboard`)
.then((dashboardJson) => { .then((dashboardJson) => {
setDashboardJson(dashboardJson); setDashboardJson(dashboardJson);
// Remove dashboard UID from JSON to prevent errors from external dashboards // Remove dashboard UID from JSON to prevent errors from external dashboards
@ -83,7 +83,7 @@ export default function EmbeddedDashboardPage({ route, queryParams }: Props) {
return ( return (
<Page pageNav={{ text: dashboard.title }} layout={PageLayoutType.Custom}> <Page pageNav={{ text: dashboard.title }} layout={PageLayoutType.Custom}>
<Toolbar dashboard={dashboard} callbackUrl={queryParams.callbackUrl} dashboardJson={dashboardJson} /> <Toolbar dashboard={dashboard} dashboardJson={dashboardJson} />
{dashboardState.initError && <DashboardFailed initError={dashboardState.initError} />} {dashboardState.initError && <DashboardFailed initError={dashboardState.initError} />}
<div> <div>
<DashboardGrid dashboard={dashboard} isEditable viewPanel={null} editPanel={null} hidePanelMenus /> <DashboardGrid dashboard={dashboard} isEditable viewPanel={null} editPanel={null} hidePanelMenus />
@ -94,11 +94,10 @@ export default function EmbeddedDashboardPage({ route, queryParams }: Props) {
interface ToolbarProps { interface ToolbarProps {
dashboard: DashboardModel; dashboard: DashboardModel;
callbackUrl?: string;
dashboardJson: string; dashboardJson: string;
} }
const Toolbar = ({ dashboard, callbackUrl, dashboardJson }: ToolbarProps) => { const Toolbar = ({ dashboard, dashboardJson }: ToolbarProps) => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const styles = useStyles2(getStyles); const styles = useStyles2(getStyles);
@ -107,11 +106,13 @@ const Toolbar = ({ dashboard, callbackUrl, dashboardJson }: ToolbarProps) => {
}; };
const saveDashboard = async (clone: DashboardModel) => { const saveDashboard = async (clone: DashboardModel) => {
if (!clone || !callbackUrl) { const params = locationService.getSearch();
const serverPort = params.get('serverPort');
if (!clone || !serverPort) {
return; return;
} }
return getBackendSrv().post(`${callbackUrl}/save-dashboard`, { dashboard: clone }); return getBackendSrv().post(`http://localhost:${serverPort}/save-dashboard`, { dashboard: clone });
}; };
return ( return (