mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			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),
 | |
|   ];
 | |
| };
 |