'use client' import { useForm, Controller } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Loader2 } from 'lucide-react' import type { CreateSupplierInput, SupplierType } from '@/types' const schema = z.object({ name: z.string().min(1, 'Namn krävs'), supplier_type: z.enum(['swedish_business', 'eu_business', 'non_eu_business']), email: z.string().email('Ogiltig e-postadress').optional().or(z.literal('')), phone: z.string().optional(), address_line1: z.string().optional(), address_line2: z.string().optional(), postal_code: z.string().optional(), city: z.string().optional(), country: z.string().optional(), org_number: z.string().optional(), vat_number: z.string().optional(), bankgiro: z.string().optional(), plusgiro: z.string().optional(), iban: z.string().optional(), bic: z.string().optional(), default_expense_account: z.string().optional(), default_payment_terms: z.number().min(1).optional(), default_currency: z.string().optional(), notes: z.string().optional(), }) type FormData = z.infer interface SupplierFormProps { onSubmit: (data: CreateSupplierInput) => Promise isLoading: boolean initialData?: Partial } export default function SupplierForm({ onSubmit, isLoading, initialData, }: SupplierFormProps) { const { register, handleSubmit, control, formState: { errors }, } = useForm({ resolver: zodResolver(schema), defaultValues: { name: initialData?.name || '', supplier_type: initialData?.supplier_type || 'swedish_business', email: initialData?.email || '', phone: initialData?.phone || '', address_line1: initialData?.address_line1 || '', postal_code: initialData?.postal_code || '', city: initialData?.city || '', country: initialData?.country || 'SE', org_number: initialData?.org_number || '', vat_number: initialData?.vat_number || '', bankgiro: initialData?.bankgiro || '', plusgiro: initialData?.plusgiro || '', iban: initialData?.iban || '', bic: initialData?.bic || '', default_expense_account: initialData?.default_expense_account || '', default_payment_terms: initialData?.default_payment_terms || 30, default_currency: initialData?.default_currency || 'SEK', notes: initialData?.notes || '', }, }) const onFormSubmit = (data: FormData) => { onSubmit({ ...data, email: data.email || undefined, }) } return (
{/* Supplier Type */}
( )} />
{/* Name */}
{errors.name && (

{errors.name.message}

)}
{/* Contact */}
{errors.email && (

{errors.email.message}

)}
{/* Business info */}

Företagsuppgifter

{/* Address */}

Adress

{/* Payment details */}

Betalningsuppgifter

{/* Defaults */}

Standardvärden

Standardkonto för denna leverantör

( )} />
{/* Notes */}