carhop__plugins__PROD-DEV/plugins/carhop-blocks/build/dbmob-archives/view.js
2026-04-08 16:46:25 +02:00

87 lines
3.2 KiB
JavaScript

/******/ (() => { // webpackBootstrap
/*!************************************!*\
!*** ./src/dbmob-archives/view.js ***!
\************************************/
document.addEventListener("DOMContentLoaded", function () {
const block = document.querySelector(".wp-block-carhop-blocks-dbmob-archives");
if (!block) return;
const toolbar = block.querySelector(".notices-toolbar");
if (!toolbar) return;
const searchInput = toolbar.querySelector("input[name='search']");
const sortBySelect = toolbar.querySelector("select[name='sort_by']");
const loadMoreButton = block.querySelector(".load-more-button");
// Évite les courses: annule les requêtes précédentes et ignore les réponses obsolètes
let currentAbortController = null;
let lastRequestId = 0;
function updatePostCount(count) {
const el = block.querySelector(".post-count__count");
if (el != null && count != null) {
el.textContent = String(count);
}
}
// Debounce simple pour la recherche
function debounce(fn, waitMs) {
let timeoutId;
return (...args) => {
if (timeoutId) window.clearTimeout(timeoutId);
timeoutId = window.setTimeout(() => fn(...args), waitMs);
};
}
async function hydratePosts() {
var _searchInput$value, _sortBySelect$value;
const searchValue = (_searchInput$value = searchInput?.value) !== null && _searchInput$value !== void 0 ? _searchInput$value : "";
const offset = 0;
const postsPerPage = -1;
const sortBy = (_sortBySelect$value = sortBySelect?.value) !== null && _sortBySelect$value !== void 0 ? _sortBySelect$value : "date_desc";
const params = new URLSearchParams({
sort_by: sortBy,
recherche: searchValue,
post_type: "dbmob",
offset: String(offset),
posts_per_page: String(postsPerPage)
});
const url = `/wp-json/carhop-datas/v1/build/posts?${params.toString()}`;
if (currentAbortController) currentAbortController.abort();
currentAbortController = new AbortController();
const requestId = ++lastRequestId;
try {
const response = await fetch(url, {
signal: currentAbortController.signal
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
if (requestId !== lastRequestId) return;
const articlesContainer = block.querySelector(".dbmob-grid");
if (!articlesContainer) return;
articlesContainer.innerHTML = data.html_template;
updatePostCount(data.post_count);
} catch (error) {
if (error?.name === "AbortError") return;
console.error("Erreur lors de la récupération des articles:", error);
}
}
const hydratePostsDebounced = debounce(hydratePosts, 150);
if (sortBySelect) {
sortBySelect.addEventListener("change", value => {
const sortByValue = value.target.value;
hydratePosts(sortByValue);
});
}
if (searchInput) {
searchInput.addEventListener("input", () => {
hydratePostsDebounced();
});
}
if (loadMoreButton) {
loadMoreButton.addEventListener("click", () => {
const offset = loadMoreButton.dataset.offset;
const postsPerPage = loadMoreButton.dataset.postsPerPage;
hydratePosts(postsPerPage);
});
}
});
/******/ })()
;
//# sourceMappingURL=view.js.map