diff --git a/README.md b/README.md index 7b77d12..4185e4f 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ new IdmHotspot({ * @property {string} id - Identyfikator ramki (required). * @property {string} title - Tytuł ramki. * @property {string} classes - Dodatkowe klasy CSS. + * @property {object[]} [products] - tablica produktów z układem danych takich jak w graphql. Opcjonalne, pod specjalne funkcjonalności. * @property {object} placement - Określa, gdzie wstawić ramkę (required). * @property {string} placement.selector - Selektor miejsca osadzenia. * @property {string} placement.insert - Pozycja wstawienia względem selektora (np. "afterbegin", "beforeend"). diff --git a/klasa.js b/klasa.js index 46a374f..6aa36e3 100644 --- a/klasa.js +++ b/klasa.js @@ -149,7 +149,6 @@ const IDM_PRICE_QUERY = `price { const IDM_PRODUCT_QUERY = `id type name - zones icon iconSecond iconSmall @@ -452,7 +451,6 @@ class IdmHotspot{ this.hotspotEl = hotspotEl || null; - // Merge defaults this.options = { ...IdmHotspot.idmDefaultHotspotOptions.options, @@ -511,6 +509,7 @@ class IdmHotspot{ * Pobiera dane hotspotu z API GraphQL. */ async getHotspotData(){ + if(this.products) return; try{ const res = await fetch(`/graphql/v1/`, { method: "POST", @@ -634,8 +633,8 @@ class IdmHotspot{ markupLabel(prod){ let labelMarkup = "" // labele zones - if(prod.zones.find(zone => zone ==="bestseller")) labelMarkup += `${idmHotspotTextObject["Bestseller"]}`; - if(prod.zones.find(zone => zone ==="news")) labelMarkup += `${idmHotspotTextObject["Nowość"]}`; + if(prod.zones?.find(zone => zone ==="bestseller")) labelMarkup += `${idmHotspotTextObject["Bestseller"]}`; + if(prod.zones?.find(zone => zone ==="news")) labelMarkup += `${idmHotspotTextObject["Nowość"]}`; const omnibusPrice = prod.price?.omnibusPriceDetails?.unit?.[this.idmPriceType]?.formatted || prod.price.omnibusPrice[this.idmPriceType]?.formatted; if(omnibusPrice){ @@ -829,10 +828,23 @@ class IdmHotspot{ buttonEl.classList.add("--success"); // Dodawanie do koszyka na stronie basketedit.php będzie wymagał innego indywidualnego kodu!!!!! + app_shop.fn?.menu_basket_cache?.(); + + // STRONA KOSZYKA + if(typeof app_shop.fn?.basket?.reloadForm === "function"){ + const existingBasketBlockQuantity = document.querySelector(`.basket__block[data-product-id="${id}"][data-product-size="${size}"] input.buy__more_input.quantity__input[type="number"]`); + + // Dodanie do ilości produktu jeśli już był dodany do koszyka + if(existingBasketBlockQuantity) existingBasketBlockQuantity.value = +existingBasketBlockQuantity.value + 1; + + + // Przeładowanie koszyka na stronie basketedit.html + app_shop.fn?.basket?.reloadForm(); + } + buttonEl.innerHTML = `${buttonEl.dataset.success}`; setTimeout(()=>{ buttonEl.innerHTML = `${buttonEl.dataset.text}`; - app_shop.fn?.menu_basket_cache?.(); buttonEl.classList.remove("--success"); }, 3000); } @@ -1032,6 +1044,13 @@ class IdmHotspot{ console.log(`Initialized hotspot #${this.id}`); if(typeof this.options?.callbackFn === "function") this.options?.callbackFn(); + + // WCZYTANIE PONOWNIE DLA kOSZYKA + if(typeof app_shop.fn?.basket?.reloadForm === "function" && this.hotspotEl.closest("#content")){ + app_shop.run(()=>{ + this.init(); + }, "all", "#Basket", true) + } }catch(err){ console.error(idmHotspotTextObject["Wystąpił błąd z inicjalizacją. Proszę odśwież stronę"], err); } @@ -1345,6 +1364,7 @@ function idmHideTooltip(tooltipEl){ // source: { // productsMenu: 1649 // } +// products: [] // Tablica produktów // }); // { // id: "idmMainHotspot2", diff --git a/ramka.txt b/ramka.txt index 7a660ef..32468b4 100644 --- a/ramka.txt +++ b/ramka.txt @@ -5,10 +5,10 @@ - zakres cen????????????? - Wybór kolorystyczny??? - AAAAA - banner na hotspocie -- opinie - podmiana zdjęcia na hover - stary szablon - cena za kg +- blokowanie dodawania do koszyka jeśli ilość jest maksymalna