@ -1,18 +1,22 @@
import { SceneGridRow , SceneObject } from '@grafana/scenes' ;
import { SceneGridRow } from '@grafana/scenes' ;
import { NewObjectAddedToCanvasEvent } from '../../edit-pane/shared' ;
import { DefaultGridLayoutManager } from '../layout-default/DefaultGridLayoutManager' ;
import { RowItem } from '../layout-rows/RowItem' ;
import { RowsLayoutManager } from '../layout-rows/RowsLayoutManager' ;
import { TabItem } from '../layout-tabs/TabItem' ;
import { TabsLayoutManager } from '../layout-tabs/TabsLayoutManager' ;
import { DashboardLayoutManager } from '../types/DashboardLayoutManager' ;
import { isLayoutParent } from '../types/LayoutParent' ;
export function addNewTabTo ( sceneObject : SceneObject ) : TabItem {
if ( sceneObject instanceof TabsLayoutManager ) {
return sceneObject . addNewTab ( ) ;
export function addNewTabTo ( layout : DashboardLayoutManager ) : TabItem {
if ( layout instanceof TabsLayoutManager ) {
const tab = layout . addNewTab ( ) ;
layout . publishEvent ( new NewObjectAddedToCanvasEvent ( tab ) , true ) ;
return tab ;
}
const layoutParent = sceneObjec t. parent ! ;
const layoutParent = layou t. parent ! ;
if ( ! isLayoutParent ( layoutParent ) ) {
throw new Error ( 'Parent layout is not a LayoutParent' ) ;
}
@ -20,24 +24,31 @@ export function addNewTabTo(sceneObject: SceneObject): TabItem {
const tabsLayout = TabsLayoutManager . createFromLayout ( layoutParent . getLayout ( ) ) ;
layoutParent . switchLayout ( tabsLayout ) ;
return tabsLayout . state . tabs [ 0 ] ;
const tab = tabsLayout . state . tabs [ 0 ] ;
layout . publishEvent ( new NewObjectAddedToCanvasEvent ( tab ) , true ) ;
return tab ;
}
export function addNewRowTo ( sceneObject : SceneObject ) : RowItem | SceneGridRow {
if ( sceneObject instanceof RowsLayoutManager ) {
return sceneObject . addNewRow ( ) ;
export function addNewRowTo ( layout : DashboardLayoutManager ) : RowItem | SceneGridRow {
if ( layout instanceof RowsLayoutManager ) {
const row = layout . addNewRow ( ) ;
layout . publishEvent ( new NewObjectAddedToCanvasEvent ( row ) , true ) ;
return row ;
}
if ( sceneObject instanceof DefaultGridLayoutManager ) {
return sceneObject . addNewRow ( ) ;
if ( layout instanceof DefaultGridLayoutManager ) {
const row = layout . addNewRow ( ) ;
layout . publishEvent ( new NewObjectAddedToCanvasEvent ( row ) , true ) ;
return row ;
}
if ( sceneObjec t instanceof TabsLayoutManager ) {
const currentTab = sceneObjec t. getCurrentTab ( ) ;
if ( layou t instanceof TabsLayoutManager ) {
const currentTab = layou t. getCurrentTab ( ) ;
return addNewRowTo ( currentTab . state . layout ) ;
}
const layoutParent = sceneObjec t. parent ! ;
const layoutParent = layou t. parent ! ;
if ( ! isLayoutParent ( layoutParent ) ) {
throw new Error ( 'Parent layout is not a LayoutParent' ) ;
}
@ -45,5 +56,8 @@ export function addNewRowTo(sceneObject: SceneObject): RowItem | SceneGridRow {
const rowsLayout = RowsLayoutManager . createFromLayout ( layoutParent . getLayout ( ) ) ;
layoutParent . switchLayout ( rowsLayout ) ;
return rowsLayout . state . rows [ 0 ] ;
const row = rowsLayout . state . rows [ 0 ] ;
layout . publishEvent ( new NewObjectAddedToCanvasEvent ( row ) , true ) ;
return row ;
}