import { displayName, escapeSearchHtml, formatSearchPrice, loadSearchCatalog, searchCatalogProducts, } from "/js/search-catalog.js?v=persianCopyRtl2"; import { initCardShadePickers } from "/js/buy.js?v=priceSort2"; import { refreshProductFilters } from "/js/filters.js?v=priceSort2"; import { loveYourEyesPillHtml } from "/js/love-your-eyes.js?v=lyeOff"; function shadeDots(p) { const variants = p.colorVariants; if (!variants || variants.length < 2) return ""; const shown = variants.slice(0, 5); const extra = variants.length - shown.length; return `
${shown .map((v) => { const active = v.slug === p.slug ? " is-active" : ""; const bg = v.heroImage ? `background-image:url('${escapeSearchHtml(v.heroImage)}')` : ""; const href = `/products/${escapeSearchHtml(v.slug)}/`; return ``; }) .join("")}${ extra > 0 ? `+${extra.toLocaleString("fa-IR")} عدد` : "" }
`; } function cardIsInStock(p) { const variants = p.colorVariants; if (variants && variants.length > 1) { return variants.some((v) => Number(v.stock) > 0); } return Number(p.stock) > 0; } function stockBadge(p) { if (cardIsInStock(p)) return ""; return `نا موجود`; } function filterAttrs(p) { const updated = p.updatedAt ? new Date(p.updatedAt).getTime() : 0; const discount = p.compareAtPrice && p.compareAtPrice > p.price ? Math.round((1 - p.price / p.compareAtPrice) * 100) : 0; const prices = [Number(p.price) || 0]; for (const v of p.colorVariants || []) { const n = Number(v.price); if (Number.isFinite(n)) prices.push(n); } const min = Math.min(...prices); const max = Math.max(...prices); return [ `data-category="${escapeSearchHtml(p.category || "")}"`, `data-category-fa="${escapeSearchHtml(p.categoryFa || "")}"`, `data-price="${p.price}"`, `data-price-min="${min}"`, `data-price-max="${max}"`, `data-name="${escapeSearchHtml(p.name)}"`, `data-updated="${Number.isFinite(updated) ? updated : 0}"`, `data-rating="${p.ratingAvg || 0}"`, `data-reviews="${p.reviewCount || 0}"`, `data-featured="${p.featured ? 1 : 0}"`, `data-in-stock="${cardIsInStock(p) ? 1 : 0}"`, `data-discount="${discount}"`, ].join(" "); } function productCardHtml(p) { const title = displayName(p); const href = `/products/${escapeSearchHtml(p.slug)}/`; const discount = p.compareAtPrice && p.compareAtPrice > p.price ? Math.round((1 - p.price / p.compareAtPrice) * 100) : 0; const badge = discount >= 1 ? `−${discount}%` : ""; const priceHtml = discount >= 1 ? `

${formatSearchPrice(p.price)} ${formatSearchPrice(p.compareAtPrice)}

` : `

${formatSearchPrice(p.price)}

`; return `
${badge} ${stockBadge(p)} ${ p.heroImage ? `${escapeSearchHtml(title)}` : "" }
${loveYourEyesPillHtml(p.slug)}

${escapeSearchHtml(title)}

${shadeDots(p)}
${priceHtml}
`; } const params = new URLSearchParams(location.search); const q = (params.get("q") || "").trim(); const titleEl = document.querySelector("[data-search-title]"); const resultsEl = document.querySelector("[data-search-results]"); const emptyEl = document.querySelector("[data-search-empty]"); const countEl = document.querySelector("[data-listing-count]"); const resultPill = document.querySelector("[data-filters-result-count]"); if (titleEl && q) titleEl.textContent = `نتایج برای «${q}»`; try { const products = await loadSearchCatalog(); const hits = searchCatalogProducts(products, q); if (!resultsEl) { /* no-op */ } else if (!hits.length) { if (emptyEl) emptyEl.hidden = false; resultsEl.innerHTML = ""; if (countEl) countEl.textContent = "۰"; if (resultPill) resultPill.textContent = "۰"; } else { if (emptyEl) emptyEl.hidden = true; resultsEl.innerHTML = hits.map(productCardHtml).join(""); const n = hits.length.toLocaleString("fa-IR"); if (countEl) countEl.textContent = n; if (resultPill) resultPill.textContent = n; initCardShadePickers(); refreshProductFilters(); } } catch { if (emptyEl) { emptyEl.hidden = false; emptyEl.querySelector("p") && (emptyEl.querySelector("p").textContent = "بارگذاری نتایج ممکن نشد."); } }