File size: 716 Bytes
ac8fc63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script lang="ts" setup>
import BarLoader from '@/components/BarLoader.vue'
import DotsLoader from '@/components/DotsLoader.vue'
import SpinnerLoader from '@/components/SpinnerLoader.vue'
import type { LoadingStyle } from '@/types/chat'
import { computed, type Component } from 'vue'

const props = defineProps<{
  style: LoadingStyle
  active: boolean
}>()

const componentMap: Record<LoadingStyle, Component | null> = {
  dots: DotsLoader,
  spinner: SpinnerLoader,
  bar: BarLoader,
  none: null,
}

const selectedComponent = computed(() => componentMap[props.style])
</script>

<template>
  <div v-if="active && selectedComponent">
    <component :is="selectedComponent" />
  </div>
</template>

<style></style>