mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Library Panel: Fix issue where library panels did not display panel links. (#98655)
* add library panel link * opimize * format * add test * fix import orders --------- Co-authored-by: oscarkilhed <oscar.kilhed@grafana.com>
This commit is contained in:
@@ -3,15 +3,17 @@ import { of } from 'rxjs';
|
||||
import { FieldType, LoadingState, PanelData, getDefaultTimeRange, toDataFrame } from '@grafana/data';
|
||||
import { getPanelPlugin } from '@grafana/data/test/__mocks__/pluginMocks';
|
||||
import { setPluginImportUtils, setRunRequest } from '@grafana/runtime';
|
||||
import { SceneCanvasText, SceneGridLayout, VizPanel } from '@grafana/scenes';
|
||||
import { SceneCanvasText, sceneGraph, SceneGridLayout, VizPanel } from '@grafana/scenes';
|
||||
import { LibraryPanel } from '@grafana/schema';
|
||||
import * as libpanels from 'app/features/library-panels/state/api';
|
||||
|
||||
import { vizPanelToPanel } from '../serialization/transformSceneToSaveModel';
|
||||
import { NEW_LINK } from '../settings/links/utils';
|
||||
import { activateFullSceneTree } from '../utils/test-utils';
|
||||
|
||||
import { DashboardScene } from './DashboardScene';
|
||||
import { LibraryPanelBehavior } from './LibraryPanelBehavior';
|
||||
import { VizPanelLinks } from './PanelLinks';
|
||||
import { PanelTimeRange } from './PanelTimeRange';
|
||||
import { DashboardGridItem } from './layout-default/DashboardGridItem';
|
||||
import { DefaultGridLayoutManager } from './layout-default/DefaultGridLayoutManager';
|
||||
@@ -82,6 +84,15 @@ describe('LibraryPanelBehavior', () => {
|
||||
expect(spy).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should include panel links', async () => {
|
||||
const { scene } = await buildTestSceneWithLibraryPanel();
|
||||
|
||||
const panel = sceneGraph.findByKey(scene, 'panel-1') as VizPanel;
|
||||
expect(panel.state.titleItems).toBeDefined();
|
||||
const items = panel.state.titleItems as VizPanelLinks[];
|
||||
expect(items[0].state.rawLinks![0].title).toBe('link1');
|
||||
});
|
||||
|
||||
it('should set panel timeRange if panel has query options set', async () => {
|
||||
const { gridItem } = await buildTestSceneWithLibraryPanel();
|
||||
|
||||
@@ -172,6 +183,7 @@ async function buildTestSceneWithLibraryPanel() {
|
||||
model: {
|
||||
title: 'LibraryPanel A title',
|
||||
type: 'table',
|
||||
links: [{ ...NEW_LINK, title: 'link1' }],
|
||||
options: { showHeader: true },
|
||||
fieldConfig: { defaults: {}, overrides: [] },
|
||||
datasource: { uid: 'abcdef' },
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { PanelPlugin, PanelProps } from '@grafana/data';
|
||||
import { SceneObjectBase, SceneObjectState, sceneUtils, VizPanel, VizPanelState } from '@grafana/scenes';
|
||||
import { config } from '@grafana/runtime';
|
||||
import { SceneObject, SceneObjectBase, SceneObjectState, sceneUtils, VizPanel, VizPanelState } from '@grafana/scenes';
|
||||
import { LibraryPanel } from '@grafana/schema';
|
||||
import { Stack } from '@grafana/ui';
|
||||
import { Trans } from 'app/core/internationalization';
|
||||
@@ -8,7 +9,11 @@ import { getLibraryPanel } from 'app/features/library-panels/state/api';
|
||||
|
||||
import { createPanelDataProvider } from '../utils/createPanelDataProvider';
|
||||
|
||||
import { VizPanelLinks, VizPanelLinksMenu } from './PanelLinks';
|
||||
import { panelLinksBehavior } from './PanelMenuBehavior';
|
||||
import { PanelNotices } from './PanelNotices';
|
||||
import { PanelTimeRange } from './PanelTimeRange';
|
||||
import { AngularDeprecation } from './angular/AngularDeprecation';
|
||||
import { DashboardGridItem } from './layout-default/DashboardGridItem';
|
||||
|
||||
export interface LibraryPanelBehaviorState extends SceneObjectState {
|
||||
@@ -48,6 +53,18 @@ export class LibraryPanelBehavior extends SceneObjectBase<LibraryPanelBehaviorSt
|
||||
|
||||
const libPanelModel = new PanelModel(libPanel.model);
|
||||
|
||||
const titleItems: SceneObject[] = [];
|
||||
if (config.featureToggles.angularDeprecationUI) {
|
||||
titleItems.push(new AngularDeprecation());
|
||||
}
|
||||
titleItems.push(
|
||||
new VizPanelLinks({
|
||||
rawLinks: libPanelModel.links,
|
||||
menu: new VizPanelLinksMenu({ $behaviors: [panelLinksBehavior] }),
|
||||
})
|
||||
);
|
||||
titleItems.push(new PanelNotices());
|
||||
|
||||
const vizPanelState: VizPanelState = {
|
||||
title: libPanelModel.title,
|
||||
options: libPanelModel.options ?? {},
|
||||
@@ -56,6 +73,7 @@ export class LibraryPanelBehavior extends SceneObjectBase<LibraryPanelBehaviorSt
|
||||
pluginVersion: libPanelModel.pluginVersion,
|
||||
displayMode: libPanelModel.transparent ? 'transparent' : undefined,
|
||||
description: libPanelModel.description,
|
||||
titleItems: titleItems,
|
||||
$data: createPanelDataProvider(libPanelModel),
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user