Spaces:
Running
Running
Update scripts/ui.js
Browse files- scripts/ui.js +54 -3
scripts/ui.js
CHANGED
@@ -5,6 +5,15 @@ const BACKEND_URL = 'https://streamai-backend-v2.smplushypermedia.workers.dev';
|
|
5 |
// --- Helper Functions ---
|
6 |
const getElement = (id) => document.getElementById(id);
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
// --- Card Rendering ---
|
9 |
function createListingCard(item) {
|
10 |
const card = document.createElement('div');
|
@@ -38,10 +47,52 @@ async function loadRecommendations() {
|
|
38 |
}
|
39 |
}
|
40 |
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
|
|
|
43 |
export function initUI() {
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
loadRecommendations();
|
46 |
-
// ... other event listeners for the form and video button ...
|
47 |
}
|
|
|
5 |
// --- Helper Functions ---
|
6 |
const getElement = (id) => document.getElementById(id);
|
7 |
|
8 |
+
function showNotification(message, isError = false) {
|
9 |
+
const container = getElement('notification');
|
10 |
+
if (!container) return;
|
11 |
+
const bgColor = isError ? 'bg-red-500' : 'bg-green-500';
|
12 |
+
container.innerHTML = `<div class="flex items-center text-white p-4 rounded-lg shadow-lg ${bgColor}"><i class="fas fa-info-circle mr-3"></i><p>${message}</p></div>`;
|
13 |
+
container.classList.add('show');
|
14 |
+
setTimeout(() => { container.classList.remove('show'); }, 4000);
|
15 |
+
}
|
16 |
+
|
17 |
// --- Card Rendering ---
|
18 |
function createListingCard(item) {
|
19 |
const card = document.createElement('div');
|
|
|
47 |
}
|
48 |
}
|
49 |
|
50 |
+
async function handleFormSubmit(event) {
|
51 |
+
event.preventDefault();
|
52 |
+
const form = event.target;
|
53 |
+
const submitButton = getElement('submit-listing-btn');
|
54 |
+
submitButton.disabled = true;
|
55 |
+
submitButton.textContent = 'Submitting...';
|
56 |
+
const listingData = Object.fromEntries(new FormData(form).entries());
|
57 |
+
|
58 |
+
try {
|
59 |
+
const response = await fetch(`${BACKEND_URL}/api/add-listing`, {
|
60 |
+
method: 'POST',
|
61 |
+
headers: { 'Content-Type': 'application/json' },
|
62 |
+
body: JSON.stringify(listingData),
|
63 |
+
});
|
64 |
+
const result = await response.json();
|
65 |
+
if (!response.ok) throw new Error(result.details || 'Submission failed.');
|
66 |
+
showNotification('Success! Your recommendation has been added.');
|
67 |
+
const newCard = createListingCard(listingData);
|
68 |
+
getElement('recommendations-container').prepend(newCard);
|
69 |
+
getElement('form-container').classList.add('hidden');
|
70 |
+
getElement('form-chevron').classList.remove('rotate-180');
|
71 |
+
form.reset();
|
72 |
+
} catch (error) {
|
73 |
+
showNotification(`Error: ${error.message}`, true);
|
74 |
+
} finally {
|
75 |
+
submitButton.disabled = false;
|
76 |
+
submitButton.textContent = 'Submit Listing';
|
77 |
+
}
|
78 |
+
}
|
79 |
|
80 |
+
// --- Initialization ---
|
81 |
export function initUI() {
|
82 |
+
const addListingForm = getElement('add-listing-form');
|
83 |
+
const toggleBtn = getElement('toggle-form-btn');
|
84 |
+
const formContainer = getElement('form-container');
|
85 |
+
const chevron = getElement('form-chevron');
|
86 |
+
|
87 |
+
if (toggleBtn && formContainer && chevron) {
|
88 |
+
toggleBtn.addEventListener('click', () => {
|
89 |
+
formContainer.classList.toggle('hidden');
|
90 |
+
chevron.classList.toggle('rotate-180');
|
91 |
+
});
|
92 |
+
}
|
93 |
+
|
94 |
+
if (addListingForm) {
|
95 |
+
addListingForm.addEventListener('submit', handleFormSubmit);
|
96 |
+
}
|
97 |
loadRecommendations();
|
|
|
98 |
}
|