From 6c4e41c9f5faa84c9bf10d31eb463bd4343158a6 Mon Sep 17 00:00:00 2001 From: Antoine M Date: Mon, 21 Oct 2024 16:57:00 +0200 Subject: [PATCH] refactoring dynamic search --- resources/js/dynamicSearch.js | 67 +++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 resources/js/dynamicSearch.js diff --git a/resources/js/dynamicSearch.js b/resources/js/dynamicSearch.js new file mode 100644 index 0000000..3149b3c --- /dev/null +++ b/resources/js/dynamicSearch.js @@ -0,0 +1,67 @@ +function formatFormDataArray(formData) { + let formObjectDatas = {}; + + for (const [name, value] of formData) { + const cleanName = name.replace('[]', ''); + + if (formObjectDatas[cleanName]) { + // Si la clé correspond à un tableau (comme les checkboxes) + // ajouter la nouvelle valeur au tableau + if (Array.isArray(formObjectDatas[cleanName])) { + formObjectDatas[cleanName].push(value); + } else { + formObjectDatas[cleanName] = [ + formObjectDatas[cleanName], + value, + ]; + } + } else { + formObjectDatas[cleanName] = value; + } + } + return formObjectDatas; +} +async function hydrateFields(formObjectDatas) { + const currentLanguage = document + .querySelector('body') + .getAttribute('current-language'); + const taxonomy = formObjectDatas.search_by; + const taxonomyIds = + taxonomy === 'metiers' + ? formObjectDatas.metiers + : formObjectDatas.elementsbatiments; + + const response = await fetch( + `/wp-json/metiers-patrimoine-datas/v1/build/artisans?current-page-language=${currentLanguage}&taxonomy=${taxonomy}&taxonomy-ids=${taxonomyIds}` + ); + const artisansDatas = await response.json(); + + console.log(artisansDatas); + + const artisansGrid = document.querySelector( + '.artisans-posts__grid' + ); + artisansGrid.innerHTML = artisansDatas.html_template; + // brochureRows.setAttribute( + // 'current-post-count', + // brochuresDatas.total_posts_found + // ); +} + +export default function dynamicSearch() { + const form = document.querySelector( + '.metier-patrimoine-searchform' + ); + + form.addEventListener('change', (e) => { + e.preventDefault(); + + const form = e.target.closest('form'); + const formData = new FormData(form); + + let formObjectDatas = formatFormDataArray(formData); + console.log(formObjectDatas); + + hydrateFields(formObjectDatas); + }); +}