'use client'; import formatPhone from '@/shared/lib/formatPhone'; import onlyNumber from '@/shared/lib/onlyNumber'; import { Button } from '@/shared/ui/button'; import { Card } from '@/shared/ui/card'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@/shared/ui/form'; import { Input } from '@/shared/ui/input'; import { Label } from '@/shared/ui/label'; import { zodResolver } from '@hookform/resolvers/zod'; import { useMutation } from '@tanstack/react-query'; import { Loader2, Upload } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { useForm } from 'react-hook-form'; import { toast } from 'sonner'; import * as z from 'zod'; import { partner_api } from '../lib/api'; const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB const ACCEPTED_FILE_TYPES = [ 'application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', ]; const partnershipFormSchema = z.object({ companyName: z.string().min(2, { message: "Kompaniya nomi kamida 2 ta belgidan iborat bo'lishi kerak", }), // website: z // .string() // .url({ message: "To'g'ri website manzilini kiriting" }) // .optional() // .or(z.literal('')), contactPerson: z .string() .min(2, { message: "Ism kamida 2 ta belgidan iborat bo'lishi kerak" }), // email: z // .string() // .email({ message: "To'g'ri email manzilini kiriting" }) // .optional(), phone: z .string() .min(9, { message: "To'g'ri telefon raqamini kiriting" }) .regex(/^[\d\s+\-$$$$]+$/, { message: "Telefon raqami faqat raqamlardan iborat bo'lishi kerak", }), companyFile: z .custom() .refine((files) => files?.length === 1, 'File yuklash majburiy') .refine( (files) => files?.[0]?.size <= MAX_FILE_SIZE, 'File hajmi 5MB dan oshmasligi kerak', ) .refine( (files) => ACCEPTED_FILE_TYPES.includes(files?.[0]?.type), 'Faqat PDF yoki Word formatidagi fayllar qabul qilinadi', ), }); type PartnershipFormValues = z.infer; export function PartnershipForm() { const t = useTranslations(); const form = useForm({ resolver: zodResolver(partnershipFormSchema), defaultValues: { companyName: '', contactPerson: '', phone: '+998', }, }); const { mutate, isPending } = useMutation({ mutationFn: (body: FormData) => partner_api.send(body), onSuccess: () => { toast.success(t("So'rov yuborildi!"), { richColors: true, position: 'top-center', }); form.reset(); }, onError: () => { toast.error(t('Xatolik yuz berdi'), { richColors: true, position: 'top-center', }); }, }); async function onSubmit(data: PartnershipFormValues) { const formData = new FormData(); formData.append('company_name', data.companyName); formData.append('full_name', data.contactPerson); formData.append('phone_number', onlyNumber(data.phone)); if (data.companyFile && data.companyFile.length > 0) { formData.append('file', data.companyFile[0]); } mutate(formData); } return (

{t(`Hamkor bo'ling`)}

{t(`Gastro Market bilan hamkorlik qilishni xohlaysizmi?`)}

( )} /> {/* ( )} /> */} ( )} />
{/* ( )} /> */} ( )} />
(
{ const files = e.target.files; onChange(files); }} {...field} className="hidden" />

{t('Faylni tanlang')}

{value && value.length > 0 && (

{t('Tanlangan fayl')}: {value[0].name}

)}
{t('PDF yoki Word formatida (maksimal 5MB)')}
)} />
); }