From 5571b99b4d71273ff37b7619c4a14c42a7b035c0 Mon Sep 17 00:00:00 2001 From: nirvani-nj Date: Mon, 1 Jun 2026 10:44:20 -0700 Subject: [PATCH] fix: resolve syntax issues in recommendation flow --- static/script.js | 106 ++++++++++++++++++++++------------------------- 1 file changed, 49 insertions(+), 57 deletions(-) diff --git a/static/script.js b/static/script.js index f97e5a0d..570bb32a 100644 --- a/static/script.js +++ b/static/script.js @@ -477,66 +477,63 @@ if (clearFiltersBtn) { // Form submission and API call // ---------------------------------------------------------- - form.addEventListener("submit", function (evt) { - evt.preventDefault(); //stop the browser from reloading the page on form submit - clearAllErrors() - + form.addEventListener("submit", function (evt) { + evt.preventDefault(); + + clearAllErrors(); + if (skillsTextInput.value.trim()) { addSkill(skillsTextInput.value); skillsTextInput.value = ""; hideSuggestions(); - } - - if (!validateForm()) return; //stop - anything missing/invalid - - setLoadingState(true); - - // Allow browser to paint spinner before request starts - requestAnimationFrame(function () { - - var payload = { - skills: skillsHidden.value.trim() || skillsTextInput.value.trim(), - level: document.getElementById("level").value, - interest: document.getElementById("interest").value, - time: document.getElementById("time").value - }; - - fetch("/api/recommend", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(payload) - }) - .then(function (res) { - return res.json(); - }) - .then(function (data) { + } - setLoadingState(false); + if (!validateForm()) return; - if (data.error) { - var generalErr = document.getElementById("form-error-general"); + setLoadingState(true); - if (generalErr) { - generalErr.textContent = data.error; - } + requestAnimationFrame(function () { - return; - } - - renderResults(data.projects || [], data.message); - }) - .catch(function () { - - setLoadingState(false); - //combine form values into an object to send to server/api var payload = { - // Prefer the hidden input value; fall back to raw text box if hidden input is empty skills: skillsHidden.value.trim() || skillsTextInput.value.trim(), level: document.getElementById("level").value, interest: document.getElementById("interest").value, time: document.getElementById("time").value - }; + }; + + fetch("/api/recommend", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(payload) + }) + .then(function (res) { + return res.json(); + }) + .then(function (data) { + + setLoadingState(false); + + if (data.error) { + var generalErr = document.getElementById("form-error-general"); + if (generalErr) { + generalErr.textContent = data.error; + } + return; + } + renderResults(data.projects || [], data.message); + }) + .catch(function () { + setLoadingState(false); + var generalErr = document.getElementById("form-error-general"); + if (generalErr) { + generalErr.textContent = + "Something went wrong while fetching recommendations."; + } + }); }); +}); // Manages the loading state of the form and results section(whats visible or not) function setLoadingState(isLoading) { @@ -570,27 +567,23 @@ if (clearFiltersBtn) { function renderResults(projects, message) { resultsSection.style.display = "block"; resultsLoadingEl.style.display = "none"; - // Clear out any cards from a previous search before showing new ones + resultsGrid.innerHTML = ""; if (!projects || projects.length === 0) { - resultsGrid.style.display = "none"; - resultsEmptyEl.style.display = "block"; resultsGrid.style.display = "none"; resultsEmptyEl.style.display = "block"; - if (message && emptyMessageEl) emptyMessageEl.textContent = message; - if (!projects || projects.length === 0) { //if no projects returned from api, show the "no results" message and hide the grid - resultsGrid.style.display = "none"; - resultsEmptyEl.style.display = "block"; - // Show a friendly custom message when the user selected an interest var selectedInterest = document.getElementById("interest")?.value; + if (selectedInterest) { - emptyMessageEl.textContent = "No projects are currently available for this interest. Please check back later or try a different area."; + emptyMessageEl.textContent = + "No projects are currently available for this interest. Please check back later or try a different area."; } else if (message) { emptyMessageEl.textContent = message; } else { - emptyMessageEl.textContent = "Try adjusting your skills or choosing a different interest area."; + emptyMessageEl.textContent = + "Try adjusting your skills or choosing a different interest area."; } resultsSection.scrollIntoView({ behavior: "smooth" }); @@ -600,7 +593,6 @@ if (clearFiltersBtn) { resultsEmptyEl.style.display = "none"; resultsGrid.style.display = "grid"; - //build a card for each project and add it to the grid projects.forEach(function (project) { resultsGrid.appendChild(buildProjectCard(project)); });