mirror of
https://github.com/portainer/portainer.git
synced 2025-07-22 14:59:41 +02:00
refactor(ui/datatables): allow datatable to globally filter on object value [EE-5824] (#9955)
This commit is contained in:
parent
440f4e8dda
commit
cb7377ead6
34 changed files with 271 additions and 186 deletions
44
app/react/components/datatables/buildNameColumn.tsx
Normal file
44
app/react/components/datatables/buildNameColumn.tsx
Normal file
|
@ -0,0 +1,44 @@
|
|||
import { ColumnDef, CellContext } from '@tanstack/react-table';
|
||||
|
||||
import { Link } from '@@/Link';
|
||||
|
||||
import { DefaultType } from './types';
|
||||
import { defaultGetRowId } from './defaultGetRowId';
|
||||
|
||||
export function buildNameColumn<T extends DefaultType>(
|
||||
nameKey: keyof T,
|
||||
path: string,
|
||||
idParam = 'id',
|
||||
idGetter: (row: T) => string = defaultGetRowId<T>
|
||||
): ColumnDef<T> {
|
||||
const cell = createCell();
|
||||
|
||||
return {
|
||||
header: 'Name',
|
||||
accessorKey: nameKey,
|
||||
id: 'name',
|
||||
cell,
|
||||
enableSorting: true,
|
||||
enableHiding: false,
|
||||
};
|
||||
|
||||
function createCell() {
|
||||
return function NameCell({ renderValue, row }: CellContext<T, unknown>) {
|
||||
const name = renderValue() || '';
|
||||
|
||||
if (typeof name !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Link
|
||||
to={path}
|
||||
params={{ [idParam]: idGetter(row.original) }}
|
||||
title={name}
|
||||
>
|
||||
{name}
|
||||
</Link>
|
||||
);
|
||||
};
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue