{"version":3,"sources":["wishlist.js"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","_createForOfIteratorHelper","r","e","t","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","a","u","call","next","return","_arrayLikeToArray","toString","slice","name","from","test","_readOnlyError","_classCallCheck","_defineProperties","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","i","_toPrimitive","toPrimitive","String","Number","app","WishlistPlugin","this","btn","document","querySelector","addAllForm","shareBtn","removeButtons","querySelectorAll","items","quickBasketWrap","bind","buildSkuArray","_this","addEventListener","event","itemAdded","getAttribute","preventDefault","classList","contains","sku","dataset","multiple","method","changeWishlist","data","payload","success","customer_logged_in","window","location","addAll","share","forEach","button","reload","modularItems","map","item","frameSku","_this2","self","$","ajax","type","dispatchEvent","CustomEvent","bubbles","detail","popupHtml","html","basketCount","skusAdded","trackEvent","refreshAfterAjax","fail","console","log","action","_this3","url","concat","split","_step","placeholders","_iterator","placeholder","AdaptivePlaceholder","el","init","err","_this4","hasOwnProperty","Overlay","render","shareElement","innerHTML","modifiers","callback","text","textValue","innerText","navigator","clipboard","writeText","countElements","_step2","_iterator2","wishlist_count","lsManager","LocalStorageManager","stored","get","keys","set","arguments","undefined","dataLayer","d3rEvent","category","label","push","Soho"],"mappings":"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","file":"../../javascript/wishlist.js","sourcesContent":["// This is for the wishlist page rather than wishlist functionality throughout the site.\n;(app => {\n    /**\n     * Base class for plugins that handle adding products to the wishlist\n     */\n    class WishlistPlugin {\n\n        constructor() {\n            this.btn = document.querySelector('.js-wishlist-action');\n            this.addAllForm = document.querySelector('.js-wishlist-add-all');\n            this.shareBtn = document.querySelector('.js-share-wishlist');\n            this.removeButtons = document.querySelectorAll('.js-wishlist-remove');\n            this.items = document.querySelectorAll('.wishlist-item')\n            this.quickBasketWrap = document.querySelector('.js-quick-basket__wrap');\n            this.bind();\n            this.buildSkuArray();\n        }\n\n        bind() {\n            if (this.btn) {\n                this.btn.addEventListener(\"click\", (event) => {\n                    this.itemAdded = this.btn.getAttribute('data-in-wishlist');\n                    event.preventDefault();\n\n                    if (this.btn.classList.contains('product__wishlist--disabled')) {\n                        return false;\n                    }\n\n                    const sku = this.btn.dataset.sku;\n                    const multiple = this.btn.dataset.multiple || false;\n                    const method = this.btn.dataset.method || 'get';\n\n                    if (this.itemAdded) {\n                        this.changeWishlist(sku, method, 'remove', multiple).done((data) => {\n                            if (data.payload.success) {\n                                // carry on\n                            } else if (!data.payload.customer_logged_in) {\n                                window.location = '/wishlist';\n                            }\n                        });\n                    } else {\n                        this.changeWishlist(sku, method, 'add', multiple).done((data) => {\n                            if (data.payload.success) {\n                                // carry on\n                            } else if (!data.payload.customer_logged_in) {\n                                window.location = '/wishlist';\n                            }\n                        });\n                    }\n                });\n            }\n\n            if (this.addAllForm) {\n                this.addAllForm.addEventListener(\"submit\", (event) => {\n                    event.preventDefault();\n                    this.addAll();\n                });\n            }\n\n            if (this.shareBtn) {\n                this.shareBtn.addEventListener(\"click\", (event) => {\n                    event.preventDefault();\n                    this.share();\n                });\n            }\n\n            if (this.removeButtons.length) {\n                this.removeButtons.forEach(button => {\n                    button.addEventListener(\"click\", (e) => {\n                        e.preventDefault();\n\n                        const sku = button.dataset.sku;\n\n                        this.changeWishlist(sku, 'get', 'remove', false).done((data) => {\n                            if (data.payload.success) {\n                                // carry on\n                            } else if (!data.payload.customer_logged_in) {\n                                window.location = '/wishlist';\n                            }\n\n                            location.reload();\n                        });\n                    })\n                })\n            }\n        }\n\n        buildSkuArray() {\n            this.modularItems = document.querySelectorAll('.js-piece-input');\n\n            if (!this.modularItems.length) {\n                return;\n            }\n\n            const skus = Array.from(this.modularItems).map((item) =>\n                item.dataset.frameSku\n            );\n\n            return skus;\n        }\n\n        addAll() {\n            var self = this;\n\n            $.ajax('/wishlist/add-all', {\n                type: 'get'\n            }).done(data => {\n                // open flyout basket\n                self.addAllForm.dispatchEvent(new CustomEvent('ecom.item.added', {\n                    bubbles: true,\n                }));\n\n                self.quickBasketWrap.dispatchEvent(new CustomEvent('wishlist.add-all', {\n                    detail: {\n                        popupHtml: data.payload.html,\n                        basketCount: data.payload.basketCount,\n                    }\n                }));\n\n                data.payload.skusAdded.forEach(sku => {\n                    this.trackEvent('Add to Basket', sku);\n                })\n\n                this.refreshAfterAjax(data);\n            }).fail(data => {\n                console.log(data);\n            });\n        }\n\n        changeWishlist(sku, method, action, multiple) {\n            let url = `/wishlist/${action}`;\n            let data = {};\n            if (!multiple) {\n                url += `/${sku}`;\n            } else {\n                data = {'sku': sku.split(\",\")};\n            }\n\n            return $.ajax(url, {\n                type: method,\n                data: data\n            }).done(data => {\n                this.refreshAfterAjax(data);\n            }).fail(data => {\n                console.log(data);\n            });\n        }\n\n        placeholders() {\n            const placeholders = document.querySelectorAll('.js-adaptive-placeholder .field');\n\n            for (const placeholder of placeholders) {\n                const adaptivePlaceholder = new AdaptivePlaceholder({\n                    el: placeholder,\n                });\n\n                adaptivePlaceholder.init();\n            }\n        }\n\n        share() {\n            $.ajax('/wishlist/share', {\n                type: 'get'\n            }).done(data => {\n                if (data.payload.hasOwnProperty('shared')) {\n                    const shareElement = document.querySelectorAll('.js-wishlist-popup');\n                    Overlay.render(function (shareElement) {\n                        shareElement.innerHTML = data.payload.html;\n                    }, {\n                        \"modifiers\": [\"wishlist\", \"extra-wide\"],\n                        \"callback\": () => {\n                            this.placeholders();\n                        }\n                    });\n\n                    const text = document.querySelector('[data-copy-text]');\n                    const btn = document.querySelector('.js-copy-text');\n\n                    if (!text || !btn) return;\n\n                    const textValue = text.innerText;\n\n                    btn.addEventListener('click', function(e) {\n                        e.preventDefault();\n                        navigator.clipboard.writeText(textValue);\n                        this.querySelector('span').innerText = 'copied';\n                    })\n\n                    this.trackEvent('Shared')\n                }\n\n                this.refreshAfterAjax(data);\n            }).fail(data => {\n                console.log(data);\n            });\n        }\n\n        refreshAfterAjax(data) {\n            const countElements = document.querySelectorAll('.js-wishlist-count .header-action__count');\n\n            if (!data.hasOwnProperty('payload')) {\n                return;\n            }\n\n            if (data.payload.hasOwnProperty('wishlist_count')) {\n                for (const el of countElements) {\n                    el.innerText = data.payload.wishlist_count;\n                }\n            }\n\n            // Sync localStorage so the header count is correct after page reload.\n            // The server includes `keys` in add and remove responses.\n            if (data.payload.hasOwnProperty(\"keys\")) {\n                const lsManager = new LocalStorageManager();\n                const stored = lsManager.get(\"d3rwishlist\", {});\n                stored.keys = data.payload.keys;\n                lsManager.set(\"d3rwishlist\", stored);\n            }\n        }\n\n        trackEvent(event, sku = '') {\n            if (window.dataLayer) {\n                const d3rEvent = {\n                    'category': 'Wishlist',\n                    'action': event,\n                }\n\n                if (sku != '') {\n                    d3rEvent.label = sku\n                }\n\n                dataLayer.push({\n                    'event': 'd3rEvent',\n                    d3rEvent,\n                });\n            }\n        }\n    }\n\n    app.WishlistPlugin = WishlistPlugin;\n\n})(window.Soho = window.Soho || {});\n\nnew Soho.WishlistPlugin;\n"],"sourceRoot":"../../../../resources/javascript"}