import { DialogTitle, DialogContent, Dialog, DialogHeader, Form, FormItem, FormControl, FormMessage, FormLabel, Input, FormField, Button, Checkbox, Badge } from '@marzneshin/components' import { FC } from 'react' import { ServiceType, useServicesCreationMutation, useServicesUpdateMutation, } from '@marzneshin/features/services' import { useInboundsQuery } from '@marzneshin/features/inbounds' import { useTranslation } from 'react-i18next' import { z } from 'zod' import { cn } from '@marzneshin/utils' import { Box, GlobeLock } from 'lucide-react' import { useMutationDialog } from '@marzneshin/hooks' export const ServiceSchema = z.object({ id: z.number().optional(), inbounds: z.array(z.number()).refine((value) => value.some((item) => item), { message: "You have to select at least one inbound.", }), name: z.string().trim().min(1) }) type ServiceCreateType = z.infer interface MutationDialogProps { entity: ServiceType | null open: boolean onOpenChange: (state: boolean) => void } const getDefaultValues = (): ServiceCreateType => ({ name: '', inbounds: [], }) export const MutationDialog: FC = ({ entity, open, onOpenChange }) => { const isEditing = entity !== null const updateMutation = useServicesUpdateMutation(); const createMutation = useServicesCreationMutation(); const { data: inbounds } = useInboundsQuery() const { form, handleSubmit } = useMutationDialog({ entity, updateMutation, createMutation, getDefaultValue: getDefaultValues, schema: ServiceSchema, onOpenChange, }) const { t } = useTranslation() return ( {isEditing ? t('page.services.dialogs.edition.title') : t('page.services.dialogs.creation.title')}
( {t('name')} )} /> ( {t('inbounds')} {inbounds.map((inbound) => ( (
{ return checked ? field.onChange([...field.value, inbound.id]) : field.onChange( field.value?.filter( (value: number) => value !== inbound.id ) ) }} /> {inbound.tag}
{inbound.protocol} {inbound.node.name}
)} /> ))}
)} />
) }