| 
									
										
										
										
											2021-05-07 23:09:06 +08:00
										 |  |  | import { PanelChrome } from '@grafana/ui'; | 
					
						
							| 
									
										
										
										
											2021-10-13 14:53:36 +08:00
										 |  |  | import { PanelRenderer } from 'app/features/panel/components/PanelRenderer'; | 
					
						
							| 
									
										
										
										
											2021-06-01 19:52:08 +08:00
										 |  |  | import React, { useEffect, useState } from 'react'; | 
					
						
							|  |  |  | import { PanelModel, DashboardModel } from '../../state'; | 
					
						
							| 
									
										
										
										
											2021-05-07 23:09:06 +08:00
										 |  |  | import { usePanelLatestData } from './usePanelLatestData'; | 
					
						
							|  |  |  | import { PanelOptions } from 'app/plugins/panel/table/models.gen'; | 
					
						
							| 
									
										
										
										
											2021-06-01 19:52:08 +08:00
										 |  |  | import { RefreshEvent } from 'app/types/events'; | 
					
						
							|  |  |  | import { applyPanelTimeOverrides } from 'app/features/dashboard/utils/panel'; | 
					
						
							|  |  |  | import { getTimeSrv, TimeSrv } from '../../services/TimeSrv'; | 
					
						
							| 
									
										
										
										
											2021-05-07 23:09:06 +08:00
										 |  |  | interface Props { | 
					
						
							|  |  |  |   width: number; | 
					
						
							|  |  |  |   height: number; | 
					
						
							|  |  |  |   panel: PanelModel; | 
					
						
							| 
									
										
										
										
											2021-06-01 19:52:08 +08:00
										 |  |  |   dashboard: DashboardModel; | 
					
						
							| 
									
										
										
										
											2021-05-07 23:09:06 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-01 19:52:08 +08:00
										 |  |  | export function PanelEditorTableView({ width, height, panel, dashboard }: Props) { | 
					
						
							|  |  |  |   const { data } = usePanelLatestData(panel, { withTransforms: true, withFieldConfig: false }, false); | 
					
						
							| 
									
										
										
										
											2021-05-07 23:09:06 +08:00
										 |  |  |   const [options, setOptions] = useState<PanelOptions>({ | 
					
						
							|  |  |  |     frameIndex: 0, | 
					
						
							|  |  |  |     showHeader: true, | 
					
						
							| 
									
										
										
										
											2021-09-08 15:44:41 +08:00
										 |  |  |     showTypeIcons: true, | 
					
						
							| 
									
										
										
										
											2021-05-07 23:09:06 +08:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-01 19:52:08 +08:00
										 |  |  |   // Subscribe to panel event
 | 
					
						
							|  |  |  |   useEffect(() => { | 
					
						
							|  |  |  |     const timeSrv: TimeSrv = getTimeSrv(); | 
					
						
							|  |  |  |     const timeData = applyPanelTimeOverrides(panel, timeSrv.timeRange()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const sub = panel.events.subscribe(RefreshEvent, () => { | 
					
						
							|  |  |  |       panel.runAllPanelQueries(dashboard.id, dashboard.getTimezone(), timeData, width); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     return () => { | 
					
						
							|  |  |  |       sub.unsubscribe(); | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }, [panel, dashboard, width]); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-07 23:09:06 +08:00
										 |  |  |   if (!data) { | 
					
						
							|  |  |  |     return null; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <PanelChrome width={width} height={height} padding="none"> | 
					
						
							|  |  |  |       {(innerWidth, innerHeight) => ( | 
					
						
							|  |  |  |         <PanelRenderer | 
					
						
							|  |  |  |           title="Raw data" | 
					
						
							|  |  |  |           pluginId="table" | 
					
						
							|  |  |  |           width={innerWidth} | 
					
						
							|  |  |  |           height={innerHeight} | 
					
						
							|  |  |  |           data={data} | 
					
						
							|  |  |  |           options={options} | 
					
						
							|  |  |  |           onOptionsChange={setOptions} | 
					
						
							|  |  |  |         /> | 
					
						
							|  |  |  |       )} | 
					
						
							|  |  |  |     </PanelChrome> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | } |