/ shared / components / src / components / Artwork / loaders / LoaderSelector.svelte
LoaderSelector.svelte
 1  <script context="module" lang="ts">
 2      export const LOADER_TYPE = {
 3          LAZY: 'LAZY',
 4          NONE: 'NONE',
 5      } as const;
 6  </script>
 7  
 8  <script lang="ts">
 9      import LazyLoader from '@amp/web-app-components/src/components/Artwork/loaders/LazyLoader.svelte';
10      import NoLoader from '@amp/web-app-components/src/components/Artwork/loaders/NoLoader.svelte';
11      import { shouldUseLazyLoader } from '@amp/web-app-components/src/components/Artwork/constants';
12      import type { ValueOf } from '@amp/web-app-components/src/types';
13      import type { SvelteComponent } from 'svelte';
14  
15      type LoaderOptions = ValueOf<typeof LOADER_TYPE>;
16  
17      export let loaderType: LoaderOptions = LOADER_TYPE.LAZY;
18  
19      interface LoaderComponent extends SvelteComponent {
20          onSlotMount: (component: Element) => void;
21      }
22  
23      let currentComponent: LoaderComponent;
24  
25      export function onSlotMount(component: Element) {
26          currentComponent.onSlotMount(component);
27      }
28  </script>
29  
30  {#if loaderType === LOADER_TYPE.LAZY && shouldUseLazyLoader}
31      <LazyLoader bind:this={currentComponent} let:isVisible
32          ><slot {isVisible} /></LazyLoader
33      >
34  {:else}
35      <NoLoader bind:this={currentComponent} let:isVisible
36          ><slot {isVisible} /></NoLoader
37      >
38  {/if}