const idmPhotoModuleLiteralsPM = { [`Okazja`]: "Okazja", [`Zobacz produkt`]: "Zobacz produkt", [`Dodany`]: "Dodany", [`Wystąpił błąd`]: "Wystąpił błąd", [`Do koszyka`]: "Do koszyka", [`Najniższa cena z 30 dni przed obniżką:`]: "Najniższa cena z 30 dni przed obniżką:", [`Cena regularna:`]: "Cena regularna:", [`Coś poszło nie tak podczas dodawania do koszyka. Spróbuj ponownie lub odśwież stronę`]: "Coś poszło nie tak podczas dodawania do koszyka. Spróbuj ponownie lub odśwież stronę", // mapowanie labelow ["new"]: "Nowość", ["bestseller"]: "Bestseller", ["promotion"]: "Promocja", ["discount"]: "Przecena", ["distinguished"]: "Produkt Wyróżniony", ["special"]: "Produkt Specjalny", ["subscription"]: "Subskrypcja", }; // 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 ? ` unit{ id name singular plural fraction sellBy precision unitConvertedFormat } sizes{ id name code amount availability{ visible status } ${IDM_PRICE_QUERY(app_shop.vars.priceType)} } ` : "" } } }`; } async function idmHandleAddToBasketPM(e) { const formEl = e.target.closest(".add_to_basket"); if (!formEl) return; const buttonEl = formEl.querySelector(".add_to_basket__button"); e.preventDefault(); try { formEl.classList.add("--loading"); const id = formEl.querySelector("input.product__add_id")?.value; const size = formEl.querySelector("input.product__add_size")?.value; const number = formEl.querySelector("input.product__add_number")?.value; const res = await fetch(`/graphql/v1/`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ query: `mutation { addProductsToBasket(ProductInput: {id: ${id}, size: "${size}", quantity: ${number}}) { status results { status error { code message } } } }`, }), }); const data = await res.json(); // Błąd if (data?.data?.addProductsToBasket?.status !== "success") throw new Error(data); else { localStorage.setItem("addedtoBasket", true); // Obsługiwanie sukcesu app_shop.fn?.menu_basket_cache(); await app_shop.graphql.trackingEvents(res); buttonEl.classList.add("--success"); buttonEl.innerHTML = `${buttonEl.dataset.success}`; setTimeout(() => { buttonEl.innerHTML = `${buttonEl.dataset.text}`; buttonEl.classList.remove("--success"); }, 3000); } } catch (err) { console.error(err); Alertek.Error( idmPhotoModuleLiteralsPM[ "Coś poszło nie tak podczas dodawania do koszyka. Spróbuj ponownie lub odśwież stronę" ] ); buttonEl.innerHTML = `${buttonEl.dataset.error}`; buttonEl.classList.add("--error"); setTimeout(() => { buttonEl.classList.remove("--error"); buttonEl.innerHTML = `${buttonEl.dataset.text}`; }, 3000); } finally { formEl.classList.remove("--loading"); } } 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 `
`; } function idmMarkupPricePM({ prodData, addToBasket }) { if (!prodData) return ""; let priceMarkup; if (!addToBasket) priceMarkup = `