gitscope
← marzneshin / v0.4.0 / dashboard/src/features/admins/components/dialogs/settings/index.tsx
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/admins/components/dialogs/settings/index.tsx · TypeScript
Blame Raw
 1import {
 2    // Button,
 3    Tabs,
 4    TabsContent,
 5    TabsList,
 6    TabsTrigger,
 7    Awaiting,
 8    SettingsInfoSkeleton,
 9    SettingsDialogProps,
10    SettingsDialog,
11} from "@marzneshin/components";
12import {
13    type AdminType
14} from "@marzneshin/features/admins";
15import { type FC, useEffect } from "react";
16import { AdminInfoTable } from "./admin-info";
17import { useTranslation } from "react-i18next";
18
19interface AdminsSettingsDialogProps extends SettingsDialogProps {
20    entity: AdminType | null;
21    onClose: () => void;
22    isPending: boolean;
23}
24
25export const AdminsSettingsDialog: FC<AdminsSettingsDialogProps> = ({
26    onOpenChange,
27    open,
28    entity,
29    onClose,
30    isPending,
31}) => {
32    const { t } = useTranslation();
33
34    useEffect(() => {
35        if (!open) onClose();
36    }, [open, onClose]);
37
38    return (
39        <SettingsDialog open={open} onOpenChange={onOpenChange}>
40            <Awaiting
41                Component={entity ? (
42                    <Tabs defaultValue="info" className="w-full h-full">
43                        <TabsList className="w-full bg-accent">
44                            <TabsTrigger className="w-full" value="info">
45                                {t("admin_info")}
46                            </TabsTrigger>
47                            <TabsTrigger className="w-full" value="services">
48                                {t("services")}
49                            </TabsTrigger>
50                            <TabsTrigger className="w-full" value="subscription">
51                                {t("users")}
52                            </TabsTrigger>
53                        </TabsList>
54                        <TabsContent
55                            value="info"
56                            className="flex flex-col gap-2 w-full h-full"
57                        >
58                            <AdminInfoTable admin={entity} />
59                        </TabsContent>
60                        <TabsContent value="services">
61                            {/* <AdminServicesTable admin={entity} /> */}
62                        </TabsContent>
63                        <TabsContent value="users">
64                            Users
65                        </TabsContent>
66                    </Tabs>
67                ) : (<div>Not Found</div>)}
68                Skeleton={<SettingsInfoSkeleton />}
69                isFetching={isPending}
70            />
71        </SettingsDialog>
72    );
73};