'use client'; import { useState, useTransition } from 'react'; import { consumeInventoryItem } from './actions'; type Props = { id: number; unit: string; }; export default function InventoryConsumeForm({ id, unit }: Props) { const [isOpen, setIsOpen] = useState(false); const [isPending, startTransition] = useTransition(); const [error, setError] = useState(null); if (!isOpen) { return ( ); } return (
{ e.preventDefault(); setError(null); const form = e.currentTarget; const formData = new FormData(form); const raw = formData.get('amountUsed') as string; const { quantity, unit: parsedUnit } = parseQuantityInput(raw, unit); formData.set('amountUsed', String(quantity)); formData.set('unit', parsedUnit); startTransition(async () => { try { await consumeInventoryItem(formData); setIsOpen(false); } catch (err) { setError(err instanceof Error ? err.message : 'Okänt fel'); } }); }} style={{ display: 'grid', gap: '0.75rem', border: '1px solid #eee', borderRadius: '8px', padding: '0.75rem', background: '#fafafa', }} >
{error ?

{error}

: null}
); } function parseQuantityInput(input: string, defaultUnit: string) { const match = input.trim().match(/^([\d.,]+)\s*([a-zA-Z]*)$/); if (!match) return { quantity: NaN, unit: defaultUnit }; let [, num, unit] = match; num = num.replace(',', '.'); unit = unit.toLowerCase() || defaultUnit; const value = parseFloat(num); // Konvertera alltid till defaultUnit if (defaultUnit === 'kg') { if (unit === 'g' || unit === 'gram') return { quantity: value / 1000, unit: 'kg' }; if (unit === 'hg' || unit === 'hektogram') return { quantity: value / 10, unit: 'kg' }; if (unit === 'kg' || unit === 'kilogram' || unit === '') return { quantity: value, unit: 'kg' }; } if (defaultUnit === 'g') { if (unit === 'kg' || unit === 'kilogram') return { quantity: value * 1000, unit: 'g' }; if (unit === 'hg' || unit === 'hektogram') return { quantity: value * 100, unit: 'g' }; if (unit === 'g' || unit === 'gram' || unit === '') return { quantity: value, unit: 'g' }; } // Lägg till fler konverteringar vid behov return { quantity: value, unit: defaultUnit }; }