gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/services/tables/users/columns.tsx · v0.3.0-alpha2
Source
1 3b7feef Mrdn 2y ago import { ColumnDef } from "@tanstack/react-table"
2 3b7feef Mrdn 2y ago import { DataTableColumnHeader } from "@marzneshin/components/data-table/column-header"
3 3b7feef Mrdn 2y ago import i18n from "@marzneshin/features/i18n"
4 857e289 Mrdn 2y ago import {
5 857e289 Mrdn 2y ago UserType,
6 857e289 Mrdn 2y ago UsersStatus,
7 857e289 Mrdn 2y ago UsersStatusBadge
8 857e289 Mrdn 2y ago } from "@marzneshin/features/users"
9 3b7feef Mrdn 2y ago import { CircularProgress } from "@nextui-org/progress";
10 3b7feef Mrdn 2y ago import { format } from "date-fns";
11 3b7feef Mrdn 2y ago import { Badge } from "@marzneshin/components";
12 3b7feef Mrdn 2y ago
13 3b7feef Mrdn 2y ago export const columns: ColumnDef<UserType>[] = [
14 3b7feef Mrdn 2y ago {
15 3b7feef Mrdn 2y ago accessorKey: "username",
16 3b7feef Mrdn 2y ago header: ({ column }) => <DataTableColumnHeader title={i18n.t('username')} column={column} />,
17 3b7feef Mrdn 2y ago },
18 857e289 Mrdn 2y ago {
19 857e289 Mrdn 2y ago accessorKey: 'status',
20 857e289 Mrdn 2y ago header: ({ column }) => <DataTableColumnHeader title={i18n.t('status')} column={column} />,
21 857e289 Mrdn 2y ago cell: ({ row }) => <UsersStatusBadge status={UsersStatus[row.original.status ? row.original.status : 'error']} />,
22 857e289 Mrdn 2y ago },
23 3b7feef Mrdn 2y ago {
24 3b7feef Mrdn 2y ago accessorKey: "used_traffic",
25 3b7feef Mrdn 2y ago header: ({ column }) => <DataTableColumnHeader title={i18n.t('page.users.used_traffic')} column={column} />,
26 3b7feef Mrdn 2y ago cell: ({ row }) => {
27 3b7feef Mrdn 2y ago if (row.original.data_limit) {
28 3b7feef Mrdn 2y ago return (
29 3b7feef Mrdn 2y ago <CircularProgress
30 3b7feef Mrdn 2y ago size="sm"
31 3b7feef Mrdn 2y ago value={row.original.used_traffic / row.original.data_limit * 100}
32 3b7feef Mrdn 2y ago />
33 3b7feef Mrdn 2y ago )
34 3b7feef Mrdn 2y ago } else {
35 3b7feef Mrdn 2y ago return <Badge>No Limit</Badge>
36 3b7feef Mrdn 2y ago }
37 3b7feef Mrdn 2y ago },
38 3b7feef Mrdn 2y ago sortingFn: (rowA, rowB) => {
39 3b7feef Mrdn 2y ago if (rowA.original.data_limit && rowB.original.data_limit) {
40 3b7feef Mrdn 2y ago const rowAUsedTraffic = (rowA.original.used_traffic / rowA.original.data_limit) * 100
41 3b7feef Mrdn 2y ago const rowBUsedTraffic = (rowA.original.used_traffic / rowA.original.data_limit) * 100
42 3b7feef Mrdn 2y ago return rowAUsedTraffic > rowBUsedTraffic ? 1 : rowBUsedTraffic > rowAUsedTraffic ? -1 : 0
43 3b7feef Mrdn 2y ago } else {
44 3b7feef Mrdn 2y ago return 0
45 3b7feef Mrdn 2y ago }
46 3b7feef Mrdn 2y ago }
47 3b7feef Mrdn 2y ago },
48 3b7feef Mrdn 2y ago {
49 3b7feef Mrdn 2y ago accessorKey: 'expire',
50 3b7feef Mrdn 2y ago header: ({ column }) => <DataTableColumnHeader title={i18n.t('expire')} column={column} />,
51 857e289 Mrdn 2y ago cell: ({ row }) => format(row.original.expire ? row.original.expire : "", "PP")
52 3b7feef Mrdn 2y ago }
53 3b7feef Mrdn 2y ago ];