import { type FC, useEffect, useCallback } from "react"; import { Separator, DialogTitle, DialogContent, Dialog, DialogHeader, Form, Button, ScrollArea, VStack, } from "@marzneshin/components"; import { useTranslation } from "react-i18next"; import type { UserMutationType } from "@marzneshin/features/users"; import { DATA_LIMIT_METRIC, useUsersCreationMutation, useUsersUpdateMutation, UserSchema, } from "@marzneshin/features/users"; import { UsernameField, NoteField, ServicesField } from "./fields"; import { useMutationDialog } from "@marzneshin/hooks"; import { DataLimitFields, ExpirationMethodFields } from "./sections"; interface UsersMutationDialogProps { entity: UserMutationType | null; open: boolean; onOpenChange: (state: boolean) => void; onClose: () => void; } export const UsersMutationDialog: FC = ({ entity, open, onOpenChange, onClose, }) => { const { t } = useTranslation(); const getDefaultValues = useCallback( (): UserMutationType => ({ service_ids: [], expire_strategy: "fixed_date", username: "", data_limit_reset_strategy: "no_reset", note: "", }), [], ); const { form, handleSubmit } = useMutationDialog({ entity, onOpenChange, createMutation: useUsersCreationMutation(), updateMutation: useUsersUpdateMutation(), schema: UserSchema, getDefaultValue: getDefaultValues, loadFormtter: (d) => ({ ...d, data_limit: (d.data_limit ? d.data_limit : 0) / DATA_LIMIT_METRIC, }), }); useEffect(() => { if (!open) onClose(); }, [open, onClose]); return ( {entity ? t("page.users.dialogs.edition.title") : t("page.users.dialogs.creation.title")}
); };