diff --git a/frontend/src/lib/components/dashboard/goods/parts/columns.ts b/frontend/src/lib/components/dashboard/goods/parts/columns.ts index 005703e6..794e0322 100644 --- a/frontend/src/lib/components/dashboard/goods/parts/columns.ts +++ b/frontend/src/lib/components/dashboard/goods/parts/columns.ts @@ -19,42 +19,19 @@ function formatCurrency(amount: number | null, currency: string | null): string } export type GoodsPartsColumnOptions = { - canEdit?: boolean; - canDelete?: boolean; + canEdit?: boolean; + canDelete?: boolean; }; export function createColumns( - onSuccess?: () => void, - options: GoodsPartsColumnOptions = {} + onSuccess?: () => void, + options: GoodsPartsColumnOptions = {} ): ColumnDef[] { - const { canEdit = false, canDelete = false } = options; + const { canEdit = false, canDelete = false } = options; return [ { id: "select", - header: ({ table }) => { - const headerCheckbox = createRawSnippet<[{ table: import("@tanstack/table-core").Table }]>((getTable) => { - const { table: t } = getTable(); - return { - render: () => { - const input = document.createElement('input'); - input.type = 'checkbox'; - input.checked = t.getIsAllPageRowsSelected(); - input.indeterminate = t.getIsSomePageRowsSelected(); - input.onchange = (e) => t.toggleAllPageRowsSelected(!!(e.target as HTMLInputElement).checked); - // Usamos el componente Checkbox si es posible, pero para snippets crudos en TanStack 5 - // a veces es más directo un input o un Snippet de Svelte. - // Aquí usaremos renderComponent para el Checkbox real. - return ""; - } - }; - }); - return renderComponent(Checkbox, { - checked: table.getIsAllPageRowsSelected(), - indeterminate: table.getIsSomePageRowsSelected(), - onCheckedChange: (value) => table.toggleAllPageRowsSelected(!!value), - "aria-label": "Select all" - }); - }, + header: "", // Cabecera vacía para igualar a Clases cell: ({ row }) => { return renderComponent(Checkbox, { checked: row.getIsSelected(), @@ -62,6 +39,7 @@ export function createColumns( "aria-label": "Select row" }); }, + size: 40, enableSorting: false, enableHiding: false }, @@ -74,16 +52,15 @@ export function createColumns( const statusSnippet = createRawSnippet<[{ active: boolean }]>((getStatus) => { const { active } = getStatus(); return { - render: () => active - ? `Activo` - : `Inactivo` + render: () => active + ? `Activo` + : `Inactivo` }; }); return renderSnippet(statusSnippet, { active: row.original.is_active }); } }, - { accessorKey: "part_number", header: "No. Parte", @@ -100,7 +77,6 @@ export function createColumns( } }, - { accessorKey: "description_spanish", header: "Descripción", @@ -110,7 +86,7 @@ export function createColumns( const { desc } = getDesc(); return { render: () => - `
${desc || '-'}
` + `
${desc || '-'}
` }; }); return renderSnippet(descSnippet, { desc: row.original.description_spanish || '' }); @@ -125,14 +101,14 @@ export function createColumns( const { desc } = getDesc(); return { render: () => - `
${desc || '-'}
` + `
${desc || '-'}
` }; }); return renderSnippet(descEnSnippet, { desc: row.original.description_english || '' }); } }, - + // CLASE - Estilo de Clases (borde azul) { accessorKey: "part_class", header: "Clase", @@ -141,29 +117,33 @@ export function createColumns( const classSnippet = createRawSnippet<[{ cls: string }]>((getCls) => { const { cls } = getCls(); return { - render: () => `
${cls || '-'}
` + render: () => cls + ? `${cls}` + : `-` }; }); return renderSnippet(classSnippet, { cls: row.original.part_class || '' }); } }, - + // TIPO - Estilo de Clases (píldora oscura) { - accessorKey: "commercial_part_number", + accessorKey: "commercial_part_number", header: "Tipo", cell: ({ row }) => { const typeSnippet = createRawSnippet<[{ val: string }]>((getType) => { const { val } = getType(); return { - render: () => `
${val || '-'}
` + render: () => val + ? `${val}` + : `-` }; }); return renderSnippet(typeSnippet, { val: row.original.commercial_part_number || '' }); } }, - // 7. U.M. (Unidad de Medida) + // U.M. - Estilo de Clases (texto plano claro) { accessorKey: "unit_of_measure", header: "U.M.", @@ -171,15 +151,14 @@ export function createColumns( const umSnippet = createRawSnippet<[{ um: string | null }]>((getUm) => { const { um } = getUm(); return { - render: () => - `${um || '-'}` + render: () => `
${um || '-'}
` }; }); return renderSnippet(umSnippet, { um: row.original.unit_of_measure }); } }, - // 8. FRACCION + // FRACCION - Estilo de Clases (texto naranja) { accessorKey: "fraction", header: "Fracción", @@ -188,7 +167,7 @@ export function createColumns( const fracSnippet = createRawSnippet<[{ fr: string }]>((getFrac) => { const { fr } = getFrac(); return { - render: () => `${fr || '-'}` + render: () => `${fr || '-'}` }; }); return renderSnippet(fracSnippet, { @@ -197,7 +176,7 @@ export function createColumns( } }, - // 9. U.M.T. (del inv_data) + // U.M.T. { id: "stock_uom", header: "U.M.T.", @@ -205,14 +184,14 @@ export function createColumns( const umtSnippet = createRawSnippet<[{ umt: string }]>((getUmt) => { const { umt } = getUmt(); return { - render: () => `
${umt || '-'}
` + render: () => `
${umt || '-'}
` }; }); return renderSnippet(umtSnippet, { umt: row.original.inv_data?.stock_uom || '' }); } }, - // 10. COSTO + // COSTO - Texto plano { accessorKey: "unit_cost", header: "Costo", @@ -221,17 +200,17 @@ export function createColumns( const costSnippet = createRawSnippet<[{ amount: number | null, curr: string | null }]>((getCost) => { const { amount, curr } = getCost(); return { - render: () => `
${formatCurrency(amount, curr)}
` + render: () => `
${formatCurrency(amount, curr)}
` }; }); - return renderSnippet(costSnippet, { - amount: row.original.unit_cost, - curr: row.original.currency_key + return renderSnippet(costSnippet, { + amount: row.original.unit_cost, + curr: row.original.currency_key }); } }, - // 11. MONEDA + // MONEDA - Texto plano para igualar el estilo minimalista { accessorKey: "currency_key", header: "Moneda", @@ -239,14 +218,14 @@ export function createColumns( const currSnippet = createRawSnippet<[{ curr: string }]>((getCurr) => { const { curr } = getCurr(); return { - render: () => `${curr || '-'}` + render: () => `${curr || '-'}` }; }); return renderSnippet(currSnippet, { curr: row.original.currency_key || '' }); } }, - // 12. PESO UNITARIO + // PESO UNITARIO { accessorKey: "unit_weight", header: "Peso Unitario", @@ -256,19 +235,19 @@ export function createColumns( const { weight, type } = getWeight(); return { render: () => { - if (weight === null || weight === undefined) return '-'; - return `
${Number(weight).toFixed(4)} ${type || ''}
`; + if (weight === null || weight === undefined) return '-'; + return `
${Number(weight).toFixed(4)} ${type || ''}
`; } }; }); - return renderSnippet(weightSnippet, { + return renderSnippet(weightSnippet, { weight: row.original.unit_weight, type: row.original.weight_type }); } }, - // 13. U.M. EXIST (Stock UOM del inv_data) + // U.M. EXIST { id: "equivalent_uom", header: "U.M. Exist", @@ -276,14 +255,14 @@ export function createColumns( const eqUomSnippet = createRawSnippet<[{ uom: string }]>((getUom) => { const { uom } = getUom(); return { - render: () => `
${uom || '-'}
` + render: () => `
${uom || '-'}
` }; }); return renderSnippet(eqUomSnippet, { uom: row.original.inv_data?.equivalent_uom || '' }); } }, - // 14. FECHA MODIFICACIÓN + // FECHA MODIFICACIÓN { accessorKey: "updated_at", header: "Fecha Modificación", @@ -291,7 +270,7 @@ export function createColumns( cell: ({ row }) => { const dateSnippet = createRawSnippet<[{ date: string }]>((getDate) => { const { date } = getDate(); - if (!date) return { render: () => '-' }; + if (!date) return { render: () => '-' }; const formatted = new Date(date).toLocaleDateString('es-MX', { year: 'numeric', month: '2-digit', @@ -311,11 +290,11 @@ export function createColumns( header: "", cell: ({ row }) => { return renderComponent(DataTableActions, { - item: row.original, - onSuccess, - canEdit, - canDelete - }); + item: row.original, + onSuccess, + canEdit, + canDelete + }); } } ]; diff --git a/frontend/src/lib/components/dashboard/goods/parts/data-table.svelte b/frontend/src/lib/components/dashboard/goods/parts/data-table.svelte index 2e68fc0a..99dfb8e9 100644 --- a/frontend/src/lib/components/dashboard/goods/parts/data-table.svelte +++ b/frontend/src/lib/components/dashboard/goods/parts/data-table.svelte @@ -95,14 +95,14 @@ bind:this={scrollContainer} > - + {#each table.getHeaderGroups() as headerGroup (headerGroup.id)} {#each headerGroup.headers as header (header.id)} {#if !header.isPlaceholder}