// scripts/ui.js -- Final version with form handling const BACKEND_URL = 'https://stream-ai-backend.smplushypermedia.workers.dev'; // --- Helper Functions --- const getElement = (id) => document.getElementById(id); function showNotification(message, isError = false) { const container = getElement('notification'); if (!container) return; const bgColor = isError ? 'bg-red-500' : 'bg-green-500'; container.innerHTML = `
${message}
No recommendations available yet.
`; return; } listings.forEach(item => { const card = document.createElement('div'); // ... (The card rendering logic from the previous step remains the same) ... container.appendChild(card); }); } catch (error) { container.innerHTML = `Could not load recommendations.
`; } } async function handleFormSubmit(event) { event.preventDefault(); // Stop the browser from reloading the page const form = event.target; const submitButton = getElement('submit-listing-btn'); submitButton.disabled = true; submitButton.textContent = 'Submitting...'; const formData = new FormData(form); const listingData = Object.fromEntries(formData.entries()); try { const response = await fetch(`${BACKEND_URL}/api/add-listing`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(listingData), }); const result = await response.json(); if (!response.ok) { throw new Error(result.details || 'Submission failed.'); } showNotification('Success! Your recommendation has been added.'); form.reset(); // Clear the form fields loadRecommendations(); // Refresh the list to show the new item } catch (error) { showNotification(`Error: ${error.message}`, true); } finally { submitButton.disabled = false; submitButton.textContent = 'Submit Listing'; } } // --- Initialization --- export function initUI() { const addListingForm = getElement('add-listing-form'); if (addListingForm) { addListingForm.addEventListener('submit', handleFormSubmit); } // Load the initial recommendations when the page loads loadRecommendations(); }