From 3cbcdde40cf6032d13965ba819cd84d7d5301491 Mon Sep 17 00:00:00 2001 From: chaitanya kumari Date: Fri, 22 May 2026 12:04:54 +0530 Subject: [PATCH] fix: repair broken form submit handler and restore Clear Filters functionality fixes #409 Signed-off-by: chaitanya kumari --- static/script.js | 92 ++++++++++-------------------------------------- 1 file changed, 19 insertions(+), 73 deletions(-) diff --git a/static/script.js b/static/script.js index 9d96ab93..67a98357 100644 --- a/static/script.js +++ b/static/script.js @@ -478,83 +478,35 @@ if (clearFiltersBtn) { // ---------------------------------------------------------- form.addEventListener("submit", function (evt) { - evt.preventDefault(); //stop the browser from reloading the page on form submit - 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 - }; + evt.preventDefault(); + clearAllErrors(); - 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; - } + if (skillsTextInput.value.trim()) { + addSkill(skillsTextInput.value); + skillsTextInput.value = ""; + hideSuggestions(); + } - return; - } + if (!validateForm()) return; - renderResults(data.projects || [], data.message); - }) - .catch(function () { + setLoadingState(true); - setLoadingState(false); - //combine form values into an object to send to server/api + requestAnimationFrame(function () { 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 }; - //post the data to backend api as JSON, then handle the response fetch("/api/recommend", { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify(payload) //convert object to json string + body: JSON.stringify(payload) }) - .then(function (res) { return res.json(); }) //parse the response as JSON + .then(function (res) { return res.json(); }) .then(function (data) { setLoadingState(false); - - var generalErr = document.getElementById("form-error-general"); - - if (generalErr) { - generalErr.textContent = - "Something went wrong. Please try again."; - } - }); - }); if (data.error) { var generalErr = document.getElementById("form-error-general"); if (generalErr) generalErr.textContent = data.error; @@ -563,13 +515,13 @@ if (clearFiltersBtn) { renderResults(data.projects || [], data.message); }) .catch(function (err) { - // this runs if the network request itself fails setLoadingState(false); var generalErr = document.getElementById("form-error-general"); if (generalErr) generalErr.textContent = "Something went wrong. Please try again."; console.error("API request failed:", err); }); }); +}); // Manages the loading state of the form and results section(whats visible or not) function setLoadingState(isLoading) { @@ -609,18 +561,12 @@ if (clearFiltersBtn) { 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"; - if (message && emptyMessageEl) emptyMessageEl.textContent = message; //if api sent back a message (e.g. "no projects found matching your criteria"), show that - resultsSection.scrollIntoView({ behavior: "smooth" }); - return; - } + resultsGrid.style.display = "none"; + resultsEmptyEl.style.display = "block"; + if (message && emptyMessageEl) emptyMessageEl.textContent = message; + resultsSection.scrollIntoView({ behavior: "smooth" }); + return; +} resultsEmptyEl.style.display = "none"; resultsGrid.style.display = "grid";