| 
									
										
										
										
											2020-02-11 20:48:36 +08:00
										 |  |  | import { CSSProperties } from 'react'; | 
					
						
							|  |  |  | import { PanelModel } from '../../state/PanelModel'; | 
					
						
							|  |  |  | import { DisplayMode } from './types'; | 
					
						
							| 
									
										
										
										
											2020-02-11 21:57:16 +08:00
										 |  |  | import { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN, GRID_COLUMN_COUNT } from 'app/core/constants'; | 
					
						
							| 
									
										
										
										
											2020-02-11 20:48:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function calculatePanelSize(mode: DisplayMode, width: number, height: number, panel: PanelModel): CSSProperties { | 
					
						
							|  |  |  |   if (mode === DisplayMode.Fill) { | 
					
						
							|  |  |  |     return { width, height }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   const colWidth = (window.innerWidth - GRID_CELL_VMARGIN * 4) / GRID_COLUMN_COUNT; | 
					
						
							|  |  |  |   const pWidth = colWidth * panel.gridPos.w; | 
					
						
							|  |  |  |   const pHeight = GRID_CELL_HEIGHT * panel.gridPos.h; | 
					
						
							|  |  |  |   const scale = Math.min(width / pWidth, height / pHeight); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (mode === DisplayMode.Exact && pWidth <= width && pHeight <= height) { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       width: pWidth, | 
					
						
							|  |  |  |       height: pHeight, | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { | 
					
						
							|  |  |  |     width: pWidth * scale, | 
					
						
							|  |  |  |     height: pHeight * scale, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |