import { UserRole } from "@turbostarter/auth"; import { isKey, useTranslation } from "@turbostarter/i18n"; import { cn } from "@turbostarter/ui"; import { Avatar, AvatarFallback, AvatarImage, } from "@turbostarter/ui-web/avatar"; import { Badge } from "@turbostarter/ui-web/badge"; import { DataTableColumnHeader } from "@turbostarter/ui-web/data-table/data-table-column-header"; import { Icons } from "@turbostarter/ui-web/icons"; import { pathsConfig } from "~/config/paths"; import { authClient } from "~/lib/auth/client"; import { TurboLink } from "~/modules/common/turbo-link"; import type { ColumnDef } from "@tanstack/react-table"; import type { User } from "@turbostarter/auth"; export const useColumns = (): ColumnDef[] => { const { t, i18n } = useTranslation("common"); const { data: session } = authClient.useSession(); return [ { id: "q", accessorKey: "q", meta: { placeholder: `${t("searchPlaceholder")}`, variant: "text", }, enableHiding: false, enableColumnFilter: true, }, { id: "name", accessorKey: "name", header: ({ column }) => ( ), cell: ({ row }) => { return (
{row.original.name} {row.original.id === session?.user.id && ( {t("you")} )}
); }, enableHiding: false, }, { id: "email", accessorKey: "email", header: ({ column }) => ( ), cell: ({ row }) => { return (
{row.original.email} {row.original.emailVerified ? t("verified") : t("unverified")}
); }, meta: { label: t("email"), }, }, { id: "role", accessorKey: "role", header: ({ column }) => ( ), cell: ({ row }) => { if (!row.original.role) { return {t(UserRole.USER)}; } return (
{row.original.role.split(",").map((role) => ( {isKey(role, i18n, "common") ? t(role) : role} ))}
); }, meta: { label: t("role"), variant: "multiSelect", options: Object.values(UserRole).map((role) => ({ label: t(role), value: role, })), }, enableColumnFilter: true, }, { id: "twoFactorEnabled", accessorKey: "twoFactorEnabled", header: ({ column }) => ( ), cell: ({ row }) => { return row.original.twoFactorEnabled ? ( <> {t("enabled")} ) : ( <> {t("disabled")} ); }, meta: { label: "2FA", variant: "multiSelect", options: [ { label: t("enabled"), value: "true" }, { label: t("disabled"), value: "false" }, ], }, enableColumnFilter: true, }, { id: "banned", accessorKey: "banned", header: ({ column }) => ( ), cell: ({ row }) => { return row.original.banned ? ( <> {t("banned")} ) : ( <> {t("notBanned")} ); }, meta: { label: t("banned"), variant: "multiSelect", options: [ { label: t("banned"), value: "true" }, { label: t("notBanned"), value: "false" }, ], }, enableColumnFilter: true, }, { id: "createdAt", accessorKey: "createdAt", header: ({ column }) => (
), cell: ({ row }) => { return (
{row.original.createdAt.toLocaleDateString(i18n.language)}
); }, meta: { label: t("createdAt"), variant: "dateRange", }, enableColumnFilter: true, }, ]; };