'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import type { InventoryItem } from '../../features/inventory/types'; import InventoryEditForm from './InventoryEditForm'; import InventoryConsumeForm from './InventoryConsumeForm'; import InventoryConsumptionHistory from './InventoryConsumptionHistory'; function formatDate(value: string | null) { if (!value) return null; return new Date(value).toLocaleDateString('sv-SE'); } function getBestBeforeStatus(bestBeforeDate: string | null) { if (!bestBeforeDate) { return { label: 'Ingen bäst före angiven', color: '#666', background: '#f5f5f5', border: '#ddd' }; } const today = new Date(); const bestBefore = new Date(bestBeforeDate); today.setHours(0, 0, 0, 0); bestBefore.setHours(0, 0, 0, 0); const diffDays = Math.round((bestBefore.getTime() - today.getTime()) / (1000 * 60 * 60 * 24)); if (diffDays < 0) return { label: 'Utgången', color: '#8b0000', background: '#ffeaea', border: '#f1b5b5' }; if (diffDays <= 3) return { label: 'Snart utgången', color: '#8a4b00', background: '#fff4e5', border: '#f0cf9b' }; return { label: 'OK', color: '#1f5f2c', background: '#ecf8ee', border: '#b9e0bf' }; } type Props = { inventory: InventoryItem[]; onDeleted?: () => void; }; export default function InventoryList({ inventory, onDeleted }: Props) { const [search, setSearch] = useState(''); const router = useRouter(); // Unika produktnamn för autocomplete const autocompleteNames = Array.from( new Set( inventory.map((item) => item.product.canonicalName || item.product.name) ) ).sort(); // Filtrera baserat på söktext const filtered = search.trim() ? inventory.filter((item) => { const q = search.trim().toLowerCase(); const name = (item.product.canonicalName || item.product.name).toLowerCase(); const brand = (item.brand || '').toLowerCase(); const loc = (item.location || '').toLowerCase(); const comment = (item.comment || '').toLowerCase(); const suitable = (item.suitableFor || '').toLowerCase(); return ( name.includes(q) || brand.includes(q) || loc.includes(q) || comment.includes(q) || suitable.includes(q) ); }) : inventory; return (

Aktuella hemmavaror (inventory)

{/* Sökfält */}
setSearch(e.target.value)} placeholder="Sök vara, varumärke, plats..." style={{ width: '100%', padding: '0.6rem 0.75rem', border: '1px solid #ccc', borderRadius: '6px', fontSize: '1rem', }} /> {autocompleteNames.map((name) => ( {search && (
{filtered.length} av {inventory.length} varor visas
)}
{filtered.length === 0 ? (

Inga hemmavaror matchar sökningen.

) : (
{filtered.map((item) => { const bestBeforeStatus = getBestBeforeStatus(item.bestBeforeDate); return (
{item.product.canonicalName || item.product.name}
{item.quantity} {item.unit}
{bestBeforeStatus.label}
{item.location ?
Plats: {item.location}
: null} {item.brand ?
Varumärke: {item.brand}
: null}
Öppnad: {item.opened ? 'Ja' : 'Nej'}
{item.suitableFor ?
Passar till: {item.suitableFor}
: null} {item.bestBeforeDate ?
Bäst före: {formatDate(item.bestBeforeDate)}
: null} {item.comment ?
Kommentar: {item.comment}
: null}
router.refresh())} />
); })}
)}
); }