From f423388865de2a6a977064c23da2ab91aa92df7f Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Wed, 4 Mar 2026 15:12:49 -0700 Subject: [PATCH] Movidos botones de Actualizar Est y Desactualizar --- .../components/dashboard/invoices/columns.ts | 77 +++-- .../dashboard/invoices/data-table.svelte | 51 ++-- .../dashboard/invoices/delete-dialog.svelte | 82 ++++-- .../routes/dashboard/invoices/+page.svelte | 268 +++++++++++++----- 4 files changed, 340 insertions(+), 138 deletions(-) diff --git a/frontend/src/lib/components/dashboard/invoices/columns.ts b/frontend/src/lib/components/dashboard/invoices/columns.ts index f79c403c..95d3e7e5 100644 --- a/frontend/src/lib/components/dashboard/invoices/columns.ts +++ b/frontend/src/lib/components/dashboard/invoices/columns.ts @@ -1,7 +1,6 @@ import type { ColumnDef } from "@tanstack/table-core"; -import { renderComponent, renderSnippet } from "$lib/components/ui/data-table/index.js"; +import { renderSnippet } from "$lib/components/ui/data-table/index.js"; import { createRawSnippet } from "svelte"; -import DataTableActions from "./data-table-actions.svelte"; import type { Invoice } from '$lib/api/dashboard/a76/invoices'; import { getInvoiceTypeColor } from "$lib/utils"; @@ -18,29 +17,71 @@ export function createColumns( onSuccess?: () => void ): ColumnDef[] { return [ - // 0. NUEVA COLUMNA: Checkbox visual (el estado real lo maneja la opacidad) + // Checkbox visual { id: "select", header: ({ table }) => { - return renderSnippet( - createRawSnippet(() => ({ - render: () => `
` - })) - ); + const isAllSelected = table.getIsAllPageRowsSelected(); + const isSomeSelected = table.getIsSomePageRowsSelected(); + + const selectAllSnippet = createRawSnippet<[ + { checked: boolean; indeterminate: boolean; onchange: (e: Event) => void } + ]>((getProps) => { + const { checked, indeterminate, onchange } = getProps(); + return { + render: () => `
+ +
`, + setup: (node) => { + const input = node.querySelector('input') as HTMLInputElement; + if (input) { + input.indeterminate = indeterminate; + input.addEventListener('change', onchange); + } + } + }; + }); + + return renderSnippet(selectAllSnippet, { + checked: isAllSelected, + indeterminate: isSomeSelected && !isAllSelected, + onchange: (e: Event) => { + table.toggleAllPageRowsSelected(!!(e.target as HTMLInputElement).checked); + } + }); }, cell: ({ row }) => { const isSelected = row.getIsSelected(); - const checkboxSnippet = createRawSnippet<[{ selected: boolean }]>((getProps) => { - const { selected } = getProps(); + const checkboxSnippet = createRawSnippet<[ + { selected: boolean; onchange: (e: Event) => void } + ]>((getProps) => { + const { selected, onchange } = getProps(); return { render: () => `
- -
` + + `, + setup: (node) => { + const input = node.querySelector('input') as HTMLInputElement; + if (input) { + input.addEventListener('change', onchange); + } + } }; }); - return renderSnippet(checkboxSnippet, { selected: isSelected }); + return renderSnippet(checkboxSnippet, { + selected: isSelected, + onchange: (e: Event) => { + e.stopPropagation(); // Evitar que el clic en el checkbox dispare el rowClick + row.toggleSelected(!!(e.target as HTMLInputElement).checked); + } + }); }, enableSorting: false, enableHiding: false, @@ -298,16 +339,6 @@ export function createColumns( return renderSnippet(relDocSnippet, { relDoc }); } }, - // 2. MODIFICAMOS AQUÍ: Pasamos onDownload al componente - { - id: "actions", - cell: ({ row }) => { - return renderComponent(DataTableActions, { - invoice: row.original, - onSuccess - }); - } - } ]; } diff --git a/frontend/src/lib/components/dashboard/invoices/data-table.svelte b/frontend/src/lib/components/dashboard/invoices/data-table.svelte index d549b5a2..998c3994 100644 --- a/frontend/src/lib/components/dashboard/invoices/data-table.svelte +++ b/frontend/src/lib/components/dashboard/invoices/data-table.svelte @@ -1,11 +1,8 @@
-
+
{#each table.getHeaderGroups() as headerGroup (headerGroup.id)} @@ -95,17 +97,16 @@ {#each table.getRowModel().rows as row (row.id)} - onRowClick && onRowClick(row.original)} > {#each row.getVisibleCells() as cell (cell.id)} - + {/each} @@ -116,7 +117,7 @@ {/each} - + {#if hasMore} @@ -124,13 +125,13 @@
{#if loading}
-
- Cargando más... +
+ Cargando más...
{:else} -
- Desplázate para cargar más -
+
Desplázate para cargar más
{/if}
diff --git a/frontend/src/lib/components/dashboard/invoices/delete-dialog.svelte b/frontend/src/lib/components/dashboard/invoices/delete-dialog.svelte index c813bbae..900fb156 100644 --- a/frontend/src/lib/components/dashboard/invoices/delete-dialog.svelte +++ b/frontend/src/lib/components/dashboard/invoices/delete-dialog.svelte @@ -1,44 +1,63 @@