diff --git a/README.md b/README.md index 1946dda..fc8383a 100644 --- a/README.md +++ b/README.md @@ -96,11 +96,17 @@ new IdmHotspot({ * @property {string} [source.hotspotType] - Typ hotspotu (np. "promotion"). * @property {number[]} [source.productsId] - Tablica ID produktów. * @property {number} [source.productsMenu] - Identyfikator menu produktów. + * @property {number[]} [source.producersId] - Tablica ID producentów. + * @property {number[]} [source.seriesId] - Tablica ID serii. + * @property {number[]} [source.parametersId] - Tablica ID grup parametrów. + * @property {object} [source.priceRange] - Obiekt z ceną od do. + * @property {number} [source.priceRange.from] - cena od + * @property {number} [source.priceRange.to] - cena do - * @property {object} query - Dane zapytania, nadpisują source (DEV). - * @property {string} query.string - Zapytanie w formacie GraphQL. - * @property {Function} query.graphFn - Funkcja do pobierania danych. + * @property {object} [query] - Dane zapytania, nadpisują source (DEV). + * @property {string} [query.string] - Zapytanie w formacie GraphQL. + * @property {Function} [query.graphFn] - Funkcja do pobierania danych. * @property {object} options - Ustawienia dla hotspotu (required). @@ -144,9 +150,6 @@ new IdmHotspot({ - ``` Żeby zmienić resztę ustawień trzeba zmieniać defaultowe ustawienia! @@ -159,9 +162,14 @@ new IdmHotspot({ * @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 {number[]} data-products-id - Lista ID produktów (rozdzielona przecinkami). + * @attribute {number} data-products-menu - Identyfikator menu produktów. + * @attribute {number[]} data-producers-id - Lista id producentów (rozdzielona przecinkami). + * @attribute {number[]} data-series-id - Lista id serii (rozdzielona przecinkami). + * @attribute {number[]} data-parameters-id - Lista id grup parametrów (rozdzielona przecinkami). + * @attribute {number} data-price-from - "cena od" produktów w hotspocie + * @attribute {number} data-price-to - "cena do" produktów w hotspocie * @attribute {boolean} data-lazy - Czy sekcja ma być ładowana w trybie lazy. * * @example diff --git a/klasa.js b/klasa.js index a3822d7..304e10e 100644 --- a/klasa.js +++ b/klasa.js @@ -509,26 +509,44 @@ class IdmHotspot{ /** * Przygotowuje funkcję i zapytanie GraphQL w zależności od typu danych. */ - getQueryData({productsID, productsMenu, hotspotsType}){ + getQueryData(){ let graphFn, query; - if(productsID){ - graphFn = IDM_PRODUCTS_GQL; - query = `searchInput: {productsId: [${productsID}]}`; - }else if(productsMenu){ - graphFn = IDM_PRODUCTS_GQL; - query = `searchInput: {navigation: ${productsMenu}}`; - }else if(hotspotsType){ + let queryMarkup = ""; + + if(this.source?.hotspotsType){ graphFn = IDM_HOTSPOTS_GQL; - query = `searchInput: {hotspot: ${hotspotsType}, limit: 16}`; + queryMarkup += `hotspot: ${this.source.hotspotsType}, limit: 16`; + }else{ + graphFn = IDM_PRODUCTS_GQL; + if(this.source?.productsId){ + queryMarkup += `productsId: [${this.source.productsId}],`; + } + if(this.source?.productsMenu){ + queryMarkup += `navigation: ${this.source.productsMenu},`; + } + if(this.source?.producersId){ + queryMarkup += `producers: [${this.source.producersId}],`; + } + if(this.source?.seriesId){ + queryMarkup += `series: [${this.source.seriesId}],`; + } + if(this.source?.parametersId){ + queryMarkup += `parameters: [${this.source.parametersId.reduce((acc,val)=> acc + `{id: ${val}}`,"")}],`; + } + if(this.source?.priceRange){ + queryMarkup += `priceRange: {from: ${+this.source.priceRange?.from || 0}, to: ${+this.source.priceRange?.to || 0}},`; + } } + query = `searchInput: { ${queryMarkup} }` + return [graphFn, query]; } /** * Ustawia dane zapytania GraphQL wewnątrz instancji. */ - setQueryData(queryObj){ - const [graphFn, queryString] = this.getQueryData(queryObj); + setQueryData(){ + const [graphFn, queryString] = this.getQueryData(); this.query.graphFn = graphFn; this.query.string = queryString; } @@ -836,17 +854,20 @@ class IdmHotspot{ ${this.title} ` : ""} -