import React, { useState, useEffect } from "react"; import { toast } from "react-toastify"; import { Button } from "@mui/joy"; import { Dropdown } from "primereact/dropdown/dropdown.esm.js"; import { AutoComplete } from "primereact/autocomplete/autocomplete.esm.js"; import { InputText } from "primereact/inputtext/inputtext.esm.js"; export default function ReqForm() { const [type, setType] = useState(""); const [title, setTitle] = useState(""); const [year, setYear] = useState(""); const [requester, setRequester] = useState(""); const [selectedItem, setSelectedItem] = useState(null); const [selectedOverview, setSelectedOverview] = useState(""); const [selectedTitle, setSelectedTitle] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); const [suggestions, setSuggestions] = useState([]); useEffect(() => { if (title !== selectedTitle && selectedOverview) { setSelectedOverview(""); setSelectedTitle(""); } }, [title, selectedTitle, selectedOverview]); const searchTitles = async (event) => { const query = event.query; if (query.length < 3) { setSuggestions([]); return; } try { const response = await fetch(`/api/search?q=${encodeURIComponent(query)}`); if (!response.ok) { throw new Error(`API error: ${response.status}`); } const data = await response.json(); setSuggestions(data); } catch (error) { console.error('Error fetching suggestions:', error); setSuggestions([]); } }; const handleSubmit = async (e) => { e.preventDefault(); if (!title.trim()) { toast.error("Please fill in the required fields."); return; } setIsSubmitting(true); try { const response = await fetch('/api/submit', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ title, year, type, requester }), }); if (!response.ok) { throw new Error('Submission failed'); } toast.success("Request submitted successfully!"); // Reset form setType(""); setTitle(""); setYear(""); setRequester(""); setSelectedOverview(""); setSelectedTitle(""); setSelectedItem(null); } catch (error) { console.error('Submission error:', error); toast.error("Failed to submit request. Please try again."); } finally { setIsSubmitting(false); } }; const attachScrollFix = () => { setTimeout(() => { const panel = document.querySelector(".p-autocomplete-panel"); const items = panel?.querySelector(".p-autocomplete-items"); if (items) { items.style.maxHeight = "200px"; items.style.overflowY = "auto"; items.style.overscrollBehavior = "contain"; const wheelHandler = (e) => { const delta = e.deltaY; const atTop = items.scrollTop === 0; const atBottom = items.scrollTop + items.clientHeight >= items.scrollHeight; if ((delta < 0 && atTop) || (delta > 0 && atBottom)) { e.preventDefault(); } else { e.stopPropagation(); } }; items.removeEventListener("wheel", wheelHandler); items.addEventListener("wheel", wheelHandler, { passive: false }); } }, 0); }; return (
Submit your request for review