gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/admins/components/dialogs/mutation/index.tsx · v0.7.3
Source
1 d42c6e6 Mardin 2y ago import { type FC, useState, useMemo } from "react";
2 4708fcb Dawsh 2y ago import {
3 4708fcb Dawsh 2y ago DialogTitle,
4 4708fcb Dawsh 2y ago DialogContent,
5 4708fcb Dawsh 2y ago Dialog,
6 4708fcb Dawsh 2y ago DialogHeader,
7 4708fcb Dawsh 2y ago Form,
8 4708fcb Dawsh 2y ago Button,
9 4708fcb Dawsh 2y ago ScrollArea,
10 4708fcb Dawsh 2y ago VStack,
11 7389ad0 Mardin 2y ago } from "@marzneshin/common/components";
12 4708fcb Dawsh 2y ago import { useTranslation } from "react-i18next";
13 4708fcb Dawsh 2y ago import {
14 4708fcb Dawsh 2y ago useAdminsCreationMutation,
15 4708fcb Dawsh 2y ago useAdminsUpdateMutation,
16 9568dfd Mardin 2y ago AdminEditSchema,
17 9568dfd Mardin 2y ago AdminCreateSchema,
18 4708fcb Dawsh 2y ago AdminType,
19 7738ec1 Mardin 2y ago } from "@marzneshin/modules/admins";
20 d636f3f Dawsh 2y ago import { ServicesField } from "@marzneshin/modules/services";
21 e6e6467 Dawsh 2y ago import { UsernameField } from "@marzneshin/modules/users";
22 4708fcb Dawsh 2y ago import {
23 4708fcb Dawsh 2y ago PasswordField,
24 4708fcb Dawsh 2y ago EnabledField,
25 4708fcb Dawsh 2y ago ModifyUsersAccessField,
26 4708fcb Dawsh 2y ago SubscriptionUrlPrefixField,
27 4708fcb Dawsh 2y ago SudoPrivilageField,
28 4708fcb Dawsh 2y ago AllServicesAccessField,
29 4708fcb Dawsh 2y ago } from "./fields";
30 d636f3f Dawsh 2y ago import { useMutationDialog, MutationDialogProps } from "@marzneshin/common/hooks";
31 4708fcb Dawsh 2y ago
32 d42c6e6 Mardin 2y ago export const AdminsMutationDialog: FC<MutationDialogProps<AdminType>> = ({
33 4708fcb Dawsh 2y ago onClose,
34 4708fcb Dawsh 2y ago entity = null,
35 4708fcb Dawsh 2y ago }) => {
36 4708fcb Dawsh 2y ago const { t } = useTranslation();
37 4708fcb Dawsh 2y ago
38 d42c6e6 Mardin 2y ago const defaultValue = useMemo(() => ({
39 d42c6e6 Mardin 2y ago service_ids: [],
40 d42c6e6 Mardin 2y ago username: "",
41 d42c6e6 Mardin 2y ago is_sudo: false,
42 d42c6e6 Mardin 2y ago enabled: true,
43 9568dfd Mardin 2y ago modify_users_access: true,
44 d42c6e6 Mardin 2y ago }), [])
45 d42c6e6 Mardin 2y ago
46 d42c6e6 Mardin 2y ago const { onOpenChange, open, form, handleSubmit } = useMutationDialog({
47 4708fcb Dawsh 2y ago entity,
48 d42c6e6 Mardin 2y ago onClose,
49 4708fcb Dawsh 2y ago createMutation: useAdminsCreationMutation(),
50 4708fcb Dawsh 2y ago updateMutation: useAdminsUpdateMutation(),
51 9568dfd Mardin 2y ago schema: entity ? AdminEditSchema : AdminCreateSchema,
52 d42c6e6 Mardin 2y ago defaultValue,
53 4708fcb Dawsh 2y ago });
54 4708fcb Dawsh 2y ago
55 4708fcb Dawsh 2y ago const [change, setChange] = useState<boolean>(entity === null);
56 4708fcb Dawsh 2y ago if (entity !== null)
57 4708fcb Dawsh 2y ago form.setValue("password", null,
58 4708fcb Dawsh 2y ago {
59 4708fcb Dawsh 2y ago shouldTouch: true,
60 4708fcb Dawsh 2y ago shouldDirty: true,
61 4708fcb Dawsh 2y ago });
62 4708fcb Dawsh 2y ago
63 4708fcb Dawsh 2y ago return (
64 4708fcb Dawsh 2y ago <Dialog open={open} onOpenChange={onOpenChange} defaultOpen={true}>
65 4708fcb Dawsh 2y ago <DialogContent className="min-w-full h-full md:h-auto md:min-w-[42rem]">
66 4708fcb Dawsh 2y ago <ScrollArea className="flex flex-col justify-between h-full ">
67 4708fcb Dawsh 2y ago <DialogHeader className="mb-3">
68 4708fcb Dawsh 2y ago <DialogTitle className="text-primary">
69 4708fcb Dawsh 2y ago {t(entity ? "page.admins.dialogs.edition.title" : "page.admins.dialogs.creation.title")}
70 4708fcb Dawsh 2y ago </DialogTitle>
71 4708fcb Dawsh 2y ago </DialogHeader>
72 4708fcb Dawsh 2y ago <Form {...form}>
73 4708fcb Dawsh 2y ago <form onSubmit={handleSubmit} >
74 4708fcb Dawsh 2y ago <div className="flex-col grid-cols-2 gap-2 sm:flex md:grid h-full">
75 4708fcb Dawsh 2y ago <div className="space-y-3">
76 4708fcb Dawsh 2y ago <UsernameField disabled={!!entity} />
77 4708fcb Dawsh 2y ago <PasswordField change={change} handleChange={setChange} />
78 4708fcb Dawsh 2y ago <SubscriptionUrlPrefixField />
79 4708fcb Dawsh 2y ago <EnabledField />
80 4708fcb Dawsh 2y ago <ModifyUsersAccessField />
81 4708fcb Dawsh 2y ago <SudoPrivilageField />
82 4708fcb Dawsh 2y ago <AllServicesAccessField />
83 4708fcb Dawsh 2y ago </div>
84 4708fcb Dawsh 2y ago <VStack>
85 4708fcb Dawsh 2y ago <ServicesField />
86 4708fcb Dawsh 2y ago </VStack>
87 4708fcb Dawsh 2y ago </div>
88 4708fcb Dawsh 2y ago <Button
89 4708fcb Dawsh 2y ago className="mt-3 w-full font-semibold"
90 4708fcb Dawsh 2y ago type="submit"
91 4708fcb Dawsh 2y ago disabled={form.formState.isSubmitting}
92 4708fcb Dawsh 2y ago >
93 4708fcb Dawsh 2y ago {t("submit")}
94 4708fcb Dawsh 2y ago </Button>
95 4708fcb Dawsh 2y ago </form>
96 4708fcb Dawsh 2y ago </Form>
97 4708fcb Dawsh 2y ago </ScrollArea>
98 4708fcb Dawsh 2y ago </DialogContent>
99 4708fcb Dawsh 2y ago </Dialog>
100 4708fcb Dawsh 2y ago );
101 4708fcb Dawsh 2y ago };