| 
									
										
										
										
											2018-01-16 20:34:09 -08:00
										 |  |  | <div class="virtual-list-item {{shown ? 'shown' : ''}}" | 
					
						
							|  |  |  |      virtual-list-key="{{key}}" | 
					
						
							| 
									
										
										
										
											2018-01-15 10:54:02 -08:00
										 |  |  |      ref:node | 
					
						
							| 
									
										
										
										
											2018-01-15 16:12:07 -08:00
										 |  |  |      style="transform: translate3d(0, {{offset}}px, 0);" | 
					
						
							| 
									
										
										
										
											2018-01-15 12:23:28 -08:00
										 |  |  | > | 
					
						
							|  |  |  |   <:Component {component} virtualProps="{{props}}" /> | 
					
						
							| 
									
										
										
										
											2018-01-15 10:54:02 -08:00
										 |  |  | </div> | 
					
						
							|  |  |  | <style> | 
					
						
							|  |  |  |   .virtual-list-item { | 
					
						
							|  |  |  |     position: absolute; | 
					
						
							|  |  |  |     top: 0; | 
					
						
							| 
									
										
										
										
											2018-01-16 20:34:09 -08:00
										 |  |  |     opacity: 0; | 
					
						
							|  |  |  |     pointer-events: none; | 
					
						
							| 
									
										
										
										
											2018-01-17 00:06:24 -08:00
										 |  |  |     /* will-change: transform; */ /* causes jank in mobile Firefox */ | 
					
						
							| 
									
										
										
										
											2018-01-16 20:34:09 -08:00
										 |  |  |   } | 
					
						
							|  |  |  |   .shown { | 
					
						
							|  |  |  |     opacity: 1; | 
					
						
							|  |  |  |     pointer-events: auto; | 
					
						
							| 
									
										
										
										
											2018-01-15 10:54:02 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | </style> | 
					
						
							|  |  |  | <script> | 
					
						
							| 
									
										
										
										
											2018-01-15 12:23:28 -08:00
										 |  |  |   import { virtualListStore } from '../_utils/virtualListStore' | 
					
						
							| 
									
										
										
										
											2018-01-17 19:16:04 -08:00
										 |  |  |   import { AsyncLayout } from '../_utils/AsyncLayout' | 
					
						
							| 
									
										
										
										
											2018-01-16 20:34:09 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-17 19:16:04 -08:00
										 |  |  |   const asyncLayout = new AsyncLayout(node => node.getAttribute('virtual-list-key')) | 
					
						
							| 
									
										
										
										
											2018-01-16 18:08:37 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-15 10:54:02 -08:00
										 |  |  |   export default { | 
					
						
							|  |  |  |     oncreate() { | 
					
						
							| 
									
										
										
										
											2018-01-15 16:35:08 -08:00
										 |  |  |       let key = this.get('key') | 
					
						
							| 
									
										
										
										
											2018-01-17 19:16:04 -08:00
										 |  |  |       asyncLayout.observe(key, this.refs.node, (rect) => { | 
					
						
							| 
									
										
										
										
											2018-01-17 19:41:37 -08:00
										 |  |  |         // update all item heights in one microtask batch for better perf | 
					
						
							|  |  |  |         this.store.batchUpdate('itemHeights', key, rect.height) | 
					
						
							| 
									
										
										
										
											2018-01-17 19:16:04 -08:00
										 |  |  |       }) | 
					
						
							| 
									
										
										
										
											2018-01-16 20:34:09 -08:00
										 |  |  |     }, | 
					
						
							|  |  |  |     ondestroy() { | 
					
						
							| 
									
										
										
										
											2018-01-17 18:35:27 -08:00
										 |  |  |       let key = this.get('key') | 
					
						
							| 
									
										
										
										
											2018-01-17 19:16:04 -08:00
										 |  |  |       asyncLayout.unobserve(key, this.refs.node) | 
					
						
							| 
									
										
										
										
											2018-01-15 10:54:02 -08:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2018-01-16 20:34:09 -08:00
										 |  |  |     store: () => virtualListStore, | 
					
						
							|  |  |  |     computed: { | 
					
						
							|  |  |  |       'shown': ($itemHeights, key) => $itemHeights[key] > 0 | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-01-15 10:54:02 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | </script> |