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())}
); }