diff --git a/src/client/components/CollectionView.tsx b/src/client/components/CollectionView.tsx index b337d23..f3f4d51 100644 --- a/src/client/components/CollectionView.tsx +++ b/src/client/components/CollectionView.tsx @@ -224,6 +224,7 @@ export function CollectionView() { name={item.name} weightGrams={item.weightGrams} priceCents={item.priceCents} + quantity={item.quantity} categoryName={item.categoryName} categoryIcon={item.categoryIcon} imageFilename={item.imageFilename} @@ -257,6 +258,7 @@ export function CollectionView() { name={item.name} weightGrams={item.weightGrams} priceCents={item.priceCents} + quantity={item.quantity} categoryName={categoryName} categoryIcon={categoryIcon} imageFilename={item.imageFilename} diff --git a/src/client/components/ItemCard.tsx b/src/client/components/ItemCard.tsx index 03f4b49..e6383ee 100644 --- a/src/client/components/ItemCard.tsx +++ b/src/client/components/ItemCard.tsx @@ -8,6 +8,7 @@ interface ItemCardProps { name: string; weightGrams: number | null; priceCents: number | null; + quantity?: number; categoryName: string; categoryIcon: string; imageFilename: string | null; @@ -22,6 +23,7 @@ export function ItemCard({ name, weightGrams, priceCents, + quantity, categoryName, categoryIcon, imageFilename, @@ -122,9 +124,16 @@ export function ItemCard({ )}
-

- {name} -

+
+

+ {name} +

+ {quantity != null && quantity > 1 && ( + + ×{quantity} + + )} +
{weightGrams != null && ( diff --git a/src/client/components/ItemForm.tsx b/src/client/components/ItemForm.tsx index fbb2ec2..dc2d127 100644 --- a/src/client/components/ItemForm.tsx +++ b/src/client/components/ItemForm.tsx @@ -13,6 +13,7 @@ interface FormData { name: string; weightGrams: string; priceDollars: string; + quantity: number; categoryId: number; notes: string; productUrl: string; @@ -23,6 +24,7 @@ const INITIAL_FORM: FormData = { name: "", weightGrams: "", priceDollars: "", + quantity: 1, categoryId: 1, notes: "", productUrl: "", @@ -49,6 +51,7 @@ export function ItemForm({ mode, itemId }: ItemFormProps) { weightGrams: item.weightGrams != null ? String(item.weightGrams) : "", priceDollars: item.priceCents != null ? (item.priceCents / 100).toFixed(2) : "", + quantity: item.quantity ?? 1, categoryId: item.categoryId, notes: item.notes ?? "", productUrl: item.productUrl ?? "", @@ -98,6 +101,7 @@ export function ItemForm({ mode, itemId }: ItemFormProps) { priceCents: form.priceDollars ? Math.round(Number(form.priceDollars) * 100) : undefined, + quantity: form.quantity, categoryId: form.categoryId, notes: form.notes.trim() || undefined, productUrl: form.productUrl.trim() || undefined, @@ -202,6 +206,30 @@ export function ItemForm({ mode, itemId }: ItemFormProps) { )}
+ {/* Quantity */} +
+ + + setForm((f) => ({ + ...f, + quantity: Math.max(1, Number(e.target.value) || 1), + })) + } + className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-gray-400 focus:border-transparent" + /> +
+ {/* Category */}