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