mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
31 lines
1.0 KiB
TypeScript
31 lines
1.0 KiB
TypeScript
import { ReactElement, useEffect, useState } from 'react';
|
|
|
|
import { LoadingState, PanelMenuItem } from '@grafana/data';
|
|
import { getPanelStateForModel } from 'app/features/panel/state/selectors';
|
|
import { useSelector } from 'app/types';
|
|
|
|
import { DashboardModel, PanelModel } from '../../state';
|
|
import { getPanelMenu } from '../../utils/getPanelMenu';
|
|
|
|
interface PanelHeaderMenuProviderApi {
|
|
items: PanelMenuItem[];
|
|
}
|
|
|
|
interface Props {
|
|
panel: PanelModel;
|
|
dashboard: DashboardModel;
|
|
loadingState?: LoadingState;
|
|
children: (props: PanelHeaderMenuProviderApi) => ReactElement;
|
|
}
|
|
|
|
export function PanelHeaderMenuProvider({ panel, dashboard, loadingState, children }: Props) {
|
|
const [items, setItems] = useState<PanelMenuItem[]>([]);
|
|
const angularComponent = useSelector((state) => getPanelStateForModel(state, panel)?.angularComponent);
|
|
|
|
useEffect(() => {
|
|
setItems(getPanelMenu(dashboard, panel, angularComponent));
|
|
}, [dashboard, panel, angularComponent, loadingState, setItems]);
|
|
|
|
return children({ items });
|
|
}
|