From e919cc60a30e092d49e435a4d6bf9e85f71589f0 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Fri, 15 May 2026 12:28:23 -0500 Subject: [PATCH] Botones de edicion y eliminacion en el footer de la informacion de los secotres y doble click para ver la informacion --- .../general_catalogs/sectors/columns.ts | 38 ++++++ .../sectors/create-edit-dialog.svelte | 110 ++++++++++++++++++ .../sectors/data-table-actions.svelte | 75 ++++++++++++ .../reference_data/sectors/+page.svelte | 50 +++++++- 4 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 frontend/src/lib/components/dashboard/general_catalogs/sectors/columns.ts create mode 100644 frontend/src/lib/components/dashboard/general_catalogs/sectors/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/general_catalogs/sectors/data-table-actions.svelte diff --git a/frontend/src/lib/components/dashboard/general_catalogs/sectors/columns.ts b/frontend/src/lib/components/dashboard/general_catalogs/sectors/columns.ts new file mode 100644 index 00000000..6bccf692 --- /dev/null +++ b/frontend/src/lib/components/dashboard/general_catalogs/sectors/columns.ts @@ -0,0 +1,38 @@ +import type { Sector } from '$lib/api/dashboard/general_catalogs/sectors'; +import type { ColumnDef } from '@tanstack/table-core'; +import { renderComponent } from '$lib/components/ui/data-table'; +import DataTableActions from './data-table-actions.svelte'; + +export function createColumns( + onSuccess?: () => void, + permissions?: { canEdit: boolean; canDelete: boolean } +): ColumnDef[] { + return [ + { + accessorKey: 'key', + header: 'Clave', + cell: ({ row }) => row.original.key || '-' + }, + { + accessorKey: 'description', + header: 'Descripción', + cell: ({ row }) => row.original.description || '-' + }, + { + accessorKey: 'authorized', + header: 'Estatus', + cell: ({ row }) => (row.original.authorized ? 'Autorizado' : 'No Autorizado') + }, + { + id: 'actions', + header: '', + cell: ({ row }) => + renderComponent(DataTableActions, { + item: row.original, + onSuccess, + canEdit: permissions?.canEdit ?? false, + canDelete: permissions?.canDelete ?? false + }) + } + ]; +} diff --git a/frontend/src/lib/components/dashboard/general_catalogs/sectors/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/general_catalogs/sectors/create-edit-dialog.svelte new file mode 100644 index 00000000..fec88731 --- /dev/null +++ b/frontend/src/lib/components/dashboard/general_catalogs/sectors/create-edit-dialog.svelte @@ -0,0 +1,110 @@ + + + + + + {title} + + +
{ e.preventDefault(); handleSubmit(); }} class="space-y-4 py-2"> + {#if error} +
+ {error} +
+ {/if} + +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + + +
+
+
diff --git a/frontend/src/lib/components/dashboard/general_catalogs/sectors/data-table-actions.svelte b/frontend/src/lib/components/dashboard/general_catalogs/sectors/data-table-actions.svelte new file mode 100644 index 00000000..3876a1aa --- /dev/null +++ b/frontend/src/lib/components/dashboard/general_catalogs/sectors/data-table-actions.svelte @@ -0,0 +1,75 @@ + + +{#if canEdit || canDelete} + + + {#snippet child({ props })} + + {/snippet} + + + Acciones + {#if canEdit} + (dialogOpen = true)}> + + Editar + + {/if} + {#if canDelete} + {#if canEdit}{/if} + + {#if loading} + + {:else} + + {/if} + Eliminar + + {/if} + + + + +{/if} diff --git a/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte b/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte index 9c2eb613..bfdedc58 100644 --- a/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte +++ b/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte @@ -30,6 +30,14 @@ let error = $state(data.error || null); let status = $state(data.status || 200); + // Selección de fila + let selectedIds = $state<(string | number)[]>([]); + const selectedItem = $derived( + selectedIds.length === 1 + ? (allItems.find((s) => String(s.id) === String(selectedIds[0])) ?? null) + : null + ); + // Diálogos let createDialogOpen = $state(false); let deleteDialogOpen = $state(false); @@ -181,12 +189,52 @@
- + (selectedIds = ids)} + onRowClick={(row) => (selectedIds = selectedIds.includes(row.id) ? [] : [row.id])} + onRowDoubleClick={(row) => { if (canEdit) handleEdit(row); }} + />
Mostrando {allItems.length} de {totalItems} registros
+ +
+
+
+ {#if canEdit} + + {/if} + {#if canDelete} + + {/if} +
+
+
{/if}