import { fetchQuery } from "./contentUtility.js"; const apiEndpoint = "/api/v1/datasets"; const baseURL = location.origin; const defaultPagingValue = 20; const lastQuery = { url: "", totalPages: 0, currentPage: 0 }; // definition of all buttons & sections const addButton = document.getElementById("add-btn"); const filterButton = document.getElementById("filter-btn"); const searchButton = document.getElementById("search-btn"); const searchBar = document.getElementById("search-entry"); const sortButton = document.getElementById("sort-btn"); const upvoteButtons = document.getElementsByClassName("upvote-btn"); const downvoteButtons = document.getElementsByClassName("downvote-btn"); export const searchSection = document.getElementById("search"); const recentSection = document.getElementById("recents"); const mostLikedSection = document.getElementById("top"); // ID of the timeout, because we need to cancel it at some point export let searchBarTimeout; const searchDelay = 500; // Event listeners addButton.addEventListener("click", () => { navigateToAdd(); }); filterButton.addEventListener("change", () => { const filterString = filterButton.value; filter(filterString); }); searchButton.addEventListener("click", () => { const searchString = searchBar.value; search(searchString); }); searchBar.addEventListener("input", () => { updateSections(); clearTimeout(searchBarTimeout); searchBarTimeout = setTimeout(() => { const searchString = searchBar.value; search(searchString); }, searchDelay); }); searchBar.addEventListener('keypress', function (e) { if (e.key === 'Enter') { const searchString = searchBar.value; search(searchString); } }) sortButton.addEventListener("change", () => { const sortString = sortButton.value; sort(sortString); }); // Consider moving this to datasets.js completely const upvoteButtonClickListener = e => { const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, true); }; for (const upvoteButton of upvoteButtons) { upvoteButton.addEventListener("click", upvoteButtonClickListener); } // Consider moving this to datasets.js completely const downvoteButtonClickListener = e => { const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, false); }; for (const downvoteButton of downvoteButtons) { downvoteButton.addEventListener("click", downvoteButtonClickListener); } // functions of the main page function navigateToAdd() { window.location.href = "/add.html"; } function filter(filterString) { filterString = filterString.toUpperCase(); let fetchURL = new URL(apiEndpoint, baseURL); fetchURL.searchParams.append("type", filterString); fetchURL.searchParams.append("size", defaultPagingValue); console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function search(searchString) { let fetchURL = new URL(apiEndpoint + "/search", baseURL); fetchURL.searchParams.append("search", searchString.length === 0 ? "%" : searchString); console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function sort(sortString) { let query = sortString.toLowerCase().split(" "); if (query[1] === "a-z" || query[1] === "↑" || query[1] === "oldest-newest") { query[1] = "asc"; } else { query[1] = "desc"; } let fetchURL = new URL(apiEndpoint, baseURL); fetchURL.searchParams.append("sort", query[0]); fetchURL.searchParams.append("direction", query[1]); console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } export function vote(entryID, up) { const fetchURL = new URL( `${apiEndpoint}/id/${entryID}/${up ? "up" : "down"}vote`, baseURL, ); console.log(fetchURL); // TODO: remove fetch(fetchURL, { method: "PUT", //mode: 'no-cors' headers: { 'Content-Type': 'application/json', // Add other headers as needed }, }); /*.then(resp => resp.json()) // TODO: wait for backend .then((data) => { console.log(data.content); // TODO: remove*/ let dataset = document.querySelector('[data-id= ' + CSS.escape(entryID) + ']') dataset.querySelector("span").innerText++; // TODO: replace by parsed vote /*});*/ } function incrementPageCount() { lastQuery.currentPage++; } function updateSections() { if (searchBar.value === "") { searchSection.classList.add("hidden"); recentSection.classList.remove("hidden"); mostLikedSection.classList.remove("hidden"); } else { searchSection.classList.remove("hidden"); recentSection.classList.add("hidden"); mostLikedSection.classList.add("hidden"); } } window.onload = function () { updateSections(); if (searchBar.value !== "") { search(searchBar.value); } }