gitscope
← marzneshin / v0.4.0 / dashboard/src/features/services/components/tables/users/columns.tsx
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/services/components/tables/users/columns.tsx · TypeScript
Blame Raw
 1import { ColumnDef } from "@tanstack/react-table"
 2import { DataTableColumnHeader } from "@marzneshin/components/data-table/column-header"
 3import i18n from "@marzneshin/features/i18n"
 4import {
 5    UserType,
 6    UserActivatedPill,
 7    UserEnabledPill,
 8    UserExpirationValue,
 9    userTrafficSortingFn,
10} from "@marzneshin/features/users"
11import { CircularProgress } from "@nextui-org/progress";
12import { Badge } from "@marzneshin/components";
13
14export const columns: ColumnDef<UserType>[] = [
15    {
16        accessorKey: "username",
17        header: ({ column }) => <DataTableColumnHeader title={i18n.t('username')} column={column} />,
18    },
19    {
20        accessorKey: "activated",
21        header: ({ column }) => (
22            <DataTableColumnHeader
23                title={i18n.t("activated")}
24                column={column}
25            />
26        ),
27        cell: ({ row }) => <UserActivatedPill user={row.original} />,
28    },
29    {
30        accessorKey: "enabled",
31        header: ({ column }) => (
32            <DataTableColumnHeader
33                title={i18n.t("enabled")}
34                column={column}
35            />
36        ),
37        cell: ({ row }) => <UserEnabledPill user={row.original} />,
38    },
39    {
40        accessorKey: "used_traffic",
41        header: ({ column }) => <DataTableColumnHeader title={i18n.t('page.users.used_traffic')} column={column} />,
42        cell: ({ row }) => {
43            if (row.original.data_limit) {
44                return (
45                    <CircularProgress
46                        size="sm"
47                        value={row.original.used_traffic / row.original.data_limit * 100}
48                    />
49                )
50            } else {
51                return <Badge>No Limit</Badge>
52            }
53        },
54        sortingFn: (rowA, rowB) => userTrafficSortingFn(rowA.original, rowB.original)
55    },
56    {
57        accessorKey: "expire",
58        header: ({ column }) => (
59            <DataTableColumnHeader
60                title={i18n.t("page.users.expire_date")}
61                column={column}
62            />
63        ),
64        cell: ({ row }) => <UserExpirationValue user={row.original} />,
65    },
66];