import { createColumnHelper } from "@tanstack/react-table"; import { Badge, Flex, Group, Avatar, Text, Anchor } from "@mantine/core"; import { TbEye, TbPencil, TbTrash } from "react-icons/tb"; import CrudPermissions from "@/modules/dashboard/types/CrudPermissions"; import stringToColorHex from "@/core/utils/stringToColorHex"; import Link from "next/link"; import createActionButtons from "@/modules/dashboard/utils/createActionButton"; export interface UserRow { id: string; name: string | null; email: string | null; photoUrl: string | null; roles: string[] } interface ColumnOptions { permissions: Partial; actions: { detail: (id: string) => void; edit: (id: string) => void; delete: (id: string, name: string) => void; }; } const createColumns = (options: ColumnOptions) => { const columnHelper = createColumnHelper(); const columns = [ columnHelper.display({ id: "sequence", header: "#", cell: (props) => props.row.index + 1, size: 1, }), columnHelper.accessor("name", { header: "Name", cell: (props) => ( {props.getValue()?.[0].toUpperCase()} {props.getValue()} ), }), columnHelper.accessor("email", { header: "Email", cell: (props) => ( {props.getValue()} ), }), columnHelper.accessor("roles", { header: "Role", cell: (props) => {props.getValue()[0]} }), columnHelper.display({ id: "status", header: "Status", cell: (props) => Active, }), columnHelper.display({ id: "actions", header: "Actions", size: 10, meta: { className: "w-fit", }, cell: (props) => ( {createActionButtons([ { label: "Detail", permission: options.permissions.read, action: () => options.actions.detail(props.row.original.id), color: "green", icon: , }, { label: "Edit", permission: options.permissions.update, action: () => options.actions.edit(props.row.original.id), color: "yellow", icon: , }, { label: "Delete", permission: options.permissions.delete, action: () => options.actions.delete( props.row.original.id, props.row.original.name ?? "" ), color: "red", icon: , }, ])} ), }), ]; return columns; }; export default createColumns;