/ src / components / jet / shelf / HeroCarouselShelf.svelte
HeroCarouselShelf.svelte
 1  <script lang="ts" context="module">
 2      import type {
 3          Shelf,
 4          HeroCarousel as HeroCarouselModel,
 5          HeroCarouselItem as HeroCarouselItemModel,
 6      } from '@jet-app/app-store/api/models';
 7  
 8      interface HeroCarouselShelf extends Shelf {
 9          items: [HeroCarouselModel];
10      }
11  
12      export function isHeroCarouselShelf(
13          shelf: Shelf,
14      ): shelf is HeroCarouselShelf {
15          const { contentType, items } = shelf;
16  
17          return contentType === 'heroCarousel' && Array.isArray(items);
18      }
19  </script>
20  
21  <script lang="ts">
22      import HeroCarousel from '~/components/hero/Carousel.svelte';
23      import HeroCarouselItem from '~/components/jet/item/HeroCarouselItem.svelte';
24      import { isRtl } from '~/utils/locale';
25  
26      export let shelf: HeroCarouselShelf;
27  
28      $: ({ items: ltrItems, rtlItems } = shelf.items[0]);
29      $: items = isRtl() && rtlItems.length ? rtlItems : ltrItems;
30  
31      function deriveBackgroundArtworkFromItem(item: HeroCarouselItemModel) {
32          return item.artwork || item.video?.preview;
33      }
34  </script>
35  
36  <HeroCarousel {shelf} {items} {deriveBackgroundArtworkFromItem} let:item>
37      <HeroCarouselItem {item} />
38  </HeroCarousel>