'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { ArrowRight } from 'lucide-react' import { useToast } from '@/components/ui/use-toast' import { getErrorMessage } from '@/lib/errors/get-error-message' interface Props { open: boolean onOpenChange: (open: boolean) => void } /** * "Ny lönekörning" as a modal: mirrors NewJournalEntryDialog. A successful * create navigates straight to the run detail page (the real workspace), * unmounting the host list page and this dialog with it. */ export default function NewSalaryRunDialog({ open, onOpenChange }: Props) { return ( e.preventDefault()} onPointerDownOutside={(e) => e.preventDefault()} onInteractOutside={(e) => e.preventDefault()} > Ny lönekörning onOpenChange(false)} /> ) } // Inner component so form state resets whenever the dialog reopens (Radix // unmounts DialogContent children on close). function NewSalaryRunForm({ onCancel }: { onCancel: () => void }) { const router = useRouter() const { toast } = useToast() const [saving, setSaving] = useState(false) const now = new Date() const defaultYear = now.getFullYear() const defaultMonth = now.getMonth() + 1 const defaultPayDate = `${defaultYear}-${String(defaultMonth).padStart(2, '0')}-25` async function handleSubmit(e: React.FormEvent) { e.preventDefault() setSaving(true) const form = new FormData(e.currentTarget) const body = { period_year: parseInt(form.get('period_year') as string), period_month: parseInt(form.get('period_month') as string), payment_date: form.get('payment_date') as string, voucher_series: form.get('voucher_series') as string || 'A', } const res = await fetch('/api/salary/runs', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), }) if (res.ok) { const { data } = await res.json() toast({ title: 'Lönekörning skapad' }) router.push(`/salary/runs/${data.id}`) } else { const result = await res.json() toast({ title: 'Kunde inte skapa lönekörning', description: getErrorMessage(result, { context: 'salary', statusCode: res.status }), variant: 'destructive', }) } setSaving(false) } return ( År Månad (1-12) Utbetalningsdag Verifikationsserie En bokstav A-Z. Standard: A Avbryt {saving ? 'Skapar...' : 'Skapa och fortsätt'} ) }
En bokstav A-Z. Standard: A