1// services/QueryBuilder.js 2import { createLoaderInline } from "../components/LoadingOverlay.js"; 3import { i18n } from "./I18nService.js"; 4 5class QueryBuilder { 6 /** 7 * Función que devuelve la query final en forma de String. 8 */ 9 buildQueryFromFilters() { 10 let filter; 11 const params = new URLSearchParams(); 12 const select = document.querySelectorAll('select'); 13 const search = document.querySelector('input[type="search"]'); 14 const hidden = document.querySelectorAll('input[type="hidden"]'); 15 16 select.forEach(s => { 17 filter = s.dataset.filter ? `[${s.dataset.filter}]` : ''; 18 if(s.value != ''){params.append(`filters[${s.id}]${filter}[$containsi]`, s.value)} 19 }) 20 21 hidden.forEach(s => { 22 if (s.value != 'null' && s.value.trim() !== '' && s.value !== null) { 23 params.append(`filters[sector][parent][documentId][$eq]`, s.value) 24 } 25 }) 26 27 if(search.value.trim() != '') { params.append('filters[search]', search.value) } 28 29 return params.toString(); 30 } 31 32 runQuery({container, onQuery}) { 33 const t = (key) => i18n.t(key); 34 container.innerHTML = createLoaderInline(t('actions.companies_loader')); 35 36 const query = this.buildQueryFromFilters(); 37 38 sessionStorage.removeItem('last_page'); 39 sessionStorage.setItem("query", query); 40 41 onQuery(); 42 } 43 44 /** 45 * Función de espera para lanzar las querys. Evita que se lance una consulta por cada cambio en los inputs. 46 */ 47 debounce(callback, wait) { 48 let timerId; 49 return (...args) => { 50 clearTimeout(timerId); 51 timerId = setTimeout(() => { 52 callback(...args); 53 }, wait); 54 }; 55 } 56} 57 58export const queryBuilder = new QueryBuilder();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.