import type { FC } from "react"; import { useCallback } from "react"; import { 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, } from "@marzneshin/features/users"; import { UserSchema } from "./schema"; 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; } export const UsersMutationDialog: FC = ({ entity, open, onOpenChange, }) => { const { t } = useTranslation(); const getDefaultValues = useCallback( (): UserMutationType => ({ services: [], data_limit: undefined, expire: null, username: "", data_limit_reset_strategy: "no_reset", status: "active", note: "", on_hold_expire_duration: 0, on_hold_timeout: undefined, }), [], ); 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, }), }); return ( {entity ? t("page.users.dialogs.edition.title") : t("page.users.dialogs.creation.title")}
); };