1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| import { createColumnHelper } from '@tanstack/react-table';
const columnHelper = createColumnHelper();
export const userColumns = [ columnHelper.accessor('id', { header: 'ID', cell: info => info.getValue(), footer: info => info.column.id, }), columnHelper.accessor(row => row.name, { id: 'name', cell: info => <input value={info.getValue()} onChange={e => console.log(e.target.value)} />, header: () => <span>Name</span>, footer: info => info.column.id, }), columnHelper.accessor('email', { header: () => 'Email', cell: info => ( <a href={`mailto:${info.getValue()}`} className="text-blue-500 hover:underline"> {info.getValue()} </a> ), }), columnHelper.group({ header: 'Info', footer: props => props.column.id, columns: [ columnHelper.accessor('role', { header: 'Role', footer: props => props.column.id, }), columnHelper.accessor('isActive', { header: 'Active', cell: info => ( <span className={info.getValue() ? 'text-green-500' : 'text-red-500'}> {info.getValue() ? 'Yes' : 'No'} </span> ), }), ], }), columnHelper.display({ id: 'actions', cell: (props) => ( <div className="flex gap-2"> <button className="text-blue-500 hover:text-blue-700" onClick={() => editUser(props.row.original)} > Edit </button> <button className="text-red-500 hover:text-red-700" onClick={() => deleteUser(props.row.original.id)} > Delete </button> </div> ), }), ];
export const createCustomColumn = (accessor, header, options = {}) => { return columnHelper.accessor(accessor, { header, sortingFn: options.sortingFn || 'alphanumeric', filterFn: options.filterFn || 'includesString', enableSorting: options.enableSorting !== false, enableColumnFilter: options.enableColumnFilter !== false, ...options, }); };
|