'use client'; import { useState } from 'react'; import { createInventoryItem } from './actions'; import type { Product } from '../../features/inventory/types'; type Props = { products: Product[]; }; export default function InventoryForm({ products }: Props) { const [isPending, setIsPending] = useState(false); const [error, setError] = useState(null); const UNIT_OPTIONS = [ { value: '', label: 'Välj enhet' }, { value: 'g', label: 'g (gram)' }, { value: 'kg', label: 'kg (kilogram)' }, { value: 'hg', label: 'hg (hektogram)' }, { value: 'ml', label: 'ml (milliliter)' }, { value: 'dl', label: 'dl (deciliter)' }, { value: 'l', label: 'l (liter)' }, { value: 'st', label: 'st (styck)' }, { value: 'tsk', label: 'tsk (tesked)' }, { value: 'msk', label: 'msk (matsked)' }, ]; const LOCATION_OPTIONS = [ { value: '', label: 'Välj plats' }, { value: 'Kyl', label: 'Kyl' }, { value: 'Frys', label: 'Frys' }, { value: 'Skafferi', label: 'Skafferi' }, { value: 'Annat', label: 'Annat' }, ]; 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 || defaultUnit; if (defaultUnit === 'kg' && (unit === 'g' || unit === 'gram')) return { quantity: parseFloat(num) / 1000, unit: 'kg' }; if (defaultUnit === 'g' && (unit === 'kg' || unit === 'kilogram')) return { quantity: parseFloat(num) * 1000, unit: 'g' }; return { quantity: parseFloat(num), unit }; } return (
{ e.preventDefault(); setError(null); setIsPending(true); const form = e.currentTarget; const formData = new FormData(form); const raw = formData.get('quantity') as string; const unit = formData.get('unit') as string; const { quantity, unit: parsedUnit } = parseQuantityInput(raw, unit); formData.set('quantity', String(quantity)); formData.set('unit', parsedUnit); try { await createInventoryItem(formData); form.reset(); } catch (err) { setError(err instanceof Error ? err.message : 'Okänt fel'); } finally { setIsPending(false); } }} style={{ display: 'grid', gap: '0.75rem', padding: '1rem', border: '1px solid #ddd', borderRadius: '8px', marginBottom: '1.5rem', }} >

Lägg till hemmavara

{error ?

{error}

: null}
); }