mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 05:11:50 +08:00

* update eslint, tsconfig + esbuild to handle new jsx transform * remove thing that breaks the new jsx transform * remove react imports * adjust grafana-icons build * is this the correct syntax? * try this * well this was much easier than expected... * change grafana-plugin-configs webpack config * fixes * fix lockfile * fix 2 more violations * use path.resolve instead of require.resolve * remove react import * fix react imports * more fixes * remove React import * remove import React from docs * remove another react import
43 lines
1.0 KiB
TypeScript
43 lines
1.0 KiB
TypeScript
import { useCallback } from 'react';
|
|
import * as React from 'react';
|
|
|
|
import { DataFrame, QueryResultMetaNotice } from '@grafana/data';
|
|
import { locationService } from '@grafana/runtime';
|
|
|
|
import { PanelHeaderNotice } from './PanelHeaderNotice';
|
|
|
|
interface Props {
|
|
panelId: number;
|
|
frames: DataFrame[];
|
|
}
|
|
|
|
export const PanelHeaderNotices = ({ frames, panelId }: Props) => {
|
|
const openInspect = useCallback(
|
|
(e: React.SyntheticEvent, tab: string) => {
|
|
e.stopPropagation();
|
|
locationService.partial({ inspect: panelId, inspectTab: tab });
|
|
},
|
|
[panelId]
|
|
);
|
|
|
|
// dedupe on severity
|
|
const notices: Record<string, QueryResultMetaNotice> = {};
|
|
for (const frame of frames) {
|
|
if (!frame.meta || !frame.meta.notices) {
|
|
continue;
|
|
}
|
|
|
|
for (const notice of frame.meta.notices) {
|
|
notices[notice.severity] = notice;
|
|
}
|
|
}
|
|
|
|
return (
|
|
<>
|
|
{Object.values(notices).map((notice) => (
|
|
<PanelHeaderNotice notice={notice} onClick={openInspect} key={notice.severity} />
|
|
))}
|
|
</>
|
|
);
|
|
};
|