import React, { useEffect, useMemo, useState } from 'react'; import { TrashIcon } from '@heroicons/react/24/outline'; import Modal from '../ui/Modal'; import { formatRial } from '../../lib/utils'; import type { InventoryItem, InventoryPackage, PackagePayload } from '../../hooks/useInventory'; interface Props { open: boolean; editing: InventoryPackage | null; items: InventoryItem[]; // the tenant's available items to pick from saving: boolean; onClose: () => void; onSave: (payload: PackagePayload, uuid?: string) => void; } interface Line { itemUuid: string; name: string; unit: string; price: number; amount: number } /** «افزودن/ویرایش پکیج» — mirrors tauri ModalAddPackage (two-column builder). */ export default function AddPackageModal({ open, editing, items, saving, onClose, onSave }: Props) { const [title, setTitle] = useState(''); const [pickUuid, setPickUuid] = useState(''); const [amount, setAmount] = useState('1'); const [lines, setLines] = useState([]); const [error, setError] = useState(''); useEffect(() => { if (!open) return; setError(''); setPickUuid(items[0]?.uuid ?? ''); setAmount('1'); if (editing) { setTitle(editing.title); setLines(editing.items.map((l) => ({ itemUuid: l.itemUuid, name: l.name, unit: l.unit, price: l.price, amount: l.amount }))); } else { setTitle(''); setLines([]); } }, [open, editing, items]); const total = useMemo(() => lines.reduce((s, l) => s + l.price * l.amount, 0), [lines]); const addLine = () => { const item = items.find((i) => i.uuid === pickUuid); if (!item) return; const qty = Math.max(1, Number(amount) || 1); setLines((prev) => [...prev, { itemUuid: item.uuid, name: item.name, unit: item.unit, price: item.price, amount: qty }]); setAmount('1'); }; const changeAmount = (idx: number, delta: number) => setLines((prev) => prev.map((l, i) => (i === idx ? { ...l, amount: Math.max(1, l.amount + delta) } : l))); const removeLine = (idx: number) => setLines((prev) => prev.filter((_, i) => i !== idx)); const submit = () => { if (title.trim() === '') { setError('نام پکیج الزامی است'); return; } onSave({ title: title.trim(), items: lines.map((l) => ({ itemUuid: l.itemUuid, amount: l.amount })) }, editing?.uuid); }; const footer = (
); return (
{/* Left — builder */}
setTitle(e.target.value)} placeholder="نام پکیج" />
setAmount(e.target.value.replace(/[^0-9]/g, ''))} placeholder="1" />
{/* Right — selected items */}
کالاهای انتخاب شده:
{lines.length === 0 ? ( هنوز کالایی به پکیج اضافه نشده است. ) : ( lines.map((l, idx) => (
{l.name}
{l.amount}
{formatRial(l.price)}
)) )}
قیمت کل پکیج: {formatRial(total)}
{error && {error}}
); }