import{deleteSingle,deleteBulk}from'@/lib/delete-service';// Single delete with confirmationconsthandleDelete=async(id:string)=>{awaitdeleteSingle(id,{endpoint:'/api/users/:id',onSuccess:()=>{// Refresh data},});};// Bulk delete with confirmationconsthandleBulkDelete=async(selectedIds:string[])=>{awaitdeleteBulk({endpoint:'/api/users/bulk-delete',selectedIds,onSuccess:()=>{// Refresh data},});};
import{Table}from'@tanstack/react-table';import{exportVisibleAsCSV,exportSelectedAsCSV,buildServerExportUrl}from'@/lib/export-from-table';// Client-side: export all visible rows/columns using column meta for headers/formattingconstonExportCsv=(table:Table<User>)=>{exportVisibleAsCSV(table,'users-export.csv');};// Client-side: export only selected rowsconstonExportSelectedCsv=(table:Table<User>)=>{exportSelectedAsCSV(table,'users-selected.csv');};// Server-side: build URL preserving current state (filters, sorting, selection, columns)consturl=buildServerExportUrl('/api/users/export',table,'csv');// window.location.href = url
// Column-level permissionsconstcolumns=[createTableColumn<User>().accessor('salary',{label:'Salario',permission:'users.view_salary'// Only show if user has permission})]// Table-level permissions<DataTablepermissions={{canCreate:hasPermission('users.create'),canEdit:hasPermission('users.edit'),canDelete:hasPermission('users.delete'),canExport:hasPermission('users.export'),canBulkDelete:hasPermission('users.bulk_delete')}}/>