fix: add optional chaining and default values to prevent errors in dashboard page data rendering
This commit is contained in:
@@ -299,21 +299,20 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Monitoramento em Tempo Real -->
|
<!-- Monitoramento em Tempo Real -->
|
||||||
{#if statusSistemaQuery.data}
|
{#if statusSistemaQuery?.data}
|
||||||
{@const status = statusSistemaQuery.data}
|
{@const status = statusSistemaQuery.data}
|
||||||
{@const atividade = atividadeBDQuery.data || {
|
{@const atividade = atividadeBDQuery?.data || {
|
||||||
historico: Array.from({ length: 30 }, () => ({ entradas: 0, saidas: 0 }))
|
historico: Array.from({ length: 30 }, () => ({ entradas: 0, saidas: 0 }))
|
||||||
}}
|
}}
|
||||||
{@const distribuicao = distribuicaoQuery.data || {
|
{@const distribuicao = distribuicaoQuery?.data || {
|
||||||
queries: 0,
|
queries: 0,
|
||||||
mutations: 0,
|
mutations: 0,
|
||||||
leituras: 0,
|
leituras: 0,
|
||||||
escritas: 0
|
escritas: 0
|
||||||
}}
|
}}
|
||||||
{@const maxAtividade = Math.max(
|
{@const maxAtividade = atividade.historico && atividade.historico.length > 0
|
||||||
1,
|
? Math.max(1, ...atividade.historico.map((p) => Math.max(p.entradas || 0, p.saidas || 0)))
|
||||||
...atividade.historico.map((p) => Math.max(p.entradas, p.saidas))
|
: 1}
|
||||||
)}
|
|
||||||
|
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<div class="mb-4 flex items-center gap-3">
|
<div class="mb-4 flex items-center gap-3">
|
||||||
@@ -494,27 +493,29 @@
|
|||||||
|
|
||||||
<!-- Barras de atividade -->
|
<!-- Barras de atividade -->
|
||||||
<div class="flex h-full items-end justify-around gap-1">
|
<div class="flex h-full items-end justify-around gap-1">
|
||||||
{#each atividade.historico as ponto, idx (idx)}
|
{#each atividade.historico || [] as ponto, idx (idx)}
|
||||||
|
{@const entradas = ponto?.entradas || 0}
|
||||||
|
{@const saidas = ponto?.saidas || 0}
|
||||||
<div class="group relative flex h-full flex-1 items-end gap-0.5">
|
<div class="group relative flex h-full flex-1 items-end gap-0.5">
|
||||||
<!-- Entradas (verde) -->
|
<!-- Entradas (verde) -->
|
||||||
<div
|
<div
|
||||||
class="from-success to-success/70 flex-1 rounded-t bg-linear-to-t transition-all duration-300 hover:scale-110"
|
class="from-success to-success/70 flex-1 rounded-t bg-linear-to-t transition-all duration-300 hover:scale-110"
|
||||||
style="height: {(ponto.entradas / maxAtividade) * 100}%; min-height: 2px;"
|
style="height: {(entradas / maxAtividade) * 100}%; min-height: 2px;"
|
||||||
title="Entradas: {ponto.entradas}"
|
title="Entradas: {entradas}"
|
||||||
></div>
|
></div>
|
||||||
<!-- Saídas (vermelho) -->
|
<!-- Saídas (vermelho) -->
|
||||||
<div
|
<div
|
||||||
class="from-error to-error/70 flex-1 rounded-t bg-linear-to-t transition-all duration-300 hover:scale-110"
|
class="from-error to-error/70 flex-1 rounded-t bg-linear-to-t transition-all duration-300 hover:scale-110"
|
||||||
style="height: {(ponto.saidas / maxAtividade) * 100}%; min-height: 2px;"
|
style="height: {(saidas / maxAtividade) * 100}%; min-height: 2px;"
|
||||||
title="Saídas: {ponto.saidas}"
|
title="Saídas: {saidas}"
|
||||||
></div>
|
></div>
|
||||||
|
|
||||||
<!-- Tooltip no hover -->
|
<!-- Tooltip no hover -->
|
||||||
<div
|
<div
|
||||||
class="bg-base-300 text-base-content absolute bottom-full left-1/2 z-10 mb-2 -translate-x-1/2 rounded px-2 py-1 text-xs whitespace-nowrap opacity-0 shadow-lg transition-opacity group-hover:opacity-100"
|
class="bg-base-300 text-base-content absolute bottom-full left-1/2 z-10 mb-2 -translate-x-1/2 rounded px-2 py-1 text-xs whitespace-nowrap opacity-0 shadow-lg transition-opacity group-hover:opacity-100"
|
||||||
>
|
>
|
||||||
<div>↑ {ponto.entradas} entradas</div>
|
<div>↑ {entradas} entradas</div>
|
||||||
<div>↓ {ponto.saidas} saídas</div>
|
<div>↓ {saidas} saídas</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
@@ -559,23 +560,23 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="mb-1 flex justify-between text-sm">
|
<div class="mb-1 flex justify-between text-sm">
|
||||||
<span>Queries (Leituras)</span>
|
<span>Queries (Leituras)</span>
|
||||||
<span class="text-primary font-bold">{distribuicao.queries}</span>
|
<span class="text-primary font-bold">{distribuicao?.queries ?? 0}</span>
|
||||||
</div>
|
</div>
|
||||||
<progress
|
<progress
|
||||||
class="progress progress-primary w-full"
|
class="progress progress-primary w-full"
|
||||||
value={distribuicao.queries}
|
value={distribuicao?.queries ?? 0}
|
||||||
max={Math.max(distribuicao.queries + distribuicao.mutations, 1)}
|
max={Math.max((distribuicao?.queries ?? 0) + (distribuicao?.mutations ?? 0), 1)}
|
||||||
></progress>
|
></progress>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="mb-1 flex justify-between text-sm">
|
<div class="mb-1 flex justify-between text-sm">
|
||||||
<span>Mutations (Escritas)</span>
|
<span>Mutations (Escritas)</span>
|
||||||
<span class="text-secondary font-bold">{distribuicao.mutations}</span>
|
<span class="text-secondary font-bold">{distribuicao?.mutations ?? 0}</span>
|
||||||
</div>
|
</div>
|
||||||
<progress
|
<progress
|
||||||
class="progress progress-secondary w-full"
|
class="progress progress-secondary w-full"
|
||||||
value={distribuicao.mutations}
|
value={distribuicao?.mutations ?? 0}
|
||||||
max={Math.max(distribuicao.queries + distribuicao.mutations, 1)}
|
max={Math.max((distribuicao?.queries ?? 0) + (distribuicao?.mutations ?? 0), 1)}
|
||||||
></progress>
|
></progress>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -589,23 +590,23 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="mb-1 flex justify-between text-sm">
|
<div class="mb-1 flex justify-between text-sm">
|
||||||
<span>Leituras</span>
|
<span>Leituras</span>
|
||||||
<span class="text-info font-bold">{distribuicao.leituras}</span>
|
<span class="text-info font-bold">{distribuicao?.leituras ?? 0}</span>
|
||||||
</div>
|
</div>
|
||||||
<progress
|
<progress
|
||||||
class="progress progress-info w-full"
|
class="progress progress-info w-full"
|
||||||
value={distribuicao.leituras}
|
value={distribuicao?.leituras ?? 0}
|
||||||
max={Math.max(distribuicao.leituras + distribuicao.escritas, 1)}
|
max={Math.max((distribuicao?.leituras ?? 0) + (distribuicao?.escritas ?? 0), 1)}
|
||||||
></progress>
|
></progress>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="mb-1 flex justify-between text-sm">
|
<div class="mb-1 flex justify-between text-sm">
|
||||||
<span>Escritas</span>
|
<span>Escritas</span>
|
||||||
<span class="text-warning font-bold">{distribuicao.escritas}</span>
|
<span class="text-warning font-bold">{distribuicao?.escritas ?? 0}</span>
|
||||||
</div>
|
</div>
|
||||||
<progress
|
<progress
|
||||||
class="progress progress-warning w-full"
|
class="progress progress-warning w-full"
|
||||||
value={distribuicao.escritas}
|
value={distribuicao?.escritas ?? 0}
|
||||||
max={Math.max(distribuicao.leituras + distribuicao.escritas, 1)}
|
max={Math.max((distribuicao?.leituras ?? 0) + (distribuicao?.escritas ?? 0), 1)}
|
||||||
></progress>
|
></progress>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user