Skip to content

Column Filters Not Working When Using Grouped Columns #132

@mdaushi

Description

@mdaushi

I encountered an issue when trying to apply filters to a table that uses grouped columns. Filtering works fine with flat column structures, but it fails when the column configuration uses the columnHelper.group structure.

Reproduction Steps:

I defined my columns like this:

const columnHelper = createColumnHelper<MappingSubKegiatan>();

export const columns = [
  columnHelper.accessor("program_prioritas_nama", {
    id: "program_prioritas_nama",
    header: "Program Strategi / Unggulan",
    cell: ({ row }) => {
      const rowspan = row.original.row_span;
      return rowspan > 0 ? (
        <TableCell rowSpan={rowspan}>
          {row.original.program_prioritas_nama}
        </TableCell>
      ) : null;
    },
  }),
  columnHelper.group({
    id: "sub_kegiatan",
    header: "Sub Kegiatan",
    columns: [
      columnHelper.accessor("sub_kegiatan_kode", {
        id: "sub_kegiatan_kode",
        header: "Kode",
        cell: ({ getValue }) => <TableCell>{getValue()}</TableCell>,
      }),
      columnHelper.accessor("sub_kegiatan_nama", {
        id: "sub_kegiatan_nama",
        header: "Nama",
        cell: ({ getValue }) => <TableCell>{getValue()}</TableCell>,
      }),
    ],
  }),
  columnHelper.display({
    id: "actions",
    cell: ({ row }) => (
      <TableCell>
        <DataTableActions row={row} />
      </TableCell>
    ),
    size: 100,
  }),
];

Then, in my table configuration:

const dtf = createColumnConfigHelper<MappingSubKegiatan>();

export const columnsConfig = [
  dtf
    .text()
    .id("program_prioritas_nama")
    .accessor((row) => row.program_prioritas_nama)
    .displayName("Program")
    .icon(Heading1Icon)
    .build(),
  dtf
    .text()
    .id("sub_kegiatan_nama")
    .accessor((row) => row.sub_kegiatan_nama)
    .displayName("Sub Kegiatan")
    .icon(Heading1Icon)
    .build(),
] as const;

const { columns, filters, actions, strategy } = useDataTableFilters({
  strategy: "client",
  data: datas,
  columnsConfig,
});

const tstColumns = useMemo(
  () =>
    createTSTColumns({
      columns: tstColumnDefs,
      configs: columns,
    }),
  [columns]
);

const tstFilters = useMemo(() => createTSTFilters(filters), [filters]);

const table = useReactTable({
  data: datas,
  columns: tstColumns,
  getRowId: (row) => row.id,
  getCoreRowModel: getCoreRowModel(),
  getFilteredRowModel: getFilteredRowModel(),
  state: {
    columnFilters: tstFilters,
  },
});

Expected Behavior

Filters should work properly for all columns, including those nested inside a grouped column.

Please advise if grouped column filtering is supported or if there is a workaround.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions