mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
32 lines
870 B
TypeScript
32 lines
870 B
TypeScript
|
import { PanelData } from '@grafana/data';
|
||
|
import { useEffect, useRef, useState } from 'react';
|
||
|
import { PanelModel } from '../../state';
|
||
|
import { Unsubscribable } from 'rxjs';
|
||
|
|
||
|
export const usePanelLatestData = (panel: PanelModel): [PanelData | null, boolean] => {
|
||
|
const querySubscription = useRef<Unsubscribable>(null);
|
||
|
const [latestData, setLatestData] = useState<PanelData>(null);
|
||
|
|
||
|
useEffect(() => {
|
||
|
querySubscription.current = panel
|
||
|
.getQueryRunner()
|
||
|
.getData()
|
||
|
.subscribe({
|
||
|
next: data => setLatestData(data),
|
||
|
});
|
||
|
|
||
|
return () => {
|
||
|
if (querySubscription.current) {
|
||
|
console.log('unsubscribing');
|
||
|
querySubscription.current.unsubscribe();
|
||
|
}
|
||
|
};
|
||
|
}, [panel]);
|
||
|
|
||
|
return [
|
||
|
latestData,
|
||
|
// TODO: make this more clever, use PanelData.state
|
||
|
!!(latestData && latestData.series),
|
||
|
];
|
||
|
};
|