PageSourceSearch

https://www.ciudaddelaluz.com/services/QueryBuilder.js

js ciudaddelaluz.com collected 2026-09-25 00:46:37 UTC 1,860 bytes, 58 lines download raw bytes

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.