mirror of https://github.com/grafana/grafana
DashboardScene: Get rid of panel edit route (#80605)
* Wip: get rod of panel edit route * Cleanup unused code * Test update * Simplify url sync for inspect and vie/edit panel * Update navigating back to dashboard from edit panel * DashboardScene: Panel inspect improvements (#80655) Improve inspect, andle view pane end edit mode inspection * Url sync fixes * Test updatepull/80726/head
parent
dd7259b77e
commit
1de876c354
@ -1,36 +0,0 @@ |
|||||||
// Libraries
|
|
||||||
import React, { useEffect } from 'react'; |
|
||||||
|
|
||||||
import { PageLayoutType } from '@grafana/data'; |
|
||||||
import { Page } from 'app/core/components/Page/Page'; |
|
||||||
import PageLoader from 'app/core/components/PageLoader/PageLoader'; |
|
||||||
import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; |
|
||||||
|
|
||||||
import { getDashboardScenePageStateManager } from './DashboardScenePageStateManager'; |
|
||||||
|
|
||||||
export interface Props extends GrafanaRouteComponentProps<{ uid: string; panelId: string }> {} |
|
||||||
|
|
||||||
export function PanelEditPage({ match }: Props) { |
|
||||||
const stateManager = getDashboardScenePageStateManager(); |
|
||||||
const { panelEditor, isLoading, loadError } = stateManager.useState(); |
|
||||||
|
|
||||||
useEffect(() => { |
|
||||||
stateManager.loadPanelEdit(match.params.uid, match.params.panelId); |
|
||||||
return () => { |
|
||||||
stateManager.clearState(); |
|
||||||
}; |
|
||||||
}, [stateManager, match.params.uid, match.params.panelId]); |
|
||||||
|
|
||||||
if (!panelEditor) { |
|
||||||
return ( |
|
||||||
<Page layout={PageLayoutType.Canvas}> |
|
||||||
{isLoading && <PageLoader />} |
|
||||||
{loadError && <h2>{loadError}</h2>} |
|
||||||
</Page> |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
return <panelEditor.Component model={panelEditor} />; |
|
||||||
} |
|
||||||
|
|
||||||
export default PanelEditPage; |
|
@ -1,49 +0,0 @@ |
|||||||
import { AppEvents } from '@grafana/data'; |
|
||||||
import { locationService } from '@grafana/runtime'; |
|
||||||
import { SceneObjectUrlSyncHandler, SceneObjectUrlValues } from '@grafana/scenes'; |
|
||||||
import appEvents from 'app/core/app_events'; |
|
||||||
|
|
||||||
import { PanelInspectDrawer } from '../inspect/PanelInspectDrawer'; |
|
||||||
import { findVizPanelByKey } from '../utils/utils'; |
|
||||||
|
|
||||||
import { PanelEditor, PanelEditorState } from './PanelEditor'; |
|
||||||
|
|
||||||
export class PanelEditorUrlSync implements SceneObjectUrlSyncHandler { |
|
||||||
constructor(private _scene: PanelEditor) {} |
|
||||||
|
|
||||||
getKeys(): string[] { |
|
||||||
return ['inspect']; |
|
||||||
} |
|
||||||
|
|
||||||
getUrlState(): SceneObjectUrlValues { |
|
||||||
const state = this._scene.state; |
|
||||||
return { |
|
||||||
inspect: state.inspectPanelKey, |
|
||||||
}; |
|
||||||
} |
|
||||||
|
|
||||||
updateFromUrl(values: SceneObjectUrlValues): void { |
|
||||||
const { inspectPanelKey } = this._scene.state; |
|
||||||
const update: Partial<PanelEditorState> = {}; |
|
||||||
|
|
||||||
// Handle inspect object state
|
|
||||||
if (typeof values.inspect === 'string') { |
|
||||||
const panel = findVizPanelByKey(this._scene, values.inspect); |
|
||||||
if (!panel) { |
|
||||||
appEvents.emit(AppEvents.alertError, ['Panel not found']); |
|
||||||
locationService.partial({ inspect: null }); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
update.inspectPanelKey = values.inspect; |
|
||||||
update.overlay = new PanelInspectDrawer({ panelRef: panel.getRef() }); |
|
||||||
} else if (inspectPanelKey) { |
|
||||||
update.inspectPanelKey = undefined; |
|
||||||
update.overlay = undefined; |
|
||||||
} |
|
||||||
|
|
||||||
if (Object.keys(update).length > 0) { |
|
||||||
this._scene.setState(update); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue