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