{"version":3,"sources":["listing.js"],"names":["getSortContainer","document","querySelector","getSortInput","getCloneInput","prepareSortVisibility","container","input","clone","closest","cloneNode","cloneLabel","cloneSelect","append","dataset","filterUuid","htmlFor","id","name","addEventListener","updateSortInput","e","value","target","toggleSortVisibility","readyToShipInput","readyToShipBounds","getBoundingClientRect","sortBounds","top","height","classList","add","activeElement","focus","remove","dispatchEvent","Event","bubbles","Soho","filterable","addField","Filters","Fields","Select","listingElement","listing","Listing","hrefs","plugins","removeAttribute","Events","UPDATING","url","detail","request","searchParams","has","activeLimit","limit","innerHTML","set","get","delete","getAttribute","UPDATED","_window$D3R","reload","window","scroll","scrollY","clientHeight","payload","response","json","filters","updateAfterListingUpdated","recordProductImpressions","data","startRow","D3R","InitHotspots","start","list","GTM","listenForProductClicks"],"mappings":"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","file":"../../javascript/listing.js","sourcesContent":["// Get the sort container\nconst getSortContainer = () => {\n    return document.querySelector('.filters__sort-container');\n}\n\n// Get the sort input\nconst getSortInput = () => {\n    return document.querySelector('#sort');\n}\n\n// Get the cloned sort input\nconst getCloneInput = () => {\n    return document.querySelector('#sort-clone');\n}\n\n// Prepare the sort input to be cloned and listen to change events\nconst prepareSortVisibility = () => {\n    const container = getSortContainer();\n    const input = getSortInput();\n    const sort = input.closest('.filterable__option');\n    const clone = sort.cloneNode(true);\n    const cloneLabel = clone.querySelector('label');\n    const cloneSelect = clone.querySelector('select');\n\n    container.append(clone);\n\n    delete clone.dataset.filterUuid;\n    cloneLabel.htmlFor = 'sort-clone';\n    cloneSelect.id = 'sort-clone';\n    cloneSelect.name = 'sort-clone';\n\n    clone.addEventListener('change', updateSortInput)\n    input.addEventListener('change', (e) => {\n        cloneSelect.value = e.target.value\n    })\n}\n\n// Update the visibility of the sort input and the cloned sort input\nconst toggleSortVisibility = () => {\n    const container = getSortContainer();\n    const input = getSortInput();\n    const clone = getCloneInput();\n    const readyToShipInput = document.querySelector('.listing #immediate');\n    const readyToShip = readyToShipInput\n        ? readyToShipInput.closest('.filterable__dimension')\n        : container;\n\n    const readyToShipBounds = readyToShip.getBoundingClientRect();\n    const sortBounds = input.getBoundingClientRect();\n\n    if (readyToShipBounds.top + readyToShipBounds.height >= sortBounds.top) {\n        container.classList.add('filters__sort-container--active');\n        if (input === document.activeElement) {\n            clone.focus();\n        }\n    } else {\n        container.classList.remove('filters__sort-container--active');\n        if (clone === document.activeElement) {\n            input.focus();\n        }\n    }\n}\n\n// Update the value of the sort input\nconst updateSortInput = (e) => {\n    const input = getSortInput();\n\n    if (input) {\n        input.value = e.target.value;\n        input.dispatchEvent(new Event('change', { bubbles: true }));\n    }\n}\n\nif (document.querySelector('.filterable__option--sort')) {\n    Soho.filterable.addField('sort', new Filters.Fields.Select('.filterable__option--sort'));\n\n    prepareSortVisibility();\n\n    document.addEventListener('scroll', toggleSortVisibility);\n}\n\nconst listingElement = document.querySelector('.js-listing');\n\nvar listing = new Listing(listingElement, {\n    hrefs: [\".pagination a\", \".filterable__option--limit a\"],\n    plugins: [\n        Soho.filterable\n    ]\n});\n\nlistingElement.removeAttribute('data-data');\n\nlisting.addEventListener(Listing.Events.UPDATING, function(e) {\n    var url = e.detail.request.url;\n    if (!url.searchParams.has('limit')) {\n        var activeLimit = document.querySelector('.filterable__option-link--active');\n        if (activeLimit) {\n            var limit = activeLimit.innerHTML;\n            if (limit != '20') {\n                url.searchParams.set('limit', limit);\n            }\n        }\n    }\n\n    if (url.searchParams.has('sort') && url.searchParams.get('sort') == 'featured') {\n        url.searchParams.delete('sort');\n    }\n    if (url.searchParams.has('sort') && url.searchParams.get('sort') == 'relevance') {\n        url.searchParams.delete('sort');\n    }\n\n    if (document.querySelector('input[name=q][type=hidden]')) {\n        url.searchParams.append('q', document.querySelector('input[name=q][type=hidden]').getAttribute('value'));\n    }\n});\n\nlisting.addEventListener(Listing.Events.UPDATED, function(e) {\n    if (!e.detail.reload) {\n        window.scroll(0, document.querySelector('#main').getBoundingClientRect().top + window.scrollY - document.querySelector('.header').clientHeight);\n    }\n\n    const payload = e.detail.response.json.payload;\n\n    Soho.filters.updateAfterListingUpdated(payload)\n\n    window.recordProductImpressions(payload.data.startRow);\n\n    if (typeof window.D3R?.InitHotspots === 'function') {\n        window.D3R.InitHotspots()\n    }\n});\n\nwindow.recordProductImpressions = function(start, list) {\n    Soho.GTM.recordProductImpressions(start, list);\n};\n\nSoho.GTM.listenForProductClicks('listing-items');\n"],"sourceRoot":"../../../../resources/javascript"}