import React from "react"; import { Permission } from "@/interfaces/permissions"; import { createColumnHelper, flexRender, getCoreRowModel, useReactTable, Row, } from "@tanstack/react-table"; import Link from "next/link"; import { convertCamelCaseToReadable } from "@/utils/string"; interface Props { permissions: Permission[]; } const columnHelper = createColumnHelper(); const defaultColumns = [ columnHelper.accessor("type", { header: () => Type, cell: ({ row, getValue }) => ( {convertCamelCaseToReadable(getValue() as string)} ), }), ]; export default function PermissionList({ permissions }: Props) { const table = useReactTable({ data: permissions, columns: defaultColumns, getCoreRowModel: getCoreRowModel(), }); const groupedData: { [key: string]: Row[] } = table .getRowModel() .rows.reduce((groups: { [key: string]: Row[] }, row) => { const parent = row.original.topic; if (!groups[parent]) { groups[parent] = []; } groups[parent].push(row); return groups; }, {}); return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( ))} ))} {Object.keys(groupedData).map((parent) => ( {groupedData[parent].map((row, i) => ( {row.getVisibleCells().map((cell) => ( ))} ))} ))}
{header.isPlaceholder ? null : flexRender( header.column.columnDef.header, header.getContext() )}
{parent}
{flexRender( cell.column.columnDef.cell, cell.getContext() )}
); }