//////////////////////////////////////////////////// // Funkcja init ELEMENT HTML async function idmInsertHotspotElement(selectedContainerEl){ selectedContainerEl.classList.add("--init"); const {graphFn, query} = idmGetQueryData({ productsID: selectedContainerEl?.dataset?.productsId, productsMenu: selectedContainerEl?.dataset?.productsMenu, hotspotsType: selectedContainerEl.dataset.hotspotsType }); if(!graphFn || !query){ console.log(idmHotspotTextObject["Nie znaleziono metody graphql"], selectedContainerEl) return selectedContainerEl.remove(); } // Funkcja od uzupełniania danych const idmFill = async ()=>{ try{ // pobranie danych o produktach const products = await idmGetHotspotData(query, graphFn); if(!products) throw new Error(idmHotspotTextObject["Nie znaleziono produktów"]); // wstawienie produktów zależnie czy w section jest .hotspot czy nie const hotspotInsideEl = selectedContainerEl.querySelector(".hotspot"); if(hotspotInsideEl) hotspotInsideEl.innerHTML += `
${idmPrepareProductsMarkup(products, true)}
`; else selectedContainerEl.innerHTML = `
${idmPrepareProductsMarkup(products, true)}
`; selectedContainerEl.classList.remove("idm-loading") // init swipera idmHotspotInit(selectedContainerEl.id) }catch(err){ console.error(idmHotspotTextObject["Wystąpił błąd"], err); selectedContainerEl.remove(); } } if(selectedContainerEl.dataset?.lazy || !selectedContainerEl.dataset?.lazy && typeof idmGeneralHotspotObjData === "object" && idmGeneralHotspotObjData?.options?.lazy) idmObserveOnce(selectedContainerEl, idmFill); else idmFill(); } // Zebranie wszystkich ramek HTML i wstawienie ich. async function idmInsertAllHTMLHotspots(){ try{ const reqArr = [] document.querySelectorAll(".idm__hotspot:not(.--init):not(.--lazy-hotspot)").forEach(hotspot=>{ reqArr.push(idmInsertHotspotElement(hotspot)); }); await Promise.all(reqArr); }catch(err){ console.error(err) } } idmInsertAllHTMLHotspots(); ///////////////////////////////////////////////////////////////////// // wdrożenie dla elementu HTML /** * Struktura sekcji hotspotu w HTML. * * @typedef {HTMLElement} HotspotSection * @property {string} id - Identyfikator elementu (np. "idmBlogHotspot1"). * @property {string} class - Klasy CSS używane do stylowania. * * @attribute {string} data-products-id - Lista ID produktów (rozdzielona przecinkami). * @attribute {number} data-products-menu - Identyfikator menu produktów. * @attribute {string} data-hotspots-type - Typ hotspotu (np. "promotion"). * @attribute {boolean} data-lazy - Czy sekcja ma być ładowana w trybie lazy. * * @example

aaa

*/