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