From f50ad3426f93af2a13c60644b4e980dc280d41b6 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Thu, 21 May 2026 09:58:58 -0500 Subject: [PATCH] correcion de boton de eliminacion, reactividad para nuevos registros, estabilidad del formulario --- .../fractions/HistoricalFractionDialog.svelte | 16 ++++-- .../fractions/HistoricalFractionList.svelte | 50 ++++++++++++++++--- 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionDialog.svelte b/frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionDialog.svelte index c0037075..9b74fd26 100644 --- a/frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionDialog.svelte +++ b/frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionDialog.svelte @@ -117,15 +117,23 @@ if (fraction) { // Update const updateData: HistoricalFractionUpdate = baseData; - await updateHistoricalFraction(companyId, fraction.id, updateData); + const updateResponse = await updateHistoricalFraction(companyId, fraction.id, updateData); + if (updateResponse.error || !updateResponse.data) { + toast.error(updateResponse.error || 'Error al actualizar la fracción'); + return; + } toast.success('Fracción actualizada correctamente'); } else { // Create const createData: HistoricalFractionCreate = { ...baseData, - historical_fraction: historicalFractionCode // Required in create + historical_fraction: historicalFractionCode }; - await createHistoricalFraction(companyId, createData); + const createResponse = await createHistoricalFraction(companyId, createData); + if (createResponse.error || !createResponse.data) { + toast.error(createResponse.error || 'Error al crear la fracción'); + return; + } toast.success('Fracción creada correctamente'); } onSuccess(); @@ -140,7 +148,7 @@ - + e.preventDefault()}> {fraction ? 'Editar' : 'Crear'} Fracción Histórica diff --git a/frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionList.svelte b/frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionList.svelte index 7841137c..c3bce00e 100644 --- a/frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionList.svelte +++ b/frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionList.svelte @@ -12,6 +12,7 @@ import { Search, Loader2, Plus, Pencil, Trash2 } from 'lucide-svelte'; import { toast } from 'svelte-sonner'; import HistoricalFractionDialog from './HistoricalFractionDialog.svelte'; + import * as AlertDialog from '$lib/components/ui/alert-dialog'; import { currentUser } from '$lib/auth'; import ErrorState from '$lib/components/dashboard/common/error-state.svelte'; import { @@ -55,6 +56,8 @@ let scrollContainer = $state(null); let dialogOpen = $state(false); let editingFraction = $state(null); let deletingFractionId = $state(null); + let showDeleteConfirm = $state(false); + let fractionToDelete = $state(null); async function loadFractions(reset = false) { const companyId = companyStore.activeCompany?.id; @@ -136,19 +139,27 @@ let scrollContainer = $state(null); dialogOpen = true; } - async function handleDelete(fraction: HistoricalFraction) { + function confirmDelete(fraction: HistoricalFraction) { if (!canDelete) { toast.error('No tienes permiso para eliminar fracciones históricas'); return; } + fractionToDelete = fraction; + showDeleteConfirm = true; + } + + async function handleDelete() { + if (!canDelete || !fractionToDelete) return; const companyId = companyStore.activeCompany?.id; if (!companyId) return; - if (!confirm(`¿Estás seguro de eliminar la fracción ${fraction.historical_fraction}?`)) return; - try { - deletingFractionId = fraction.id; - await deleteHistoricalFraction(companyId, fraction.id); + deletingFractionId = fractionToDelete.id; + const response = await deleteHistoricalFraction(companyId, fractionToDelete.id); + if (response.error) { + toast.error(response.error || 'Error al eliminar la fracción'); + return; + } toast.success('Fracción eliminada correctamente'); loadFractions(true); } catch (error) { @@ -156,6 +167,8 @@ let scrollContainer = $state(null); toast.error('Error al eliminar la fracción'); } finally { deletingFractionId = null; + showDeleteConfirm = false; + fractionToDelete = null; } } @@ -266,7 +279,7 @@ let scrollContainer = $state(null); {:else} {#each fractions as fraction} - + canEdit && handleEdit(fraction)}> {fraction.historical_fraction} {fraction.fraction_type || '-'} {fraction.unit_of_measure_code || '-'} @@ -288,7 +301,7 @@ let scrollContainer = $state(null); variant="ghost" size="icon" class="h-8 w-8 text-destructive hover:text-destructive" - onclick={() => handleDelete(fraction)} + onclick={() => confirmDelete(fraction)} disabled={deletingFractionId === fraction.id} > {#if deletingFractionId === fraction.id} @@ -330,3 +343,26 @@ let scrollContainer = $state(null); /> {/if} + + + + + ¿Estás seguro? + + Esta acción no se puede deshacer. Se eliminará permanentemente la fracción {fractionToDelete?.historical_fraction}. + + + + Cancelar + + {#if deletingFractionId !== null} + + {/if} + Eliminar + + + +