gitscope
← marzneshin / v0.7.0 / dashboard/src/modules/admins/components/dialogs/settings/admin-info/table.tsx
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/admins/components/dialogs/settings/admin-info/table.tsx · TypeScript
Blame Raw
 1import {
 2    Button,
 3    Card,
 4    CardContent,
 5    CardHeader,
 6    CardTitle,
 7    Table,
 8    TableBody,
 9    TableRowWithCell,
10} from "@marzneshin/common/components";
11import { FC, useCallback } from "react";
12import {
13    type AdminProp,
14    AdminEnabledPill,
15    AdminPermissionPill,
16    useAdminUsersStatusDisable,
17    useAdminUsersStatusEnable
18} from "@marzneshin/modules/admins";
19import { useTranslation } from "react-i18next";
20import { LoaderIcon, UserCheck, UserX } from "lucide-react";
21import { format } from '@chbphone55/pretty-bytes';
22
23export const AdminInfoTable: FC<AdminProp> = ({ admin: entity }) => {
24    const { t } = useTranslation();
25    const usersDataUsage = format(entity.users_data_usage);
26    const { mutate: adminStatusEnable, isPending: enablePending } = useAdminUsersStatusEnable()
27    const { mutate: adminStatusDisable, isPending: disablePending } = useAdminUsersStatusDisable()
28
29    const handleAdmingStatusEnable = useCallback(() => {
30        adminStatusEnable({ admin: entity })
31    }, [entity, adminStatusEnable]);
32
33    const handleAdmingStatusDisable = useCallback(() => {
34        adminStatusDisable({ admin: entity })
35    }, [entity, adminStatusDisable]);
36
37    return (
38        <Card>
39            <CardHeader className="flex flex-row justify-between items-center w-full">
40                <CardTitle>{t("admin_info")}</CardTitle>
41                <div className="hstack justify-center items-center gap-2">
42                    <Button
43                        className={"bg-destructive rounded-2xl"}
44                        onClick={handleAdmingStatusDisable}
45                    >
46                        {disablePending ? <LoaderIcon className="animate-spin" /> : (<><UserX className="mr-2" /> {t('page.admins.disable_users')} </>)}
47                    </Button>
48                    <Button
49                        className="bg-success rounded-2xl"
50                        onClick={handleAdmingStatusEnable}
51                    >
52                        {enablePending ? <LoaderIcon className="animate-spin" /> : (<><UserCheck className="mr-2" /> {t('page.admins.enable_users')} </>)}
53                    </Button>
54                </div>
55            </CardHeader>
56            <CardContent>
57                <Table>
58                    <TableBody>
59                        <TableRowWithCell label={t("username")} value={entity.username} />
60                        <TableRowWithCell
61                            label={t("enabled")}
62                            value={<AdminEnabledPill admin={entity} />}
63                        />
64                        <TableRowWithCell
65                            label={t("page.admins.permission")}
66                            value={<AdminPermissionPill admin={entity} />}
67                        />
68                        <TableRowWithCell
69                            label={t("page.admins.users-data-usage")}
70                            value={`${usersDataUsage[0]} ${usersDataUsage[1]}`}
71                        />
72
73                    </TableBody>
74                </Table>
75            </CardContent>
76        </Card>
77    );
78};