50 lines
2.0 KiB
JavaScript
50 lines
2.0 KiB
JavaScript
document.addEventListener("DOMContentLoaded", () => {
|
|
const input = document.getElementById("app-search-input");
|
|
if (!input) return;
|
|
|
|
const searchEmpty = document.getElementById("search-empty");
|
|
const navSections = Array.from(document.querySelectorAll(".sidebar [data-section]"));
|
|
const navGroups = navSections.filter((section) => section.classList.contains("nav-group"));
|
|
|
|
// Guarda quais grupos já estavam abertos manualmente antes da busca começar, pra
|
|
// restaurar esse estado exato quando o campo for limpo — sem isso, um grupo que a
|
|
// busca abre pra mostrar o resultado ficava aberto pra sempre, mesmo sem busca ativa.
|
|
let gruposAbertosAntesDaBusca = null;
|
|
|
|
input.addEventListener("input", () => {
|
|
const term = input.value.trim().toLowerCase();
|
|
const cards = Array.from(document.querySelectorAll("#app-card-grid .app-card"));
|
|
|
|
let visibleCards = 0;
|
|
cards.forEach((card) => {
|
|
const label = card.querySelector(".app-card__label").textContent.toLowerCase();
|
|
const match = !term || label.includes(term);
|
|
card.hidden = !match;
|
|
if (match) visibleCards += 1;
|
|
});
|
|
if (searchEmpty) searchEmpty.hidden = !term || visibleCards !== 0 || cards.length === 0;
|
|
|
|
if (term && !gruposAbertosAntesDaBusca) {
|
|
gruposAbertosAntesDaBusca = new Set(navGroups.filter((group) => group.classList.contains("is-open")));
|
|
}
|
|
|
|
navSections.forEach((section) => {
|
|
if (section.hidden) return; // respeita a visibilidade por persona
|
|
const text = section.textContent.toLowerCase();
|
|
const match = !term || text.includes(term);
|
|
section.classList.toggle("is-search-hidden", !match);
|
|
section.style.display = match ? "" : "none";
|
|
if (term && section.classList.contains("nav-group")) {
|
|
section.classList.toggle("is-open", match);
|
|
}
|
|
});
|
|
|
|
if (!term && gruposAbertosAntesDaBusca) {
|
|
navGroups.forEach((group) => {
|
|
group.classList.toggle("is-open", gruposAbertosAntesDaBusca.has(group));
|
|
});
|
|
gruposAbertosAntesDaBusca = null;
|
|
}
|
|
});
|
|
});
|