Możliwość dodania opinii o produkcie

This commit is contained in:
2025-11-14 12:56:55 +01:00
parent 092d980bf3
commit 62d401aa83
4 changed files with 53 additions and 9 deletions

View File

@@ -94,11 +94,11 @@ new IdmHotspot({
* @property {string} query.string - Zapytanie w formacie GraphQL. * @property {string} query.string - Zapytanie w formacie GraphQL.
* @property {Function} query.graphFn - Funkcja do pobierania danych. * @property {Function} query.graphFn - Funkcja do pobierania danych.
* @property {object} options - Ustawienia dla hotspotu (required). * @property {object} options - Ustawienia dla hotspotu (required).
* @property {boolean} options.lazy - Czy wczytywać w trybie lazy. * @property {boolean} [options.lazy] - Czy wczytywać w trybie lazy.
* @property {boolean} options.devMode - Czy wczytywać ramki tylko dla stron z dev=true. * @property {boolean} [options.devMode] - Czy wczytywać ramki tylko dla stron z dev=true.
* @property {boolean} options.addToFavorites - Czy włączać dodawanie do ulubionych(DZIAŁA TYLKO PO ZMIANACH SZABLONOWYCH) * @property {boolean} [options.addToFavorites] - Czy włączać dodawanie do ulubionych(DZIAŁA TYLKO PO ZMIANACH SZABLONOWYCH)
* @property {boolean} options.addToCompare - Czy włączać dodawanie do porównywania * @property {boolean} [options.addToCompare] - Czy włączać dodawanie do porównywania
* @property {boolean|string} options.addToBasket - Obsługa koszyka: * @property {boolean|string} [options.addToBasket] - Obsługa koszyka:
* - true = włącz * - true = włącz
* - false = wyłącz * - false = wyłącz
* - "range" = dodaj z zakresem * - "range" = dodaj z zakresem
@@ -106,9 +106,10 @@ new IdmHotspot({
* - true = aktywny * - true = aktywny
* - false = nieaktywny * - false = nieaktywny
* - object = konfiguracja Swiper * - object = konfiguracja Swiper
* @property {Function} options.callbackFn - Funkcja callback która dzieje się po wywołaniu wszystkiego włącznie ze swiperem * @property {boolean} [options.swiperScrollbar] - Czy włączać scrollbar w swiperze - DO DZIAŁANIA WYMAGA WŁĄCZONEGO SWIPERA
* @property {boolean} options.swiperScrollbar - Czy włączać scrollbar w swiperze - DO DZIAŁANIA WYMAGA WŁĄCZONEGO SWIPERA * @property {Function} [options.callbackFn] - Funkcja callback która dzieje się po wywołaniu wszystkiego włącznie ze swiperem
* @property {boolean} options.omnibusTooltip - Czy wyświetlać omnibusa w formie tooltip * @property {boolean} [options.omnibusTooltip] - Czy wyświetlać omnibusa w formie tooltip
* @property {boolean} [options.showOpinions] - Czy wyświetlać opinie o produkcie w formie gwiazdek nad nazwą
* *
* @type {Hotspot[]} * @type {Hotspot[]}
*/ */

View File

@@ -181,6 +181,10 @@ const IDM_PRODUCT_QUERY = `id
iconSmallSecond iconSmallSecond
} }
} }
opinion{
rating,
count
}
awardedParameters { awardedParameters {
name name
id id
@@ -413,14 +417,20 @@ class IdmHotspot{
devMode: false, devMode: false,
callbackFn: ()=>{}, callbackFn: ()=>{},
omnibusTooltip: false, omnibusTooltip: false,
// opinions: false // switchImage: false,
// POKAZANIE
showOpinions: false,
// DODAWANIE // DODAWANIE
addToBasket: true, // true, false, "range" addToBasket: true, // true, false, "range"
addToFavorites: false, // Wymaga zmian szablonowych addToFavorites: false, // Wymaga zmian szablonowych
addToCompare: false, addToCompare: false,
// WYBÓR // WYBÓR
// selectSize: false, // selectSize: false,
// selectVersion: false, // selectVersion: false,
// SWIPER // SWIPER
swiper: true, swiper: true,
swiperScrollbar: false, swiperScrollbar: false,
@@ -561,6 +571,7 @@ class IdmHotspot{
</strong> </strong>
</a> </a>
<div class="product__content_wrapper"> <div class="product__content_wrapper">
${this.markupOpinions(prod)}
<a class="product__name" tabindex="0" href="${prod.link}" title="${prod.name}">${prod.name}</a> <a class="product__name" tabindex="0" href="${prod.link}" title="${prod.name}">${prod.name}</a>
<div class="product__prices mb-auto ${prodExchangedData?.classes?.add?.reduce((acc,val) => acc + " " + val,"")}"> <div class="product__prices mb-auto ${prodExchangedData?.classes?.add?.reduce((acc,val) => acc + " " + val,"")}">
${this.markupPrice(prod, prodExchangedData)} ${this.markupPrice(prod, prodExchangedData)}
@@ -641,6 +652,22 @@ class IdmHotspot{
return labelMarkup; return labelMarkup;
} }
markupOpinions(prod){
if(!this.options?.showOpinions) return "";
return `<div class="product__opinions">
<div class="product__opinions_stars">
<i class="icon-star ${prod.opinion?.rating > 0.5 ? "--active" : ""}"></i>
<i class="icon-star ${prod.opinion?.rating > 1.5 ? "--active" : ""}"></i>
<i class="icon-star ${prod.opinion?.rating > 2.5 ? "--active" : ""}"></i>
<i class="icon-star ${prod.opinion?.rating > 3.5 ? "--active" : ""}"></i>
<i class="icon-star ${prod.opinion?.rating > 4.5 ? "--active" : ""}"></i>
</div>
<span class="product__opinions_score">${prod.opinion.rating.toFixed(2)} / 5.00</span>
</div>`
}
markupPrice(prod, prodExchangedData){ markupPrice(prod, prodExchangedData){
const price = prod.price.price[this.priceType]; const price = prod.price.price[this.priceType];
const unit = prod.unit; const unit = prod.unit;

View File

@@ -8,6 +8,7 @@
- opinie - opinie
- podmiana zdjęcia na hover - podmiana zdjęcia na hover
- stary szablon - stary szablon
- cena za kg

View File

@@ -172,4 +172,19 @@
&:not(.--success):hover { &:not(.--success):hover {
opacity: 0.6; opacity: 0.6;
} }
}
/* opinions */
.product__opinions{
display: flex;
gap: 1rem;
align-items: center;
margin-bottom: 1rem;
}
.product__opinions .icon-star{
color: #ffbc00;
}
.product__opinions .icon-star:not(.--active)::before{
content: "\f006";
} }