<div class="lazy-timeline">
  {{#if loading}}
    <div transition:fade>
      <div class="loading-page">
        <LoadingSpinner />
      </div>
    </div>
  {{/if}}
  {{#await promise}}
  {{then constructor}}
    <:Component {constructor} :timeline on:initialized="set({'loading': false})"/>
  {{catch error}}
    <div>Component failed to load. Please try refreshing! {{error}}</div>
  {{/await}}
</div>
<style>
  .lazy-timeline {
    width: 100%;
    min-height: 60vh;
  }
  .loading-page {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 50
  }
</style>
<script>
  import { importTimeline } from '../_utils/asyncModules'
  import LoadingSpinner from './LoadingSpinner.html'
  import { fade } from 'svelte-transitions'

  export default {
    data: () => ({
      promise: importTimeline(),
      loading: true
    }),
    components: {
      LoadingSpinner
    },
    transitions: {
      fade
    }
  }
</script>