diff --git a/library_service/static/books.js b/library_service/static/books.js index b9bd30f..bf33c32 100644 --- a/library_service/static/books.js +++ b/library_service/static/books.js @@ -5,6 +5,11 @@ $(document).ready(() => { let pageSize = 20; let totalBooks = 0; + const urlParams = new URLSearchParams(window.location.search); + const genreIdsFromUrl = urlParams.getAll("genre_id"); + const authorIdsFromUrl = urlParams.getAll("author_id"); + const searchFromUrl = urlParams.get("q"); + Promise.all([ fetch("/api/authors").then((response) => response.json()), fetch("/api/genres").then((response) => response.json()), @@ -18,15 +23,25 @@ $(document).ready(() => { .attr("data-name", author.name) .text(author.name) .appendTo($dropdown); + + if (authorIdsFromUrl.includes(String(author.id))) { + selectedAuthors.set(author.id, author.name); + } }); const $list = $("#genres-list"); genresData.genres.forEach((genre) => { + const isChecked = genreIdsFromUrl.includes(String(genre.id)); + + if (isChecked) { + selectedGenres.set(genre.id, genre.name); + } + $("
  • ") .addClass("mb-1") .html( ``, @@ -57,6 +72,29 @@ $(document).ready(() => { params.append("genre_ids", id); }); + function updateBrowserUrl() { + const params = new URLSearchParams(); + + const searchQuery = $("#book-search-input").val().trim(); + if (searchQuery.length >= 3) { + params.append("q", searchQuery); + } + + selectedAuthors.forEach((name, id) => { + params.append("author_id", id); + }); + + selectedGenres.forEach((name, id) => { + params.append("genre_id", id); + }); + + const newUrl = params.toString() + ? `${window.location.pathname}?${params.toString()}` + : window.location.pathname; + + window.history.replaceState({}, "", newUrl); + } + params.append("page", currentPage); params.append("size", pageSize); @@ -64,6 +102,8 @@ $(document).ready(() => { showLoadingState(); + updateBrowserUrl(); + fetch(url) .then((response) => { if (!response.ok) { diff --git a/library_service/templates/base.html b/library_service/templates/base.html index 2528d15..1701f42 100644 --- a/library_service/templates/base.html +++ b/library_service/templates/base.html @@ -22,7 +22,6 @@
  • Главная
  • Книги
  • Авторы
  • -
  • О нас
  • API