Dashboard: Switch between tabs and rows and rows to tabs (#102083)

This commit is contained in:
Torkel Ödegaard
2025-03-13 14:21:10 +01:00
committed by GitHub
parent 85a3ae2d07
commit ec94e5b7ad
2 changed files with 17 additions and 4 deletions
@@ -7,6 +7,7 @@ import { dashboardSceneGraph } from '../../utils/dashboardSceneGraph';
import { DashboardGridItem } from '../layout-default/DashboardGridItem';
import { DefaultGridLayoutManager } from '../layout-default/DefaultGridLayoutManager';
import { RowRepeaterBehavior } from '../layout-default/RowRepeaterBehavior';
import { TabsLayoutManager } from '../layout-tabs/TabsLayoutManager';
import { DashboardLayoutManager } from '../types/DashboardLayoutManager';
import { LayoutRegistryItem } from '../types/LayoutRegistryItem';
@@ -186,9 +187,13 @@ export class RowsLayoutManager extends SceneObjectBase<RowsLayoutManagerState> i
}
public static createFromLayout(layout: DashboardLayoutManager): RowsLayoutManager {
let rows: RowItem[];
let rows: RowItem[] = [];
if (layout instanceof DefaultGridLayoutManager) {
if (layout instanceof TabsLayoutManager) {
for (const tab of layout.state.tabs) {
rows.push(new RowItem({ layout: tab.state.layout, title: tab.state.title }));
}
} else if (layout instanceof DefaultGridLayoutManager) {
const config: Array<{
title?: string;
isCollapsed?: boolean;
@@ -8,6 +8,7 @@ import {
import { t } from 'app/core/internationalization';
import { ObjectRemovedFromCanvasEvent } from '../../edit-pane/shared';
import { RowsLayoutManager } from '../layout-rows/RowsLayoutManager';
import { DashboardLayoutManager } from '../types/DashboardLayoutManager';
import { LayoutRegistryItem } from '../types/LayoutRegistryItem';
@@ -177,7 +178,14 @@ export class TabsLayoutManager extends SceneObjectBase<TabsLayoutManagerState> i
}
public static createFromLayout(layout: DashboardLayoutManager): TabsLayoutManager {
const tab = new TabItem({ layout: layout.clone() });
return new TabsLayoutManager({ tabs: [tab] });
let tabs: TabItem[] = [];
if (layout instanceof RowsLayoutManager) {
tabs = layout.state.rows.map((row) => new TabItem({ layout: row.state.layout.clone(), title: row.state.title }));
} else {
tabs.push(new TabItem({ layout: layout.clone() }));
}
return new TabsLayoutManager({ tabs });
}
}