fix: mejorar visualización responsive en móvil para metabase-debug
All checks were successful
build-and-deploy / build (push) Successful in 42s
build-and-deploy / deploy (push) Successful in 3s

Ajustes realizados:

Components:
- MetabaseCardDisplay: grid responsive, queries con wrap, botones apilables
- MetabaseCardsTable: filtros verticales en móvil, acciones con wrap

Page:
- Header responsive con elementos apilados
- Stats en grid 2x2 para móvil, 4 columnas en desktop
- Tamaños de fuente adaptados con breakpoints

Todas las queries SQL y JSON ahora usan whitespace-pre-wrap y break-words
para aprovechar el espacio vertical en lugar de scroll horizontal.
This commit is contained in:
2025-10-14 02:21:51 -06:00
parent 214d9a17d5
commit 585d31a374
3 changed files with 24 additions and 22 deletions

View File

@@ -16,7 +16,7 @@
<!-- Card Details --> <!-- Card Details -->
<div class="space-y-3"> <div class="space-y-3">
<div class="grid grid-cols-2 gap-4 text-sm"> <div class="grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm">
<div> <div>
<span class="font-medium">Database ID:</span> <span class="font-medium">Database ID:</span>
<span class="ml-2">{{ card.database_id }}</span> <span class="ml-2">{{ card.database_id }}</span>
@@ -41,12 +41,12 @@
<summary class="cursor-pointer text-sm font-medium text-primary"> <summary class="cursor-pointer text-sm font-medium text-primary">
Ver SQL Ver SQL
</summary> </summary>
<pre class="mt-2 p-3 bg-gray-50 dark:bg-gray-900 rounded text-xs overflow-x-auto">{{ card.dataset_query.native.query }}</pre> <pre class="mt-2 p-3 bg-gray-50 dark:bg-gray-900 rounded text-xs overflow-x-auto whitespace-pre-wrap break-words">{{ card.dataset_query.native.query }}</pre>
</details> </details>
</div> </div>
<!-- Actions --> <!-- Actions -->
<div class="flex gap-2 mt-4 pt-4 border-t dark:border-gray-700"> <div class="flex flex-wrap gap-2 mt-4 pt-4 border-t dark:border-gray-700">
<UButton <UButton
@click="executeQuery" @click="executeQuery"
:loading="executing" :loading="executing"
@@ -80,7 +80,7 @@
<!-- Query Results --> <!-- Query Results -->
<div v-if="queryResult" class="mt-4"> <div v-if="queryResult" class="mt-4">
<div class="flex justify-between items-center mb-2"> <div class="flex flex-wrap justify-between items-center gap-2 mb-2">
<h4 class="font-medium text-sm">Resultados</h4> <h4 class="font-medium text-sm">Resultados</h4>
<UBadge color="green"> <UBadge color="green">
{{ queryResult.data?.rows?.length || 0 }} filas en {{ queryResult.running_time || 0 }}ms {{ queryResult.data?.rows?.length || 0 }} filas en {{ queryResult.running_time || 0 }}ms
@@ -88,7 +88,7 @@
</div> </div>
<div class="overflow-x-auto"> <div class="overflow-x-auto">
<pre class="p-3 bg-gray-50 dark:bg-gray-900 rounded text-xs">{{ JSON.stringify(queryResult.data, null, 2) }}</pre> <pre class="p-3 bg-gray-50 dark:bg-gray-900 rounded text-xs whitespace-pre-wrap break-words">{{ JSON.stringify(queryResult.data, null, 2) }}</pre>
</div> </div>
</div> </div>

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="space-y-4"> <div class="space-y-4">
<!-- Filters and Search --> <!-- Filters and Search -->
<div class="flex gap-3"> <div class="flex flex-col sm:flex-row gap-3">
<UInput <UInput
v-model="search" v-model="search"
placeholder="Buscar por nombre o ID..." placeholder="Buscar por nombre o ID..."
@@ -12,6 +12,7 @@
v-model="selectedFilter" v-model="selectedFilter"
:options="filterOptions" :options="filterOptions"
placeholder="Filtrar..." placeholder="Filtrar..."
class="w-full sm:w-auto"
/> />
</div> </div>
@@ -46,7 +47,7 @@
</template> </template>
<template #actions-data="{ row }"> <template #actions-data="{ row }">
<div class="flex gap-1"> <div class="flex flex-wrap gap-1">
<UButton <UButton
@click.stop="executeCard(row)" @click.stop="executeCard(row)"
:loading="executingCards.has(row.id)" :loading="executingCards.has(row.id)"
@@ -95,7 +96,7 @@
</template> </template>
<div v-if="currentResult" class="space-y-3"> <div v-if="currentResult" class="space-y-3">
<div class="flex gap-4 text-sm"> <div class="flex flex-wrap gap-4 text-sm">
<div> <div>
<span class="font-medium">Filas:</span> <span class="font-medium">Filas:</span>
<span class="ml-2">{{ currentResult.data?.rows?.length || 0 }}</span> <span class="ml-2">{{ currentResult.data?.rows?.length || 0 }}</span>
@@ -113,7 +114,7 @@
</div> </div>
<div class="overflow-x-auto max-h-96"> <div class="overflow-x-auto max-h-96">
<pre class="p-3 bg-gray-50 dark:bg-gray-900 rounded text-xs">{{ JSON.stringify(currentResult.data, null, 2) }}</pre> <pre class="p-3 bg-gray-50 dark:bg-gray-900 rounded text-xs whitespace-pre-wrap break-words">{{ JSON.stringify(currentResult.data, null, 2) }}</pre>
</div> </div>
</div> </div>

View File

@@ -2,10 +2,10 @@
<div class="container mx-auto px-4 py-8"> <div class="container mx-auto px-4 py-8">
<div class="space-y-6"> <div class="space-y-6">
<!-- Header --> <!-- Header -->
<div class="flex justify-between items-start"> <div class="flex flex-col sm:flex-row sm:justify-between sm:items-start gap-4">
<div> <div class="flex-1">
<h1 class="text-3xl font-bold">Metabase Debug</h1> <h1 class="text-2xl sm:text-3xl font-bold">Metabase Debug</h1>
<p class="text-gray-600 dark:text-gray-400 mt-1"> <p class="text-sm sm:text-base text-gray-600 dark:text-gray-400 mt-1">
Herramienta de debugging para queries de Metabase Herramienta de debugging para queries de Metabase
</p> </p>
</div> </div>
@@ -16,38 +16,39 @@
icon="i-heroicons-arrow-path" icon="i-heroicons-arrow-path"
color="primary" color="primary"
variant="soft" variant="soft"
class="w-full sm:w-auto"
> >
Actualizar Actualizar
</UButton> </UButton>
</div> </div>
<!-- Stats --> <!-- Stats -->
<div class="grid grid-cols-1 md:grid-cols-4 gap-4"> <div class="grid grid-cols-2 sm:grid-cols-2 md:grid-cols-4 gap-3 sm:gap-4">
<UCard> <UCard>
<div class="text-center"> <div class="text-center">
<div class="text-3xl font-bold text-primary">{{ cards.length }}</div> <div class="text-2xl sm:text-3xl font-bold text-primary">{{ cards.length }}</div>
<div class="text-sm text-gray-600 dark:text-gray-400">Total Cards</div> <div class="text-xs sm:text-sm text-gray-600 dark:text-gray-400">Total Cards</div>
</div> </div>
</UCard> </UCard>
<UCard> <UCard>
<div class="text-center"> <div class="text-center">
<div class="text-3xl font-bold text-primary">{{ nativeQueries }}</div> <div class="text-2xl sm:text-3xl font-bold text-primary">{{ nativeQueries }}</div>
<div class="text-sm text-gray-600 dark:text-gray-400">SQL Nativo</div> <div class="text-xs sm:text-sm text-gray-600 dark:text-gray-400">SQL Nativo</div>
</div> </div>
</UCard> </UCard>
<UCard> <UCard>
<div class="text-center"> <div class="text-center">
<div class="text-3xl font-bold text-green-600">{{ queryBuilderQueries }}</div> <div class="text-2xl sm:text-3xl font-bold text-green-600">{{ queryBuilderQueries }}</div>
<div class="text-sm text-gray-600 dark:text-gray-400">Query Builder</div> <div class="text-xs sm:text-sm text-gray-600 dark:text-gray-400">Query Builder</div>
</div> </div>
</UCard> </UCard>
<UCard> <UCard>
<div class="text-center"> <div class="text-center">
<div class="text-3xl font-bold text-gray-600">{{ panoramaQueries.length }}/9</div> <div class="text-2xl sm:text-3xl font-bold text-gray-600">{{ panoramaQueries.length }}/9</div>
<div class="text-sm text-gray-600 dark:text-gray-400">Queries Panorama</div> <div class="text-xs sm:text-sm text-gray-600 dark:text-gray-400">Queries Panorama</div>
</div> </div>
</UCard> </UCard>
</div> </div>