"use client"; import { use, useCallback, useEffect, useState } from "react"; import Link from "next/link"; import { formatDate, formatMoney, getErrorMessage } from "@/components/inventory/inventory-utils"; import { Button } from "@/components/ui/button"; import { api } from "@/lib/api"; import type { InventoryItem, InventoryStockMovement } from "@/types/inventory"; type PageProps = { params: Promise<{ id: string; }>; }; const movementLabels: Record = { initial: "Anfangsbestand", purchase: "Einkauf", adjustment: "Anpassung", reservation: "Reservierung", release: "Freigabe", consumption: "Verbrauch", return: "Rückgabe", correction: "Korrektur", }; export default function InventoryItemDetailPage({ params }: PageProps) { const { id } = use(params); const [item, setItem] = useState(null); const [movements, setMovements] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const loadItem = useCallback(async () => { setLoading(true); setError(""); try { const [itemResponse, movementResponse] = await Promise.all([ api.get(`/inventory/items/${id}`), api.get(`/inventory/items/${id}/movements`), ]); setItem(itemResponse.data); setMovements(movementResponse.data); } catch (err) { setError(getErrorMessage(err)); } finally { setLoading(false); } }, [id]); useEffect(() => { queueMicrotask(() => { void loadItem(); }); }, [loadItem]); if (loading) { return
Artikel wird geladen...
; } if (error || !item) { return
{error || "Artikel nicht gefunden"}
; } return (

{item.sku}

{item.name}

{item.category?.name ?? "Keine Kategorie"} · {item.is_active ? "Aktiv" : "Inaktiv"}

Stammdaten

Bestand

Preise

Bewegungen

{movements.length === 0 ? (

Noch keine Bewegungen vorhanden.

) : (
{movements.map((movement) => (

{movementLabels[movement.movement_type] ?? movement.movement_type} · {movement.quantity}

{movement.reason}{movement.note ? ` · ${movement.note}` : ""}

{movement.actor_username &&

Gebucht von {movement.actor_username}

}
))}
)}
); } function Info({ label, value }: { label: string; value: string }) { return (
{label}
{value}
); } function Metric({ label, value }: { label: string; value: string }) { return (
{label}
{value}
); }