25 lines
1019 B
JavaScript
25 lines
1019 B
JavaScript
function createCustomerTableSearch({ environment }) {
|
|
function createSearch({ label, onSearch, getValues }) {
|
|
const input = environment.document.createElement("input");
|
|
input.type = "search";
|
|
input.className = "opportunities-extension-customer-table-search";
|
|
input.placeholder = label;
|
|
input.setAttribute("aria-label", label);
|
|
input.addEventListener("input", onSearch);
|
|
const normalize = value => String(value ?? "").normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
|
|
let index = new WeakMap();
|
|
return { input,
|
|
reset() { index = new WeakMap(); },
|
|
filter(items) {
|
|
const terms = normalize(input.value).trim().split(/\s+/).filter(Boolean);
|
|
if (!terms.length) return items;
|
|
return items.filter(item => {
|
|
if (!index.has(item)) index.set(item, getValues(item).map(normalize));
|
|
return terms.every(term => index.get(item).some(value => value.includes(term)));
|
|
});
|
|
}
|
|
};
|
|
}
|
|
return { createSearch };
|
|
}
|