// web/js/pages/manager/ManagerManualClaimModal.js // Modal untuk manager input klaim manual ketika user datang langsung (offline) const ManagerManualClaimModal = ({ isOpen, onClose, onSubmit, loading, item, }) => { const [users, setUsers] = React.useState([]); const [loadingUsers, setLoadingUsers] = React.useState(false); const [selectedUser, setSelectedUser] = React.useState(null); // State untuk input manual const [claimerName, setClaimerName] = React.useState(""); const [claimerContact, setClaimerContact] = React.useState(""); const [description, setDescription] = React.useState(""); const [managerNotes, setManagerNotes] = React.useState(""); // Load users when modal opens React.useEffect(() => { if (isOpen) { loadUsers(); resetForm(); } }, [isOpen]); const resetForm = () => { setSelectedUser(null); setClaimerName(""); setClaimerContact(""); setDescription(""); setManagerNotes(""); }; const loadUsers = async () => { try { setLoadingUsers(true); const token = localStorage.getItem("token"); const response = await fetch( `http://localhost:8080/api/manager/users?page=1&limit=1000`, { headers: { Authorization: `Bearer ${token}`, }, } ); if (response.ok) { const data = await response.json(); setUsers(data.data || []); } } catch (error) { console.error("Failed to load users:", error); } finally { setLoadingUsers(false); } }; const handleUserSelect = (e) => { const userId = e.target.value; if (!userId) { setSelectedUser(null); setClaimerName(""); setClaimerContact(""); return; } const user = users.find((u) => u.id === parseInt(userId)); if (user) { setSelectedUser(user); setClaimerName(user.name); setClaimerContact(user.phone || ""); } }; const handleSubmit = () => { // Validasi if (!claimerName || !claimerContact || !description) { alert("Nama pengklaim, kontak, dan deskripsi wajib diisi!"); return; } // Prepare data const formData = { item_id: item?.id, user_id: selectedUser?.id || null, claimer_name: claimerName, contact: claimerContact, description: description, manager_notes: managerNotes, }; onSubmit(formData); }; if (!isOpen) return null; return (
Fitur ini untuk mencatat klaim yang disampaikan langsung oleh user kepada manager. Jika pengklaim memiliki akun, pilih di bawah. Jika tidak, isi data manual.
Pilih jika pengklaim sudah punya akun. Jika belum, biarkan kosong dan isi manual.
Otomatis terisi jika memilih user, atau isi manual