gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/services/components/dialogs/mutation/index.tsx · v0.7.2
Source
1 3072f60 Mrdn 2y ago import {
2 3072f60 Mrdn 2y ago DialogTitle,
3 3072f60 Mrdn 2y ago DialogContent,
4 3072f60 Mrdn 2y ago Dialog,
5 3072f60 Mrdn 2y ago DialogHeader,
6 3072f60 Mrdn 2y ago Form,
7 3072f60 Mrdn 2y ago Button,
8 7389ad0 Mardin 2y ago } from "@marzneshin/common/components";
9 d42c6e6 Mardin 2y ago import { type FC, useMemo } from "react";
10 3072f60 Mrdn 2y ago import {
11 3072f60 Mrdn 2y ago type ServiceType,
12 3072f60 Mrdn 2y ago useServicesCreationMutation,
13 3072f60 Mrdn 2y ago useServicesUpdateMutation,
14 d636f3f Dawsh 2y ago } from "@marzneshin/modules/services";
15 3072f60 Mrdn 2y ago import { useTranslation } from "react-i18next";
16 3072f60 Mrdn 2y ago import { z } from "zod";
17 d636f3f Dawsh 2y ago import { useMutationDialog, MutationDialogProps } from "@marzneshin/common/hooks";
18 3072f60 Mrdn 2y ago import { NameField, InboundsField } from "./fields";
19 3072f60 Mrdn 2y ago
20 3072f60 Mrdn 2y ago export const ServiceSchema = z.object({
21 3072f60 Mrdn 2y ago id: z.number().optional(),
22 db68a58 Dawsh 2y ago inbound_ids: z.array(z.number()).refine((value) => value.some((item) => item), {
23 3072f60 Mrdn 2y ago message: "You have to select at least one inbound.",
24 3072f60 Mrdn 2y ago }),
25 3072f60 Mrdn 2y ago name: z.string().trim().min(1),
26 3072f60 Mrdn 2y ago });
27 db68a58 Dawsh 2y ago
28 d42c6e6 Mardin 2y ago export const MutationDialog: FC<MutationDialogProps<ServiceType>> = ({
29 3072f60 Mrdn 2y ago entity,
30 03b3dbc Mardin 2y ago onClose,
31 3072f60 Mrdn 2y ago }) => {
32 d42c6e6 Mardin 2y ago const defaultValue = useMemo(() => ({
33 d42c6e6 Mardin 2y ago name: "",
34 d42c6e6 Mardin 2y ago inbound_ids: [],
35 d42c6e6 Mardin 2y ago }), []);
36 3072f60 Mrdn 2y ago const updateMutation = useServicesUpdateMutation();
37 3072f60 Mrdn 2y ago const createMutation = useServicesCreationMutation();
38 d42c6e6 Mardin 2y ago const { open, onOpenChange, form, handleSubmit } = useMutationDialog({
39 d42c6e6 Mardin 2y ago onClose,
40 3072f60 Mrdn 2y ago entity,
41 3072f60 Mrdn 2y ago updateMutation,
42 3072f60 Mrdn 2y ago createMutation,
43 d42c6e6 Mardin 2y ago defaultValue,
44 3072f60 Mrdn 2y ago schema: ServiceSchema,
45 3072f60 Mrdn 2y ago });
46 3072f60 Mrdn 2y ago const { t } = useTranslation();
47 03b3dbc Mardin 2y ago
48 3072f60 Mrdn 2y ago return (
49 3072f60 Mrdn 2y ago <Dialog open={open} onOpenChange={onOpenChange} defaultOpen={true}>
50 3072f60 Mrdn 2y ago <DialogContent>
51 3072f60 Mrdn 2y ago <DialogHeader>
52 3072f60 Mrdn 2y ago <DialogTitle className="text-primary">
53 d42c6e6 Mardin 2y ago {entity
54 3072f60 Mrdn 2y ago ? t("page.services.dialogs.edition.title")
55 3072f60 Mrdn 2y ago : t("page.services.dialogs.creation.title")}
56 3072f60 Mrdn 2y ago </DialogTitle>
57 3072f60 Mrdn 2y ago </DialogHeader>
58 3072f60 Mrdn 2y ago <Form {...form}>
59 3072f60 Mrdn 2y ago <form onSubmit={handleSubmit} className="h-full">
60 3072f60 Mrdn 2y ago <NameField />
61 3072f60 Mrdn 2y ago <InboundsField />
62 3072f60 Mrdn 2y ago <Button
63 3072f60 Mrdn 2y ago className="mt-3 w-full font-semibold"
64 3072f60 Mrdn 2y ago type="submit"
65 3072f60 Mrdn 2y ago disabled={form.formState.isSubmitting}
66 3072f60 Mrdn 2y ago >
67 3072f60 Mrdn 2y ago {t("submit")}
68 3072f60 Mrdn 2y ago </Button>
69 3072f60 Mrdn 2y ago </form>
70 3072f60 Mrdn 2y ago </Form>
71 3072f60 Mrdn 2y ago </DialogContent>
72 3072f60 Mrdn 2y ago </Dialog>
73 3072f60 Mrdn 2y ago );
74 3072f60 Mrdn 2y ago };