import React from 'react' import { useMutation } from '@tanstack/react-query' import { z } from 'zod' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { createWorker } from '@/api/worker' import { CreateWorkerRequest } from '@/lib/pb/api_client' import { toast } from 'sonner' import { useTranslation } from 'react-i18next' import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Form, FormField, FormItem, FormLabel, FormControl } from '@/components/ui/form' import { Input } from '@/components/ui/input' import { ClientSelector } from '../base/client-selector' const CreateWorkerSchema = z.object({ clientId: z.string().min(1, 'worker.createClientRequired'), name: z.string().min(1, 'worker.createNameRequired'), }) type CreateWorkerValues = z.infer export interface CreateWorkerDialogProps { refetchTrigger: React.Dispatch> } export const CreateWorkerDialog: React.FC = ({ refetchTrigger }) => { const { t } = useTranslation() const [open, setOpen] = React.useState(false) const form = useForm({ resolver: zodResolver(CreateWorkerSchema), defaultValues: { clientId: '', name: '', }, }) const { mutate, isPending } = useMutation({ mutationFn: (values: CreateWorkerValues) => { const req: CreateWorkerRequest = { clientId: values.clientId, worker: { name: values.name }, } return createWorker(req) }, onSuccess: () => { toast.success(t('worker.create.success')) form.reset() setOpen(false) refetchTrigger(new Date().toISOString()) }, onError: (err: any) => { toast(err?.message || t('worker.create')) }, }) const onSubmit = (values: CreateWorkerValues) => { mutate(values) } return ( {t('worker.create.title')} {t('worker.create.description')}
( {t('worker.create.clientIdLabel')} )} /> ( {t('worker.create.nameLabel')} )} />
) }