gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/users/components/dialogs/mutation/index.tsx · v0.7.3
Source
1 d42c6e6 Mardin 2y ago import { type FC, useMemo } from "react";
2 857e289 Mrdn 2y ago import {
3 f035f9d Mardin 2y ago Separator,
4 857e289 Mrdn 2y ago DialogTitle,
5 857e289 Mrdn 2y ago DialogContent,
6 857e289 Mrdn 2y ago Dialog,
7 857e289 Mrdn 2y ago DialogHeader,
8 857e289 Mrdn 2y ago Form,
9 857e289 Mrdn 2y ago Button,
10 f64f3dc Mrdn 2y ago ScrollArea,
11 f64f3dc Mrdn 2y ago VStack,
12 7389ad0 Mardin 2y ago } from "@marzneshin/common/components";
13 f64f3dc Mrdn 2y ago import { useTranslation } from "react-i18next";
14 857e289 Mrdn 2y ago import {
15 2e6c8cb Mrdn 2y ago DATA_LIMIT_METRIC,
16 857e289 Mrdn 2y ago useUsersCreationMutation,
17 f64f3dc Mrdn 2y ago useUsersUpdateMutation,
18 d377c4c Dawsh 2y ago UserSchema,
19 afad276 Mardin 2y ago UsernameField,
20 afad276 Mardin 2y ago type UserMutationType,
21 e6e6467 Dawsh 2y ago } from "@marzneshin/modules/users";
22 d636f3f Dawsh 2y ago import { ServicesField } from "@marzneshin/modules/services";
23 4708fcb Dawsh 2y ago import { NoteField } from "./fields";
24 d636f3f Dawsh 2y ago import { type MutationDialogProps, useMutationDialog } from "@marzneshin/common/hooks";
25 5875753 Mrdn 2y ago import { DataLimitFields, ExpirationMethodFields } from "./sections";
26 857e289 Mrdn 2y ago
27 d42c6e6 Mardin 2y ago export const UsersMutationDialog: FC<MutationDialogProps<UserMutationType>> = ({
28 857e289 Mrdn 2y ago entity,
29 03b3dbc Mardin 2y ago onClose,
30 857e289 Mrdn 2y ago }) => {
31 857e289 Mrdn 2y ago const { t } = useTranslation();
32 afad276 Mardin 2y ago const defaultValue = useMemo(
33 afad276 Mardin 2y ago () => ({
34 afad276 Mardin 2y ago service_ids: [],
35 afad276 Mardin 2y ago username: "",
36 afad276 Mardin 2y ago data_limit_reset_strategy: "no_reset",
37 e381b12 Mardin 2y ago data_limit: undefined,
38 afad276 Mardin 2y ago note: "",
39 afad276 Mardin 2y ago expire_date: "",
40 afad276 Mardin 2y ago expire_strategy: "fixed_date",
41 afad276 Mardin 2y ago }),
42 afad276 Mardin 2y ago [],
43 afad276 Mardin 2y ago );
44 857e289 Mrdn 2y ago
45 d42c6e6 Mardin 2y ago const { open, onOpenChange, form, handleSubmit } = useMutationDialog({
46 857e289 Mrdn 2y ago entity,
47 d42c6e6 Mardin 2y ago onClose,
48 857e289 Mrdn 2y ago createMutation: useUsersCreationMutation(),
49 857e289 Mrdn 2y ago updateMutation: useUsersUpdateMutation(),
50 857e289 Mrdn 2y ago schema: UserSchema,
51 d42c6e6 Mardin 2y ago defaultValue,
52 f64f3dc Mrdn 2y ago loadFormtter: (d) => ({
53 f64f3dc Mrdn 2y ago ...d,
54 f64f3dc Mrdn 2y ago data_limit: (d.data_limit ? d.data_limit : 0) / DATA_LIMIT_METRIC,
55 f64f3dc Mrdn 2y ago }),
56 f64f3dc Mrdn 2y ago });
57 857e289 Mrdn 2y ago
58 857e289 Mrdn 2y ago return (
59 857e289 Mrdn 2y ago <Dialog open={open} onOpenChange={onOpenChange} defaultOpen={true}>
60 aa14012 Mrdn 2y ago <DialogContent className="min-w-full h-full md:h-auto md:min-w-[42rem]">
61 d377c4c Dawsh 2y ago <ScrollArea className="flex flex-col justify-between h-full ">
62 d377c4c Dawsh 2y ago <DialogHeader className="mb-3">
63 f64f3dc Mrdn 2y ago <DialogTitle className="text-primary">
64 f64f3dc Mrdn 2y ago {entity
65 f64f3dc Mrdn 2y ago ? t("page.users.dialogs.edition.title")
66 f64f3dc Mrdn 2y ago : t("page.users.dialogs.creation.title")}
67 f64f3dc Mrdn 2y ago </DialogTitle>
68 f64f3dc Mrdn 2y ago </DialogHeader>
69 f64f3dc Mrdn 2y ago <Form {...form}>
70 afad276 Mardin 2y ago <form onSubmit={handleSubmit}>
71 f64f3dc Mrdn 2y ago <div className="flex-col grid-cols-2 gap-2 sm:flex md:grid h-full">
72 d377c4c Dawsh 2y ago <div className="space-y-3">
73 f64f3dc Mrdn 2y ago <UsernameField disabled={!!entity?.username} />
74 d377c4c Dawsh 2y ago <Separator />
75 f64f3dc Mrdn 2y ago <DataLimitFields />
76 d377c4c Dawsh 2y ago <Separator />
77 f64f3dc Mrdn 2y ago <ExpirationMethodFields entity={entity} />
78 d377c4c Dawsh 2y ago <Separator />
79 f64f3dc Mrdn 2y ago <NoteField />
80 f64f3dc Mrdn 2y ago </div>
81 f64f3dc Mrdn 2y ago <VStack>
82 f64f3dc Mrdn 2y ago <ServicesField />
83 f64f3dc Mrdn 2y ago </VStack>
84 857e289 Mrdn 2y ago </div>
85 f64f3dc Mrdn 2y ago <Button
86 f64f3dc Mrdn 2y ago className="mt-3 w-full font-semibold"
87 f64f3dc Mrdn 2y ago type="submit"
88 f64f3dc Mrdn 2y ago disabled={form.formState.isSubmitting}
89 f64f3dc Mrdn 2y ago >
90 f64f3dc Mrdn 2y ago {t("submit")}
91 f64f3dc Mrdn 2y ago </Button>
92 f64f3dc Mrdn 2y ago </form>
93 f64f3dc Mrdn 2y ago </Form>
94 f64f3dc Mrdn 2y ago </ScrollArea>
95 857e289 Mrdn 2y ago </DialogContent>
96 857e289 Mrdn 2y ago </Dialog>
97 857e289 Mrdn 2y ago );
98 857e289 Mrdn 2y ago };