const idmPhotoModuleLiteralsPM = { [`Okazja`]: "Okazja", [`Promocja`]: "Promocja", [`Zobacz produkt`]: "Zobacz produkt", [`Dodany`]: "Dodany", [`Wystąpił błąd`]: "Wystąpił błąd", [`Do koszyka`]: "Do koszyka", }; // LAZY LOAD function idmObserveEachOncePM(elements, callback, options = {}) { const observer = new IntersectionObserver( (entries, obs) => { entries.forEach((entry) => { if (!entry.isIntersecting) return; callback(entry); obs.unobserve(entry.target); }); }, { threshold: 0.1, ...options, }, ); elements.forEach((el) => observer.observe(el)); return observer; } idmObserveEachOncePM( document.querySelectorAll(".idm_picture__module"), (entry) => { idmPictureModuleProductsPM(entry.target); }, ); // GRAPHQL QUERY function idmGetSingleProdGraphQLPM({ prodId, opinions = false, labels = false, addToBasket = false, }) { const IDM_PRICE_QUERY = (priceType) => `price { rebateCodeActive price { ${priceType} { value formatted } } omnibusPrice { ${priceType} { value formatted } } omnibusPriceDetails { unit { ${priceType} { value formatted } } youSavePercent omnibusPriceIsHigherThanSellingPrice newPriceEffectiveUntil { formatted } } max { ${priceType} { value formatted } } unit { ${priceType} { value formatted } } unitConvertedPrice { ${priceType} { value formatted } } youSavePercent beforeRebate { ${priceType} { value formatted } } beforeRebateDetails { youSavePercent unit { ${priceType} { value formatted } } } advancePrice { ${priceType} { value formatted } } suggested { ${priceType} { value formatted } } rebateNumber { number ${priceType} { value formatted } } }`; return ` prod${prodId}: product(productId: ${prodId}) { product { id name link type ${labels ? "zones" : ""} ${ opinions ? ` opinion{ rating count }` : "" } ${IDM_PRICE_QUERY(app_shop.vars.priceType)} ${ addToBasket ? ` sizes{ id name code amount availability{ visible status } ${IDM_PRICE_QUERY(app_shop.vars.priceType)} } ` : "" } } }`; } function idmHandleAddToBasketPM(e) { const formEl = e.target.closest( `${this.isClosestForm ? "div" : "form"}.add_to_basket`, ); if (!formEl) return; } function idmMarkupAddToBasketPM(prodData) { if (!prodData) return ""; const totalAmount = prodData?.sizes?.[0]?.amount || 0; const prodStatus = prodData?.sizes?.[0]?.availability?.status || "disable"; if ( prodData.type !== "product" || totalAmount === 0 || prodStatus === "disable" ) return `${idmPhotoModuleLiteralsPM["Zobacz produkt"]}`; return `
`; } // POBIERANIE I WSTAWIANIE PRODUKTOW async function idmPictureModuleProductsPM(containerEL) { try { // TABLICA ID const allProdEl = containerEL.querySelectorAll(".product_info[data-id]"); const productsId = []; allProdEl.forEach((prodEl) => { if (prodEl.dataset?.id) productsId.push(prodEl.dataset?.id); }); const isLabels = containerEL.dataset.labels === "true"; const isOpinions = containerEL.dataset.opinions === "true"; const isAddToBasket = containerEL.dataset.addToBasket === "true"; // POBIERANIE PRODUKTOW const res = await fetch("/graphql/v1/", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ query: `{${productsId.reduce( (acc, val, index) => acc + `${idmGetSingleProdGraphQLPM({ prodId: val, labels: isLabels, opinions: isOpinions, addToBasket: isAddToBasket, })}`, "", )}}`, }), }); const data = await res.json(); const products = Object.values(data?.data)?.map((prod) => prod.product); // WSTAWIANIE PRODUKTOW allProdEl.forEach((prodEl) => { const prodData = products.find((p) => p.id === +prodEl.dataset.id); if (!prodData) return prodEl.remove(); prodEl.classList.add("--mod-init"); // LABELKI let labelsHTML = ""; if (isLabels) { if (prodData.price?.omnibusPrice?.[app_shop.vars.priceType]?.value) { if ( prodData.price?.omnibusPriceDetails ?.omnibusPriceIsHigherThanSellingPrice ) labelsHTML += `${idmPhotoModuleLiteralsPM["Promocja"]}`; else labelsHTML += ``; } prodData.zones?.forEach((zone) => { labelsHTML += `${zone[0].toUpperCase() + zone.slice(1)}`; }); } // OPINIE let opinionsHTML = ""; if (isOpinions) { opinionsHTML = `