import { FC, useCallback, useEffect, useState } from "react"; import { DialogTitle, DialogContent, Dialog, DialogHeader, Form, Button, Tabs, TabsTrigger, TabsContent } from '@marzneshin/components'; import { useTranslation } from 'react-i18next'; import { UserMutationType, useUsersCreationMutation, useUsersUpdateMutation } from "@marzneshin/features/users"; import { UserSchema } from "./schema"; import { UsernameField, DataLimitField, ExpireDateField, DataLimitResetStrategyField, NoteField, ServicesField, } from "./fields"; import { useMutationDialog } from "@marzneshin/hooks"; import { TabsList } from "@radix-ui/react-tabs"; import { OnHoldExpireDurationField } from "./fields/onhold-expire-duration"; import { OnHoldTimeoutField } from "./fields/onhold-timeout"; 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: 0, expire: null, username: '', data_limit_reset_strategy: 'no_reset', status: 'active', note: '', on_hold_expire_duration: 0, on_hold_timeout: null, }), []); const [services, setServices] = useState(entity ? entity.services : []) const { form, handleSubmit } = useMutationDialog({ entity, onOpenChange, createMutation: useUsersCreationMutation(), updateMutation: useUsersUpdateMutation(), schema: UserSchema, getDefaultValue: getDefaultValues, }) useEffect(() => { form.setValue("services", services.map(Number).filter(item => typeof item === 'number')) }, [services, form]) const [selectedTab, setSelectedTab] = useState<'determined' | 'onhold' | string>('determined'); useEffect(() => { if (selectedTab === 'onhold') { form.setValue("status", "on_hold") form.setValue("expire", null); form.clearErrors("expire"); } else { form.setValue("status", "active") form.setValue("on_hold_expire_duration", 0); form.setValue("on_hold_timeout", null); form.clearErrors("on_hold_expire_duration"); form.clearErrors("on_hold_timeout"); } }, [selectedTab, form]); return ( {entity ? t('page.users.dialogs.edition.title') : t('page.users.dialogs.creation.title')}
{form.watch().data_limit !== 0 && }
{t('page.users.determined_expire')} {t('page.users.onhold_expire')}
); };