Files
hereconnect/apps/frontend/src/components/QueryRender.vue
T

33 lines
989 B
Vue
Raw Normal View History

2024-11-20 01:59:52 +02:00
<script setup lang="ts" generic="R, E">
import type { UseQueryReturnType } from '@tanstack/vue-query'
type Props = {
query: UseQueryReturnType<R, E>
}
2024-12-03 00:17:47 +02:00
const slots = defineSlots<{
default?: (slotBindings: { data: R }) => void
error?: (slotBindings: { error: E; reload: typeof refetch }) => void
loading?: () => void
}>()
2024-11-20 01:59:52 +02:00
const { query } = defineProps<Props>()
const { data, error, refetch, isSuccess, isError, isLoading } = query
</script>
<template>
2024-12-06 23:55:53 +02:00
<slot v-if="isSuccess && data" name="default" :data />
2024-12-03 00:17:47 +02:00
<slot v-else-if="isLoading" name="loading">
2024-12-06 14:42:03 +02:00
<div class="text-center text-gray-500" v-if="!slots.loading">
<ProgressSpinner styleClass="mt-4" />
</div>
2024-12-03 00:17:47 +02:00
</slot>
<slot v-else-if="isError" name="error" :error="error!" :reload="refetch">
<template v-if="!slots.error">
Ошибка загрузки данных:
{{ error && typeof error === 'object' && 'message' in error ? error.message : error }}
</template>
2024-11-20 01:59:52 +02:00
</slot>
</template>