Skip to content

Instantly share code, notes, and snippets.

@zivce
Last active April 19, 2020 10:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zivce/ba051855f6ccfddc56aa180f08696261 to your computer and use it in GitHub Desktop.
Save zivce/ba051855f6ccfddc56aa180f08696261 to your computer and use it in GitHub Desktop.
Extracted logic to strategies. Possible re-use. Easier to follow paths.
static $wishlistList = $(".wishlist-list__body");
static $myFavouritesRollover = $(".mini-favourites");
static $myFavouritesSendList = $(".wishlist-send-list");
static emptyWishlistHTML = $("#emptyWishlistPopupTemplate").html();
static $wishlistCount = $("[data-wishlist-item-count]");
static $myFavouritesRolloverContainer = $(
".my-favourites-rollover__content",
$myFavouritesRollover
);
static $myFavouritesRolloverControls = $(
".my-favourites-rollover__controls",
$myFavouritesRollover
);
static removeProductFromWishListHandlerRefactored(e) {
const productRemovalStrategies = [];
e.stopPropagation();
const target = $(e.currentTarget);
const productCode = target.data("product-code");
const wishlistData = await requestPost("/favourites/remove", { productCode }, { format: "text" });
const count = this.getCount(wishlistData);
let strategyObject = {};
strategyObject[count === 0] = this.emptyWishListStrategy;
productRemovalStrategies.push(strategyObject);
strategyObject = {};
strategyObject[count <= 12] = this.lessThanTwelveItemsStrategy;
productRemovalStrategies.push(strategyObject);
strategyObject = {};
strategyObject[$wishlistList.length] = this.wishListExistsStrategy;
productRemovalStrategies.push(strategyObject);
strategyObject = {};
strategyObject[!$(wishlistData).find(".wishlist-list__body").length] = () => this.noWishlistBodyStrategy(wishlistData);
productRemovalStrategies.push(strategyObject);
this.execStrategies(productRemovalStrategies);
this.defaultWishListBodyStrategy(count);
return false;
}
static execStrategies(strategies) {
strategies.forEach((item, index) => {
if(Object.keys(item)[0] === 'true') {
item[Object.keys(item)[0]]();
}
})
}
static getCount(wishlistData) {
return parseInt(
$(wishlistData)
.find("[data-wishlist-item-count]")
.attr("data-wishlist-item-count"),
10
);
}
static defaultWishListBodyStrategy(count) {
$wishlistCount.html(count);
$wishlistCount.attr("data-wishlist-item-count", count);
this.refreshWishListRollover();
}
static noWishlistBodyStrategy(wishlistData) {
const $listerContainer = $(".wishlist");
$listerContainer.html($(wishlistData).find(".wishlist").html());
}
static emptyWishListStrategy() {
$myFavouritesSendList.remove();
if ($myFavouritesRolloverContainer.length) {
$myFavouritesRolloverContainer.remove();
$myFavouritesRolloverControls.remove();
$myFavouritesRollover.prepend(emptyWishlistHTML);
}
}
static wishListExistsStrategy(wishlistData) {
startRefreshEffects($wishlistList);
if ($(".wishlist--limit-achieved").length)
$(".wishlist--limit-achieved").remove();
$wishlistList.html($(wishlistData).find(".wishlist-list__body").html());
window.BB.product.bindToAddToCartForm();
if ($(".js-load-more-favourites").length) {
$(".js-load-more-favourites").find("span").html(`(${count})`);
} else {
$(".column-block").show();
}
$(".remove-favourite").removeAttr("disabled").removeClass("disabled");
initWishlistATB();
setTimeout(() => endRefreshEffects($wishlistList), 500);
}
static lessThanTwelveItemsStrategy() {
$(".js-load-more-favourites").hide();
$(".column-block").show();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment