<:Window bind:innerHeight='innerHeight'/>
<div class="virtual-list" style="height: {{$height}}px;">
  <!-- <div class="virtual-list-viewport" ref:viewport></div> -->
  {{#each $visibleItems as item @key}}
  <VirtualListItem :component
                   offset="{{item.offset}}"
                   props="{{item.props}}"
                   key="{{item.key}}"
  />
  {{/each}}
</div>
<style>
  .virtual-list {
    position: relative;
  }
</style>
<script>
  import VirtualListItem from './VirtualListItem'
  import { virtualListStore } from '../_utils/virtualListStore'
  import debounce from 'lodash/debounce'

  const DEBOUNCE_TIME = 500

  export default {
    oncreate () {
      this.observe('innerHeight', debounce(innerHeight => {
        //console.log('setting innerHeight', innerHeight)
        this.store.set({
          innerHeight: innerHeight
        })
      }, DEBOUNCE_TIME))
      this.observe('items', (items) => {
        //console.log('setting items')
        this.store.set({
          'items': items
        })
      })
      document.body.querySelector('.container').addEventListener('scroll', debounce((e) => {
        this.store.set({
          scrollTop: e.target.scrollTop
        })
      }, DEBOUNCE_TIME, {
        leading: true,
        trailing: true
      }))
    },
    ondestroy () {
    },
    data: () => ({
      component: null
    }),
    store: () => virtualListStore,
    components: {
      VirtualListItem
    }
  }
</script>