2025-04-01 10:38:02 +09:00

54 lines
1.7 KiB
TypeScript

import { SceneCSSGridLayout, SceneQueryRunner, VizPanel } from '@grafana/scenes';
import { findVizPanelByKey } from '../../utils/utils';
import { DashboardScene } from '../DashboardScene';
import { ResponsiveGridItem } from './ResponsiveGridItem';
import { ResponsiveGridLayoutManager } from './ResponsiveGridLayoutManager';
describe('ResponsiveGridLayoutManager', () => {
it('Should clone the layout', () => {
const { manager } = setup();
const clone = manager.cloneLayout('foo', true) as ResponsiveGridLayoutManager;
expect(clone).not.toBe(manager);
expect(clone.state.layout).not.toBe(manager.state.layout);
expect(clone.state.layout.state.children).not.toBe(manager.state.layout.state.children);
expect(clone.state.layout.state.children.length).toBe(manager.state.layout.state.children.length);
const panelA = findVizPanelByKey(clone, 'foo/grid-item-1/panel-1');
expect(panelA?.state.title).toBe('Panel A');
const panelB = findVizPanelByKey(clone, 'foo/grid-item-2/panel-2');
expect(panelB?.state.title).toBe('Panel B');
});
});
function setup() {
const gridItems = [
new ResponsiveGridItem({
key: 'grid-item-1',
body: new VizPanel({
title: 'Panel A',
key: 'panel-1',
pluginId: 'table',
$data: new SceneQueryRunner({ key: 'data-query-runner', queries: [{ refId: 'A' }] }),
}),
}),
new ResponsiveGridItem({
key: 'grid-item-2',
body: new VizPanel({
title: 'Panel B',
key: 'panel-2',
pluginId: 'table',
}),
}),
];
const manager = new ResponsiveGridLayoutManager({ layout: new SceneCSSGridLayout({ children: gridItems }) });
new DashboardScene({ body: manager });
return { manager };
}