gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/users/components/dialogs/settings/index.tsx · v0.3.1
Source
1 857e289 Mrdn 2y ago import {
2 fb9bc33 Mardin 2y ago Button,
3 857e289 Mrdn 2y ago ScrollArea,
4 857e289 Mrdn 2y ago Sheet,
5 857e289 Mrdn 2y ago SheetContent,
6 857e289 Mrdn 2y ago SheetHeader,
7 857e289 Mrdn 2y ago SheetTitle,
8 857e289 Mrdn 2y ago Tabs,
9 857e289 Mrdn 2y ago TabsContent,
10 857e289 Mrdn 2y ago TabsList,
11 857e289 Mrdn 2y ago TabsTrigger,
12 d377c4c Dawsh 2y ago Awaiting,
13 45e0190 Mrdn 2y ago } from "@marzneshin/components";
14 fb9bc33 Mardin 2y ago import {
15 d377c4c Dawsh 2y ago UserServicesTable,
16 fb9bc33 Mardin 2y ago useUserUsageResetCmd,
17 fb9bc33 Mardin 2y ago type UserType
18 fb9bc33 Mardin 2y ago } from "@marzneshin/features/users";
19 03b3dbc Mardin 2y ago import { type FC, useEffect } from "react";
20 45e0190 Mrdn 2y ago import { useTranslation } from "react-i18next";
21 d377c4c Dawsh 2y ago import {
22 d377c4c Dawsh 2y ago UserStatusEnableButton,
23 d377c4c Dawsh 2y ago SubscriptionActions,
24 d377c4c Dawsh 2y ago QRCodeSection,
25 d377c4c Dawsh 2y ago UserInfoTable
26 d377c4c Dawsh 2y ago } from "./user-info";
27 d377c4c Dawsh 2y ago import { UserInfoSkeleton } from "./skeleton";
28 857e289 Mrdn 2y ago
29 857e289 Mrdn 2y ago interface UsersSettingsDialogProps {
30 45e0190 Mrdn 2y ago onOpenChange: (state: boolean) => void;
31 45e0190 Mrdn 2y ago open: boolean;
32 d377c4c Dawsh 2y ago entity: UserType | null;
33 03b3dbc Mardin 2y ago onClose: () => void;
34 d377c4c Dawsh 2y ago isPending: boolean;
35 857e289 Mrdn 2y ago }
36 857e289 Mrdn 2y ago
37 45e0190 Mrdn 2y ago export const UsersSettingsDialog: FC<UsersSettingsDialogProps> = ({
38 45e0190 Mrdn 2y ago onOpenChange,
39 45e0190 Mrdn 2y ago open,
40 45e0190 Mrdn 2y ago entity,
41 03b3dbc Mardin 2y ago onClose,
42 d377c4c Dawsh 2y ago isPending,
43 45e0190 Mrdn 2y ago }) => {
44 857e289 Mrdn 2y ago const { t } = useTranslation();
45 fb9bc33 Mardin 2y ago const { mutate: resetUsage } = useUserUsageResetCmd();
46 857e289 Mrdn 2y ago
47 03b3dbc Mardin 2y ago useEffect(() => {
48 03b3dbc Mardin 2y ago if (!open) onClose();
49 03b3dbc Mardin 2y ago }, [open, onClose]);
50 03b3dbc Mardin 2y ago
51 03b3dbc Mardin 2y ago return (
52 03b3dbc Mardin 2y ago <Sheet open={open} onOpenChange={onOpenChange}>
53 d377c4c Dawsh 2y ago <SheetContent className="sm:min-w-full md:min-w-[700px] space-y-5">
54 d377c4c Dawsh 2y ago <SheetHeader >
55 d377c4c Dawsh 2y ago <SheetTitle>{t("settings")}</SheetTitle>
56 d377c4c Dawsh 2y ago </SheetHeader>
57 d377c4c Dawsh 2y ago <Awaiting
58 d377c4c Dawsh 2y ago Component={entity ? (
59 d377c4c Dawsh 2y ago <ScrollArea className="flex flex-col gap-4 h-full">
60 d377c4c Dawsh 2y ago <Tabs defaultValue="info" className="w-full h-full">
61 d377c4c Dawsh 2y ago <TabsList className="w-full bg-accent">
62 d377c4c Dawsh 2y ago <TabsTrigger className="w-full" value="info">
63 d377c4c Dawsh 2y ago {t("user_info")}
64 d377c4c Dawsh 2y ago </TabsTrigger>
65 d377c4c Dawsh 2y ago <TabsTrigger className="w-full" value="services">
66 d377c4c Dawsh 2y ago {t("services")}
67 d377c4c Dawsh 2y ago </TabsTrigger>
68 d377c4c Dawsh 2y ago <TabsTrigger className="w-full" value="subscription">
69 d377c4c Dawsh 2y ago {t("subscription")}
70 d377c4c Dawsh 2y ago </TabsTrigger>
71 d377c4c Dawsh 2y ago </TabsList>
72 d377c4c Dawsh 2y ago <TabsContent
73 d377c4c Dawsh 2y ago value="info"
74 d377c4c Dawsh 2y ago className="flex flex-col gap-2 w-full h-full"
75 d377c4c Dawsh 2y ago >
76 d377c4c Dawsh 2y ago <UserInfoTable user={entity} />
77 d377c4c Dawsh 2y ago <div className="hstack justify-center items-center gap-2">
78 d377c4c Dawsh 2y ago <Button className="w-1/2" onClick={() => resetUsage(entity)}>
79 d377c4c Dawsh 2y ago {t("page.users.reset_usage")}
80 d377c4c Dawsh 2y ago </Button>
81 d377c4c Dawsh 2y ago <UserStatusEnableButton user={entity} />
82 d377c4c Dawsh 2y ago </div>
83 d377c4c Dawsh 2y ago </TabsContent>
84 d377c4c Dawsh 2y ago <TabsContent value="services">
85 d377c4c Dawsh 2y ago <UserServicesTable user={entity} />
86 d377c4c Dawsh 2y ago </TabsContent>
87 d377c4c Dawsh 2y ago <TabsContent value="subscription">
88 d377c4c Dawsh 2y ago <QRCodeSection entity={entity} />
89 d377c4c Dawsh 2y ago <SubscriptionActions entity={entity} />
90 d377c4c Dawsh 2y ago </TabsContent>
91 d377c4c Dawsh 2y ago </Tabs>
92 d377c4c Dawsh 2y ago </ScrollArea>
93 d377c4c Dawsh 2y ago ) : (<div>Not Found</div>)}
94 d377c4c Dawsh 2y ago Skeleton={<UserInfoSkeleton />}
95 d377c4c Dawsh 2y ago isFetching={isPending}
96 d377c4c Dawsh 2y ago />
97 03b3dbc Mardin 2y ago </SheetContent>
98 03b3dbc Mardin 2y ago </Sheet>
99 03b3dbc Mardin 2y ago );
100 45e0190 Mrdn 2y ago };