Dashboards: Fix repeats not being added on refresh when using searchLayout (#100621)
Fix repeats not being added
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { useEffect } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
import { GrafanaTheme2 } from '@grafana/data';
|
import { GrafanaTheme2 } from '@grafana/data';
|
||||||
import { SceneGridRow, VizPanel, sceneGraph } from '@grafana/scenes';
|
import { SceneGridRow, VizPanel, sceneGraph } from '@grafana/scenes';
|
||||||
@@ -12,6 +12,7 @@ import { forceActivateFullSceneObjectTree } from '../utils/utils';
|
|||||||
import { DashboardScene } from './DashboardScene';
|
import { DashboardScene } from './DashboardScene';
|
||||||
import { DashboardGridItem } from './layout-default/DashboardGridItem';
|
import { DashboardGridItem } from './layout-default/DashboardGridItem';
|
||||||
import { DefaultGridLayoutManager } from './layout-default/DefaultGridLayoutManager';
|
import { DefaultGridLayoutManager } from './layout-default/DefaultGridLayoutManager';
|
||||||
|
import { DashboardRepeatsProcessedEvent } from './types/DashboardRepeatsProcessedEvent';
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
dashboard: DashboardScene;
|
dashboard: DashboardScene;
|
||||||
@@ -25,6 +26,7 @@ export function PanelSearchLayout({ dashboard, panelSearch = '', panelsPerRow }:
|
|||||||
const { body } = dashboard.state;
|
const { body } = dashboard.state;
|
||||||
const filteredPanels: VizPanel[] = [];
|
const filteredPanels: VizPanel[] = [];
|
||||||
const styles = useStyles2(getStyles);
|
const styles = useStyles2(getStyles);
|
||||||
|
const [_, setRepeatsUpdated] = useState('');
|
||||||
|
|
||||||
const bodyGrid = body instanceof DefaultGridLayoutManager ? body.state.grid : null;
|
const bodyGrid = body instanceof DefaultGridLayoutManager ? body.state.grid : null;
|
||||||
|
|
||||||
@@ -34,11 +36,11 @@ export function PanelSearchLayout({ dashboard, panelSearch = '', panelsPerRow }:
|
|||||||
|
|
||||||
for (const gridItem of bodyGrid.state.children) {
|
for (const gridItem of bodyGrid.state.children) {
|
||||||
if (gridItem instanceof DashboardGridItem) {
|
if (gridItem instanceof DashboardGridItem) {
|
||||||
filterPanels(gridItem, dashboard, panelSearch, filteredPanels);
|
filterPanels(gridItem, dashboard, panelSearch, filteredPanels, setRepeatsUpdated);
|
||||||
} else if (gridItem instanceof SceneGridRow) {
|
} else if (gridItem instanceof SceneGridRow) {
|
||||||
for (const rowItem of gridItem.state.children) {
|
for (const rowItem of gridItem.state.children) {
|
||||||
if (rowItem instanceof DashboardGridItem) {
|
if (rowItem instanceof DashboardGridItem) {
|
||||||
filterPanels(rowItem, dashboard, panelSearch, filteredPanels);
|
filterPanels(rowItem, dashboard, panelSearch, filteredPanels, setRepeatsUpdated);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -98,7 +100,8 @@ function filterPanels(
|
|||||||
gridItem: DashboardGridItem,
|
gridItem: DashboardGridItem,
|
||||||
dashboard: DashboardScene,
|
dashboard: DashboardScene,
|
||||||
searchString: string,
|
searchString: string,
|
||||||
filteredPanels: VizPanel[]
|
filteredPanels: VizPanel[],
|
||||||
|
setRepeatsUpdated: (updated: string) => void
|
||||||
) {
|
) {
|
||||||
const interpolatedSearchString = sceneGraph.interpolate(dashboard, searchString).toLowerCase();
|
const interpolatedSearchString = sceneGraph.interpolate(dashboard, searchString).toLowerCase();
|
||||||
|
|
||||||
@@ -107,6 +110,12 @@ function filterPanels(
|
|||||||
const panel = gridItem.state.body;
|
const panel = gridItem.state.body;
|
||||||
const interpolatedTitle = panel.interpolate(panel.state.title, undefined, 'text').toLowerCase();
|
const interpolatedTitle = panel.interpolate(panel.state.title, undefined, 'text').toLowerCase();
|
||||||
if (interpolatedTitle.includes(interpolatedSearchString)) {
|
if (interpolatedTitle.includes(interpolatedSearchString)) {
|
||||||
|
gridItem.subscribeToEvent(DashboardRepeatsProcessedEvent, (event) => {
|
||||||
|
const source = event.payload.source;
|
||||||
|
if (source instanceof DashboardGridItem) {
|
||||||
|
setRepeatsUpdated(event.payload.source.state.key ?? '');
|
||||||
|
}
|
||||||
|
});
|
||||||
gridItem.activate();
|
gridItem.activate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user