vue-componentes/src/componentes/EliTabela/EliTabelaEstados.vue

47 lines
1.5 KiB
Vue

<template>
<!-- Estado de carregamento: consulta em andamento -->
<div v-if="carregando" class="eli-tabela eli-tabela--carregando" aria-busy="true">
<LoaderCircle class="eli-tabela__estado-icone eli-tabela__estado-icone--spin" :size="22" :stroke-width="2" />
<span>Carregando…</span>
</div>
<!-- Estado de erro: mostra mensagem retornada pela consulta -->
<div v-else-if="erro" class="eli-tabela eli-tabela--erro" role="alert">
<AlertCircle class="eli-tabela__estado-icone eli-tabela__estado-icone--erro" :size="18" :stroke-width="2" />
<div>
<div class="eli-tabela__erro-titulo">Erro</div>
<div class="eli-tabela__erro-mensagem">{{ erro }}</div>
</div>
</div>
<!-- Estado vazio: consulta sem registros -->
<div v-else class="eli-tabela eli-tabela--vazio">
<Inbox class="eli-tabela__estado-icone" :size="22" :stroke-width="1.5" />
<span>{{ mensagemVazio ?? "Nenhum registro encontrado." }}</span>
</div>
</template>
<script lang="ts">
import { AlertCircle, Inbox, LoaderCircle } from "@lucide/vue"
import { defineComponent, type PropType } from "vue"
export default defineComponent({
name: "EliTabelaEstados",
components: { AlertCircle, Inbox, LoaderCircle },
props: {
carregando: {
type: Boolean,
required: true,
},
erro: {
type: [String, Object] as PropType<string | null>,
default: null,
},
mensagemVazio: {
type: String as PropType<string | undefined>,
required: false,
default: undefined,
},
},
})
</script>