🔥Letnia gorąca wyprzedaż -49% zniżki😻Wodna mata sensoryczna dla zwierząt🎉
${function() {
const variantData = data.variant || {"id":"a09f8e9d-a907-4367-b9d5-48dc11eaaa72","product_id":"944752a1-84bc-4e8e-b1d9-dfb474283301","title":"Domy\u015blny tytu\u0142-Okr\u0105g\u0142y (60*60cm)","weight_unit":"kg","inventory_quantity":100,"sku":"pk04-Round","barcode":"","position":1,"option1":"Domy\u015blny tytu\u0142","option2":"Okr\u0105g\u0142y (60*60cm)","option3":"","note":"","image":{"src":"\/\/img.staticdj.com\/428aca7e9e964e935e9b7e6e0bcf03e4.jpeg","path":"428aca7e9e964e935e9b7e6e0bcf03e4.jpeg","width":1000,"height":1000,"alt":"","aspect_ratio":1},"wholesale_price":[{"price":89,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"89","retail_price":"0","available":true,"url":"\/products\/water-sensory-mat-hzbd?variant=a09f8e9d-a907-4367-b9d5-48dc11eaaa72","available_quantity":999999999,"options":[{"name":"\ud83d\udc4dGruby i trwa\u0142y materia\u0142","value":"Domy\u015blny tytu\u0142"},{"name":"nie boj\u0119 si\u0119pazur\u00f3wiz\u0119b\u00f3w zwierz\u0105t.","value":"Okr\u0105g\u0142y (60*60cm)"}],"off_ratio":0,"flashsale_info":[],"sales":0};
const saveType = "amount";
const productLabelDiscountOn = true;
return `
-
${saveType == 'percentage'
? `-${variantData.off_ratio}%`
: `-`
}
`;
}()}
${function(){
const tipText = "Wybierz {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data);
return `${tipText}
`
}()}
${function(){
const tipText = "Wybierz {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data);
return `${tipText}
`
}()}
${function() {
const minInventory = parseInt('10');
const maxInventory = parseInt('50');
const randomInventory = Math.round(Math.random() * (maxInventory - minInventory)) + minInventory;
const customText = "Pozosta\u0142o tylko {stock} sztuk w magazynie!".replace(/\{stock\}/g, '' + randomInventory + '');
const barWidth = (randomInventory / maxInventory) * 100 + '%';
return `
`;
}()}
Produkt był niedostępny.
Produkt niedostępny.
${function(){
const variantData = data.variant || {"id":"a09f8e9d-a907-4367-b9d5-48dc11eaaa72","product_id":"944752a1-84bc-4e8e-b1d9-dfb474283301","title":"Domy\u015blny tytu\u0142-Okr\u0105g\u0142y (60*60cm)","weight_unit":"kg","inventory_quantity":100,"sku":"pk04-Round","barcode":"","position":1,"option1":"Domy\u015blny tytu\u0142","option2":"Okr\u0105g\u0142y (60*60cm)","option3":"","note":"","image":{"src":"\/\/img.staticdj.com\/428aca7e9e964e935e9b7e6e0bcf03e4.jpeg","path":"428aca7e9e964e935e9b7e6e0bcf03e4.jpeg","width":1000,"height":1000,"alt":"","aspect_ratio":1},"wholesale_price":[{"price":89,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"89","retail_price":"0","available":true,"url":"\/products\/water-sensory-mat-hzbd?variant=a09f8e9d-a907-4367-b9d5-48dc11eaaa72","available_quantity":999999999,"options":[{"name":"\ud83d\udc4dGruby i trwa\u0142y materia\u0142","value":"Domy\u015blny tytu\u0142"},{"name":"nie boj\u0119 si\u0119pazur\u00f3wiz\u0119b\u00f3w zwierz\u0105t.","value":"Okr\u0105g\u0142y (60*60cm)"}],"off_ratio":0,"flashsale_info":[],"sales":0};
return `
`
}()}
Płatność gotówką przy odbiorze
Zapłać online i zyskaj 10% rabatu
Prawo do żądania zwrotu pieniędzy w ciągu 14 dni od daty dostawy
⭐ Prawdziwe opinie klientów ⭐
😽Najlepsze zabawki dla kotów dla znudzonych kotów domowych
Nowe doświadczenie kota domowego: Pozwól kotowi domowemu czerpać przyjemność z stąpania po falach wody. Pływające rybki przyciągają uwagę kotów i pobudzają ich instynkty łowieckie. Pozwól kotowi domowemu uwolnić energię do samodzielnej zabawy.
Uwolnij naturalne instynkty kota: z motywem ryb oceanicznych. Zwiększ poziom ekscytacji swojego kota, pozwól mu szczęśliwie symulować łowienie ryb, ćwiczyć i poprawiać szybkość reakcji. Pomaga kotom spalić energię, zmniejszyć stany lękowe i zapobiegać problemom behawioralnym.
Bezpieczeństwo materiału: wykonane z wysokiej jakości lekkiego silikonu, wolne od BAP, gorące lato, koty mogą nie tylko bawić się na macie, ale także spać i odpoczywać na niej, Wypełnione wodą do schładzania kotów, dzięki czemu koty czują się chłodno w upale lato.
Prosty w użyciu: wystarczy otworzyć korek i napełnić powietrzem lub wodą. Zaleca się napełnienie wody, aby zarezerwować 1/3 przestrzeni, aby zobaczyć ryby i fale wodne, a zabawa kota będzie bardziej ekscytująca.
NIEZAWODNY SERWIS POSPRZEDAŻOWY
Naprawdę ciężko pracowaliśmy, aby było idealnie. Projekt, jakość, maksymalna dbałość o nawet najmniejsze szczegóły, aby były absolutnie urocze. Jeśli z jakiegokolwiek powodu nie będziesz zadowolony, bez zadawania pytań, zwrócimy pełną kwotę. Nic do stracenia.
Orzecznictwo
WYSYŁKA
- Ekspresowa wysyłka na cały świat
- Śledzenie e-mailem i SMS-em: aktualizacje statusu zamówienia będziesz otrzymywać e-mailem.
Oto, co mówią nasi klienci.
Najnowsza
Najbardziej lubiany
Najwyższe oceny
Najniższe oceny
Najbardziej lubiany
Najwyższe oceny
Najniższe oceny
×
${function(){
const limit = typeof data === 'number' ? data : 0;
return `
Zdjęcia/wideo (${limit || 0}/5)
` }()}
${(function(){
const closeIcon =
'
';
if (item.type === 'image') {
return `
${closeIcon}
`
}
return `
${closeIcon}
`
})()}
class SpzCustomFileUpload extends SPZ.BaseElement {
constructor(element) {
super(element);
this.uploadCount_ = 0;
this.fileList_ = [];
}
buildCallback() {
this.action = SPZServices.actionServiceForDoc(this.element);
this.registerAction('upload', (data) => {
this.handleFileUpload_(data.event?.detail?.data || []);
});
this.registerAction('delete', (data) => {
this.handleFileDelete_(data?.args?.data);
});
this.registerAction('preview', (data) => {
this.handleFilePreview_(data?.args?.data);
});
this.registerAction('limit', (data) => {
this.handleFileLimit_();
});
this.registerAction('sizeLimit', (data) => {
this.handleFileSizeLimit_();
});
}
isLayoutSupported(layout) {
return layout == SPZCore.Layout.LOGIC;
}
setData_(count, file) {
this.uploadCount_ = count;
this.fileList_ = file;
}
handleFileUpload_(data) {
data.forEach(i => {
if(this.fileList_.some(j => j.url === i.url)) return;
this.fileList_.push(i);
})
this.uploadCount_++;
sessionStorage.setItem('fileList', JSON.stringify(this.fileList_));
this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_});
if(this.fileList_.length >= 5){
document.querySelector('#review_upload').style.display = 'none';
}
if(this.fileList_.length > 0){
document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px';
}
}
handleFileDelete_(index) {
this.fileList_.splice(index, 1);
this.uploadCount_--;
sessionStorage.setItem('fileList', JSON.stringify(this.fileList_));
this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_});
document.querySelector('#review_upload').style.display = 'block';
if(this.fileList_?.length === 0){
document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px';
}
}
handleFilePreview_(index) {
const finalPreviewData = this.fileList_[index];
const filePreviewModal = document.getElementById('filePreviewModal');
const fullScreenVideo = document.getElementById('fullScreenVideo');
const fullScreenImage = document.getElementById('fullScreenImage');
const previewModalClose = document.getElementById('previewModalClose');
const previewLoading = document.getElementById('previewLoading');
filePreviewModal.style.display = 'block';
previewLoading.style.display = 'flex';
if(finalPreviewData?.type === 'video'){
const media = this.mediaParse_(this.fileList_[index]?.url);
fullScreenVideo.addEventListener('canplaythrough', function() {
previewLoading.style.display = 'none';
});
fullScreenImage.src = '';
fullScreenImage.style.display = 'none';
fullScreenVideo.style.display = 'block';
fullScreenVideo.src = media.mp4 || '';
} else {
fullScreenImage.onload = function() {
previewLoading.style.display = 'none';
};
fullScreenVideo.src = '';
fullScreenVideo.style.display = 'none';
fullScreenImage.style.display = 'block';
fullScreenImage.src = finalPreviewData.url;
}
previewModalClose.addEventListener('click', function() {
filePreviewModal.style.display = 'none';
});
}
handleFileLimit_() {
alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5');
this.triggerEvent_("handleFileLimit");
}
handleFileSizeLimit_() {
alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M');
}
clear(){
this.fileList_ = [];
this.uploadCount_ = 0;
sessionStorage.setItem('fileList', JSON.stringify(this.fileList_));
this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_});
document.querySelector('#review_upload').style.display = 'block';
}
mediaParse_(url) {
var result = {};
try {
url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) {
try {
result[key] = decodeURIComponent(value);
} catch (e) {
result[key] = value;
}
});
result.preview_image = url.split('?')[0];
} catch (e) {};
return result;
}
triggerEvent_(name, data) {
const event = SPZUtils.Event.create(this.win, name, data);
this.action.trigger(this.element, name, event);
}
}
SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.