(function ($){
"use strict";
let wishlist=new Array,
shopName=wishlist_opt.shopName + '-wishlist',
inWishlist=wishlist_opt.inWishlist,
ls=localStorage.getItem(shopName),
loggedIn=($('body').hasClass('logged-in')) ? true:false,
restUrl=wishlist_opt.restUrl,
userData='';
function unique(array){
return array.filter(function (value, index, self){
return self.indexOf(value)===index;
});
}
function isInArray(value, array){
return array.indexOf(value) > -1;
}
function wishlistCountUpdate(mult){
var wishlist_count=parseInt($('.wishlist-contents').html());
wishlist_count +=mult;
if(wishlist_count < 0){
wishlist_count=0;
}
$('.wishlist-contents').html(wishlist_count);
if(wishlist_count > 0){
$('.wishlist-contents').addClass('count');
}else{
$('.wishlist-contents').removeClass('count');
}}
function highlightWishlist(wishlist, title){
$('.wishlist-toggle').each(function (){
var $this=$(this);
var currentProduct=$this.data('product');
currentProduct=currentProduct.toString();
if(isInArray(currentProduct, wishlist)){
$this.addClass('active').attr('title', title);
$this.prev('.wishlist-title').html(title).attr('title', title);
}});
}
var OecWishlistHandler=elementorModules.frontend.handlers.Base.extend({
getDefaultElements(){
return {
$remove: this.$element.find('.wishlist-remove')
};},
bindEvents(){
this.$element.on('load_wishlist_table', this.loadTable.bind(this));
this.elements.$remove.on('click', this.remove.bind(this));
},
fetchData(){
const widgetEl=this.$element;
if(loggedIn){
$.ajax({
type: 'POST',
url: wishlist_opt.ajaxUrl,
data: {
'action': 'fetch_user_data',
'dataType': 'json'
},
success: function (data){
userData=JSON.parse(data);
if(typeof (userData['wishlist'])!='undefined'&&userData['wishlist']!=null&&userData['wishlist']!=""){
var userWishlist=userData['wishlist'];
userWishlist=userWishlist.split(',');
if(wishlist.length){
wishlist=wishlist.concat(userWishlist);
$.ajax({
type: 'POST',
url: wishlist_opt.ajaxPost,
data: {
action: 'user_wishlist_update',
user_id: userData['user_id'],
wishlist: wishlist.join(','),
}});
}else{
wishlist=userWishlist;
}
wishlist=unique(wishlist);
highlightWishlist(wishlist, inWishlist);
localStorage.removeItem(shopName);
}else{
if(typeof (ls)!='undefined'&&ls!=null){
ls=ls.split(',');
ls=unique(ls);
wishlist=ls;
}
$.ajax({
type: 'POST',
url: wishlist_opt.ajaxPost,
data: {
action: 'user_wishlist_update',
user_id: userData['user_id'],
wishlist: wishlist.join(','),
}}).done(function (response){
highlightWishlist(wishlist, inWishlist);
localStorage.removeItem(shopName);
});
}
$(widgetEl).trigger('load_wishlist_table');
},
error: function (){
console.log('No user data returned');
}});
}else{
if(typeof (ls)!='undefined'&&ls!=null){
if(ls.length){
ls=ls.split(',');
ls=unique(ls);
wishlist=ls;
}}
}},
loadTable(e){
if(wishlist.length){
$('.wishlist-contents').html(wishlist.length);
if(wishlist.length){
$('.wishlist-contents').addClass('count');
}
if($('.wishlist-table').length){
restUrl +='?include=' + wishlist.join(',');
restUrl +='&per_page=' + wishlist.length;
$.ajax({
dataType: 'json',
url: restUrl
})
.done(function (response){
$('.wishlist-table').each(function (){
var $this=$(this);
$this.find('tr:not(.wishlist-table--header)').remove();
$.each(response, function (index, object){
$this.append(`<tr data-product="${object.id}">
<td><a class="wishlist-remove" href="#" title="${wishlist_opt.removeWishlist}"></a>${object.image}</td>
<td class="product-title">${object.title["rendered"]}</td><td>${object.price}</td>
<td class="stock-status">${object.stock}</td>
<td><a class="details" href="${object.link}">${wishlist_opt.buttonText}</a></td>
</tr>`);
});
});
})
.fail(function (response){
alert(wishlist_opt.noWishlist);
})
.always(function (response){
$('.wishlist-table').each(function (){
$(this).removeClass('loading');
});
});
}}else{
if($('.wishlist-table').length){
$('.wishlist-table').each(function (){
$(this).addClass('no-results').append('<span class="no-results">' + wishlist_opt.noWishlist + '</span>').removeClass('loading');
});
}}
},
remove(e){
e.preventDefault();
if(confirm(wishlist_opt.confirm)){
var $this=$(this);
$this.closest('.wishlist-table').addClass('loading');
wishlist=[];
$this.closest('.wishlist-table').find('tr:not(.wishlist-table--header)').each(function (){
if($(this).data('product')!=$this.closest('tr').data('product')){
wishlist.push($(this).attr('data-product'));
}});
if(loggedIn){
if(userData['user_id']){
$.ajax({
type: 'POST',
url: wishlist_opt.ajaxPost,
data: {
action: 'user_wishlist_update',
user_id: userData['user_id'],
wishlist: wishlist.join(','),
}}).done(function (){
$this.closest('tr').remove();
if(wishlist.length==0){
$('.wishlist-table.loading').append('<li class="no-results">' + wishlist_opt.noWishlist + '</li>');
}
$('.wishlist-table.loading').removeClass('loading');
wishlistCountUpdate(-1);
}).fail(function (){
alert(wishlist_opt.error);
});
}}else{
localStorage.setItem(shopName, wishlist.toString());
setTimeout(function (){
$this.closest('tr').remove();
if(wishlist.length==0){
$('.wishlist-table.loading').append('<li class="no-results">' + wishlist_opt.noWishlist + '</li>');
}
$('.wishlist-table.loading').removeClass('loading');
wishlistCountUpdate(-1);
}, 500);
}}
},
onInit: function (){
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
this.fetchData();
},
onDestroy: function (){
elementorModules.frontend.handlers.Base.prototype.onDestroy.apply(this, arguments);
},
});
jQuery(window).on('elementor/frontend/init', ()=> {
const addHandler=($element)=> {
elementorFrontend.elementsHandler.addHandler(OecWishlistHandler, {
$element,
});
};
elementorFrontend.hooks.addAction('frontend/element_ready/oec-wishlist.default', addHandler);
});
}(jQuery));