frappe.provide("erpnext.e_commerce.wishlist"); var wishlist = erpnext.e_commerce.wishlist; frappe.provide("erpnext.e_commerce.shopping_cart"); var shopping_cart = erpnext.e_commerce.shopping_cart; $.extend(wishlist, { set_wishlist_count: function(animate=false) { // set badge count for wishlist icon var wish_count = frappe.get_cookie("wish_count"); if (frappe.session.user==="Guest") { wish_count = 0; } if (wish_count) { $(".wishlist").toggleClass('hidden', false); } var $wishlist = $('.wishlist-icon'); var $badge = $wishlist.find("#wish-count"); if (parseInt(wish_count) === 0 || wish_count === undefined) { $wishlist.css("display", "none"); } else { $wishlist.css("display", "inline"); } if (wish_count) { $badge.html(wish_count); if (animate) { $wishlist.addClass('cart-animate'); setTimeout(() => { $wishlist.removeClass('cart-animate'); }, 500); } } else { $badge.remove(); } }, bind_move_to_cart_action: function() { // move item to cart from wishlist $('.page_content').on("click", ".btn-add-to-cart", (e) => { const $move_to_cart_btn = $(e.currentTarget); let item_code = $move_to_cart_btn.data("item-code"); shopping_cart.shopping_cart_update({ item_code, qty: 1, cart_dropdown: true }); let success_action = function() { const $card_wrapper = $move_to_cart_btn.closest(".wishlist-card"); $card_wrapper.addClass("wish-removed"); }; let args = { item_code: item_code }; this.add_remove_from_wishlist("remove", args, success_action, null, true); }); }, bind_remove_action: function() { // remove item from wishlist let me = this; $('.page_content').on("click", ".remove-wish", (e) => { const $remove_wish_btn = $(e.currentTarget); let item_code = $remove_wish_btn.data("item-code"); let success_action = function() { const $card_wrapper = $remove_wish_btn.closest(".wishlist-card"); $card_wrapper.addClass("wish-removed"); if (frappe.get_cookie("wish_count") == 0) { $(".page_content").empty(); me.render_empty_state(); } }; let args = { item_code: item_code }; this.add_remove_from_wishlist("remove", args, success_action); }); }, bind_wishlist_action() { // 'wish'('like') or 'unwish' item in product listing $('.page_content').on('click', '.like-action, .like-action-list', (e) => { const $btn = $(e.currentTarget); this.wishlist_action($btn); }); }, wishlist_action(btn) { const $wish_icon = btn.find('.wish-icon'); let me = this; if (frappe.session.user==="Guest") { if (localStorage) { localStorage.setItem("last_visited", window.location.pathname); } this.redirect_guest(); return; } let success_action = function() { erpnext.e_commerce.wishlist.set_wishlist_count(true); }; if ($wish_icon.hasClass('wished')) { // un-wish item btn.removeClass("like-animate"); btn.addClass("like-action-wished"); this.toggle_button_class($wish_icon, 'wished', 'not-wished'); let args = { item_code: btn.data('item-code') }; let failure_action = function() { me.toggle_button_class($wish_icon, 'not-wished', 'wished'); }; this.add_remove_from_wishlist("remove", args, success_action, failure_action); } else { // wish item btn.addClass("like-animate"); btn.addClass("like-action-wished"); this.toggle_button_class($wish_icon, 'not-wished', 'wished'); let args = {item_code: btn.data('item-code')}; let failure_action = function() { me.toggle_button_class($wish_icon, 'wished', 'not-wished'); }; this.add_remove_from_wishlist("add", args, success_action, failure_action); } }, toggle_button_class(button, remove, add) { button.removeClass(remove); button.addClass(add); }, add_remove_from_wishlist(action, args, success_action, failure_action, async=false) { /* AJAX call to add or remove Item from Wishlist action: "add" or "remove" args: args for method (item_code, price, formatted_price), success_action: method to execute on successs, failure_action: method to execute on failure, async: make call asynchronously (true/false). */ if (frappe.session.user==="Guest") { if (localStorage) { localStorage.setItem("last_visited", window.location.pathname); } this.redirect_guest(); } else { let method = "erpnext.e_commerce.doctype.wishlist.wishlist.add_to_wishlist"; if (action === "remove") { method = "erpnext.e_commerce.doctype.wishlist.wishlist.remove_from_wishlist"; } frappe.call({ async: async, type: "POST", method: method, args: args, callback: function (r) { if (r.exc) { if (failure_action && (typeof failure_action === 'function')) { failure_action(); } frappe.msgprint({ message: __("Sorry, something went wrong. Please refresh."), indicator: "red", title: __("Note") }); } else if (success_action && (typeof success_action === 'function')) { success_action(); } } }); } }, redirect_guest() { frappe.call('erpnext.e_commerce.api.get_guest_redirect_on_action').then((res) => { window.location.href = res.message || "/login"; }); }, render_empty_state() { $(".page_content").append(`