import { config } from '@grafana/runtime'; import { SceneComponentProps, SceneObjectBase, SceneObjectRef, VizPanel } from '@grafana/scenes'; import { LibraryPanel } from '@grafana/schema/dist/esm/index.gen'; import { t } from 'app/core/internationalization'; import { ShareLibraryPanel } from 'app/features/dashboard/components/ShareModal/ShareLibraryPanel'; import { shareDashboardType } from 'app/features/dashboard/components/ShareModal/utils'; import { DashboardModel } from 'app/features/dashboard/state/DashboardModel'; import { PanelModel } from 'app/features/dashboard/state/PanelModel'; import { DashboardGridItem } from '../scene/layout-default/DashboardGridItem'; import { gridItemToPanel, transformSceneToSaveModel } from '../serialization/transformSceneToSaveModel'; import { getDashboardSceneFor } from '../utils/utils'; import { SceneShareTabState } from './types'; export interface ShareLibraryPanelTabState extends SceneShareTabState { panelRef?: SceneObjectRef; } export class ShareLibraryPanelTab extends SceneObjectBase { public tabId = shareDashboardType.libraryPanel; static Component = ShareLibraryPanelTabRenderer; public getTabLabel() { return config.featureToggles.newDashboardSharingComponent ? t('share-panel.drawer.new-library-panel-title', 'New library panel') : t('share-modal.tab-title.library-panel', 'Library panel'); } } function ShareLibraryPanelTabRenderer({ model }: SceneComponentProps) { const { panelRef, modalRef } = model.useState(); if (!panelRef) { return null; } const panel = panelRef.resolve(); const parent = panel.parent; if (parent instanceof DashboardGridItem) { const dashboardScene = getDashboardSceneFor(model); const panelJson = gridItemToPanel(parent); const panelModel = new PanelModel(panelJson); const dashboardJson = transformSceneToSaveModel(dashboardScene); const dashboardModel = new DashboardModel(dashboardJson); return ( { modalRef ? modalRef.resolve().onDismiss() : dashboardScene.closeModal(); }} onCreateLibraryPanel={(libPanel: LibraryPanel) => dashboardScene.createLibraryPanel(panel, libPanel)} /> ); } return null; }