LayoutRestorer: Remove layout restorer usage (#105963)
* remove layout restorer usage * remove layout restorer code
This commit is contained in:
@@ -84,7 +84,6 @@ import { setupKeyboardShortcuts } from './keyboardShortcuts';
|
|||||||
import { AutoGridItem } from './layout-auto-grid/AutoGridItem';
|
import { AutoGridItem } from './layout-auto-grid/AutoGridItem';
|
||||||
import { DashboardGridItem } from './layout-default/DashboardGridItem';
|
import { DashboardGridItem } from './layout-default/DashboardGridItem';
|
||||||
import { DefaultGridLayoutManager } from './layout-default/DefaultGridLayoutManager';
|
import { DefaultGridLayoutManager } from './layout-default/DefaultGridLayoutManager';
|
||||||
import { LayoutRestorer } from './layouts-shared/LayoutRestorer';
|
|
||||||
import { addNewRowTo, addNewTabTo } from './layouts-shared/addNew';
|
import { addNewRowTo, addNewTabTo } from './layouts-shared/addNew';
|
||||||
import { clearClipboard } from './layouts-shared/paste';
|
import { clearClipboard } from './layouts-shared/paste';
|
||||||
import { DashboardLayoutManager } from './types/DashboardLayoutManager';
|
import { DashboardLayoutManager } from './types/DashboardLayoutManager';
|
||||||
@@ -191,8 +190,6 @@ export class DashboardScene extends SceneObjectBase<DashboardSceneState> impleme
|
|||||||
DashboardJson | DashboardV2Spec
|
DashboardJson | DashboardV2Spec
|
||||||
>;
|
>;
|
||||||
|
|
||||||
private _layoutRestorer = new LayoutRestorer();
|
|
||||||
|
|
||||||
public constructor(state: Partial<DashboardSceneState>, serializerVersion: 'v1' | 'v2' = 'v1') {
|
public constructor(state: Partial<DashboardSceneState>, serializerVersion: 'v1' | 'v2' = 'v1') {
|
||||||
super({
|
super({
|
||||||
title: 'Dashboard',
|
title: 'Dashboard',
|
||||||
@@ -661,7 +658,7 @@ export class DashboardScene extends SceneObjectBase<DashboardSceneState> impleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
public switchLayout(layout: DashboardLayoutManager) {
|
public switchLayout(layout: DashboardLayoutManager) {
|
||||||
this.setState({ body: this._layoutRestorer.getLayout(layout, this.state.body) });
|
this.setState({ body: layout });
|
||||||
this.state.body.activateRepeaters?.();
|
this.state.body.activateRepeaters?.();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import { serializeRow } from '../../serialization/layoutSerializers/RowsLayoutSe
|
|||||||
import { getElements } from '../../serialization/layoutSerializers/utils';
|
import { getElements } from '../../serialization/layoutSerializers/utils';
|
||||||
import { getDashboardSceneFor } from '../../utils/utils';
|
import { getDashboardSceneFor } from '../../utils/utils';
|
||||||
import { AutoGridLayoutManager } from '../layout-auto-grid/AutoGridLayoutManager';
|
import { AutoGridLayoutManager } from '../layout-auto-grid/AutoGridLayoutManager';
|
||||||
import { LayoutRestorer } from '../layouts-shared/LayoutRestorer';
|
|
||||||
import { clearClipboard } from '../layouts-shared/paste';
|
import { clearClipboard } from '../layouts-shared/paste';
|
||||||
import { scrollCanvasElementIntoView } from '../layouts-shared/scrollCanvasElementIntoView';
|
import { scrollCanvasElementIntoView } from '../layouts-shared/scrollCanvasElementIntoView';
|
||||||
import { BulkActionElement } from '../types/BulkActionElement';
|
import { BulkActionElement } from '../types/BulkActionElement';
|
||||||
@@ -59,7 +58,6 @@ export class RowItem
|
|||||||
|
|
||||||
public readonly isEditableDashboardElement = true;
|
public readonly isEditableDashboardElement = true;
|
||||||
public readonly isDashboardDropTarget = true;
|
public readonly isDashboardDropTarget = true;
|
||||||
private _layoutRestorer = new LayoutRestorer();
|
|
||||||
public containerRef: React.MutableRefObject<HTMLDivElement | null> = React.createRef<HTMLDivElement>();
|
public containerRef: React.MutableRefObject<HTMLDivElement | null> = React.createRef<HTMLDivElement>();
|
||||||
|
|
||||||
public constructor(state?: Partial<RowItemState>) {
|
public constructor(state?: Partial<RowItemState>) {
|
||||||
@@ -101,7 +99,7 @@ export class RowItem
|
|||||||
}
|
}
|
||||||
|
|
||||||
public switchLayout(layout: DashboardLayoutManager) {
|
public switchLayout(layout: DashboardLayoutManager) {
|
||||||
this.setState({ layout: this._layoutRestorer.getLayout(layout, this.state.layout) });
|
this.setState({ layout });
|
||||||
}
|
}
|
||||||
|
|
||||||
public useEditPaneOptions(isNewElement: boolean): OptionsPaneCategoryDescriptor[] {
|
public useEditPaneOptions(isNewElement: boolean): OptionsPaneCategoryDescriptor[] {
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import { serializeTab } from '../../serialization/layoutSerializers/TabsLayoutSe
|
|||||||
import { getElements } from '../../serialization/layoutSerializers/utils';
|
import { getElements } from '../../serialization/layoutSerializers/utils';
|
||||||
import { getDashboardSceneFor, getDefaultVizPanel } from '../../utils/utils';
|
import { getDashboardSceneFor, getDefaultVizPanel } from '../../utils/utils';
|
||||||
import { AutoGridLayoutManager } from '../layout-auto-grid/AutoGridLayoutManager';
|
import { AutoGridLayoutManager } from '../layout-auto-grid/AutoGridLayoutManager';
|
||||||
import { LayoutRestorer } from '../layouts-shared/LayoutRestorer';
|
|
||||||
import { clearClipboard } from '../layouts-shared/paste';
|
import { clearClipboard } from '../layouts-shared/paste';
|
||||||
import { scrollCanvasElementIntoView } from '../layouts-shared/scrollCanvasElementIntoView';
|
import { scrollCanvasElementIntoView } from '../layouts-shared/scrollCanvasElementIntoView';
|
||||||
import { BulkActionElement } from '../types/BulkActionElement';
|
import { BulkActionElement } from '../types/BulkActionElement';
|
||||||
@@ -57,7 +56,6 @@ export class TabItem
|
|||||||
public readonly isEditableDashboardElement = true;
|
public readonly isEditableDashboardElement = true;
|
||||||
public readonly isDashboardDropTarget = true;
|
public readonly isDashboardDropTarget = true;
|
||||||
|
|
||||||
private _layoutRestorer = new LayoutRestorer();
|
|
||||||
public containerRef = React.createRef<HTMLDivElement>();
|
public containerRef = React.createRef<HTMLDivElement>();
|
||||||
|
|
||||||
constructor(state?: Partial<TabItemState>) {
|
constructor(state?: Partial<TabItemState>) {
|
||||||
@@ -99,7 +97,7 @@ export class TabItem
|
|||||||
}
|
}
|
||||||
|
|
||||||
public switchLayout(layout: DashboardLayoutManager) {
|
public switchLayout(layout: DashboardLayoutManager) {
|
||||||
this.setState({ layout: this._layoutRestorer.getLayout(layout, this.state.layout) });
|
this.setState({ layout });
|
||||||
}
|
}
|
||||||
|
|
||||||
public useEditPaneOptions(isNewElement: boolean): OptionsPaneCategoryDescriptor[] {
|
public useEditPaneOptions(isNewElement: boolean): OptionsPaneCategoryDescriptor[] {
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
import { VizPanel } from '@grafana/scenes';
|
|
||||||
|
|
||||||
import { DashboardLayoutManager } from '../types/DashboardLayoutManager';
|
|
||||||
|
|
||||||
export class LayoutRestorer {
|
|
||||||
private layoutMap: Record<string, DashboardLayoutManager> = {};
|
|
||||||
|
|
||||||
public getLayout(
|
|
||||||
newLayout: DashboardLayoutManager,
|
|
||||||
currentLayout: DashboardLayoutManager
|
|
||||||
): DashboardLayoutManager | undefined {
|
|
||||||
//If we have an old version of this layout and panels are the same we can reuse it
|
|
||||||
const prevLayout = this.layoutMap[newLayout.descriptor.id];
|
|
||||||
if (prevLayout) {
|
|
||||||
if (panelsAreUnchanged(prevLayout.getVizPanels(), newLayout.getVizPanels())) {
|
|
||||||
return prevLayout;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.layoutMap[currentLayout.descriptor.id] = currentLayout;
|
|
||||||
|
|
||||||
return newLayout;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Simple check that panels are in same order and same options but not a comprehensive check
|
|
||||||
* Ideally we should check if persisted state is the same but not possible anymore with current serialization code that requires all panels be connected to a DashboardScene
|
|
||||||
*/
|
|
||||||
function panelsAreUnchanged(a: VizPanel[], b: VizPanel[]) {
|
|
||||||
if (a.length < b.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < a.length; i++) {
|
|
||||||
const ap = a[i];
|
|
||||||
const bp = b[i];
|
|
||||||
|
|
||||||
if (ap.state.key !== bp.state.key) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (JSON.stringify(ap.state.options) !== JSON.stringify(bp.state.options)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (JSON.stringify(ap.state.fieldConfig) !== JSON.stringify(bp.state.fieldConfig)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user