{"version":3,"file":"rctBB-3b9f6c969cafd121a10c.js","mappings":"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","sources":["webpack://@whistleout/webui/./Areas/Shared/React/js/utils/Hooks.ts","webpack://@whistleout/webui/./Areas/Shared/React/js/components/ResponsiveLayout.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/utils/BroadbandQueryString.js","webpack://@whistleout/webui/./Areas/Broadband/React/js/actions/BroadbandHomeActions.js","webpack://@whistleout/webui/./Areas/Broadband/React/js/adaptors/BroadbandResultsAdaptor.js","webpack://@whistleout/webui/./Areas/Shared/React/js/components/Spinner.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/home/SearchButton.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/home/SpeedDataSelect.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/home/FiltersLg.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/home/FiltersSm.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/home/FiltersXs.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/home/Filters.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/home/Home.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/location/HeaderMapWithStatistics.jsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/Modal.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/StatusLayout.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/LinkHandler.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/TransactLinkHandler.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/product/availabilityCheck/IncompleteAddressWarning.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/product/availabilityCheck/AddressSearchPanel.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/product/availabilityCheck/ErrorPanel.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/product/availabilityCheck/PopupBlockerMessage.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/product/availabilityCheck/SearchPlanUnavailablePanel.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/product/availabilityCheck/AvailabilityCheckPanel.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/product/ProductPage.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/hooks/location.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/product/SmartMoveVerifyPage.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/actions/BroadbandAddressSearchActions.js","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/shared/BroadbandAddressSearch.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/actions/BroadbandActions.ts","webpack://@whistleout/webui/./Areas/Shared/React/js/components/sliders/SliderWithLabel.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/main/DataFilter.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/main/ErrorPanel.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/main/ShowFiltersButton.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/main/SpeedFilter.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/optionButtons/OptionButton.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/optionButtons/OptionTextButton.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/optionButtons/OptionGroup.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/optionButtons/OptionImageButton.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/optionButtons/SuppliersOptionGroup.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/main/SuppliersFilter.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/SearchFilterContext.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/BundleSelect.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/AdvancedTab.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/connection/ConnectionType.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/connection/ConnectionTab.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/ModalDataSlider.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/DataTab.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/FaqTab.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/ModalSpeedSlider.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/SpeedTab.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/ModalSpendSlider.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/ModalUpfrontSlider.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/SpendTab.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/SuppliersTab.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/TabContent.jsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/TabMenuItem.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/modal/FilterModal.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/filters/Filters.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/components/search/Search.tsx","webpack://@whistleout/webui/./Areas/Broadband/React/js/broadband.js","webpack://@whistleout/webui/./Areas/Shared/React/js/components/AppComponent.jsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/Select.jsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/maps/AddressMap.jsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/maps/HeaderMap.jsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/sliders/RangeSlider.jsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/suppliers/SupplierListItem.jsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/suppliers/SuppliersList.jsx","webpack://@whistleout/webui/./Areas/Shared/React/js/utils/CommonQueryString.js","webpack://@whistleout/webui/./Areas/Shared/React/js/components/addressSearch/AddressChangeTracker.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/sliders/Slider.tsx","webpack://@whistleout/webui/./Areas/Shared/React/js/components/sliders/SliderHandle.tsx","webpack://@whistleout/webui/./Areas/Shared/js/vendor/react.ts"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { useMediaQuery } from 'react-responsive';\n\nexport function usePrevious(value: T) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n\nexport enum ScreenSize {\n Desktop = 'desktop',\n Mobile = 'mobile',\n Tablet = 'tablet'\n}\nexport interface ScreenSizeInfo {\n isMobile: boolean;\n isTablet: boolean;\n type: ScreenSize;\n}\n\nexport function useScreenSize(): ScreenSizeInfo {\n const isMobile = useMediaQuery({ maxWidth: 767 });\n const isTablet = useMediaQuery({ minWidth: 768, maxWidth: 991 });\n\n return {\n isMobile,\n isTablet,\n type: isTablet ? ScreenSize.Tablet : isMobile ? ScreenSize.Mobile : ScreenSize.Desktop\n };\n}\n\nexport function useIsVisible(ref: React.RefObject) {\n const [isIntersecting, setIntersecting] = useState(false);\n\n useEffect(() => {\n const observer = new IntersectionObserver(([entry]) => setIntersecting(entry.isIntersecting));\n observer.observe(ref.current);\n // Unmount\n return () => {\n observer.disconnect();\n };\n }, [ref]);\n\n return isIntersecting;\n}\n\n// Source: https://medium.com/the-non-traditional-developer/how-to-use-the-forwarded-ref-in-react-1fb108f4e6afs\nexport const useForwardedRef = (ref: React.MutableRefObject | React.RefCallback) => {\n const innerRef = useRef(null);\n useEffect(() => {\n if (!ref) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(innerRef.current);\n } else {\n ref.current = innerRef.current;\n }\n });\n\n return innerRef;\n};\n","import React, { useEffect } from 'react';\n\nimport { ScreenSize, useScreenSize } from '../utils/Hooks';\n\ninterface Props {\n children: {\n desktop: string | JSX.Element;\n mobile: string | JSX.Element;\n tablet: string | JSX.Element;\n };\n onScreenSizeChange?: (screenSize: ScreenSize) => void;\n}\n\nconst ResponsiveLayout = (props: Props) => {\n const screenSize = useScreenSize();\n\n useEffect(() => {\n if (props.onScreenSizeChange) {\n props.onScreenSizeChange(screenSize.type);\n }\n }, [props, screenSize.type]);\n\n return (\n <>\n {screenSize.isMobile\n ? props.children.mobile\n : screenSize.isTablet\n ? props.children.tablet\n : props.children.desktop}\n \n );\n};\n\nexport default ResponsiveLayout;\n","import { generateCommonQueryString } from '../../../../Shared/React/js/utils/CommonQueryString';\n\n// TODO: Try reducing cyclomatic complexity and enable the eslint rule\n// eslint-disable-next-line complexity\nexport function generateQueryString(\n /**@type {{common: import('../../../../Shared/js/@types/SearchCriteriaCommon').SearchCriteriaCommon;}} */ data,\n allAvailableConnectionsSelected,\n /** @type {boolean} */ isEmbed\n) {\n const appendQueryParam = WhistleOut.appendQueryParam;\n let queryString = '';\n\n if (data.location) {\n queryString = appendQueryParam(queryString, 'location=' + data.location);\n }\n\n if (data.data) {\n queryString = appendQueryParam(queryString, 'data=' + data.data);\n }\n\n if (data.speed) {\n queryString = appendQueryParam(queryString, 'speed=' + data.speed);\n }\n\n if (data.maxSpeed) {\n queryString = appendQueryParam(queryString, 'maxspeed=' + data.maxSpeed);\n }\n\n if (data.maxUploadSpeed) {\n queryString = appendQueryParam(queryString, 'maxuploadspeed=' + data.maxUploadSpeed);\n }\n\n if (data.customer && data.customer.length > 0) {\n queryString = appendQueryParam(queryString, 'customer=' + data.customer);\n }\n\n if (parseInt(data.maxUpfront) > -1) {\n queryString = appendQueryParam(queryString, 'maxupfront=' + data.maxUpfront);\n }\n\n if (data.planType) {\n queryString = appendQueryParam(queryString, 'type=' + data.planType);\n }\n\n if (data.modemShortUrl && data.modemShortUrl.length > 0) {\n queryString = appendQueryParam(queryString, 'modem=' + data.modemShortUrl);\n }\n\n if (data.simOnly === true) {\n queryString = appendQueryParam(queryString, 'simonly=true');\n }\n\n if (\n !allAvailableConnectionsSelected &&\n data.connectionTypes &&\n data.connectionTypes.values &&\n data.connectionTypes.values.length > 0\n ) {\n queryString = appendQueryParam(\n queryString,\n 'connection=' + data.connectionTypes.values.slice().sort().join(',')\n );\n }\n\n if (data.excludeBundles) {\n queryString = appendQueryParam(queryString, 'excludebundles=true');\n }\n\n if (data.reseller) {\n queryString = appendQueryParam(queryString, 'reseller=' + data.reseller);\n }\n\n if (data.hideEmptyTabs === true) {\n queryString = appendQueryParam(queryString, 'hideemptytabs=true');\n }\n\n if (data.hideSingleResultTab === true) {\n queryString = appendQueryParam(queryString, 'hidesingleresulttab=true');\n }\n\n if (data.peakDataOnly === true) {\n queryString = appendQueryParam(queryString, 'peakdata=true');\n }\n\n if (data.showFewerResults === false) {\n queryString = appendQueryParam(queryString, 'showlessresults=false');\n }\n\n if (data.uploadNotCounted === true) {\n queryString = appendQueryParam(queryString, 'uploadnotcounted=true');\n }\n\n if (data.staticIp === true) {\n queryString = appendQueryParam(queryString, 'staticip=true');\n }\n\n if (data.prepaidExpiry && data.prepaidExpiry !== 0 && data.prepaidExpiry !== '0') {\n queryString = appendQueryParam(queryString, 'prepaidexpiry=' + data.prepaidExpiry);\n }\n\n if (data.network && data.network.length > 0) {\n queryString = appendQueryParam(queryString, 'network=' + data.network);\n }\n\n if (data.includeFiveG === true) {\n queryString = appendQueryParam(queryString, '5g=true');\n }\n\n // TODO: Fix the violation and enable the rule\n // eslint-disable-next-line eqeqeq\n if (data.state != undefined) {\n queryString = appendQueryParam(queryString, 'state=' + data.state);\n }\n\n if (data.bundles) {\n if (data.bundles.homePhone !== undefined && data.bundles.homePhone !== null) {\n queryString = appendQueryParam(queryString, 'homephone=' + data.bundles.homePhone);\n }\n\n if (data.bundles.tv !== undefined && data.bundles.tv !== null) {\n queryString = appendQueryParam(queryString, 'tv=' + data.bundles.tv);\n }\n\n if (data.bundles.lineRental !== undefined && data.bundles.lineRental !== null) {\n queryString = appendQueryParam(queryString, 'linerental=' + data.bundles.lineRental);\n }\n\n if (data.bundles.homePhone && data.bundles.homePhoneCalls && data.bundles.homePhoneCalls.length > 0) {\n queryString = appendQueryParam(queryString, 'homephonecalls=' + data.bundles.homePhoneCalls.join(','));\n }\n\n if (data.bundles.tv && data.bundles.tvChannels && data.bundles.tvChannels.length > 0) {\n queryString = appendQueryParam(queryString, 'channels=' + data.bundles.tvChannels.join(','));\n }\n\n if (data.bundles.mobilePhone !== undefined && data.bundles.mobilePhone !== null) {\n queryString = appendQueryParam(queryString, 'mobilephone=' + data.bundles.mobilePhone);\n }\n }\n\n if (data.common) {\n const commonQueryString = generateCommonQueryString(data.common, isEmbed);\n if (commonQueryString.length > 0) {\n queryString = appendQueryParam(queryString, commonQueryString);\n }\n }\n\n return queryString;\n}\n","import { produce } from 'immer';\n\nimport { generateQueryString } from '../utils/BroadbandQueryString';\n\nexport const search = (searchUrl, criteria, coveragePromise) => {\n if (!coveragePromise) {\n goToSearchPage(searchUrl, criteria);\n return;\n }\n\n coveragePromise.then(result => {\n const newCriteria = produce(criteria, draft => {\n if (result) {\n return criteria;\n }\n\n draft.criteria.connectionTypes.values = result.connectionTypes.map(t => t.shortUrl);\n\n if (!result.useDefaultSuppliers) {\n draft.criteria.common.suppliers = {};\n }\n });\n goToSearchPage(searchUrl, newCriteria);\n });\n};\n\nexport const goToSearchPage = (searchUrl, criteria) => {\n const url = searchUrl;\n const queryString = generateQueryString(criteria);\n const fullUrl = queryString.length ? `${url}?${queryString}` : url;\n location.href = fullUrl;\n};\n\nexport default class BroadbandHomeActions {\n search;\n goToSearchPage;\n}\n","import '../../../../Shared/js/SpeedTest';\n\nimport toNumber from 'lodash/toNumber';\n\nimport { waitFor } from '../../../../Shared/js/utils/timer';\nimport { generateQueryString } from '../utils/BroadbandQueryString';\n\nexport default class BroadbandResultsAdaptor {\n unbindAll() {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n searchResultsPage.off('click');\n this.bindPreviewActions();\n }\n\n async bindCoverageMap() {\n const searchResultsPage = wo$('#results-container');\n if (!searchResultsPage.length) return;\n\n const mapContainer = searchResultsPage.find('[data-coverage-maps]');\n if (!mapContainer.length) {\n return;\n }\n\n await waitFor(() => !!WhistleOut.CoverageMap);\n if (WhistleOut.CoverageMap) {\n WhistleOut.CoverageMap.init(searchResultsPage);\n }\n\n var instanceId = mapContainer.data('instance-id');\n\n const nbnMapElement = searchResultsPage.find('#nbn-map-' + instanceId);\n const adslMapElement = searchResultsPage.find('#adsl-map-' + instanceId);\n const mobileMapElement = searchResultsPage.find('#mobile-map-' + instanceId);\n\n const coverageMapsButton = wo$('#coverage-maps-button');\n if (coverageMapsButton.length) {\n if (nbnMapElement.length || adslMapElement.length || mobileMapElement.length) {\n coverageMapsButton.removeClass('hidden');\n } else {\n coverageMapsButton.addClass('hidden');\n }\n\n coverageMapsButton.find('[data-goto-coverage-map]').click(function () {\n WhistleOut.scrollTo('[data-coverage-maps]');\n });\n }\n }\n\n bindFastProviders() {\n const fastProviders = wo$('#fast-providers');\n if (!fastProviders) return;\n var close = fastProviders.find('#fast-providers-close');\n close.off('click').on('click', function () {\n var expires = new Date();\n expires.setTime(expires.getTime() + 60 * 60 * 1000);\n Cookies.set('HideFastProviders', '1', { path: '/', expires: expires });\n fastProviders.slideUp();\n });\n }\n\n hideCoverageMapButton() {\n const coverageMapsButton = wo$('#coverage-maps-button');\n if (coverageMapsButton.length) {\n coverageMapsButton.addClass('hidden');\n }\n }\n\n bindContractDropdown(changeContractTypeHandler, showModalHandler) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n\n searchResultsPage\n .off('click', '[data-show-only-contract]')\n .on('click', '[data-show-only-contract]', function () {\n const contract = wo$(this).data('show-only-contract');\n changeContractTypeHandler(contract);\n });\n\n searchResultsPage //\n .off('click', '[data-hide-all-contract]')\n .on('click', '[data-hide-all-contract]', function () {\n const contract = wo$(this).data('hide-all-contract');\n changeContractTypeHandler(contract, true);\n });\n\n searchResultsPage //\n .off('click', '[data-copy-transact-url]')\n .on('click', '[data-copy-transact-url]', function () {\n WhistleOut.copyToClipboard(wo$(this).data('copy-transact-url'));\n });\n\n wo$('body')\n .off('click', '[data-show-filter-modal]')\n .on('click', '[data-show-filter-modal]', function () {\n const tabName = wo$(this).data('show-filter-modal');\n showModalHandler(tabName);\n });\n\n if (wo$('body').find('#filters-original').length === 0) {\n wo$('[data-show-filter-modal]').hide();\n if (wo$('[data-show-filter-modal]').parent().prev().hasClass('divider')) {\n wo$('[data-show-filter-modal]').parent().prev().hide();\n }\n } else {\n wo$('[data-show-filter-modal]').show();\n if (wo$('[data-show-filter-modal]').parent().prev().hasClass('divider')) {\n wo$('[data-show-filter-modal]').parent().prev().show();\n }\n }\n }\n\n bindHideFeatureResults(hideFeaturedResultsHandler) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n\n searchResultsPage\n .off('click', '[data-results-action=HideAllFeaturedResults]')\n .on('click', '[data-results-action=HideAllFeaturedResults]', function () {\n hideFeaturedResultsHandler();\n });\n }\n\n bindDisableMaximumResultLimits(disableMaximumResultLimitsHandler) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n\n searchResultsPage\n .off('click', '[data-results-action=DisableMaximumResultLimits]')\n .on('click', '[data-results-action=DisableMaximumResultLimits]', function () {\n disableMaximumResultLimitsHandler();\n });\n }\n\n bindPreviewActions() {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n\n searchResultsPage\n .off('click', 'a[data-results-action = \"HideAllPreviewItems\"]')\n .on('click', 'a[data-results-action = \"HideAllPreviewItems\"]', function () {\n searchResultsPage.find('.results-list div[data-result].bg-pink').hide();\n });\n\n searchResultsPage\n .off('click', 'a[data-results-action = \"ShowPreviewItemsOnly\"]')\n .on('click', 'a[data-results-action = \"ShowPreviewItemsOnly\"]', function () {\n searchResultsPage.find('.results-list div[data-result].bg-pink').show();\n searchResultsPage.find('.results-list div[data-result]:not(.bg-pink)').hide();\n });\n\n searchResultsPage\n .off('click', 'a[data-results-action = \"RemovePreviewHighlighting\"]')\n .on('click', 'a[data-results-action = \"RemovePreviewHighlighting\"]', function () {\n searchResultsPage.find('.results-list div[data-result].bg-pink').removeClass('bg-pink');\n });\n }\n\n bindSort(changeSortHandler) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n\n searchResultsPage //\n .off('click', '[data-sort-expression]')\n .on('click', '[data-sort-expression]', function () {\n const sortExpression = wo$(this).data('sort-expression');\n let sortAscending = true;\n const isAscending = wo$(this).data('sort-ascending');\n if (isAscending === false || isAscending === 'False') sortAscending = false;\n changeSortHandler(sortExpression, sortAscending);\n });\n }\n\n bindCoverageStrip(resetConnectionsHandler) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n\n searchResultsPage\n .off('click', '[data-nbn-strip] [data-nbn-reset]')\n .on('click', '[data-nbn-strip] [data-nbn-reset]', function (args) {\n args.preventDefault();\n resetConnectionsHandler();\n });\n }\n\n bindCoverageErrorStrip(retrySearchHandler) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n\n searchResultsPage\n .off('click', '[data-nbn-strip] [data-nbn-retry]')\n .on('click', '[data-nbn-strip] [data-nbn-retry]', function (args) {\n args.preventDefault();\n retrySearchHandler();\n });\n }\n\n bindModemCarouselLandingPage(changeModem) {\n const landingPage = wo$('.layout-landing');\n if (!landingPage.length) return;\n\n landingPage\n .find('[data-modem]')\n .off('click')\n .on('click', function (args) {\n args.preventDefault();\n const modemShortUrl = wo$(this).data('modem');\n changeModem(modemShortUrl);\n WhistleOut.scrollTo('#results-container');\n });\n }\n\n bindLandingPageCriteria(attribute, callback) {\n const landingPage = wo$('.layout-landing');\n if (!landingPage.length) {\n return;\n }\n\n landingPage\n .find('[data-' + attribute + ']')\n .off('click')\n .on('click', function (e) {\n e.preventDefault();\n const value = wo$(this).data(attribute);\n callback(value);\n WhistleOut.scrollTo('#results-container');\n });\n }\n\n bindCriteriaFilters(criteria, callback) {\n var trueOrNull = WhistleOut.trueOrNull;\n var falseOrNull = WhistleOut.falseOrNull;\n\n const setBundles = (criteria, key, val) => {\n if (!criteria.bundles) {\n criteria.bundles = {};\n }\n\n criteria.bundles[key] = val;\n };\n\n // See: ../utils/BroadbandQueryString.js\n const mappings = {\n channels: (e, val) => {\n setBundles(e, 'tvChannels', (val || '').split(','));\n },\n connection: (e, val) => {\n e.connectionTypes.values = (val || '').split(',');\n },\n data: (e, val) => {\n e.data = toNumber(val);\n },\n homephone: (e, val) => {\n setBundles(e, 'homePhone', val);\n },\n homephonecalls: (e, val) => {\n setBundles(e, 'homePhoneCalls', (val || '').split(','));\n },\n linerental: (e, val) => {\n setBundles(e, 'lineRental', val);\n },\n mobilephone: (e, val) => {\n setBundles(e, 'mobilePhone', val);\n },\n modem: (e, val) => {\n e.modemShortUrl = val;\n },\n peakdata: (e, val) => {\n e.peakDataOnly = trueOrNull(val);\n },\n showlessresults: (e, val) => {\n e.showFewerResults = falseOrNull(val);\n },\n simonly: (e, val) => {\n e.simOnly = trueOrNull(val);\n },\n speed: (e, val) => {\n e.speed = toNumber(val);\n },\n tv: (e, val) => {\n setBundles(e, 'tv', val);\n },\n type: (e, val) => {\n e.planType = val;\n }\n };\n\n WhistleOut.bindCriteriaFilters(\n wo$('body'),\n function (el, c) {\n callback(c);\n WhistleOut.scrollTo('#results-container');\n var modal = el.closest('.modal.in');\n if (modal) {\n modal.removeClass('fade');\n modal.modal('hide');\n }\n },\n criteria,\n mappings\n );\n }\n\n getCoveragePromise(criteria, coverageUrl) {\n const promise = new Promise(resolve =>\n window.setTimeout(() => {\n const queryString = generateQueryString(criteria);\n wo$.ajax({\n url: `${coverageUrl}?${queryString}`,\n type: 'GET',\n success: result => {\n if (result) {\n console.log('coverageResult', result);\n WhistleOut.setCoverageCookie(result.coverage);\n if (result.allAvailableConnectionsSelected)\n resolve({\n connectionTypes: [],\n hasFixed: result.hasFixed,\n useDefaultSuppliers: result.useDefaultSuppliers\n });\n else\n resolve({\n connectionTypes: result.defaultConnectionTypes,\n hasFixed: result.hasFixed,\n useDefaultSuppliers: result.useDefaultSuppliers\n });\n } else {\n resolve({\n connectionTypes: [],\n hasFixed: false\n // useDefaultSuppliers: result.useDefaultSuppliers\n });\n }\n }\n });\n })\n );\n return promise;\n }\n\n bindWidenResults(widenResultsHandler) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n const options = {};\n\n // TODO: Try reducing cyclomatic complexity and enable the eslint rule\n // eslint-disable-next-line complexity\n searchResultsPage\n .find('[data-widen-result]')\n .off('click')\n // eslint-disable-next-line complexity\n .click(function (e) {\n e.preventDefault();\n const id = wo$(this).data('widen-result');\n const removeAll = id === 'remove-all';\n if (id === 'suppliers' || removeAll) {\n options.includeAllSuppliers = true;\n }\n if (id === 'data' || removeAll) {\n options.reduceData = true;\n }\n if (id === 'speed' || removeAll) {\n options.reduceSpeed = true;\n }\n if (id === 'deals' || removeAll) {\n options.noDealsOnly = true;\n }\n if (id === 'peakData' || removeAll) {\n options.noPeakData = true;\n }\n if (id === 'uploadCounted' || removeAll) {\n options.noUploadCounted = true;\n }\n if (id === 'staticIp' || removeAll) {\n options.noStaticIp = true;\n }\n if (id === 'connectionTypes' || removeAll) {\n options.includeMoreConnectionTypes = true;\n }\n if (id === 'bundles' || removeAll) {\n options.noBundling = true;\n }\n if (id === 'modem' || removeAll) {\n options.removeSelectedModem = true;\n }\n if (id === 'location' || removeAll) {\n options.includeAllLocations = true;\n }\n if (id === 'contractLengths' || removeAll) {\n options.includeAllContractLengths = true;\n }\n if (id === 'prepaidExpiry' || removeAll) {\n options.includeAllPrepaidExpiry = true;\n }\n if (id === 'priceRange' || removeAll) {\n options.increasePriceRange = true;\n }\n if (id === 'sort' || removeAll) {\n options.sortBy = true;\n }\n\n widenResultsHandler(options);\n WhistleOut.scrollTo(0);\n\n if (removeAll) {\n WhistleOut.trackEvent('BroadbandSearchResults', 'FilterChanged', 'Remove All');\n }\n });\n }\n\n bindLoadMore(loadMoreResultsHandler) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n\n searchResultsPage //\n .off('click', '[data-load-tab]')\n .on('click', '[data-load-tab]', function () {\n const tab = wo$(this).data('load-tab');\n const current = wo$(this).data('current');\n wo$(this).find('span').show();\n loadMoreResultsHandler(tab, current);\n });\n }\n\n appendLoadMoreResults(tab, results) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n const pageSize = searchResultsPage.data('page-size');\n const $results = searchResultsPage.find('div#' + tab + ' div.results-list');\n const button = searchResultsPage.find('button[data-load-tab=' + tab + ']');\n const current = button.data('current');\n const total = button.data('total');\n const loadedRecords = current + pageSize;\n $results.append(results);\n WhistleOut.applyPopover($results);\n this.bindCta($results);\n button.data('current', loadedRecords);\n button.find('span').hide();\n if (total <= loadedRecords) {\n button.hide();\n }\n WhistleOut.notifications.fire('PagedResultsLoaded');\n }\n\n bindTab(changeTabHandler) {\n const searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this;\n const selectConnectionType = searchResultsPage.find('#selectConnectionType');\n WhistleOut.applySelectPicker(selectConnectionType);\n\n selectConnectionType.on('changed.bs.select', function() {\n const tab =$('option:selected', this).attr('data-tab-link');\n that.switchTabs(tab, searchResultsPage, changeTabHandler);\n });\n\n searchResultsPage.find('button[data-tab-button], button[data-tab-buttongroup], button[data-popover-button]').each(function () {\n const tab = wo$(this);\n const content = tab.data('tooltip-text');\n tab.popover({\n container: 'body',\n trigger: 'hover',\n placement: 'top',\n content: content,\n html: true\n });\n });\n\n searchResultsPage //\n .off('click', '[data-goto-tab]')\n .on('click', '[data-goto-tab]', function () {\n const tab = wo$(this).data('goto-tab');\n that.switchTabs(tab, searchResultsPage, changeTabHandler);\n });\n\n searchResultsPage //\n .off('click', '[data-tab-link]')\n .on('click', '[data-tab-link]', function () {\n const tab = wo$(this).data('tab-link');\n that.switchTabs(tab, searchResultsPage, changeTabHandler);\n });\n\n searchResultsPage //\n .off('click', '[data-tab-linkbutton]')\n .on('click', '[data-tab-linkbutton]', function () {\n const tab = wo$(this).data('tab-linkbutton');\n that.switchTabs(tab, searchResultsPage, changeTabHandler);\n });\n\n searchResultsPage //\n .off('click', '[data-tab-button]')\n .on('click', '[data-tab-button]', function () {\n const tab = wo$(this).data('tab-button');\n that.switchTabs(tab, searchResultsPage, changeTabHandler);\n });\n }\n\n switchTabs(tab, searchResultsPage, changeTabHandler) {\n this.changeCurrentActiveTab(tab, searchResultsPage);\n changeTabHandler(tab);\n }\n\n changeCurrentActiveTab(tab, searchResultsPage) {\n if (!searchResultsPage) {\n searchResultsPage = wo$('#search-results-partial');\n if (!searchResultsPage.length) return;\n }\n const selectedTabLink = searchResultsPage.find('a[data-tab-link=' + tab + ']');\n searchResultsPage.find('a[data-tab-link] > i').addClass('hidden');\n selectedTabLink.find('i').removeClass('hidden');\n selectedTabLink.closest('div').find('button span.dropdownText').text(selectedTabLink.data('text'));\n selectedTabLink.closest('div').find('button span.resultCount').text(selectedTabLink.data('count'));\n selectedTabLink.closest('div').find('button span.subtext').text(selectedTabLink.data('subtext'));\n\n const selectedTabLinkButton = searchResultsPage.find('a[data-tab-linkbutton=' + tab + ']');\n searchResultsPage.find('a[data-tab-linkbutton] > i').addClass('hidden');\n searchResultsPage.find('a[data-tab-linkbutton]').closest('div.btn-group').find('button').removeClass('active');\n if (selectedTabLinkButton.length > 0) {\n selectedTabLinkButton.find('i').removeClass('hidden');\n const button = selectedTabLinkButton.closest('div.btn-group').find('button');\n const image = selectedTabLinkButton.data('image');\n if (image.length > 0) {\n button.find('span[data-tab-image]').removeClass('hidden');\n button.addClass('display-flex justify-content-flex-start');\n button.find('span[data-tab-image]>img').src = image;\n } else {\n button.find('span[data-tab-image]').addClass('hidden');\n button.removeClass('display-flex justify-content-flex-start');\n button.find('span[data-tab-image]>img').src = null;\n }\n button.find('span.dropdownText').text(selectedTabLinkButton.data('text'));\n button.find('span.resultCount').text(selectedTabLinkButton.data('count'));\n button.find('span.subtext').text(selectedTabLinkButton.data('subtext'));\n button.addClass('active');\n const content = selectedTabLinkButton.data('tooltip-text');\n const popover = button.data('bs.popover');\n popover.options.content = content;\n popover.tip().find('.popover-content').html(content);\n }\n searchResultsPage.find('button[data-tab-button]').removeClass('active');\n searchResultsPage.find('button[data-tab-button=' + tab + ']').addClass('active');\n searchResultsPage\n .find('div[data-results-container] div#' + tab)\n .addClass('active')\n .siblings()\n .removeClass('active');\n }\n\n bindPlanSummary(callback) {\n wo$('table[data-plan-summary] tr[data-supplier], table[data-plan-summary] a')\n .off('click')\n .on('click', function () {\n const supplierShortUrl = wo$(this).data('supplier');\n const maxResults = wo$(this).data('max-results');\n callback(supplierShortUrl, maxResults);\n WhistleOut.scrollTo('#landing-results');\n });\n }\n\n bindCta(results) {\n if (!results) results = wo$('#search-results-partial');\n WhistleOut.bindCta(results);\n }\n\n showDownloadSpeed(speedTestResult) {\n if (speedTestResult && speedTestResult.downloadSpeed && speedTestResult.isCompleted) {\n wo$('[data-show-when-no-speed-test]').hide();\n wo$('[data-show-when-speed-test]').show();\n } else {\n wo$('[data-show-when-no-speed-test]').show();\n wo$('[data-show-when-speed-test]').hide();\n }\n\n if (speedTestResult && speedTestResult.downloadSpeed) {\n wo$('[data-speed-test-result]').text(speedTestResult.downloadSpeed);\n wo$('[data-show-when-speed-test-result]').show();\n } else {\n wo$('[data-show-when-speed-test-result]').hide();\n }\n\n if (speedTestResult && speedTestResult.lastResultDate) {\n var dateOptions = { year: 'numeric', month: 'long', day: 'numeric' };\n wo$('[data-speed-test-date]').text(\n new Date(speedTestResult.lastResultDate).toLocaleDateString('en-AU', dateOptions)\n );\n wo$('[data-show-when-test-date]').show();\n } else {\n wo$('[data-show-when-test-date]').hide();\n }\n }\n\n speedTestInProgress(isInProgress) {\n if (isInProgress) {\n wo$('[data-run-speed-test]').prop('disabled', true);\n wo$('[data-run-speed-test]').find('.fa-spinner').show();\n wo$('[data-speed-test-result]').addClass('c-gray-light');\n } else {\n wo$('[data-run-speed-test]').prop('disabled', false);\n wo$('[data-run-speed-test]').find('.fa-spinner').hide();\n wo$('[data-speed-test-result]').removeClass('c-gray-light');\n }\n }\n\n bindSpeedTestResult(ignorePopup) {\n var speedTestResult = Cookies.get('woSpeedTestResult');\n if (speedTestResult && speedTestResult.length) {\n speedTestResult = JSON.parse(speedTestResult);\n }\n\n this.showDownloadSpeed(speedTestResult);\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var that = this;\n\n wo$('[data-run-speed-test]')\n .off()\n .click(function () {\n wo$('[data-show-when-error]').hide();\n that.speedTestInProgress(true);\n\n WhistleOut.SpeedTest.getSpeedTestParameters(\n function (resp) {\n try {\n if (resp.protocol === 'ndt7') {\n const results = resp.results[0];\n wo$('[data-show-when-no-speed-test]').show();\n wo$('[data-show-when-speed-test]').hide();\n wo$('[data-show-when-speed-test-result]').show();\n wo$('[data-speed-test-result]').show();\n\n WhistleOut.SpeedTest.runNdt7Test(\n results.urls['wss:///ndt/v7/download'],\n 'download',\n wo$('[data-speed-test-result]'),\n () => {\n that.speedTestInProgress(false);\n wo$('[data-show-when-no-speed-test]').hide();\n wo$('[data-show-when-speed-test]').show();\n }\n );\n } else {\n WhistleOut.SpeedTest.testSpeed(resp.fqdn, true, false, function (result) {\n if (result.downloadSpeed) {\n that.showDownloadSpeed(result);\n }\n if (result.hasErrors && !result.downloadSpeed) {\n that.speedTestInProgress(false);\n wo$('[data-show-when-error]').show();\n } else if (result.isCompleted || result.hasErrors) {\n that.speedTestInProgress(false);\n } else {\n that.speedTestInProgress(true);\n }\n });\n }\n } catch (e) {\n that.speedTestInProgress(false);\n wo$('[data-show-when-error]').show();\n }\n },\n function () {\n that.speedTestInProgress(false);\n wo$('[data-show-when-error]').show();\n }\n );\n });\n\n if (!ignorePopup) {\n wo$('[data-toggle=\"popover\"]')\n .off('shown.bs.popover')\n .on('shown.bs.popover', function () {\n that.bindSpeedTestResult(true);\n });\n }\n }\n\n bindNbnAlertModal() {\n const modal = wo$('#modal-nbn-alert');\n if (!modal.length) return;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this;\n\n modal.off('shown.bs.modal').on('shown.bs.modal', function () {\n modal.find('#nbnName').focus();\n });\n\n modal\n .find('#nbnSubmit')\n .off('click')\n .on('click', function () {\n that.clearNbnAlertModalErrort(modal);\n if (!that.validateNbnAlertModal(modal)) return;\n\n const $this = wo$(this);\n $this.find('.fa-spinner').show();\n $this.prop('disabled', true);\n wo$.ajax({\n url: '/Ajax/Broadband/NbnAlert',\n data: {\n name: modal.find('#nbnName').val(),\n email: modal.find('#nbnEmail').val(),\n generalOptIn: modal.find('#nbnOptInYes').is(':checked')\n },\n type: 'POST',\n success: function () {\n modal.find('#nbnForm, #nbnFooter').hide();\n modal.find('#nbnSuccess').show();\n },\n error: function () {\n modal.find('#nbnError').show();\n },\n complete: function () {\n $this.find('.fa-spinner').hide();\n $this.prop('disabled', false);\n }\n });\n });\n }\n\n validateNbnAlertModal(modal) {\n let valid = true;\n const name = modal.find('#nbnName');\n if (name.val().trim() === '') {\n valid = false;\n this.showNbnAlertModalError(name, '[data-validation-error]');\n }\n const email = modal.find('#nbnEmail');\n const config = WhistleOut.getSiteConfiguration();\n const regex = new RegExp(config.regex.email);\n if (email.val().trim() === '') {\n valid = false;\n this.showNbnAlertModalError(email, '[data-validation-error]');\n } else if (!regex.test(email.val().trim())) {\n valid = false;\n this.showNbnAlertModalError(email, '[data-validation-error-invalid]');\n }\n const optInYes = modal.find('#nbnOptInYes');\n const optInNo = modal.find('#nbnOptInNo');\n if (!optInYes.is(':checked') && !optInNo.is(':checked')) {\n valid = false;\n this.showNbnAlertModalError(wo$('#nbnOptInRow'), '[data-validation-error]');\n }\n\n return valid;\n }\n\n showNbnAlertModalError(field, messageSelector) {\n field.parent().addClass('has-error');\n field.siblings(messageSelector).show();\n }\n\n clearNbnAlertModalErrort(modal) {\n modal.find('.form-group').removeClass('has-error');\n modal.find('[data-validation-error]').hide();\n modal.find('[data-validation-error-invalid]').hide();\n modal.find('#nbnError').hide();\n }\n}\n\n// TODO: Extract a component for the queue\nBroadbandResultsAdaptor.coverageRequestsQueue = [];\n","import React from 'react';\n\nconst Spinner = () => {\n return ;\n};\n\nexport default Spinner;\n","import React from 'react';\n\nimport Spinner from '../../../../../Shared/React/js/components/Spinner';\n\ninterface Props {\n className?: string;\n text: string;\n isLoading: boolean;\n onClick: () => void;\n}\n\nconst SearchButton = (props: Props) => {\n return (\n \n );\n};\n\nexport default SearchButton;\n","import React from 'react';\n\nimport type { SelectDataItem } from '../../../../../Shared/js/@types/SelectDataItem';\nimport Select from '../../../../../Shared/React/js/components/Select';\nimport { ScreenSize } from '../../../../../Shared/React/js/utils/Hooks';\n\nexport interface Props {\n screenSize?: ScreenSize;\n primaryFilterAsSpeed: boolean;\n className?: string;\n\n speedDescription: string;\n speedFormat: string;\n speed?: number;\n speedValues: SelectDataItem[];\n onSpeedChange?: (value: number) => void;\n\n dataDescription: string;\n dataFormat: string;\n data?: number;\n dataValues: SelectDataItem[];\n onDataChange?: (value: number) => void;\n}\n\ninterface SelectArgs {\n selectedValue: number;\n values: SelectDataItem[];\n onValueChanged: (value: number) => void;\n}\n\nconst SpeedDataSelect = (props: Props) => {\n const dataWidth = props.screenSize === ScreenSize.Mobile ? '100%' : 'fit';\n\n let type: string;\n let descirption: string;\n let selectArgs: SelectArgs;\n\n if (props.primaryFilterAsSpeed) {\n type = 'speed';\n descirption = props.speedDescription;\n selectArgs = {\n selectedValue: props.speed,\n values: props.speedValues,\n onValueChanged: props.onSpeedChange\n };\n } else {\n type = 'data';\n descirption = props.dataDescription;\n selectArgs = {\n selectedValue: props.data,\n values: props.dataValues,\n onValueChanged: props.onDataChange\n };\n }\n\n return (\n \n );\n};\n\nexport default SpeedDataSelect;\n","import React, { useCallback } from 'react';\n\nimport AddressSearch from '../../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport { ScreenSize } from '../../../../../Shared/React/js/utils/Hooks';\nimport type { Props } from './@types/Filters';\nimport SearchButton from './SearchButton';\nimport SpeedDataSelect from './SpeedDataSelect';\n\nconst screenSize: ScreenSize = ScreenSize.Desktop;\n\nconst FiltersLg = (props: Props) => {\n const onSearchClick = useCallback(() => props.onSearchClick(screenSize), [props]);\n\n return (\n <>\n
\n
\n
\n
\n \n
\n \n \n
\n \n
\n
\n
\n
\n \n );\n};\n\nexport default FiltersLg;\n","import React, { useCallback } from 'react';\n\nimport AddressSearch from '../../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport { ScreenSize } from '../../../../../Shared/React/js/utils/Hooks';\nimport type { Props } from './@types/Filters';\nimport SearchButton from './SearchButton';\nimport SpeedDataSelect from './SpeedDataSelect';\n\nconst screenSize: ScreenSize = ScreenSize.Tablet;\n\nconst FiltersSm = (props: Props) => {\n const onSearchClick = useCallback(() => props.onSearchClick(screenSize), [props]);\n\n return (\n <>\n
\n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n
\n
\n \n );\n};\n\nexport default FiltersSm;\n","import React, { useCallback } from 'react';\n\nimport AddressSearch from '../../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport { ScreenSize } from '../../../../../Shared/React/js/utils/Hooks';\nimport type { Props } from './@types/Filters';\nimport SearchButton from './SearchButton';\nimport SpeedDataSelect from './SpeedDataSelect';\n\nconst screenSize: ScreenSize = ScreenSize.Mobile;\n\nconst FiltersXs = (props: Props) => {\n const onSearchClick = useCallback(() => props.onSearchClick(screenSize), [props]);\n\n const renderSplashImage = () => {\n if (props.splashImageUrl && props.splashImageUrl.length > 0) {\n return \"Supplier;\n }\n };\n\n return (\n <>\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n \n \n {renderSplashImage()} \n
\n
\n \n );\n};\n\nexport default FiltersXs;\n","import { produce } from 'immer';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport type { Address } from '../../../../../Shared/js/@types/Address';\nimport SearchAddressActions from '../../../../../Shared/React/js/actions/SearchAddressActions';\nimport { AddressSearchHandle } from '../../../../../Shared/React/js/components/addressSearch/AddressAutocomplete';\nimport { AddressSearchProps } from '../../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport ResponsiveLayout from '../../../../../Shared/React/js/components/ResponsiveLayout';\nimport { ScreenSize } from '../../../../../Shared/React/js/utils/Hooks';\nimport * as Actions from '../../actions/BroadbandHomeActions';\nimport ResultsAdaptor from '../../adaptors/BroadbandResultsAdaptor';\nimport type { Props } from './@types/Filters';\nimport FiltersLg from './FiltersLg';\nimport FiltersSm from './FiltersSm';\nimport FiltersXs from './FiltersXs';\n\ninterface AddressSearchResult {\n isError: boolean;\n isNotFound: boolean;\n address: Address;\n}\n\nconst Filters = (props: Props) => {\n const [inputValue, setInputValue] = useState(props.address?.label || '');\n\n const [addressSearchResult, setAddressSearchResult] = useState({\n address: null,\n isNotFound: null,\n isError: null\n });\n\n const [data, setData] = useState(props.data);\n const [speed, setSpeed] = useState(props.speed);\n\n const [isSearchInitiated, setIsSearchInitiated] = useState(false);\n\n const addressSearchDesktopRef = useRef(null);\n const addressSearchMobileRef = useRef(null);\n const addressSearchTabletRef = useRef(null);\n\n const resultsAdaptor = useRef(new ResultsAdaptor());\n\n const getCurrentLocation = () => {\n window.setTimeout(() => {\n WhistleOut.getCurrentLocationViaHtml5(e => {\n const address = e.label;\n if (address.length > 1) {\n setInputValue(address);\n setAddressSearchResult({\n address: {\n label: e.label\n } as Address,\n isNotFound: false,\n isError: false\n });\n }\n });\n }, 500);\n };\n\n const handleMount = useCallback(() => {\n SearchAddressActions.invalidateAddressCookie();\n getCurrentLocation();\n }, []);\n\n const getAddressSearch = () =>\n addressSearchDesktopRef?.current || addressSearchMobileRef?.current || addressSearchTabletRef?.current;\n\n const handleOnInput = useCallback((value: string) => {\n setInputValue(value);\n setAddressSearchResult({\n address: null,\n isNotFound: false,\n isError: false\n });\n }, []);\n\n const handleOnAddressChange = useCallback((address: Address) => {\n setInputValue(address?.label);\n setAddressSearchResult({\n address: address,\n isNotFound: false,\n isError: false\n });\n }, []);\n\n const handleOnAddressEmptyResults = useCallback(() => {\n setIsSearchInitiated(false);\n setAddressSearchResult({\n address: null,\n isNotFound: true,\n isError: false\n });\n }, []);\n\n const handleOnAddressResponseError = useCallback(() => {\n setIsSearchInitiated(false);\n setAddressSearchResult({\n address: null,\n isNotFound: false,\n isError: true\n });\n }, []);\n\n const doSearch = useCallback(() => {\n if (inputValue) {\n SearchAddressActions.invalidateAddressCookie(inputValue);\n }\n\n const address = addressSearchResult.address;\n const coveragePromise = address\n ? resultsAdaptor.current.getCoveragePromise({ common: { address: address } }, props.coverageCheckUrl)\n : null;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const criteria = produce(props.criteria, (draft: any): void => {\n draft.speed = speed;\n draft.data = data;\n draft.common.address = address;\n });\n\n Actions.search(props.searchUrl, criteria, coveragePromise);\n }, [addressSearchResult.address, data, inputValue, props.coverageCheckUrl, props.criteria, props.searchUrl, speed]);\n\n const searchLocation = useCallback(\n config => {\n WhistleOut.getCurrentLocation(address => {\n const siteCountry = (config.countryCode || '').toLowerCase();\n const clientCountry = (address.countryCode || '').toLowerCase();\n if (address.label.length > 1 && siteCountry === clientCountry) {\n setAddressSearchResult({\n address: {\n label: address.label\n } as Address,\n isError: false,\n isNotFound: false\n });\n } else {\n doSearch();\n }\n }, doSearch);\n },\n [doSearch]\n );\n\n const isEmptyAddress = useCallback(\n inputValue => {\n return (\n !inputValue ||\n inputValue.trim().length === 0 ||\n // HACK: In IE9 the input value has the placeholder text by default\n // Also use 'props' explicitly, because 'addressSearch' is undefined in IE9 for some reason\n inputValue === props.addressSearchProps.placeholder\n );\n },\n [props.addressSearchProps.placeholder]\n );\n\n const lookupAddress = useCallback(() => {\n const addressSearch = getAddressSearch();\n addressSearch.selectFirstSuggest();\n }, []);\n\n const search = useCallback(\n (screenSize: ScreenSize) => {\n console.log({ screenSize });\n\n setIsSearchInitiated(true);\n\n if (isEmptyAddress(inputValue)) {\n const config = WhistleOut.getSiteConfiguration();\n if (config.autoDetectLocation) {\n searchLocation(config);\n return;\n }\n\n doSearch();\n return;\n }\n\n if (addressSearchResult.address) {\n doSearch();\n } else {\n lookupAddress();\n }\n },\n [addressSearchResult.address, doSearch, inputValue, isEmptyAddress, lookupAddress, searchLocation]\n );\n\n const onAddressInputInit = useCallback(\n (input: HTMLInputElement) => {\n if (!input) {\n return;\n }\n input.value = inputValue || '';\n },\n [inputValue]\n );\n\n useEffect(() => handleMount(), [handleMount]);\n\n useEffect(() => SearchAddressActions.setAddressCookie(addressSearchResult.address), [addressSearchResult.address]);\n\n useEffect(() => {\n if (isSearchInitiated && addressSearchResult.address) {\n doSearch();\n }\n }, [doSearch, isSearchInitiated, addressSearchResult.address]);\n\n const addressCommonProps: AddressSearchProps = {\n ...props.addressSearchProps,\n current: addressSearchResult.address,\n onInput: handleOnInput,\n onChange: handleOnAddressChange,\n onInitialized: onAddressInputInit,\n onEmptyResults: handleOnAddressEmptyResults,\n onResponseError: handleOnAddressResponseError\n };\n\n const toolTipText = props.addressSearchProps.tooltipLink;\n const commonProps: Props = {\n ...props,\n isLoading: isSearchInitiated,\n marginCss: (typeof toolTipText === 'string' && toolTipText.length === 0) ? 'mar-b-7' : 'mar-b-0',\n onSearchClick: search,\n speedDataSelectProps: {\n ...props.speedDataSelectProps,\n speed: speed,\n data: data,\n onSpeedChange: setSpeed,\n onDataChange: setData\n }\n };\n\n return (\n \n {{\n desktop: (\n \n ),\n mobile: (\n \n ),\n tablet: (\n \n )\n }}\n \n );\n};\n\nexport default Filters;\n","import React from 'react';\n\nimport { AddressSearchProps } from '../../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport type { HomeModel } from '../../../../js/@types/HomeModel';\nimport Filters from './Filters';\n\nconst Home = ({ addressSearch, ...props }: HomeModel) => {\n const criteria = props.state.criteria;\n return (\n \n \n \n \n \n );\n};\n\nexport default Home;\n","import React, { Component } from 'react';\n\nimport HeaderMap from '../../../../../Shared/React/js/components/maps/HeaderMap';\n\nexport default class HeaderMapWithStatistics extends Component {\n\n constructor(props) {\n super(props);\n\n this.getCenterBoundaries = this.getCenterBoundaries.bind(this);\n }\n\n getCenterBoundaries() {\n const locationHeaderRect = wo$('#location-header')[0].getBoundingClientRect();\n const statisticsRect = wo$('#header-statistics')[0].getBoundingClientRect();\n\n return {\n left: locationHeaderRect.right,\n right: statisticsRect.left\n };\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n","import React, { useCallback, useEffect, useRef } from 'react';\n\nconst Modal = (props: {\n isOpen?: boolean;\n contentClassNames?: string;\n children: React.ReactNode;\n onClose?(): void;\n}) => {\n const containerRef = useRef();\n\n const onModalAction = useCallback((ref: HTMLElement, isOpen: boolean) => {\n const action = isOpen ? 'show' : 'hide';\n wo$(ref).modal(action);\n }, []);\n\n const onClose = useCallback(() => {\n onModalAction(containerRef.current, false);\n if (props.onClose) {\n props.onClose();\n }\n }, [onModalAction, props]);\n\n useEffect(() => {\n const ref = containerRef.current;\n onModalAction(ref, props.isOpen);\n return () => {\n onModalAction(ref, false);\n };\n }, [onModalAction, props.isOpen]);\n\n useEffect(() => {\n const container = wo$(containerRef.current);\n container.on('hidden.bs.modal', onClose);\n\n return () => {\n container.off('hidden.bs.modal', onClose);\n };\n }, [onClose]);\n\n return (\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n {props.children}\n
\n
\n
\n
\n );\n};\n\nexport default Modal;\n","function StatusLayout(props: {\n status: TStatus;\n items: { default: JSX.Element } & { [status in TStatus]?: JSX.Element };\n}) {\n return props.items[props.status] || props.items.default;\n}\n\nexport default StatusLayout;\n","import React, { useCallback, useEffect } from 'react';\n\nconst LinkHandler = (props: { querySelector: string; onClick: (a: Event) => void }) => {\n const onTransactLinkClick = useCallback(\n (e: Event) => {\n if (props.onClick) {\n props.onClick(e);\n }\n },\n [props]\n );\n\n const getElements = useCallback(() => {\n return document.querySelectorAll(props.querySelector);\n }, [props.querySelector]);\n\n useEffect(() => {\n getElements().forEach(a => a.addEventListener('click', onTransactLinkClick));\n\n return () => {\n getElements().forEach(a => a.removeEventListener('click', onTransactLinkClick));\n };\n }, [getElements, onTransactLinkClick, props.querySelector]);\n\n return <>;\n};\n\nexport default LinkHandler;\n","import React, { useCallback } from 'react';\n\nimport LinkHandler from './LinkHandler';\n\nfunction getLink(element: HTMLElement) {\n return element.closest('a') || element.closest('[data-transact-link]').querySelector('a');\n}\n\nfunction showPrivateDataModal() {\n wo$(`#${WhistleOut.privateDataModalId}`).modal('show');\n}\n\nfunction getLinkData(link: HTMLAnchorElement) {\n const dataset = (link.closest('[data-result]') || link.closest('[data-transact-link]'))?.dataset;\n return {\n productShortUrl: dataset?.productShortUrl || null,\n supplierShortUrl: dataset?.supplierShortUrl || null\n };\n}\n\nexport interface DynamicTransactLinkData {\n productShortUrl: string;\n supplierShortUrl: string;\n}\n\nconst TransactLinkHandler = (props: {\n isDynamicLink(url: string): boolean;\n onClick?(url: string): void;\n onDynamicLinkClick?(data: DynamicTransactLinkData): void;\n}) => {\n const onClick = useCallback(\n (e: Event) => {\n const link = getLink(e.currentTarget as HTMLElement);\n if (!link) {\n throw new Error('Link element not found');\n }\n\n if (props.onClick) {\n props.onClick(link.href);\n }\n\n if (props.isDynamicLink && !props.isDynamicLink(link.href)) {\n return;\n }\n\n e.preventDefault();\n\n if (WhistleOut.getPrivateDataCookieValue()) {\n showPrivateDataModal();\n return;\n }\n\n if (props.onDynamicLinkClick) {\n const data = getLinkData(link);\n props.onDynamicLinkClick(data);\n }\n },\n [props]\n );\n\n return ;\n};\n\nexport default TransactLinkHandler;\n","import React from 'react';\n\nfunction Exclamation() {\n return ;\n}\n\nexport default function IncompleteAddressWarning() {\n return (\n
\n
\n
\n \n
\n
\n \n A complete street address is required to confirm plan availability. To view all\n plans available at this general location, select 'Continue'.\n \n
\n
\n
\n );\n}\n","import omit from 'lodash/omit';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport type { Address } from '../../../../../../Shared/js/@types/Address';\nimport { nameof } from '../../../../../../Shared/js/utils/typescript';\nimport AddressSearch, {\n AddressSearchProps\n} from '../../../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport Spinner from '../../../../../../Shared/React/js/components/Spinner';\nimport IncompleteAddressWarning from './IncompleteAddressWarning';\n\nconst Header = (props: { isModal: boolean; title: string; subtitle: string }) => {\n return props.isModal ? (\n <>\n

{props.title}

\n

{props.subtitle}

\n \n ) : (\n <>\n

{props.title}

\n

{props.subtitle}

\n \n );\n};\n\nconst SearchButton = (\n props: {\n isLoading?: boolean;\n } & React.ButtonHTMLAttributes\n) => {\n const htmlProps = useMemo(() => {\n const omitNames = [nameof('isLoading')];\n return omit(props, omitNames);\n }, [props]);\n\n return (\n \n );\n};\n\nconst AddressSearchPanel = (props: {\n addressSearchProps: AddressSearchProps;\n isAddressWarningEnabled?: boolean;\n isLoading?: boolean;\n isModal?: boolean;\n onContinue: (address: Address) => void;\n}) => {\n const [address, setAddress] = useState(props.addressSearchProps?.current);\n\n const handleContinueClick = useCallback(() => {\n if (props.onContinue) {\n props.onContinue(address);\n }\n }, [address, props]);\n\n const isPrivateDataEnabled = useMemo(() => WhistleOut.getPrivateDataCookieValue(), []);\n const isIncompleteAddress = useMemo(() => address && !address?.streetNumber, [address]);\n const isSearchDisabled = useMemo(() => !address || props.isLoading, [address, props.isLoading]);\n\n const privateDataButton = useMemo(\n () => ,\n []\n );\n\n return (\n <>\n
\n
\n \n
\n
\n \n
\n
\n {isPrivateDataEnabled ? (\n privateDataButton\n ) : (\n \n )}\n
\n
\n {isIncompleteAddress && }\n \n );\n};\n\nexport default AddressSearchPanel;\n","import React from 'react';\n\nimport Spinner from '../../../../../../Shared/React/js/components/Spinner';\n\n// TODO: Extract common template for messaging, i.e. 'plan unavailable' and 'blocked pop-up'\n\nconst ErrorPanel = (props: { onRetry(): void; isLoading?: boolean }) => {\n return (\n
\n

\n Sorry, something went wrong :(\n

\n

Please try again.

\n \n {props.isLoading && }\n Retry\n \n
\n );\n};\n\nexport default ErrorPanel;\n","import React, { useMemo } from 'react';\n\n// See: https://stackoverflow.com/questions/10471595/window-open-blocked-by-firefox\n\nconst ContinueButton = (props: { className: string; url: string; onClick(): void }) => {\n return (\n // eslint-disable-next-line react/jsx-no-target-blank\n \n Continue\n \n );\n};\n\nconst title = (\n <>\n It looks like you’re using a pop-up blocker\n \n);\nconst subtitle = <>Select ‘Continue’ to open the plan in a new window.;\n\nconst PopupBlockerMessage = (props: { isModal: boolean; url: string; onClick(): void }) => {\n const pageView = useMemo(() => {\n return (\n <>\n

{title}

\n

{subtitle}

\n \n \n );\n }, [props.onClick, props.url]);\n\n const modalView = useMemo(() => {\n return (\n <>\n

{title}

\n

{subtitle}

\n \n \n );\n }, [props.onClick, props.url]);\n\n return
{props.isModal ? modalView : pageView}
;\n};\n\nexport default PopupBlockerMessage;\n","import React, { useCallback, useMemo } from 'react';\n\nimport SearchAddressActions from '../../../../../../Shared/React/js/actions/SearchAddressActions';\n\nfunction Title(props: { className: string }) {\n return

This provider is not available in your area

;\n}\n\nfunction ViewPlansButton(props: { onClick(): void; className: string }) {\n return (\n \n );\n}\n\nfunction BackLink() {\n const handleClick = useCallback(() => {\n SearchAddressActions.setAddressCookie(null);\n }, []);\n\n return (\n \n {' '}\n Back to Address\n Verification{' '}\n \n );\n}\n\nexport default function SearchPlanUnavailablePanel(props: {\n isModal?: boolean;\n isSearchPage: boolean;\n onClose(): void;\n}) {\n const onClose = useCallback(() => {\n if (props.onClose) {\n props.onClose();\n }\n }, [props]);\n\n const subtitle = props.isSearchPage\n ? 'Your search results will be updated to show available plans.'\n : 'Browse plans from providers that are available at your address.';\n\n const modalView = useMemo(() => {\n return (\n <>\n \n <p className=\"font-5 mar-b-5\">{subtitle}</p>\n <ViewPlansButton className=\"btn btn-primary btn-lg\" onClick={onClose} />\n </>\n );\n }, [onClose, subtitle]);\n\n const pageView = useMemo(() => {\n return (\n <>\n <Title className=\"font-feature font-9 font-800 line-height-12 c-gray-darker mar-b-3\" />\n <p className=\"font-6 mar-b-4\">{subtitle}</p>\n <ViewPlansButton className=\"btn btn-primary btn-lg mar-0 pad-x-8\" onClick={onClose} />\n <hr />\n <BackLink />\n </>\n );\n }, [onClose, subtitle]);\n\n return (\n <div className=\"row\">\n <div className=\"col-xs-24\">{props.isModal ? modalView : pageView}</div>\n </div>\n );\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport React, { useCallback, useEffect, useMemo, useReducer, useState } from 'react';\n\nimport type { Address } from '../../../../../../Shared/js/@types/Address';\nimport { AddressSearchProps } from '../../../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport Modal from '../../../../../../Shared/React/js/components/Modal';\nimport StatusLayout from '../../../../../../Shared/React/js/components/StatusLayout';\nimport TransactLinkHandler, {\n DynamicTransactLinkData\n} from '../../../../../../Shared/React/js/components/TransactLinkHandler';\nimport { broadbandApi } from '../../../../../js/redux/broadbandApi';\nimport AddressSearchPanel from './AddressSearchPanel';\nimport ErrorPanel from './ErrorPanel';\nimport PopupBlockerMessage from './PopupBlockerMessage';\nimport SearchPlanUnavailablePanel from './SearchPlanUnavailablePanel';\n\nconst addressHelper = {\n isIncomplete: (address: Address) => !address || !address.streetNumber,\n isIncompleteLabel(address: string) {\n return !/^\\s*?\\d+\\s+.+?\\s+\\d+\\s*?$/.test(address);\n },\n getInitialAddress: (props: Address) => (addressHelper.isIncomplete(props) ? null : props)\n};\n\nconst browserHelper = {\n isBlocked: (newWin: Window) => {\n return !newWin || newWin.closed || typeof newWin.closed === 'undefined';\n }\n};\n\nconst urlHelper = {\n getAddress(href: string) {\n return new URL(href).searchParams.get('address')?.replace(/\\+/g, ' ');\n }\n};\n\nexport interface OnTransactUrlChangeArgs {\n url: string;\n address: Address;\n}\n\ntype Status = 'initialised' | 'request' | 'in progress' | 'found' | 'blocked' | 'not found' | 'error';\n\ninterface State {\n status: Status;\n address: Address;\n transactUrl: string;\n isLoading: boolean;\n}\n\nconst { actions, reducer } = createSlice({\n name: 'address-autocomplete',\n initialState: {\n status: 'initialised',\n address: null,\n transactUrl: null,\n isLoading: false\n } as State,\n reducers: {\n requestSearch(state, action: PayloadAction<Address>) {\n state.status = 'request';\n state.address = action.payload;\n state.isLoading = false;\n },\n setAddress(state, action: PayloadAction<Address>) {\n state.address = action.payload;\n },\n startProgress(state) {\n state.isLoading = true;\n },\n endProgress(state) {\n state.isLoading = false;\n },\n onError(state) {\n state.status = 'error';\n state.isLoading = false;\n },\n onResponse(\n state,\n action: PayloadAction<{\n transactUrl: string;\n }>\n ) {\n const { transactUrl } = action.payload;\n\n state.status = transactUrl ? 'found' : 'not found';\n state.transactUrl = transactUrl;\n state.isLoading = false;\n },\n onTransactUrlFound(state) {\n state.status = 'initialised';\n state.isLoading = false;\n },\n onPopupBlocked(state) {\n state.status = 'blocked';\n state.isLoading = false;\n }\n }\n});\n\ninterface Props {\n address: Address;\n productShortUrl?: string;\n supplierShortUrl?: string;\n countryCode: string;\n addressSearchPlaceHolder: string;\n tooltipLink: string;\n tooltipDescription: string;\n queryDelay: number;\n apiKey: string;\n isModal?: boolean;\n isSearchPage?: boolean;\n shouldOpenTransactLink?: boolean;\n autoSubmitOnLoad?: boolean;\n onAddressChange?(address: Address): void;\n onTransactUrlChange(args: OnTransactUrlChangeArgs): void;\n onTransactLinkClick?(): void;\n onShowPlans(address: Address): void;\n onStatusChange?(status: Status): void;\n onProgressChange?(isBusy: boolean): void;\n}\n\nexport const AvailabilityCheckPanel = (props: Props) => {\n const [state, dispatch] = useReducer(reducer, {\n status: 'initialised',\n address: addressHelper.getInitialAddress(props.address),\n transactUrl: undefined as string,\n isLoading: false\n });\n\n const [triggerGetTransactUrlQuery, getTransactUrlQuery] = broadbandApi.useLazyGetTransactUrlQuery();\n\n useEffect(() => dispatch(actions.setAddress(addressHelper.getInitialAddress(props.address))), [props.address]);\n\n useEffect(() => {\n if (props.onAddressChange) {\n props.onAddressChange(state.address);\n }\n }, [props, state.address]);\n\n useEffect(() => {\n if (props.onStatusChange) {\n props.onStatusChange(state.status);\n }\n }, [props, state.status]);\n\n const handleContinueClick = useCallback((address: Address) => {\n dispatch(actions.requestSearch(address));\n }, []);\n\n const handleShowPlans = useCallback(() => {\n if (state.isLoading) {\n return;\n }\n dispatch(actions.startProgress());\n props.onShowPlans(state.address);\n }, [props, state.address, state.isLoading]);\n\n const handleRetry = useCallback(() => {\n dispatch(actions.requestSearch(state.address));\n }, [state.address]);\n\n useEffect(() => {\n if (getTransactUrlQuery.isLoading) {\n dispatch(actions.startProgress());\n }\n }, [getTransactUrlQuery.isLoading]);\n\n useEffect(() => {\n if (props.onProgressChange) {\n props.onProgressChange(state.isLoading);\n }\n return () => {\n if (props.onProgressChange) {\n props.onProgressChange(false);\n }\n };\n }, [props, state.isLoading]);\n\n const isIncompleteAddress = useMemo(() => addressHelper.isIncomplete(state.address), [state.address]);\n\n useEffect(() => {\n const onRequest = () => {\n if (state.status !== 'request' || getTransactUrlQuery.isLoading) {\n return;\n }\n\n if (isIncompleteAddress || !props.supplierShortUrl) {\n handleShowPlans();\n return;\n }\n\n triggerGetTransactUrlQuery({\n productShortUrl: props.productShortUrl,\n supplierShortUrl: props.supplierShortUrl,\n address: state.address?.label\n });\n };\n onRequest();\n }, [\n getTransactUrlQuery.isLoading,\n handleShowPlans,\n isIncompleteAddress,\n props.productShortUrl,\n props.supplierShortUrl,\n state.address?.label,\n state.status,\n triggerGetTransactUrlQuery\n ]);\n\n useEffect(() => {\n const onResponse = () => {\n if (getTransactUrlQuery.isUninitialized || getTransactUrlQuery.isLoading) {\n return;\n }\n\n const transactUrl = getTransactUrlQuery.data?.transactUrl;\n dispatch(actions.onResponse({ transactUrl }));\n };\n onResponse();\n }, [getTransactUrlQuery.data?.transactUrl, getTransactUrlQuery.isLoading, getTransactUrlQuery.isUninitialized]);\n\n useEffect(() => {\n if (state.isLoading || state.status !== 'found') {\n return;\n }\n\n const openTransactUrl = () => {\n const transactPage = window.open(state.transactUrl);\n if (!browserHelper.isBlocked(transactPage)) {\n if (props.onTransactLinkClick) {\n props.onTransactLinkClick();\n }\n transactPage.focus();\n handleShowPlans();\n } else {\n dispatch(actions.onPopupBlocked());\n }\n };\n\n const onTransactUrlFound = () => {\n dispatch(actions.onTransactUrlFound());\n\n if (props.onTransactUrlChange) {\n props.onTransactUrlChange({\n url: state.transactUrl,\n address: state.address\n });\n }\n\n if (!props.shouldOpenTransactLink) {\n return;\n }\n\n openTransactUrl();\n };\n\n onTransactUrlFound();\n }, [handleShowPlans, props, state.address, state.isLoading, state.status, state.transactUrl]);\n\n useEffect(() => {\n if (getTransactUrlQuery.isError) {\n dispatch(actions.onError());\n }\n }, [getTransactUrlQuery.isError]);\n\n useEffect(() => {\n if (props.autoSubmitOnLoad && !isIncompleteAddress) {\n handleContinueClick(state.address);\n }\n }, [handleContinueClick, isIncompleteAddress, props.autoSubmitOnLoad, state.address]);\n\n return (\n <>\n <StatusLayout<Status>\n status={state.status}\n items={{\n default: (\n <AddressSearchPanel\n isLoading={state.isLoading}\n isModal={props.isModal}\n onContinue={handleContinueClick}\n addressSearchProps={\n {\n current: state.address,\n countryCode: props.countryCode,\n placeholder: props.addressSearchPlaceHolder,\n tooltipLink: <i>{props.tooltipLink}</i>,\n tooltipDescription: props.tooltipDescription,\n types: ['Geo,PAD,Str,Addr'],\n queryDelay: props.queryDelay,\n apiKey: props.apiKey\n } as AddressSearchProps\n }\n />\n ),\n error: <ErrorPanel onRetry={handleRetry} isLoading={state.isLoading} />,\n blocked: (\n <PopupBlockerMessage\n isModal={props.isModal}\n url={state.transactUrl}\n onClick={props.onTransactLinkClick}\n />\n ),\n 'not found': (\n <SearchPlanUnavailablePanel\n onClose={handleShowPlans}\n isModal={props.isModal}\n isSearchPage={props.isSearchPage}\n />\n )\n }}\n />\n </>\n );\n};\n\nexport const AvailabilityCheckModal = (props: Props) => {\n const [address, setAddress] = useState(props.address);\n const [isOpen, setIsOpen] = useState(false);\n const [productShortUrl, setProductShortUrl] = useState(props.productShortUrl);\n const [supplierShortUrl, setSupplierShortUrl] = useState(props.supplierShortUrl);\n const [status, setStatus] = useState<Status>();\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n const showPlansOnStatuses: Status[] = ['found', 'not found', 'blocked'];\n if (showPlansOnStatuses.includes(status)) {\n props.onShowPlans(address);\n }\n }, [address, props, status]);\n\n const isDynamicTransactLink = useCallback((href: string) => {\n return (\n /\\/smartmove-internet-verification-/i.test(href) ||\n (/\\/SmartMoveVerify/i.test(href) && addressHelper.isIncompleteLabel(urlHelper.getAddress(href)))\n );\n }, []);\n\n const handleDynamicTransactLinkClick = useCallback(\n (e: DynamicTransactLinkData) => {\n setIsOpen(true);\n setProductShortUrl(e.productShortUrl || props.productShortUrl);\n setSupplierShortUrl(e.supplierShortUrl || props.supplierShortUrl);\n },\n [props.productShortUrl, props.supplierShortUrl]\n );\n\n const handleTransactUrlChange = useCallback(\n (args: OnTransactUrlChangeArgs) => {\n if (!props.shouldOpenTransactLink) {\n setIsOpen(false);\n }\n if (props.onTransactUrlChange) {\n props.onTransactUrlChange(args);\n }\n },\n [props]\n );\n\n const handleShowPlans = useCallback(\n (address: Address) => {\n setIsOpen(false);\n if (props.onShowPlans) {\n props.onShowPlans(address);\n }\n },\n [props]\n );\n\n const handleTransactLinkClick = useCallback(() => {\n handleClose();\n if (props.onTransactLinkClick) {\n props.onTransactLinkClick();\n }\n }, [handleClose, props]);\n\n useEffect(() => setProductShortUrl(props.productShortUrl), [props.productShortUrl]);\n useEffect(() => setSupplierShortUrl(props.supplierShortUrl), [props.supplierShortUrl]);\n\n return (\n <>\n <TransactLinkHandler\n isDynamicLink={isDynamicTransactLink}\n onDynamicLinkClick={handleDynamicTransactLinkClick}\n />\n {isOpen && (\n <Modal isOpen={isOpen} onClose={handleClose}>\n <AvailabilityCheckPanel\n {...props}\n isModal\n productShortUrl={productShortUrl}\n supplierShortUrl={supplierShortUrl}\n onAddressChange={setAddress}\n onShowPlans={handleShowPlans}\n onStatusChange={setStatus}\n onTransactUrlChange={handleTransactUrlChange}\n onTransactLinkClick={handleTransactLinkClick}\n />\n </Modal>\n )}\n </>\n );\n};\n","import React, { useCallback } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { createSearchParams } from 'react-router-dom';\n\nimport type { Address } from '../../../../../Shared/js/@types/Address';\nimport { RootState } from '../../../../../Shared/js/redux/rootReducer';\nimport AppComponent from '../../../../../Shared/React/js/components/AppComponent';\nimport type { ProductPageModel } from '../../../../js/@types/ProductPageModel';\nimport { useProductLocation } from '../../hooks/location';\nimport { AvailabilityCheckModal, OnTransactUrlChangeArgs } from './availabilityCheck/AvailabilityCheckPanel';\n\nconst connector = connect((state: RootState, ownProps: ProductPageModel) => {\n return ownProps;\n}, {});\n\nexport type Props = ConnectedProps<typeof connector>;\n\nconst ProductPageComponent = (props: Props) => {\n const location = useProductLocation();\n\n const handleTransactUrlChange = useCallback((args: OnTransactUrlChangeArgs) => {\n window.location.href = args.url;\n }, []);\n\n const handleShowPlans = useCallback(\n (address: Address) => {\n window.location.href = `${props.searchUrl}?${createSearchParams({ address: address?.label || '' })}`;\n },\n [props.searchUrl]\n );\n\n return (\n <div>\n <AvailabilityCheckModal\n address={props.addressSearch.address}\n productShortUrl={location.parts.product}\n supplierShortUrl={location.parts.supplier}\n countryCode={props.addressSearch.countryCode}\n addressSearchPlaceHolder={props.addressSearch.text.addressSearchPlaceHolder}\n tooltipLink={props.addressSearch.text.tooltipLink}\n tooltipDescription={props.addressSearch.text.tooltipDescription}\n queryDelay={props.addressSearch.queryDelay}\n apiKey={props.addressSearch.apiKey}\n onTransactUrlChange={handleTransactUrlChange}\n onShowPlans={handleShowPlans}\n />\n </div>\n );\n};\n\nconst ProductPageConnected = connector(ProductPageComponent);\n\nexport default function ProductPage(props: Props) {\n return (\n <React.StrictMode>\n <AppComponent>\n <ProductPageConnected {...props} />\n </AppComponent>\n </React.StrictMode>\n );\n}\n","import { useMemo } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nexport const useProductLocation = () => {\n const location = useLocation();\n\n const result = useMemo(() => {\n const [, area, subarea, supplier, connection, product] = location.pathname.split('/');\n const parts = {\n area,\n subarea,\n supplier,\n connection,\n product\n };\n\n return Object.assign(location, { parts });\n }, [location]);\n\n return result;\n};\n","import React, { useCallback, useState } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { createSearchParams } from 'react-router-dom';\n\nimport type { Address } from '../../../../../Shared/js/@types/Address';\nimport { RootState } from '../../../../../Shared/js/redux/rootReducer';\nimport SearchAddressActions from '../../../../../Shared/React/js/actions/SearchAddressActions';\nimport AppComponent from '../../../../../Shared/React/js/components/AppComponent';\nimport type { SmartMoveVerifyPageModel } from '../../../../js/@types/SmartMoveVerifyPageModel';\nimport { AvailabilityCheckPanel, OnTransactUrlChangeArgs } from './availabilityCheck/AvailabilityCheckPanel';\n\nconst connector = connect((state: RootState, ownProps: SmartMoveVerifyPageModel) => {\n return ownProps;\n}, {});\n\nexport type Props = ConnectedProps<typeof connector>;\n\nconst goTo = (url: string) => {\n window.location.href = url;\n};\n\nconst SmartMoveVerifyPageComponent = (props: Props) => {\n const [address, setAddress] = useState(props.addressSearch?.address);\n\n const handleShowPlans = useCallback(\n (address: Address) => {\n setAddress(address);\n SearchAddressActions.setAddressCookie(address);\n const url = `${props.searchUrl}?${createSearchParams({ address: address?.label || '' })}`;\n goTo(url);\n },\n [props.searchUrl]\n );\n\n const handleTransactUrlChange = useCallback((args: OnTransactUrlChangeArgs) => {\n goTo(args.url);\n }, []);\n\n return (\n <>\n <AvailabilityCheckPanel\n autoSubmitOnLoad\n address={address}\n addressSearchPlaceHolder={props.addressSearch.text.addressSearchPlaceHolder}\n apiKey={props.addressSearch.apiKey}\n countryCode={props.addressSearch.countryCode}\n onShowPlans={handleShowPlans}\n onTransactUrlChange={handleTransactUrlChange}\n queryDelay={props.addressSearch.queryDelay}\n tooltipDescription={props.addressSearch.text.tooltipDescription}\n tooltipLink={props.addressSearch.text.tooltipLink}\n productShortUrl={null}\n supplierShortUrl={props.supplierShortUrl}\n />\n </>\n );\n};\n\nconst SmartMoveVerifyPageConnected = connector(SmartMoveVerifyPageComponent);\n\nexport default function SmartMoveVerifyPage(props: Props) {\n return (\n <React.StrictMode>\n <AppComponent>\n <SmartMoveVerifyPageConnected {...props} />\n </AppComponent>\n </React.StrictMode>\n );\n}\n","import Update from 'immutability-helper';\n\nimport ResultsAdaptor from '../adaptors/BroadbandResultsAdaptor';\nimport { generateQueryString } from '../utils/BroadbandQueryString';\n\nexport default class BroadbandAddressSearchActions {\n constructor(searchUrl, coverageUrl) {\n this.searchUrl = searchUrl;\n this.coverageUrl = coverageUrl;\n this.resultsAdaptor = new ResultsAdaptor();\n }\n\n onCriteriaChange(criteria) {\n WhistleOut.startProgress('#search-results-partial', 0.1, 50);\n if (criteria.common.address || !this.coverageUrl) {\n const coveragePromise = this.resultsAdaptor.getCoveragePromise(criteria, this.coverageUrl);\n coveragePromise.then((result) => {\n if (result) {\n criteria.connectionTypes = {};\n criteria = Update(criteria,\n {\n connectionTypes: { values: { $set: result.connectionTypes.map(t => t.shortUrl) } }\n });\n if (!result.useDefaultSuppliers) {\n criteria.common.suppliers = {};\n }\n }\n this.search(criteria);\n });\n } else {\n this.search(criteria);\n }\n }\n\n search(criteria) {\n const queryString = generateQueryString(criteria);\n const url = this.searchUrl;\n const fullUrl = queryString.length ? `${url}?${queryString}` : url;\n window.location.assign(fullUrl);\n }\n}\n","import React, { Component } from 'react';\n\nimport AddressSearch from '../../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport BroadbandAddressSearchActions from './../../actions/BroadbandAddressSearchActions';\n\nexport default class BroadbandAddressSearch extends Component {\n\n constructor(props) {\n super(props);\n\n this.actions = new BroadbandAddressSearchActions(props.searchUrl, props.coverageUrl);\n this.onAddressChange = this.onAddressChange.bind(this);\n }\n\n onAddressChange(address) {\n if (this.props.ignoreAddressChange === true)\n return;\n let criteria = this.props.searchCriteria;\n if (!criteria) {\n criteria = { common: {} };\n }\n\n criteria.common.address = address;\n this.actions.onCriteriaChange(criteria);\n }\n\n render() {\n return (\n <React.StrictMode>\n <AddressSearch\n className='form-group mar-b-0 text-left'\n inputClassName=\"font-5\"\n countryCode={this.props.countryCode}\n placeholder={this.props.text.addressSearchPlaceHolder}\n types={this.props.types}\n queryDelay={this.props.queryDelay}\n apiKey={this.props.apiKey}\n addressNotFoundMessage={this.props.text.unableToVerifyAddress}\n commonErrorMessage={this.props.text.addressNotFound}\n onChange={this.onAddressChange}\n inputProps={{\n size: 40\n }}/>\n </React.StrictMode>\n );\n }\n}\n","import { produce } from 'immer';\nimport { createElement } from 'react';\nimport { render, unmountComponentAtNode } from 'react-dom';\n\nimport type { Address } from '../../../../Shared/js/@types/Address';\nimport { dispatchAddressChangedEvent } from '../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport type { SearchResult } from '../../../js/@types/api/SearchResult';\nimport type { SearchCriteria } from '../../../js/@types/SearchCriteria';\nimport type { WidenResultsArgs } from '../../../js/@types/WidenRessultsArgs';\nimport { actions as searchActions, SearchSliceState } from '../../../js/redux/searchSlice';\nimport ResultsAdaptor from '../adaptors/BroadbandResultsAdaptor';\nimport BroadbandAddressSearch from '../components/shared/BroadbandAddressSearch';\nimport { generateQueryString } from '../utils/BroadbandQueryString';\n\n// TODO: Move all state manipulation into the component\n// TODO: Use Redux actions\nexport default class BroadbandActions {\n props: {\n embeddedMode: boolean;\n nbnConnectionTypes: string[];\n\n criteria: SearchCriteria;\n defaultCriteria: SearchCriteria;\n coverage: string;\n coverageAddress: Address;\n searchSettings: SearchSliceState['settings'];\n };\n\n actions: {\n searchSuccess: typeof searchActions.searchSuccess;\n searchError: typeof searchActions.searchError;\n searchRetry: () => void;\n\n disableMaximumResultLimits: typeof searchActions.disableMaximumResultLimits;\n hideFeaturedResults: typeof searchActions.hideFeaturedResults;\n includeNbnConnections: typeof searchActions.includeNbnConnections;\n updateConnectionTypes: typeof searchActions.updateConnectionTypes;\n updateContractType: typeof searchActions.updateContractType;\n updateCriteria: typeof searchActions.updateCriteria;\n updateData: typeof searchActions.updateData;\n updateModem: typeof searchActions.updateModem;\n updatePlanSummarySupplier: typeof searchActions.updatePlanSummarySupplier;\n updateSort: typeof searchActions.updateSort;\n updateSpeed: typeof searchActions.updateSpeed;\n updateSuppliers: typeof searchActions.updateSuppliers;\n updateTab: typeof searchActions.updateTab;\n showModal: (tab: string) => void;\n widenResults: typeof searchActions.widenResults;\n };\n\n resultsAdaptor: ResultsAdaptor;\n\n init() {\n this.resultsAdaptor = new ResultsAdaptor();\n\n if (typeof window !== 'undefined') {\n this.initHistoryTracker();\n\n if (this.props.coverage) {\n WhistleOut.setCoverageCookie(this.props.coverage);\n }\n }\n\n this.bindResults();\n if (!this.props.embeddedMode) {\n this.trackPage(false);\n }\n }\n\n retrySearch() {\n this.actions.updateConnectionTypes([]);\n }\n\n changeTab = (value: string) => {\n const criteria = produce(this.props.criteria, draft => {\n draft.common.tab = value;\n });\n\n this.actions.updateTab(value);\n if (!this.props.embeddedMode) {\n const queryString = generateQueryString(criteria, this.props.searchSettings.allConnectionsSelected);\n this.HistoryWrapper.pushQuery(queryString);\n }\n };\n\n bindResults() {\n this.resultsAdaptor.unbindAll();\n this.resultsAdaptor.bindContractDropdown(\n (contractType: string, hide: boolean) => this.actions.updateContractType({ contractType, hide }),\n (tabName: string) => this.actions.showModal(tabName)\n );\n this.resultsAdaptor.bindCoverageStrip(() => this.actions.includeNbnConnections(this.props.nbnConnectionTypes));\n this.resultsAdaptor.bindCoverageErrorStrip(() => this.retrySearch());\n this.resultsAdaptor.bindSort((expression: string, isAscending: boolean) =>\n this.actions.updateSort({ expression, isAscending })\n );\n this.resultsAdaptor.bindTab((tab: string) => this.changeTab(tab));\n this.resultsAdaptor.bindLoadMore((tab: string, current: string) => this.loadMoreResults(tab, current));\n this.resultsAdaptor.bindWidenResults((options: WidenResultsArgs) => this.actions.widenResults(options));\n this.resultsAdaptor.bindHideFeatureResults(() => this.actions.hideFeaturedResults());\n this.resultsAdaptor.bindDisableMaximumResultLimits(() => this.actions.disableMaximumResultLimits());\n this.resultsAdaptor.bindPlanSummary((supplier: string, maxResults: number) =>\n this.actions.updatePlanSummarySupplier({ supplier, maxResults })\n );\n this.resultsAdaptor.bindModemCarouselLandingPage((modem: string) => this.actions.updateModem(modem));\n this.resultsAdaptor.bindLandingPageCriteria('criteria-data', (data: number) => this.actions.updateData(data));\n this.resultsAdaptor.bindLandingPageCriteria('criteria-speed', (speed: number) =>\n this.actions.updateSpeed(speed)\n );\n this.resultsAdaptor.bindLandingPageCriteria('criteria-supplier', (supplier: string | string[]) =>\n this.actions.updateSuppliers(supplier)\n );\n this.resultsAdaptor.bindCta();\n this.resultsAdaptor.bindNbnAlertModal();\n this.resultsAdaptor.bindSpeedTestResult();\n this.resultsAdaptor.bindCriteriaFilters(this.props.defaultCriteria, (criteria: SearchCriteria) =>\n this.actions.updateCriteria(criteria)\n );\n this.resultsAdaptor.bindFastProviders();\n\n WhistleOut.notifications.fire('SearchResultsRendered');\n\n const address = this.props.criteria.common.address || this.props.coverageAddress;\n if (address) {\n this.resultsAdaptor.bindCoverageMap();\n } else {\n this.resultsAdaptor.hideCoverageMapButton();\n }\n }\n\n loadMoreResults(tab: string, current: string) {\n if (tab !== 'all' && this.props.criteria.common.tab !== tab) return;\n\n let queryString = generateQueryString(this.props.criteria);\n if (queryString.length > 0) {\n queryString = `${queryString}¤t=${current}`;\n } else {\n queryString = `current=${current}`;\n }\n\n const url = this.props.searchSettings.pagedResultsUrl;\n const fullUrl = `${url}?${queryString}`;\n\n wo$.ajax({\n type: 'GET',\n url: fullUrl,\n success: (results: string) => {\n this.resultsAdaptor.appendLoadMoreResults(tab, results);\n }\n });\n }\n\n goToSearch(baseUrl: string, criteria: SearchCriteria) {\n const url = this.getSearchUrl(baseUrl, criteria);\n location.href = url;\n }\n\n getSearchUrl(baseUrl: string, criteria: SearchCriteria) {\n const queryString = generateQueryString(criteria, this.props.searchSettings.allConnectionsSelected);\n return queryString.length ? `${baseUrl}?${queryString}` : baseUrl;\n }\n\n // TODO: Remove this\n search(criteria: SearchCriteria) {\n const { embeddedMode } = this.props;\n const { searchUrl, coverageUrl, suppressCoverageCheck } = this.props.searchSettings;\n\n if (embeddedMode === true) {\n this.searchPageRefresh(criteria, searchUrl, suppressCoverageCheck, coverageUrl);\n }\n }\n\n searchPageRefresh(\n initialCriteria: SearchCriteria,\n searchUrl: string,\n suppressCoverageCheck: boolean,\n coverageUrl: string\n ) {\n WhistleOut.startProgress('#search-results-partial', 0.1, 50);\n\n //TODO: Set other criteria that should be reset when navigating to full results from embedded mode\n const criteria = produce(initialCriteria, p => {\n p.common.campaignGroup = null;\n\n p.common.results = p.common.results || ({} as SearchCriteria['common']['results']);\n p.common.results.hideEmptyTabs = false;\n p.common.results.hideTabsHeaderHeading = false;\n p.common.results.showAllResults = false;\n p.common.results.hideSort = false;\n p.common.results.hideShare = false;\n p.common.results.hideWidenResults = false;\n p.common.results.showRowSorts = true;\n p.common.results.showRowFilters = true;\n p.common.results.maximumNumberOfResults = null;\n p.common.results.hideCoverage = false;\n p.common.results.productLabel = null;\n p.common.results.pageSize = null;\n });\n\n if (criteria.common.address && suppressCoverageCheck === false) {\n this.resultsAdaptor\n .getCoveragePromise(criteria, coverageUrl)\n .then((connectionTypes: { shortUrl: string }[]) => {\n const updatedCriteria = produce(criteria, draft => {\n if (connectionTypes && connectionTypes.length) {\n draft.connectionTypes.values = connectionTypes.map(t => t.shortUrl);\n }\n });\n \n this.goToSearch(searchUrl, updatedCriteria);\n });\n return;\n }\n\n if (!criteria.common.address || !criteria.common.address.state) {\n WhistleOut.getCurrentLocation(\n e => {\n const updatedCriteria = produce(criteria, draft => {\n draft.common.address = { label: e.label } as Address;\n });\n this.goToSearch(searchUrl, updatedCriteria);\n },\n () => this.goToSearch(searchUrl, criteria)\n );\n return;\n }\n\n this.goToSearch(searchUrl, criteria);\n }\n\n onAjaxSearchSuccess(result: SearchResult) {\n const $results = wo$('#results-container');\n const $addressBar = wo$('[data-search-address] > div');\n const $fastProviders = wo$('#fast-providers');\n if ($addressBar.length > 0) {\n unmountComponentAtNode($addressBar[0]);\n }\n $results.html(result.html);\n $fastProviders.html(result.fastProvidersHtml);\n\n WhistleOut.setCoverageCookie(result.coverage);\n WhistleOut.applyPopover($results);\n\n const nodeToAttach = $results.find('[data-search-address]');\n if (nodeToAttach.length > 0) {\n render(\n createElement(BroadbandAddressSearch, nodeToAttach.data('search-address')),\n nodeToAttach.find('div')[0]\n );\n }\n\n this.bindResults();\n WhistleOut.getAds('Broadband');\n\n wo$(window).resize();\n\n dispatchAddressChangedEvent({\n sender: this,\n address: result.criteria.common.address\n });\n\n if (!this.props.embeddedMode) {\n const resultQueryString = generateQueryString(result.criteria, result.allAvailableConnectionsSelected);\n this.HistoryWrapper.pushQuery(resultQueryString);\n }\n\n this.actions.searchSuccess(result);\n this.trackPage(true);\n }\n\n onAjaxSearchError() {\n this.actions.searchError();\n\n const el = wo$('#modal-error');\n el.modal('show');\n }\n\n initHistoryTracker() {\n WhistleOut.initHistoryTracker(this);\n }\n\n trackPage(isAjax: boolean, doNotRetry?: boolean) {\n if (WhistleOut.getAnalyticsClientSideData() == null) {\n if (doNotRetry === true) {\n return;\n }\n setTimeout(() => this.trackPage(isAjax, true), 500);\n } else {\n const resultCount = wo$('#search-results-partial').data('result-count');\n const values = [];\n const criteria = this.props.criteria;\n let currentSupplierId = null;\n if (\n criteria.common.currentSupplierShortUrl &&\n criteria.common.currentSupplierShortUrl.length &&\n criteria.common.currentSupplierShortUrl !== '-None-'\n ) {\n currentSupplierId = this.props.searchSettings.suppliers.allItems.filter(\n i => i.shortUrl === criteria.common.currentSupplierShortUrl\n )[0].id;\n }\n values.push(currentSupplierId);\n values.push(criteria.common.minimumSpend);\n values.push(criteria.common.maximumSpend);\n values.push(criteria.data);\n values.push(criteria.common.includeOffersWithCampaignOnly);\n values.push(criteria.common.resultsSortExpression);\n values.push(criteria.common.resultsSortAscending);\n values.push(resultCount);\n if (criteria.common.address) {\n values.push(criteria.common.address.placeId);\n values.push(\n criteria.common.address.label\n ? criteria.common.address.label.replace('|', '')\n : criteria.common.address.label\n );\n values.push(criteria.common.address.state ? criteria.common.address.state.shortName : null);\n values.push(criteria.common.address.state ? criteria.common.address.state.longName : null);\n values.push(criteria.common.address.city ? criteria.common.address.city.longName : null);\n values.push(criteria.common.address.postcode ? criteria.common.address.postcode.longName : null);\n } else {\n values.push(null);\n values.push(null);\n values.push(null);\n values.push(null);\n values.push(null);\n values.push(null);\n }\n values.push(criteria.modemShortUrl);\n values.push(criteria.speed);\n const valuesString = values.join('|');\n WhistleOut.trackPageView(null, valuesString, isAjax);\n\n if (isAjax) {\n const value = WhistleOut.getRemarketingData();\n if (value) {\n value.data.postcode =\n criteria.common.address && criteria.common.address.postcode\n ? criteria.common.address.postcode.longName\n : null;\n value.data.data = criteria.data;\n value.data.speed = criteria.speed;\n value.data.supplier = criteria.common.suppliers.values.join();\n value.data.connectionType = criteria.connectionTypes.values.join();\n value.data.bundles = criteria.bundles.selectedTypes.join();\n WhistleOut.remarketing(value);\n }\n }\n }\n }\n}\n","import PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport format from 'string-format';\n\nimport type { KeyValue } from '../../../../js/@types/KeyValue';\nimport Slider from './Slider';\n\nexport interface Props {\n current: number;\n anyLabel: string;\n fromLabel: string;\n values: KeyValue[];\n containerClassName?: string;\n sliderClassName?: string;\n labelTemplate?: (content: string | JSX.Element) => JSX.Element;\n onValueChanged: (value: number) => void;\n onValueUpdating?: (value: number) => void;\n}\n\nconst SliderWithLabel = ({\n //\n current,\n sliderClassName = 'rc-slider-container pad-r-5-md pad-r-5-lg pad-x-4-xs pad-t-4',\n ...props\n}: Props) => {\n const [value, setValue] = useState(current);\n\n useEffect(() => {\n setValue(current);\n }, [current]);\n\n const handleValueUpdating = useCallback(\n value => {\n setValue(value);\n if (props.onValueUpdating) {\n props.onValueUpdating(value);\n }\n },\n [props]\n );\n\n const getItem = useCallback((value: number) => {\n return props.values.find(v => v.key === value);\n }, [props.values]);\n\n const labelText =\n value === 0 ? (\n props.anyLabel\n ) : value === -1 ? (\n getItem(value)?.value\n ) : (\n <span\n dangerouslySetInnerHTML={{\n __html: format(props.fromLabel, getItem(value)?.value)\n }}\n />\n );\n\n return (\n <div className={props.containerClassName}>\n <div>\n {props.labelTemplate ? (\n props.labelTemplate(labelText)\n ) : (\n <div className=\"font-6 font-5-md font-700\">{labelText}</div>\n )}\n </div>\n <div className={sliderClassName}>\n <Slider\n data={props.values.map(a => a.key)}\n current={value}\n onValueChanged={props.onValueChanged}\n onValueUpdating={handleValueUpdating}\n />\n </div>\n </div>\n );\n};\n\n// TODO: Consider using babel-plugin-typescript-to-proptypes to generate PropTypes\n/* eslint-disable import/no-named-as-default-member */\nSlider.prototype = {\n current: PropTypes.number.isRequired,\n anyLabel: PropTypes.string.isRequired,\n fromLabel: PropTypes.string.isRequired,\n labelTitle: PropTypes.string.isRequired,\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\n containerClassName: PropTypes.string,\n sliderClassName: PropTypes.string,\n labelTemplate: PropTypes.func,\n onValueChanged: PropTypes.func.isRequired\n};\n/* eslint-enable */\n\nexport default SliderWithLabel;\n","import React from 'react';\n\nimport SliderWithLabel from '../../../../../../Shared/React/js/components/sliders/SliderWithLabel';\nimport type { SearchFilters } from '../../../../../js/@types/SearchFilters';\n\ntype SliderProps = SearchFilters['dataSlider'];\n\ninterface Props extends SliderProps {\n current: number;\n onChanged: (value: number) => void;\n}\n\nconst DataFilter = (props: Props) => {\n return (\n <div className=\"hidden-xs col-sm-12\">\n <div className=\"font-4 font-3-md c-gray-light line-height-11\">{props.dataLabel}</div>\n <SliderWithLabel\n current={props.current}\n anyLabel={props.anyDataLabel}\n fromLabel={props.fromLabel}\n values={props.values}\n onValueChanged={props.onChanged}\n />\n </div>\n );\n};\n\nexport default DataFilter;\n","import React, { useCallback, useRef } from 'react';\n\ninterface Props {\n title: string;\n description: string;\n retryLabel: string;\n onRetry: () => void;\n}\n\nconst ErrorPanel = (props: Props) => {\n const containerRef = useRef(null);\n const handleRetry = useCallback(() => {\n const container = wo$(containerRef.current);\n container.modal('hide');\n wo$('body').removeClass('modal-open');\n wo$('.modal-backdrop').remove();\n\n if (props.onRetry) {\n props.onRetry();\n }\n }, [props]);\n\n return (\n <div\n className=\"modal fade\"\n id=\"modal-error\"\n ref={containerRef}\n data-backdrop=\"static\"\n data-keyboard=\"false\"\n tabIndex={-1}\n role=\"dialog\"\n aria-hidden=\"true\"\n >\n <div className=\"modal-dialog modal-lg\">\n <div className=\"modal-content\">\n <div className=\"modal-body [ pad-x-6 pad-y-12 ]\">\n <div className=\"row\">\n <div className=\"col-xs-24 col-sm-15 col-sm-offset-6 col-lg-14 col-log-offset-2\">\n <div className=\"text-center\">\n <h2 className=\"font-7 mar-t-0 mar-t-5-xs\">\n <strong>{props.title}</strong>{' '}\n <span className=\"text-nowrap\">{props.description}</span>\n </h2>\n <div className=\"pad-t-3 font-400\" id=\"enterAddressLocationForm\">\n <div className=\"row\">\n <div className=\"text-center-xs\">\n <button onClick={handleRetry} type=\"button\" className=\"btn btn-primary\">\n {props.retryLabel}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ErrorPanel;\n","import React from 'react';\n\ninterface Props {\n title: string;\n onClick: () => void;\n}\n\nconst ShowFiltersButton = (props: Props) => {\n return (\n <div className=\"col-xs-24 col-sm-5 col-md-4 col-lg-3 filters-3\">\n <div className=\"mar-t-5-xs mar-t-6-sm pad-t-5-sm mar-t-6-md pad-t-2-md mar-t-6-lg pad-t-3-lg\">\n <button type=\"button\" className=\"btn btn-block btn-sm btn-default font-4\" onClick={props.onClick}>\n <span className=\"fa fa-sliders display-inline-block mar-r-3 align-middle\"></span>\n {props.title}\n </button>\n </div>\n </div>\n );\n};\n\nexport default ShowFiltersButton;\n","import { produce } from 'immer';\nimport React, { useCallback } from 'react';\n\nimport SliderWithLabel from '../../../../../../Shared/React/js/components/sliders/SliderWithLabel';\nimport type { SearchFilters } from '../../../../../js/@types/SearchFilters';\n\ntype SliderProps = SearchFilters['speedSlider'];\n\ninterface Props extends SliderProps {\n current: number;\n onChanged: (value: number) => void;\n}\n\nconst SpeedFilter = (props: Props) => {\n const getTooltipProps = useCallback(() => {\n return produce(props.tooltipHtmlAttributes, (draft: { 'data-content': string }) => {\n const template = document.createElement('div');\n template.innerHTML = draft['data-content'];\n\n // Remove specific speed value related fragment\n const [speedFragment] = Array.prototype.slice\n .call(template.children)\n .filter((p: HTMLElement) => p.innerText.includes(props.speedDescriptionPlaceholder));\n\n if (speedFragment) {\n template.removeChild(speedFragment);\n }\n\n // Remove whitespaces\n template.innerHTML = template.innerHTML.trim();\n\n // Remove first HR\n const hr = template.querySelector('hr');\n if (hr && hr.previousSibling === null) {\n template.removeChild(hr);\n }\n\n draft['data-content'] = template.innerHTML;\n });\n }, [props.speedDescriptionPlaceholder, props.tooltipHtmlAttributes]);\n\n const tooltipProps = getTooltipProps();\n\n return (\n <div className=\"col-xs-24 col-sm-12\">\n <div\n className=\"font-4 font-3-md font-5-xs c-gray-light line-height-11 mar-b-2-xs hover-bg\"\n {...tooltipProps}\n >\n {props.speedLabel}{' '}\n <span>\n <i className=\"fa fa-info-circle\"></i>\n </span>\n </div>\n <SliderWithLabel\n current={props.current}\n anyLabel={props.anySpeedLabel}\n fromLabel={props.fromLabel}\n values={props.values}\n onValueChanged={props.onChanged}\n />\n </div>\n );\n};\n\nexport default SpeedFilter;\n","import ClassNames from 'classnames';\nimport React, { ButtonHTMLAttributes, useCallback, useRef } from 'react';\n\ninterface props {\n buttonProps?: ButtonHTMLAttributes<HTMLButtonElement>;\n children: JSX.Element;\n className?: string;\n selected: boolean;\n onSelected(selected: boolean): void;\n}\n\nconst OptionButton = (props: props) => {\n const btnRef = useRef(null);\n\n const handleOnSelected = useCallback(() => {\n // Remove the focus to avoid staying highlighted on mouse out\n btnRef.current.blur();\n\n if (props.onSelected) {\n props.onSelected(!props.selected);\n }\n }, [props]);\n\n const className = ClassNames(\n props.className,\n 'btn',\n { 'btn-info': !props.selected },\n { 'btn-default': props.selected === true },\n 'btn-filter pad-0 mar-0 mar-r-2',\n { active: props.selected === true }\n );\n\n return (\n <button {...props.buttonProps} ref={btnRef} className={className} onClick={handleOnSelected}>\n {props.children}\n </button>\n );\n};\n\nexport default OptionButton;\n","import React from 'react';\n\nimport OptionButton from './OptionButton';\n\nconst OptionTextButton = (props: { selected: boolean; text: string; onSelected(selected: boolean): void }) => {\n return (\n <OptionButton selected={props.selected} onSelected={props.onSelected}>\n <span>{props.text}</span>\n </OptionButton>\n );\n};\n\nexport default OptionTextButton;\n","/* eslint react/prop-types: error */\n\nimport { produce } from 'immer';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport OptionTextButton from './OptionTextButton';\n\nconst OptionGroup = ({\n items = [],\n selectedKeys: selectedKeysProps = [],\n getKey,\n maxItemsCount = 3,\n showSelectedCount,\n anyButtonPositionLast,\n showMoreVisible,\n header,\n text,\n onMoreClick: onMoreClickHandler,\n onSelectedItemsChanged: onSelectedItemsChangedHandler,\n renderItemButton: renderItemButtonHandler,\n renderAnyButton: renderAnyButtonHandler,\n\n // TOD: USe 'items' instead and remove this\n getTopEligibleItems: getTopEligibleItemsHandler\n}) => {\n const [selectedKeys, setSelectedKeys] = useState(selectedKeysProps || []);\n\n useEffect(() => {\n setSelectedKeys(selectedKeysProps || []);\n }, [selectedKeysProps]);\n\n const getItemByKey = useCallback(\n key => {\n return items.find(p => getKey(p) === key);\n },\n [getKey, items]\n );\n\n const onSelectedItemsChanged = useCallback(\n keys => {\n const ordered = (keys || []).slice().sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));\n\n setSelectedKeys(ordered);\n onSelectedItemsChangedHandler(ordered);\n },\n [onSelectedItemsChangedHandler]\n );\n\n const onAnyClick = useCallback(() => {\n // Ignore if everything is already selected\n if (!selectedKeys || selectedKeys.length === 0) {\n return;\n }\n onSelectedItemsChanged([]);\n }, [onSelectedItemsChanged, selectedKeys]);\n\n const onMoreClick = useCallback(\n event => {\n event.preventDefault();\n if (onMoreClickHandler) {\n onMoreClickHandler(event);\n }\n },\n [onMoreClickHandler]\n );\n\n const onItemSelected = (item, selected) => {\n const keys = produce(selectedKeys, draft => {\n const key = getKey(item);\n if (selected) {\n draft.push(key);\n } else {\n draft.splice(draft.indexOf(key), 1);\n }\n });\n\n onSelectedItemsChanged(keys);\n };\n\n const getSelectedItems = useCallback(() => {\n return selectedKeys.map(key => getItemByKey(key)).filter(p => !!p);\n }, [getItemByKey, selectedKeys]);\n\n // TOD: USe 'items' instead and remove this\n const getTopEligibleItems = useCallback(() => {\n if (getTopEligibleItemsHandler) {\n return getTopEligibleItemsHandler(items);\n }\n\n return items;\n }, [getTopEligibleItemsHandler, items]);\n\n const topEligibleItems = getTopEligibleItems();\n const topItemsCount = Math.min(maxItemsCount, topEligibleItems.length);\n\n const renderItemButton = (item, onSelected) => {\n if (renderItemButtonHandler) {\n const isSelected = selectedKeys.some(key => getKey(item) === key);\n\n const lastVisibleItem = topEligibleItems.slice(0, topItemsCount)[topItemsCount - 1];\n const className = item === lastVisibleItem ? 'hidden-md' : null;\n\n return renderItemButtonHandler(item, className, isSelected, onSelected);\n }\n };\n\n const itemsCount = items.length;\n const selectedItems = getSelectedItems();\n const unselectedCount = items.length - (selectedKeys || []).length;\n const selectedCount = selectedItems.length;\n\n const isAllSelected =\n selectedCount === 0 ||\n unselectedCount === 0 ||\n selectedCount === items.length ||\n unselectedCount === items.length;\n\n const anyButton = renderAnyButtonHandler ? (\n renderAnyButtonHandler(isAllSelected, onAnyClick)\n ) : (\n <OptionTextButton text={text.all} selected={isAllSelected} onSelected={onAnyClick} />\n );\n\n return (\n <React.Fragment>\n {header ? (\n <div className=\"mar-b-5 font-4 c-gray-light\">\n {header}\n {showSelectedCount && !isAllSelected && selectedItems.length > 0 ? (\n <span>\n <span className=\"c-gray-lighter\"> | </span>\n <a href=\"#\" onClick={onMoreClick}>{`${selectedItems.length}\\u00a0${text.selected}`}</a>\n </span>\n ) : null}\n </div>\n ) : null}\n {!anyButtonPositionLast ? anyButton : null}\n {\n // Top items\n topEligibleItems\n .slice(0, topItemsCount)\n .map(item => renderItemButton(item, selected => onItemSelected(item, selected)))\n }\n {anyButtonPositionLast ? anyButton : null}\n {showMoreVisible || itemsCount > topItemsCount ? (\n <button\n type=\"button\"\n className=\"mar-l-4 btn btn-info btn-filter pad-0 mar-0 c-blue\"\n onClick={onMoreClick}\n >\n <span className=\"font-4 display-block line-height-1\">\n <strong>{itemsCount - topItemsCount}</strong>\n </span>\n <span className=\"font-3 display-block line-height-1\">{text.more.toLowerCase()}</span>\n </button>\n ) : null}\n </React.Fragment>\n );\n};\n\n/* eslint-disable import/no-named-as-default-member */\nOptionGroup.propTypes = {\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\n selectedKeys: PropTypes.arrayOf(PropTypes.string),\n getKey: PropTypes.func.isRequired,\n maxItemsCount: PropTypes.number,\n showSelectedCount: PropTypes.bool,\n anyButtonPositionLast: PropTypes.bool,\n showMoreVisible: PropTypes.bool,\n header: PropTypes.oneOfType([\n //\n PropTypes.string,\n PropTypes.number,\n PropTypes.element\n ]),\n text: PropTypes.shape({\n all: PropTypes.string.isRequired,\n selected: PropTypes.string.isRequired,\n showAll: PropTypes.string.isRequired,\n more: PropTypes.string.isRequired\n }).isRequired,\n onMoreClick: PropTypes.func,\n onSelectedItemsChanged: PropTypes.func,\n renderItemButton: PropTypes.func.isRequired,\n renderAnyButton: PropTypes.func,\n getTopEligibleItems: PropTypes.func.isRequired\n};\n/* eslint-enable */\n\nexport default OptionGroup;\n","import React from 'react';\n\nimport OptionButton from './OptionButton';\n\nconst OptionImageButton = (props: {\n className: string;\n imageAlt: string;\n imageSrc: string;\n selected: boolean;\n onSelected(selected: boolean): void;\n}) => {\n return (\n <OptionButton\n selected={props.selected}\n onSelected={props.onSelected}\n className={props.className}\n buttonProps={{\n 'data-toggle': 'popover',\n 'data-trigger': 'hover',\n 'data-placement': 'auto',\n 'data-animation': true,\n 'data-content': props.imageAlt\n }}\n >\n <img className=\"img-responsive center-block brand-equalizer\" src={props.imageSrc} alt={props.imageAlt} />\n </OptionButton>\n );\n};\n\nexport default OptionImageButton;\n","import React, { useCallback } from 'react';\n\nimport OptionGroup from './OptionGroup';\nimport OptionImageButton from './OptionImageButton';\n\nconst SuppliersOptionGroup = ({\n items,\n selectedKeys,\n getKey,\n availableSupplierIds,\n showHeader,\n businessOnly,\n text,\n onSelectedItemsChanged,\n onShowAllProviders,\n\n}) => {\n\n const getTopEligibleItems = useCallback((items) => {\n return items.filter(item =>\n // The provider should be available in the search result set,\n // otherwise selecting that provider would cause an empty result for the search\n !availableSupplierIds || availableSupplierIds.indexOf(item.id) > -1);\n\n }, [availableSupplierIds]);\n\n const onSelectedItemsChangedHandler = useCallback(shortUrls => {\n WhistleOut.trackEvent(\n 'BroadbandSearchResults',\n 'FilterChanged',\n 'Providers: ' + (\n shortUrls.length === 0\n ? 'Any'\n : shortUrls.join(',')\n ));\n\n if (onSelectedItemsChanged) {\n onSelectedItemsChanged(shortUrls);\n }\n\n }, [onSelectedItemsChanged]);\n\n const renderHasNoItems = (header) => {\n return (\n <React.Fragment>\n {\n header\n ? <div className=\"mar-b-2\">\n {header}\n </div>\n : null\n }\n <div className=\"c-gray-light pad-x-9\">\n {text.noProvidersFoundForCriteria}\n </div>\n </React.Fragment>\n );\n };\n\n const renderItemButton = useCallback((item, className, isSelected, onSelected) => {\n return (\n <OptionImageButton\n key={item.id}\n imageSrc={item.smallImageUrl}\n imageAlt={item.name}\n className={className}\n selected={isSelected}\n onSelected={onSelected} />\n );\n\n }, []);\n\n const header = showHeader ? text.heading : null;\n\n const availableItems = items.filter(\n item =>\n !!item.isAvailable &&\n (!businessOnly || item.isBusiness)\n );\n\n if (!availableItems || availableItems.length === 0) {\n return renderHasNoItems(header);\n }\n\n const topEligibleItems = getTopEligibleItems(availableItems);\n if (topEligibleItems.length === 0) {\n return renderHasNoItems(header);\n }\n\n return (\n <OptionGroup\n items={availableItems}\n selectedKeys={selectedKeys}\n getKey={getKey}\n getTopEligibleItems={getTopEligibleItems}\n renderItemButton={renderItemButton}\n onSelectedItemsChanged={onSelectedItemsChangedHandler}\n onMoreClick={onShowAllProviders}\n header={header}\n text={text}\n showSelectedCount\n maxItemsCount={6}\n />\n );\n};\n\nexport default SuppliersOptionGroup;\n","import React from 'react';\n\nimport type { Supplier } from '../../../../../../Shared/js/@types/Supplier';\nimport type { SuppliersModel } from '../../../../../../Shared/js/@types/SuppliersModel';\nimport SuppliersOptionGroup from '../../../../../../Shared/React/js/components/optionButtons/SuppliersOptionGroup';\n\ninterface Props {\n isBusinessOnly: boolean;\n selectedKeys: string[];\n showTextOnly: boolean;\n textContent: string;\n showHeader: boolean;\n suppliers: SuppliersModel;\n getKey: (item: Supplier) => string;\n onChanged: (keys: string[]) => void;\n onShowAll: () => void;\n}\n\nconst SuppliersFilter = (props: Props) => {\n return (\n <div className=\"hidden-xs col-sm-19 col-md-12 col-lg-12 filters-1\">\n {props.showTextOnly ? (\n <div dangerouslySetInnerHTML={{ __html: props.textContent }}></div>\n ) : (\n <SuppliersOptionGroup\n {...props.suppliers}\n selectedKeys={props.selectedKeys}\n businessOnly={props.isBusinessOnly}\n showHeader={props.showHeader}\n onSelectedItemsChanged={props.onChanged}\n onShowAllProviders={props.onShowAll}\n getKey={props.getKey}\n />\n )}\n </div>\n );\n};\n\nexport default SuppliersFilter;\n","import { createContext } from 'react';\n\nimport { SearchCriteria } from '../../../../js/@types/SearchCriteria';\nimport { SearchFilters } from '../../../../js/@types/SearchFilters';\n\nexport interface SearchFilterContextData {\n data: SearchFilters,\n criteria: SearchCriteria,\n};\n\nexport const SearchFilterContext = createContext<SearchFilterContextData>(null);","import React, { useCallback, useContext, useEffect, useState } from 'react';\n\nimport { dispatch } from '../../../../../../Shared/js/redux/store';\nimport { selectOptions } from '../../../../../js/@types/SearchFilters';\nimport { actions } from '../../../../../js/redux/modalSlice';\nimport { SearchFilterContext, SearchFilterContextData } from '../SearchFilterContext';\n\nlet include: string;\nlet exclude: string;\nconst phone = 'phone';\nconst tv = 'tv';\nconst lineRental = 'lineRental';\nconst mobile = 'mobile';\n\nfunction BuildOptionString( prefix: string, state: boolean ) : string {\n return state ? prefix+include: prefix+exclude;\n}\n\nfunction BuildInitalState(context: SearchFilterContextData): Array<string>\n{\n const stateArray :string[] = [];\n if (context.criteria.bundles.homePhone !== null)\n stateArray.push( BuildOptionString(phone, context.criteria.bundles.homePhone));\n \n if (context.criteria.bundles.mobilePhone !== null)\n stateArray.push( BuildOptionString(mobile, context.criteria.bundles.mobilePhone));\n \n if (context.criteria.bundles.tv !== null)\n stateArray.push( BuildOptionString(tv, context.criteria.bundles.tv));\n \n if (context.criteria.bundles.lineRental !== null)\n stateArray.push( BuildOptionString(lineRental, context.criteria.bundles.lineRental));\n\n if (stateArray.length === 0) {\n return [''];\n }\n return stateArray;\n}\n\nexport default function BundleSelect() {\n\n const context = useContext(SearchFilterContext);\n include = context.data.resources.include;\n exclude = context.data.resources.exclude;\n const [optionsSelected, setOptionsSelected] = useState(Array<string>(...BuildInitalState(context)));\n const [tvOptionsSelected, setTvOptionsSelected] = useState(Array<string>(...(context.criteria.bundles.tvChannels.map<string>(tc => tc.toString()))));\n const [showTvChannels, setShowTvChannels] = useState(context.criteria.bundles.tv === true);\n \n useEffect(() => {\n const select = wo$('#choose-bundles');\n select.selectpicker('refresh');\n \n if (optionsSelected.some(os => os === '')) { \n dispatch(actions.updatePhoneBundle(null));\n dispatch(actions.updateTvBundle(null));\n dispatch(actions.updateLineRentalBundle(null));\n dispatch(actions.updateMobileBundle(null));\n return;\n }\n \n dispatch(actions.updatePhoneBundle( optionsSelected.some(os => os === phone+include) ? true: optionsSelected.some(os => os === phone+exclude)?false:null));\n \n if(optionsSelected.some(os => os === tv+include))\n {\n dispatch(actions.updateTvBundle(true));\n }\n else\n {\n dispatch(actions.updateTvBundle(optionsSelected.some(os => os === tv+exclude)?false:null));\n setTvOptionsSelected([]);\n }\n\n if (context.data.showLineRental) {\n dispatch(actions.updateLineRentalBundle( \n optionsSelected.some(os => os === lineRental+include) \n ? true\n : optionsSelected.some(os => os === lineRental+exclude)?false:null\n ));\n }\n if (context.data.showMobilePhoneBundle){\n dispatch(actions.updateMobileBundle(\n optionsSelected.some(os => os === mobile+include)\n ? true\n : optionsSelected.some(os => os === mobile+exclude)?false:null\n ));\n }\n }, [optionsSelected, context.data]);\n\n useEffect(()=> {\n const select = wo$('choose-tv-channels');\n select.selectpicker('refresh');\n \n const values = [...tvOptionsSelected.map(tv => Number.parseInt(tv))];\n dispatch(actions.updateTvChannels(values));\n\n }, [tvOptionsSelected]);\n\n const onChangeCallBack = useCallback((e)=> {\n const options = [...e.target.selectedOptions];\n let values = options.map( option => option.value);\n if(values.some(o => o === ''))\n {\n if(!optionsSelected.some(o => o === ''))\n {\n setOptionsSelected(Array(...['']));\n setShowTvChannels(false);\n return;\n }\n else if( values.length >= 1)\n {\n values = values.filter( o => o !== '');\n }\n } \n\n const tvIncluded = values.some(os => os === tv+include);\n setShowTvChannels(tvIncluded);\n setOptionsSelected([...values]);\n }, [optionsSelected]);\n\n const onLoad = useCallback((node: HTMLElement) => {\n const element = jQuery(node);\n WhistleOut.applySelectPicker(element);\n }, []);\n\n const OnTvChangeCallBack = useCallback((e) => {\n const options = [...e.target.selectedOptions];\n\n setTvOptionsSelected(options.map(o => o.value));\n }, []);\n\n function buildChannelOptions(options: selectOptions[]) {\n return options.map(o => {\n return (\n <option key={o.key} value={o.key}>\n {o.value}\n </option>\n );\n });\n }\n\n return(\n <div>\n <h5 className=\"font-5\">\n {context.data.resources.bundle}\n </h5>\n <div className=\"selectpicker-wide\">\n <select\n id=\"choose-bundles\"\n tabIndex={-1}\n className=\"selectpicker bs-select-hidden\"\n multiple={true}\n onChange={onChangeCallBack}\n value={optionsSelected} \n ref={onLoad}\n data-selected-text-format=\"count>1\"\n >\n <option key=\"\" value=\"\" >{context.data.resources.showAllBundles}</option>\n <optgroup label={context.data.resources.phoneBundle} data-max-options=\"1\">\n <option key=\"pI\" value={phone+include} title={`${include} ${context.data.resources.phoneBundle}`}>{include}</option>\n <option key=\"pE\" value={phone+exclude} title={`${exclude} ${context.data.resources.phoneBundle}`}>{exclude}</option>\n </optgroup>\n <optgroup label={context.data.resources.tvBundle} data-max-options=\"1\">\n <option key=\"tvI\" value={tv+include} title={`${include} ${context.data.resources.tvBundle}`}>{include}</option>\n <option key=\"tvE\" value={tv+exclude} title={`${exclude} ${context.data.resources.tvBundle}`}>{exclude}</option>\n </optgroup> \n {\n context.data.showLineRental ? (\n <optgroup label={context.data.resources.lineRental} data-max-options=\"1\">\n <option key=\"lrI\" value={lineRental+include} title={`${include} ${context.data.resources.lineRental}`}>{include}</option>\n <option key=\"lrE\" value={lineRental+exclude} title={`${exclude} ${context.data.resources.lineRental}`}>{exclude}</option>\n </optgroup>\n ) : null\n } \n {\n context.data.showMobilePhoneBundle ? (\n <optgroup label={context.data.resources.mobilePhoneBundle} data-max-options=\"1\">\n <option key=\"mI\" value={mobile+include} title={`${include} ${context.data.resources.mobilePhoneBundle}`}>{include}</option>\n <option key=\"mE\" value={mobile+exclude} title={`${exclude} ${context.data.resources.mobilePhoneBundle}`}>{exclude}</option>\n </optgroup> \n ) : null\n }\n </select>\n {\n context.data.showTvChannels ? (\n <span hidden={!showTvChannels}>\n <select\n id=\"choose-tv-channels\"\n title={context.data.resources.mustHaveChannels}\n className=\"selectpicker bs-select-hidden mar-t-3\"\n value={tvOptionsSelected}\n onChange={OnTvChangeCallBack}\n multiple = {true}\n ref={onLoad}\n data-selected-text-format=\"count>1\"\n >\n <optgroup label={context.data.resources.individualChannels}>\n {buildChannelOptions(context.data.individualTvChannels)}\n </optgroup>\n <optgroup label={context.data.resources.kidsChannels}>\n {buildChannelOptions(context.data.kidsTvChannels)}\n </optgroup>\n <optgroup label={context.data.resources.sportsChannels}>\n {buildChannelOptions(context.data.sportsTvChannels)}\n </optgroup>\n </select>\n </span>\n ) : null\n }\n </div>\n </div>\n );\n}","import React, { useCallback, useContext, useEffect, useState } from 'react';\n\nimport { dispatch } from '../../../../../../Shared/js/redux/store';\nimport {actions} from '../../../../../js/redux/modalSlice';\nimport { SearchFilterContext, SearchFilterContextData } from '../SearchFilterContext';\nimport BundleSelect from './BundleSelect';\n\nfunction BuildMegaAdvancedState(context: SearchFilterContextData) : string[] {\n const returnArray = new Array<string>();\n if(context.criteria.common.maxResultsPerSupplier)\n returnArray.push('single-result');\n if(context.criteria.staticIp)\n returnArray.push('static-ip');\n if(context.criteria.uploadNotCounted)\n returnArray.push('upload-not-counted');\n if(context.criteria.common.showLessResults)\n returnArray.push('less-results');\n return returnArray;\n}\n\nexport default function AdvancedTab () {\n //Select Names\n const chooseContractTerms = 'choose-contract-terms';\n const chooseModem = 'choose-modem';\n const choosePrepaidExpiry= 'choose-prepaid-expiry';\n const chooseMegaAdvanced= 'choose-mega-advanced';\n const byoModem ='BYO-Modem';\n const simOnly = 'sim-only';\n\n\n const context = useContext(SearchFilterContext);\n const allContractTerms = context.data.allContractTerms;\n const [contractTermSelectedOptions, setSelectedContractTerms] = useState<Array<string>>(context.criteria.common.contractTerms.map(ct => ct.toString()));\n const [modemSelectedOptions, setModemSelectedOptions] = useState<string>(context.criteria.modemShortUrl === byoModem ? (context.criteria.simOnly ? simOnly : byoModem) : context.criteria.modemShortUrl) ;\n const [prepaidExpirySelectedOptions, setPrepaidExpirySelectedOptions] = useState<string>(context.criteria.prepaidExpiry?.valueOf()?.toString() ?? '') ;\n const [megaAdvancedSelectedOptions, setMegaAdvancedSelectedOptions] = useState<Array<string>>(BuildMegaAdvancedState(context)) ;\n\n const DidUnmount = useCallback((node: HTMLElement) => {\n const dom = jQuery(node);\n const select = dom.find('#'+chooseModem);\n select.off('change', this.onModemChange);\n }, []);\n\n const DidMount = useCallback((node:HTMLElement) => {\n const dom = jQuery(node);\n WhistleOut.applySelectPickersStyle(dom);\n WhistleOut.applySelectPicker(dom.find('#'+chooseContractTerms));\n WhistleOut.applySelectPicker(dom.find('#'+chooseModem));\n WhistleOut.applySelectPicker(dom.find('#'+choosePrepaidExpiry));\n WhistleOut.applySelectPicker(dom.find('#'+chooseMegaAdvanced));\n return () => DidUnmount(node);\n }, [DidUnmount]);\n\n useEffect(() => {\n if( contractTermSelectedOptions === undefined || contractTermSelectedOptions.map === undefined)\n return;\n\n dispatch(actions.updateContractTerms({\n selected: contractTermSelectedOptions.map(ct => Number.parseInt(ct)),\n all: allContractTerms\n }));\n\n }, [contractTermSelectedOptions, allContractTerms]);\n\n useEffect(()=>{\n const isSimOnly = modemSelectedOptions === simOnly;\n \n dispatch(actions.updateModem({\n modemShortUrl: isSimOnly ? byoModem : modemSelectedOptions,\n simOnly: isSimOnly\n }));\n }, [modemSelectedOptions]);\n\n useEffect(()=>{\n dispatch(actions.updatePrepaidExpiry(Number.parseInt(prepaidExpirySelectedOptions)));\n }, [prepaidExpirySelectedOptions]);\n\n useEffect(() => {\n dispatch(actions.updateAdvancedOptions(megaAdvancedSelectedOptions));\n }, [megaAdvancedSelectedOptions]);\n\n const OnChange = useCallback((e)=>{\n const options = [...e.target.selectedOptions];\n const values = options.map(o => o.value);\n switch(e.target.id)\n {\n case chooseContractTerms: \n setSelectedContractTerms(values);\n break;\n case chooseModem:\n setModemSelectedOptions(values[0]);\n break;\n case choosePrepaidExpiry:\n setPrepaidExpirySelectedOptions(values[0]);\n break;\n case chooseMegaAdvanced:\n setMegaAdvancedSelectedOptions(values);\n break;\n default:\n break;\n }\n }, []);\n\n function renderMobileBroadbandModems() {\n \n if (context.data.showMobileModems) {\n \n return (<optgroup label={context.data.mobileModemsLabel}>\n {\n context.data.mobileModemTypes.map(modem => {\n return (\n <option key={modem.key} value={modem.key}>\n {modem.value}\n </option>\n );\n })\n }\n </optgroup>\n );\n }\n }\n\n return (\n <div ref={DidMount}>\n <div className=\"row\">\n <div className=\"col-md-10\">\n <div className=\"row pad-b-5\">\n <div className=\"col-xs-24\">\n <h5 className=\"font-5\">\n {context.data.resources.contractLength}\n </h5>\n <div className=\"selectpicker-wide\">\n <select\n id={chooseContractTerms}\n tabIndex={-1}\n className=\"selectpicker bs-select-hidden\"\n multiple\n data-selected-text-format=\"count>1\"\n onChange={OnChange}\n value={contractTermSelectedOptions}\n >\n {\n context.data.contractTerms.map(contractTerm => {\n return (\n <option key={contractTerm.key} value={contractTerm.key}>\n {contractTerm.value}\n </option>\n );\n })\n }\n </select>\n </div>\n </div>\n </div>\n <div className=\"row pad-y-5\">\n <div className=\"col-xs-24\">\n <h5 className=\"font-5\">\n {context.data.resources.modemType}\n </h5>\n <div className=\"selectpicker-wide\">\n <select\n id={chooseModem}\n tabIndex={-1}\n className=\"selectpicker bs-select-hidden\"\n onChange={OnChange}\n value={modemSelectedOptions}\n >\n <option value=\"\">\n {context.data.anyModemLabel}\n </option>\n <optgroup label={context.data.homeModemsLabel}>\n {\n context.data.homeModemTypes.map(modem => {\n return (\n <option key={modem.key} value={modem.key}>\n {modem.value}\n </option>\n );\n })\n }\n </optgroup>\n {renderMobileBroadbandModems()}\n </select>\n </div>\n </div>\n </div>\n </div>\n <div className=\"col-sm-24 col-md-10 col-md-offset-2\"> \n <div className=\"row pad-b-5\">\n <div className=\"col-xs-24\">\n <h5 className=\"font-5\">\n {context.data.resources.prepaidExpiry}\n </h5>\n <div className=\"selectpicker-wide\">\n <select\n id=\"choose-prepaid-expiry\"\n tabIndex={-1}\n className=\"selectpicker bs-select-hidden\"\n onChange={OnChange}\n value={prepaidExpirySelectedOptions}\n >\n {\n context.data.prepaidExpiryValues.map(expiry => {\n \n return (\n <option key={expiry.key} value={expiry.key}>\n {expiry.value}\n </option>\n );\n })\n }\n </select>\n </div>\n </div>\n </div> \n {\n context.data.showMegaAdvancedFilters ?\n (\n <div className=\"row pad-y-5\">\n <div className=\"col-xs-24\">\n <h5 className=\"font-5\">\n {context.data.resources.superMegaAdvanced}\n </h5>\n <div className=\"selectpicker-wide\">\n <select\n id=\"choose-mega-advanced\"\n tabIndex={-1}\n className=\"selectpicker bs-select-hidden\"\n multiple\n data-selected-text-format=\"count>1\"\n title={context.data.resources.selectOptions}\n value={megaAdvancedSelectedOptions}\n onChange={OnChange}\n >\n {\n context.data.megaAdvancedOptions.map(o => {\n return (\n <option key={o.key} value={o.key}>\n {o.value}\n </option>\n );\n })\n }\n </select>\n </div>\n </div>\n </div>\n )\n : null\n }\n <div className=\"row pad-y-5\">\n <div className=\"col-xs-24\">\n <BundleSelect/>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { Component } from 'react';\n\nexport default class ConnectionType extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n rawChecked: null\n };\n\n this.onCheckedChanged = this.onCheckedChanged.bind(this);\n }\n\n static getDerivedStateFromProps(props, state) {\n return props.value === state.rawValue\n ? { rawChecked: null }\n : null;\n }\n\n onCheckedChanged(e) {\n const checked = e.currentTarget.checked;\n this.setState({ rawChecked: checked });\n\n if (this.props.onCheckedChanged) {\n this.props.onCheckedChanged(this.props.item, checked);\n }\n }\n\n render() {\n const checked = this.state.rawChecked !== null\n ? this.state.rawChecked\n : this.props.checked;\n\n return (\n <div className=\"checkbox-tick mar-b-2\">\n <input\n type=\"checkbox\"\n id={this.props.item.id}\n disabled={this.props.disabled}\n checked={checked}\n onChange={this.onCheckedChanged}\n />\n <label className=\"display-block font-4 c-black font-400\" htmlFor={this.props.item.id}>\n <span>\n <span dangerouslySetInnerHTML={{ __html: this.props.item.title }} />\n </span>\n </label>\n </div>\n );\n }\n}\n","import React, { Component, createRef } from 'react';\n\nimport ConnectionType from './ConnectionType';\n\nexport default class ConnectionTab extends Component {\n\n constructor(props) {\n super(props);\n\n this.allShortUrls = [\n ...this.props.connectionTypeTiers.tier1ConnectionTypes,\n ...this.props.connectionTypeTiers.tier2ConnectionTypes,\n ...this.props.connectionTypeTiers.tier3ConnectionTypes\n ].map(p => p.shortUrl);\n\n const shortUrls = (props.criteria.connectionTypes || {}).values || [];\n this.state = {\n allUnselected: false,\n selectedShortUrls: shortUrls,\n isAllSelected: shortUrls.length === 0 ? true : false\n };\n\n this.wrapper = createRef();\n this.renderConnectionType = this.renderConnectionType.bind(this);\n this.handleConnectionTypeValueChanged = this.handleConnectionTypeValueChanged.bind(this);\n this.toggleConnections = this.toggleConnections.bind(this);\n this.toggleTier1 = this.toggleTier1.bind(this);\n this.toggleTier2 = this.toggleTier2.bind(this);\n this.toggleTier3 = this.toggleTier3.bind(this);\n this.toggleConnectionCategory = this.toggleConnectionCategory.bind(this);\n this.onSelectAllChange = this.onSelectAllChange.bind(this);\n this.renderConnectionTypeCategory = this.renderConnectionTypeCategory.bind(this);\n }\n\n\n isChecked(connectionType) {\n return this.state.selectedShortUrls.length === 0 && !this.state.allUnselected\n || connectionType && connectionType.shortUrl && this.state.selectedShortUrls.includes(connectionType.shortUrl);\n }\n\n handleConnectionTypeValueChanged(connectionType, checked) {\n console.log('handleConnectionTypeValueChanged', {\n item: connectionType.title,\n checked: checked\n });\n\n if (!connectionType || !connectionType.shortUrl) {\n const error = new Error('connectionType or the short url is undefined');\n error.data = connectionType;\n throw error;\n }\n\n if (checked) {\n this.AddItem(connectionType);\n } else {\n this.RemoveItem(connectionType);\n }\n }\n\n toggleConnections(connections) {\n let anyOneUnChecked = false;\n connections.forEach((connection) => {\n if (!this.isChecked(connection)) {\n anyOneUnChecked = true;\n }\n });\n\n if (anyOneUnChecked) {\n this.AddItems(connections);\n } else {\n this.RemoveItems(connections);\n }\n }\n\n updateConnectionTypes(allUnselected, selectedShortUrls) {\n const selected = selectedShortUrls.length !== this.allShortUrls.length\n ? selectedShortUrls\n : [];\n\n const isAllSelected = !allUnselected && selected.length===0;\n this.setState({\n allUnselected: allUnselected,\n selectedShortUrls: selected,\n isAllSelected: isAllSelected\n });\n this.props.updateConnectionTypes(selected);\n }\n\n AddItem(connectionType) {\n if (this.isChecked(connectionType)) {\n return;\n }\n\n let newValue = [...this.state.selectedShortUrls];\n newValue.push(connectionType.shortUrl);\n\n this.updateConnectionTypes(false, newValue);\n }\n\n AddItems(connectionTypes) {\n let newValue = [...this.state.selectedShortUrls];\n connectionTypes.forEach(t => {\n if (wo$.inArray(t.shortUrl, newValue) === -1) {\n newValue.push(t.shortUrl);\n }\n });\n\n this.updateConnectionTypes(false, newValue);\n }\n\n RemoveItem(connectionType) {\n if (!this.isChecked(connectionType)) {\n return;\n }\n\n // Removing last connection type\n if (this.state.selectedShortUrls.length === 1) {\n this.unSelectAll();\n return;\n }\n\n const current = this.state.selectedShortUrls.length === 0\n ? this.allShortUrls\n : this.state.selectedShortUrls;\n\n this.updateConnectionTypes(\n false,\n current.filter(p => p !== connectionType.shortUrl)\n );\n }\n\n RemoveItems(connectionTypes) {\n const current = this.state.selectedShortUrls.length === 0\n ? this.allShortUrls\n : this.state.selectedShortUrls;\n\n let newValue = [...current];\n connectionTypes.forEach(t => {\n const index = newValue.indexOf(t.shortUrl);\n if (index > -1) {\n newValue.splice(index, 1);\n }\n });\n\n if (newValue.length === 0) {\n this.unSelectAll();\n return;\n }\n\n this.updateConnectionTypes(false, newValue);\n }\n\n onSelectAllChange() {\n if(!this.state.isAllSelected){\n this.selectAll();\n }else{\n this.unSelectAll();\n }\n }\n selectAll() {\n this.updateConnectionTypes(false, []);\n }\n\n unSelectAll() {\n this.updateConnectionTypes(true, []);\n }\n\n renderConnectionType(connectionType) {\n const disabled =\n this.props.unavailableConnectionTypes &&\n this.props.unavailableConnectionTypes.length &&\n this.props.unavailableConnectionTypes.findIndex(c => connectionType.shortUrl === c.shortUrl) > -1;\n\n const checked = disabled === true\n ? false\n : this.isChecked(connectionType);\n\n return (\n <ConnectionType\n key={connectionType.id}\n item={connectionType}\n disabled={disabled}\n checked={checked}\n onCheckedChanged={this.handleConnectionTypeValueChanged}\n />\n );\n }\n\n toggleTier1() {\n this.toggleConnections(this.props.connectionTypeTiers.tier1ConnectionTypes);\n }\n\n toggleTier2() {\n this.toggleConnections(this.props.connectionTypeTiers.tier2ConnectionTypes);\n }\n\n toggleTier3() {\n this.toggleConnections(this.props.connectionTypeTiers.tier3ConnectionTypes);\n }\n\n toggleConnectionCategory = connectionTypes => () => {\n this.toggleConnections(connectionTypes);\n };\n\n renderConnectionTypeCategory(connectionTypeCategory, index) {\n let titleClass = '[ col-xs-24 ] [ col-sm-8 col-md-8 ] [ pad-x-5 pad-x-2-xs pad-x-2-sm ]';\n \n if (this.props.connectionTypeCategories.length === 3) {\n switch (index) {\n case 0:\n titleClass = '[ col-xs-24 ] [ col-sm-8 col-md-8 ] [ pad-x-5 pad-x-2-xs pad-x-2-sm ]';\n break;\n case 1:\n titleClass = '[ col-xs-24 ] [ col-sm-11 col-md-9 ] [ pad-x-5 pad-x-2-xs pad-x-2-sm ]';\n break;\n case 2:\n titleClass = '[ col-xs-24 ] [ col-sm-5 col-md-7 ] [ pad-x-5 pad-x-2-xs pad-x-2-sm ]';\n break;\n }\n }\n\n if (connectionTypeCategory)\n return (\n <div className={titleClass} key={connectionTypeCategory.title}>\n <div\n className=\"mar-b-2 mar-t-4 pad-b-2\"\n onClick={this.toggleConnectionCategory(connectionTypeCategory.connectionTypes)}\n >\n <h3 className=\"font-5 mar-t-5 mar-b-2 font-700 display-inline-xs\">\n {connectionTypeCategory.title}\n </h3>\n </div>\n <div className=\"mar-b-3\">\n {connectionTypeCategory.connectionTypes.map(this.renderConnectionType)}\n </div>\n </div>\n );\n }\n\n render() {\n function createMarkup(html) { return { __html: html }; }\n\n let connectionTypeCategoriesClass = 'display-flex flex-wrap-wrap justify-content-space-between';\n if (this.props.connectionTypeCategories && this.props.connectionTypeCategories.length === 2) {\n connectionTypeCategoriesClass = 'display-flex flex-wrap-wrap';\n }\n\n return (\n <div ref={this.wrapper}>\n <div className=\"row pad-t-2 mar-b-3\">\n <div className=\"pad-x-5 pad-x-2-xs pad-x-2-sm\">\n <div className=\"col-xs-24\">\n <h5 className=\"font-6 mar-0\">\n {this.props.resources.connectionType}\n </h5>\n <div className=\"checkbox-tick font-4 pad-t-8 pad-b-3\">\n <input\n type=\"checkbox\"\n id=\"connection-selectAll-checkbox\"\n checked={this.state.isAllSelected}\n onChange={this.onSelectAllChange}\n />\n <label \n className=\"font-300\" \n htmlFor=\"connection-selectAll-checkbox\"\n >\n <span>\n {this.props.resources.selectAll}\n </span>\n </label>\n </div>\n </div>\n </div>\n </div>\n <hr className=\"mar-y-3\" />\n <div className=\"row mar-b-2\">\n <div className=\"col-xs-24\">\n <div className={connectionTypeCategoriesClass}>\n {this.props.connectionTypeCategories.map(this.renderConnectionTypeCategory)}\n </div>\n </div>\n </div>\n <div dangerouslySetInnerHTML={createMarkup(this.props.connectionTypesContentFragment)} />\n </div>\n );\n }\n}\n","import React, { useCallback, useEffect, useRef } from 'react';\n\nimport SliderWithLabel from '../../../../../../Shared/React/js/components/sliders/SliderWithLabel';\n\nconst ModalDataSlider = ({\n current,\n values,\n anyDataLabel,\n atLeastLabel,\n changeData\n}) => {\n const popoverRef = useRef(null);\n\n useEffect(() => {\n const popover = wo$(popoverRef.current);\n WhistleOut.applyPopover(popover);\n }, []);\n\n const getLabel = useCallback(labelText => <strong className=\"font-5\">{labelText}</strong>, []);\n\n return (\n <>\n <SliderWithLabel\n current={current}\n values={values}\n anyLabel={anyDataLabel}\n fromLabel={atLeastLabel}\n containerClassName=\"pad-t-4\"\n labelTemplate={getLabel}\n sliderClassName=\"rc-slider-container pad-x-3 pad-x-5-xs mar-y-2\"\n onValueChanged={changeData}\n />\n </>\n );\n};\n\nexport default ModalDataSlider;\n","import defaultTo from 'lodash/defaultTo';\nimport parseInt from 'lodash/parseInt';\nimport React, { useCallback, useEffect, useRef } from 'react';\n\nimport ModalDataSlider from './ModalDataSlider';\n\nconst DataTab = ({\n currentData,\n values,\n includedDataLabel,\n anyDataLabel,\n atLeastLabel,\n buttonsContentFragment,\n changeData\n}) => {\n const buttonsContainerRef = useRef(null);\n\n const handleOnMount = useCallback(() => {\n const buttonsContainer = wo$(buttonsContainerRef.current);\n buttonsContainer\n .find('[data-min-data]')\n .off('click')\n .click(e => {\n const value = defaultTo(parseInt(e.currentTarget.dataset.minData), null);\n changeData(value);\n });\n }, [changeData]);\n\n useEffect(() => handleOnMount(), [handleOnMount]);\n\n return (\n <>\n <div className=\"row pad-t-2 mar-b-3\">\n <div className=\"col-md-24\">\n <h5 className=\"font-6 mar-0\">{includedDataLabel}</h5>\n </div>\n </div>\n <div className=\"row mar-y-5 pad-b-6\">\n <div className=\"col-md-20 col-md-offset-2\">\n <ModalDataSlider\n current={currentData}\n values={values}\n anyDataLabel={anyDataLabel}\n atLeastLabel={atLeastLabel}\n changeData={changeData}\n />\n </div>\n </div>\n <div\n ref={buttonsContainerRef}\n className=\"row mar-b-5\"\n dangerouslySetInnerHTML={{ __html: buttonsContentFragment }}\n />\n </>\n );\n};\n\nexport default DataTab;\n","import React from 'react';\n\ninterface Props {\n html: string;\n}\n\nconst FaqTab = (props: Props) => {\n return <div dangerouslySetInnerHTML={{ __html: props.html }} />;\n};\n\nexport default FaqTab;\n","import React, { useCallback } from 'react';\n\nimport type { KeyValue } from '../../../../../../Shared/js/@types/KeyValue';\nimport SliderWithLabel from '../../../../../../Shared/React/js/components/sliders/SliderWithLabel';\n\ninterface Props {\n current: number;\n anyLabel: string;\n fromLabel: string;\n values: KeyValue[];\n onValueChanged: (value: number) => void;\n}\n\nconst ModalSpeedSlider = (props: Props) => {\n const getLabel = useCallback(\n (labelText: string | JSX.Element) => <strong className=\"font-5\">{labelText}</strong>,\n []\n );\n\n return (\n <SliderWithLabel\n current={props.current}\n values={props.values}\n anyLabel={props.anyLabel}\n fromLabel={props.fromLabel}\n containerClassName=\"pad-t-4\"\n labelTemplate={getLabel}\n sliderClassName=\"rc-slider-container pad-x-3 pad-x-5-xs mar-y-2\"\n onValueChanged={props.onValueChanged}\n />\n );\n};\n\nexport default ModalSpeedSlider;\n","import React, { useCallback, useEffect, useRef } from 'react';\n\nimport type { KeyValue } from '../../../../../../Shared/js/@types/KeyValue';\nimport ModalSpeedSlider from './ModalSpeedSlider';\n\ninterface Props {\n currentSpeed: number;\n speedValues: KeyValue[];\n anyLabel: string;\n fromLabel: string;\n speedDescription: string;\n speedContentFragment: string;\n onSpeedChange: (value: number) => void;\n}\n\nconst SpeedTab = (props: Props) => {\n const wrapper = useRef();\n\n const handleOnMount = useCallback(() => {\n const dom = wo$(wrapper.current);\n dom.find('[data-min-speed]')\n .off('click')\n .on('click', e => {\n const value = wo$(e.currentTarget).closest('[data-min-speed]').data('min-speed');\n props.onSpeedChange(value);\n });\n }, [props]);\n\n useEffect(() => handleOnMount(), [handleOnMount]);\n\n const createMarkup = (html: string) => {\n return { __html: html };\n };\n\n return (\n <div ref={wrapper}>\n <div className=\"row pad-t-2 mar-b-3\">\n <div className=\"col-md-24\">\n <h5 className=\"font-6 mar-0\">{props.speedDescription}</h5>\n </div>\n </div>\n <div className=\"row mar-y-5 pad-b-6\">\n <div className=\"col-md-20 col-md-offset-2\">\n <ModalSpeedSlider\n current={props.currentSpeed}\n values={props.speedValues}\n anyLabel={props.anyLabel}\n fromLabel={props.fromLabel}\n onValueChanged={props.onSpeedChange}\n />\n </div>\n </div>\n <div className=\"row mar-b-5\" dangerouslySetInnerHTML={createMarkup(props.speedContentFragment)} />\n </div>\n );\n};\n\nexport default SpeedTab;\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport RangeSlider from '../../../../../../Shared/React/js/components/sliders/RangeSlider';\n\nconst ModalSpendSlider = ({\n //\n minValue: minValueProps,\n maxValue: maxValueProps,\n values,\n resources,\n updateSpend\n}) => {\n const [minValue, setMinValue] = useState(minValueProps);\n const [maxValue, setMaxValue] = useState(maxValueProps);\n\n useEffect(() => {\n setMinValue(minValueProps);\n }, [minValueProps]);\n\n useEffect(() => {\n setMaxValue(maxValueProps);\n }, [maxValueProps]);\n\n const getLabel = useCallback(\n (min, max) => {\n const lowestValue = values[0].key;\n const biggestValue = values[values.length - 1].key;\n\n min = min || lowestValue;\n max = max || biggestValue;\n if (min === lowestValue && max === biggestValue) {\n return resources.anyPrice;\n }\n\n const minValueText = values.find(v => v.key === min).value;\n const maxValueText = values.find(v => v.key === max).value;\n return minValueText + ' - ' + maxValueText;\n },\n [resources.anyPrice, values]\n );\n\n const handleOnValueUpdating = useCallback((min, max) => {\n setMinValue(min);\n setMaxValue(max);\n }, []);\n\n return (\n <React.Fragment>\n <div className=\"font-5\">\n {resources.monthly}: <strong>{getLabel(minValue, maxValue)}</strong>\n </div>\n <div className=\"rc-slider-container pad-x-3 pad-x-5-xs mar-y-2\">\n <RangeSlider\n data={values.map(a => a.key)}\n minValue={minValue}\n maxValue={maxValue}\n onValueChanged={updateSpend}\n onValueUpdating={handleOnValueUpdating}\n />\n </div>\n </React.Fragment>\n );\n};\n\nexport default ModalSpendSlider;\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport Slider from '../../../../../../Shared/React/js/components/sliders/Slider';\n\nconst ModalUpfrontSlider = ({ updateUpfront, ...props }) => {\n const [rawValue, setRawValue] = useState(null);\n\n useEffect(() => {\n setRawValue(props.value);\n }, [props.value]);\n\n const handleSliderValueUpdating = useCallback(value => {\n setRawValue(value);\n }, []);\n\n const getLabel = value => {\n return props.values.find(v => v.key === value).value;\n };\n\n const value = rawValue !== null ? rawValue : props.value;\n\n return (\n <React.Fragment>\n <div className=\"font-5\">\n {props.resources.maxUpfront}: <strong>{getLabel(value)}</strong>\n </div>\n <div className=\"rc-slider-container pad-x-3 pad-x-5-xs mar-y-2\">\n <Slider\n data={props.values.map(a => a.key)}\n current={value}\n onValueChanged={updateUpfront}\n onValueUpdating={handleSliderValueUpdating}\n />\n </div>\n </React.Fragment>\n );\n};\n\nexport default ModalUpfrontSlider;\n","import defaultTo from 'lodash/defaultTo';\nimport React, { useCallback, useEffect, useRef } from 'react';\n\nimport ModalSpendSlider from './ModalSpendSlider';\nimport ModalUpfrontSlider from './ModalUpfrontSlider';\n\nconst SpendTab = ({\n // TODO: Use only required fields\n criteria,\n spendSlider,\n upfrontSlider,\n resources,\n spendContentFragment,\n updateSpend,\n updateUpfront,\n showMaxUpfrontSlider\n}) => {\n const wrapper = useRef(null);\n\n const onTierButtonClick = useCallback(\n e => {\n const { minSpend, maxSpend } = e.currentTarget.closest('[data-spend]').dataset;\n updateSpend(defaultTo(parseInt(minSpend), null), defaultTo(parseInt(maxSpend), null));\n },\n [updateSpend]\n );\n\n const handleOnMount = useCallback(() => {\n const dom = wo$(wrapper.current);\n dom.find('[data-spend]').off('click').click(onTierButtonClick);\n\n return () => dom.find('[data-spend]').off('click');\n }, [onTierButtonClick]);\n\n useEffect(() => handleOnMount(), [handleOnMount]);\n\n function createMarkup(html) {\n return { __html: html };\n }\n\n return (\n <div ref={wrapper}>\n <div className=\"row pad-t-2 mar-b-3\">\n <div className=\"col-md-24\">\n <h5 className=\"font-6 mar-0\">{resources.spend}</h5>\n </div>\n </div>\n <div className=\"row pad-t-2 mar-y-5 pad-b-6\">\n {showMaxUpfrontSlider ? (\n <>\n <div className=\"col-md-11\">\n <ModalSpendSlider\n {...spendSlider}\n minValue={criteria.common.minimumSpend}\n maxValue={criteria.common.maximumSpend}\n updateSpend={updateSpend}\n />\n </div>\n <div className=\"col-md-11 col-md-offset-2\">\n <ModalUpfrontSlider\n {...upfrontSlider}\n value={criteria.common.maximumUpfront}\n updateUpfront={updateUpfront}\n />\n </div>\n </>\n ) : (\n <div className=\"col-md-20 col-md-offset-2\">\n <ModalSpendSlider\n {...spendSlider}\n minValue={criteria.common.minimumSpend}\n maxValue={criteria.common.maximumSpend}\n updateSpend={updateSpend}\n />\n </div>\n )}\n </div>\n <div className=\"row mar-b-5 hidden-xs\">\n <div dangerouslySetInnerHTML={createMarkup(spendContentFragment)} />\n </div>\n </div>\n );\n};\n\nexport default SpendTab;\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\n\nimport SuppliersList from '../../../../../../Shared/React/js/components/suppliers/SuppliersList';\n\n// TODO: Almost the same as Tablets SuppliersTab (except for networks), consider extracting common component\nexport default class SuppliersTab extends Component {\n constructor(props) {\n super(props);\n\n this.init(props);\n this.state = this.getInitialState(props);\n\n this.selectAll = this.selectAll.bind(this);\n this.selectNone = this.selectNone.bind(this);\n this.onSupplierChecked = this.onSupplierChecked.bind(this);\n this.onPersonalChange = this.onPersonalChange.bind(this);\n this.onBusinessChange = this.onBusinessChange.bind(this);\n this.onSelectionChanged = this.onSelectionChanged.bind(this);\n this.onSelectAllChange = this.onSelectAllChange.bind(this);\n }\n\n init(props) {\n\n this.availableShortUrls = props.suppliers\n .filter(p => p.isAvailable)\n .map(p => p.shortUrl);\n\n this.personalShortUrls = props.suppliers\n .filter(p => p.isAvailable && p.isPersonal)\n .map(p => p.shortUrl);\n\n this.businessShortUrls = props.suppliers\n .filter(p => p.isAvailable && p.isBusiness)\n .map(p => p.shortUrl);\n\n this.isPersonalAvailable = this.personalShortUrls.length > 0;\n this.isBusinessAvailable = this.businessShortUrls.length > 0;\n }\n\n getInitialState(props) {\n const customerType = props.customerType;\n const isPersonal = !customerType || customerType.toLowerCase() === 'personal';\n\n let isBusiness = !customerType || customerType.toLowerCase() === 'business';\n if (!this.isBusinessAvailable)\n isBusiness = false;\n\n let selectedShortUrls = props.selectedShortUrls || [];\n if (selectedShortUrls.length === 0) {\n if (isPersonal) {\n selectedShortUrls = selectedShortUrls.concat(this.personalShortUrls);\n }\n if (isBusiness) {\n selectedShortUrls = selectedShortUrls.concat(this.businessShortUrls);\n }\n }\n\n return {\n selectedShortUrls: (selectedShortUrls || this.availableShortUrls).slice(),\n isPersonal: isPersonal,\n isBusiness: isBusiness,\n isAllSelected: this.getIsAllSelected(selectedShortUrls)\n };\n }\n\n onSupplierChecked(supplierId, checked) {\n const supplier = this.props.suppliers.filter(p => p.id === supplierId)[0];\n\n // Use .slice() to avoid modifying the source array\n let selectedShortUrls = this.state.selectedShortUrls.slice();\n if (checked) {\n selectedShortUrls.push(supplier.shortUrl);\n } else {\n selectedShortUrls = selectedShortUrls.filter(p => p !== supplier.shortUrl);\n }\n this.setState(\n {\n selectedShortUrls: selectedShortUrls,\n isPersonal: this.state.isPersonal || checked && supplier.isPersonal,\n isBusiness: this.state.isBusiness || checked && supplier.isBusiness && !supplier.isPersonal,\n isAllSelected: this.getIsAllSelected(selectedShortUrls)\n },\n this.onSelectionChanged\n );\n }\n\n onSelectAllChange() {\n if(!this.state.isAllSelected){\n this.selectAll();\n }else{\n this.selectNone();\n } \n }\n\n onPersonalChange() {\n const checked = !this.state.isPersonal;\n const selectedShortUrls = this.getSelectedUrlsForCustomerType(\n checked,\n this.personalShortUrls,\n this.state.isBusiness,\n this.businessShortUrls\n );\n\n this.setState(\n {\n isPersonal: checked,\n isAllSelected: this.getIsAllSelected(selectedShortUrls),\n selectedShortUrls: selectedShortUrls\n },\n this.onSelectionChanged\n );\n }\n\n onBusinessChange() {\n const checked = !this.state.isBusiness;\n const selectedShortUrls = this.getSelectedUrlsForCustomerType(\n checked,\n this.businessShortUrls,\n this.state.isPersonal,\n this.personalShortUrls\n );\n\n this.setState(\n {\n isBusiness: checked,\n isAllSelected: this.getIsAllSelected(selectedShortUrls),\n selectedShortUrls: selectedShortUrls\n },\n this.onSelectionChanged\n );\n }\n\n getIsAllSelected(selectedShortUrls) {\n return [...new Set(selectedShortUrls)].length === this.availableShortUrls.length;\n }\n\n getSelectedUrlsForCustomerType(typeChecked, typeShortUrls, otherTypeChecked, otherTypeShortUrls) {\n if (typeChecked) {\n // Add\n return this.state.selectedShortUrls.concat(\n typeShortUrls.filter(p => this.availableShortUrls.some(a => a === p))\n );\n }\n\n return this.state.selectedShortUrls.filter(s =>\n // Exclude all of this type\n !typeShortUrls.some(p => p === s) ||\n // but keep for the other if it's checked\n otherTypeChecked && otherTypeShortUrls.some(p => p === s));\n }\n\n selectAll() {\n // Ignore, if all are already selected\n if (this.state.selectedShortUrls.length === this.availableShortUrls.length) {\n return;\n }\n\n this.setState({\n selectedShortUrls: this.availableShortUrls,\n isPersonal: this.isPersonalAvailable && true,\n isBusiness: this.isBusinessAvailable && true,\n isAllSelected: true\n\n }, this.onSelectionChanged);\n }\n\n selectNone() {\n this.setState({\n selectedShortUrls: [],\n isPersonal: false,\n isBusiness: false,\n isAllSelected: false\n\n }, this.onSelectionChanged);\n }\n\n onSelectionChanged() {\n if (!this.props.onSelectionChanged) {\n return;\n }\n\n const selectedShortUrls = this.state.selectedShortUrls.length === this.availableShortUrls.length\n ? []\n : this.state.selectedShortUrls;\n\n const customerType = this.state.isPersonal && !this.state.isBusiness\n ? 'Personal'\n : this.state.isBusiness && !this.state.isPersonal\n ? 'Business'\n : null;\n\n this.props.onSelectionChanged(selectedShortUrls, customerType);\n }\n\n render() {\n const all = this.props.suppliers;\n const availableSuppliers = all.filter(item => !!item.isAvailable);\n\n const resources = this.props.resources;\n return (\n <React.Fragment>\n <div className=\"row pad-t-2 pad-b-3\">\n <div className=\"col-xs-24\">\n <h5 className=\"font-6 mar-0\">\n {this.props.hasAddress ? resources.providersInYourArea : resources.providers}\n </h5>\n <div className=\"checkbox-tick font-4 pad-t-8 pad-b-3\">\n <input\n type=\"checkbox\"\n id=\"selectAll-checkbox\"\n checked={this.state.isAllSelected}\n onChange={this.onSelectAllChange}\n />\n <label className=\"font-300\" htmlFor=\"selectAll-checkbox\">\n <span>{this.props.resources.selectAll}</span>\n </label>\n </div>\n </div>\n </div>\n <div className=\"modal-results-broadband-grid bor-t-1 pad-y-5\">\n <SuppliersList\n className=\"supplier-list block-grid-xs-2 block-grid-md-3 block-grid-condensed pad-t-3\"\n items={availableSuppliers}\n selectedShortUrls={this.state.selectedShortUrls}\n onCheckedChanged={this.onSupplierChecked}\n isVerticallyAligned={true}\n />\n </div>\n <div className=\"row\">\n {(() => {\n const unavailableSuppliers = all.filter(s => !s.isAvailable);\n if (unavailableSuppliers.length) {\n return (\n <div className=\"col-xs-24 pad-y-2 bor-t-1 mar-t-2\">\n <button\n className=\"btn btn-link btn-block\"\n type=\"button\"\n data-toggle=\"collapse\"\n data-target=\"#collapseUnavailableProviders\"\n aria-controls=\"collapseUnavailableProviders\"\n >\n {this.props.resources.unavailableSuppliersInYourArea}\n <span className=\"fa fa-chevron-down font-5\"></span>\n </button>\n <div className=\"collapse in\" id=\"collapseUnavailableProviders\">\n <SuppliersList\n className=\"supplier-list block-grid-xs-2 block-grid-md-3 block-grid-condensed pad-t-3\"\n items={unavailableSuppliers}\n selectedShortUrls={this.state.selectedShortUrls}\n isVerticallyAligned={false}\n disabled\n />\n </div>\n </div>\n );\n }\n return null;\n })()}\n </div>\n <div className=\"row bor-t-1 pad-t-3 mar-t-2\">\n <div className=\"col-xs-24\">\n <ul className=\"supplier-list block-grid-xs-2 block-grid-md-3 block-grid-condensed pad-t-3\">\n <li>\n <div className=\"checkbox-tick font-4\">\n <input\n type=\"checkbox\"\n id=\"personal-checkbox\"\n checked={this.state.isPersonal}\n onChange={this.onPersonalChange}\n disabled={!this.isPersonalAvailable}\n />\n <label className=\"font-300\" htmlFor=\"personal-checkbox\">\n <span>{this.props.resources.personal}</span>\n </label>\n </div>\n </li>\n {this.isBusinessAvailable && (\n <li>\n <div className=\"checkbox-tick font-4\">\n <input\n type=\"checkbox\"\n id=\"business-checkbox\"\n checked={this.state.isBusiness}\n onChange={this.onBusinessChange}\n disabled={!this.isBusinessAvailable}\n />\n <label className=\"font-300\" htmlFor=\"business-checkbox\">\n <span>{this.props.resources.business}</span>\n </label>\n </div>\n </li>\n )}\n </ul>\n </div>\n </div>\n </React.Fragment>\n );\n }\n}\n\n/* eslint-disable import/no-named-as-default-member */\nSuppliersTab.propTypes = {\n resources: PropTypes.object,\n selectedShortUrls: PropTypes.arrayOf(PropTypes.string),\n customerType: PropTypes.string,\n hasAddress: PropTypes.bool,\n suppliers: PropTypes.arrayOf(PropTypes.object)\n};\n/* eslint-enable */\n","import ClassNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { useMemo } from 'react';\n\n/* eslint-disable import/no-named-as-default-member */\nconst propTypes = {\n name: PropTypes.string.isRequired,\n isActive: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n checkActive: PropTypes.func,\n children: PropTypes.element.isRequired\n};\n/* eslint-enable */\n\nconst TabContent = ({ name, isActive: isActiveProps, children }) => {\n const isActive = useMemo(() => {\n return isActiveProps instanceof Function ? isActiveProps(name) : isActive;\n }, [isActiveProps, name]);\n\n return (\n <div id={`modal-results-broadband-${name}`} className={ClassNames('tab-pane', { active: isActive })}>\n {children}\n </div>\n );\n};\n\nTabContent.propTypes = propTypes;\nexport default TabContent;\n","import ClassNames from 'classnames';\nimport React, { useCallback } from 'react';\n\nconst TabMenuItem = (props: {\n name: string;\n isActive: boolean;\n text: string;\n onSelected: (e: React.MouseEvent) => void;\n}) => {\n const onSelected = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n props.onSelected(e);\n },\n [props]\n );\n\n return (\n <li key={props.name} className={ClassNames('text-center mar-b-2', { active: props.isActive })}>\n <a\n href=\"\"\n data-tab-name={props.name}\n onClick={onSelected}\n className=\"mar-r-2 pad-x-3 pad-x-1-xs pad-y-2 pad-y-4-xs text-left text-center-xs\"\n >\n <strong className=\"font-4 display-block position-relative\">\n <span>{props.text}</span>\n </strong>\n </a>\n </li>\n );\n};\n\nexport default TabMenuItem;\n","import { produce } from 'immer';\nimport defaultTo from 'lodash/defaultTo';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport type { SuppliersModel } from '../../../../../../Shared/js/@types/SuppliersModel';\nimport { RootState } from '../../../../../../Shared/js/redux/rootReducer';\nimport AddressChangeTracker from '../../../../../../Shared/React/js/components/addressSearch/AddressChangeTracker';\nimport type { SearchCriteria } from '../../../../../js/@types/SearchCriteria';\nimport type { SearchFilters } from '../../../../../js/@types/SearchFilters';\nimport { actions as modalActions } from '../../../../../js/redux/modalSlice';\nimport AdvancedTab from './AdvancedTab';\nimport ConnectionTab from './connection/ConnectionTab';\nimport DataTab from './DataTab';\nimport FaqTab from './FaqTab';\nimport SpeedTab from './SpeedTab';\nimport SpendTab from './SpendTab';\nimport SuppliersTab from './SuppliersTab';\nimport TabContent from './TabContent';\nimport TabMenuItem from './TabMenuItem';\n\nfunction mapStateToProps(\n state: RootState,\n ownProps: {\n isOpen?: boolean;\n activeTab?: string;\n criteria: SearchCriteria;\n }\n) {\n return produce(ownProps, draft => {\n const modalState = state.broadband?.modal;\n\n draft.isOpen = defaultTo(modalState.isOpen, ownProps.isOpen);\n draft.activeTab = defaultTo(modalState.activeTab, ownProps.activeTab);\n\n draft.criteria = isEmpty(modalState.criteria) ? ownProps.criteria : modalState.criteria;\n });\n}\n\nconst mapDispatchToProps = {\n ...modalActions\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ninterface Props extends PropsFromRedux, SearchFilters {\n hideSupplierFilter: boolean;\n showMaxUpfrontSlider: boolean;\n suppliers: SuppliersModel;\n unavailableConnectionTypes: never[];\n onCriteriaChanged: (criteria: SearchCriteria) => void;\n}\n\nconst FilterModal = (props: Props) => {\n const containerRef = useRef(null);\n\n // TODO: Consider removing\n const [criteria, setCriteria] = useState(props.criteria);\n\n const handleIsOpenChanged = useCallback(isOpen => {\n if (containerRef.current === null) {\n return;\n }\n const action = isOpen ? 'show' : 'hide';\n wo$(containerRef.current).modal(action);\n }, []);\n\n const handleOnCriteriaChanged = useCallback(criteria => {\n setCriteria(criteria);\n }, []);\n\n const handleOnTabSelected = useCallback(\n (e: React.MouseEvent) => {\n props.selectTab(e.currentTarget.getAttribute('data-tab-name'));\n },\n [props]\n );\n\n const applyFilters = useCallback(() => {\n props.onCriteriaChanged(criteria);\n }, [criteria, props]);\n\n const handleAddressChange = useCallback(() => props.addressChanged(), [props]);\n\n const handleSuppliersChanged = useCallback(\n (selectedShortUrls, customerType) => props.updateSelectedSuppliers({ keys: selectedShortUrls, customerType }),\n [props]\n );\n\n const handleUpdateSpend = useCallback((min, max) => props.updateSpend({ min, max }), [props]);\n\n const isTabActive = useCallback(name => name === props.activeTab, [props.activeTab]);\n\n const hideModal = useCallback(() => props.hideModal(), [props]);\n\n const handleOnMount = useCallback(() => {\n if (containerRef.current === null) {\n return;\n }\n\n const container = wo$(containerRef.current);\n container.on('hidden.bs.modal', hideModal);\n\n // Unmount\n return () => {\n container.off('hidden.bs.modal', hideModal);\n };\n }, [hideModal]);\n\n useEffect(() => handleOnMount(), [handleOnMount]);\n\n useEffect(() => handleIsOpenChanged(props.isOpen), [handleIsOpenChanged, props.isOpen]);\n\n useEffect(() => handleOnCriteriaChanged(props.criteria), [handleOnCriteriaChanged, props.criteria]);\n\n const totalConnectionTypes =\n props.connectionTypeTiers.tier1ConnectionTypes.length +\n props.connectionTypeTiers.tier2ConnectionTypes.length +\n props.connectionTypeTiers.tier3ConnectionTypes.length;\n\n const tabNames = useMemo(() => {\n const items = ['spend', 'speed', 'data'];\n \n if (!props.hideSupplierFilter) {\n items.push('providers');\n }\n\n if (totalConnectionTypes > 1) {\n items.push('connection');\n }\n\n items.push('advanced');\n\n if (props.faqContentFragment && props.faqContentFragment.length > 0) {\n items.push('faq');\n }\n\n return items;\n }, [props.faqContentFragment, props.hideSupplierFilter, totalConnectionTypes]);\n\n const tabMenuItems = tabNames.map(name => {\n //debugger; // eslint-disable-line no-debugger\n const text = get(props.resources, name);\n return (\n <TabMenuItem\n key={name}\n name={name}\n isActive={name === props.activeTab}\n text={text}\n onSelected={handleOnTabSelected}\n />\n );\n });\n\n if (!props.isOpen) {\n return null;\n }\n\n return (\n <div\n ref={containerRef}\n id=\"modal-results-broadband\"\n className=\"modal fade\"\n tabIndex={-1}\n role=\"dialog\"\n aria-labelledby=\"modal-results-broadband\"\n aria-hidden=\"true\"\n >\n <AddressChangeTracker onAddressChange={handleAddressChange} />\n <div className=\"modal-dialog modal-lg\">\n <div className=\"modal-content\">\n <div className=\"modal-header pad-t-5 pad-b-3\">\n <strong className=\"font-7\" id=\"modal-results-broadband-filter\">\n {props.resources.filter}\n <span className=\"hidden-xs\"> {props.resources.results}</span>\n </strong>\n <div className=\"float-right position-relative-xs\">\n <button className=\"btn btn-info\" data-dismiss=\"modal\">\n <span className=\"fa fa-times font-5\"></span>\n </button>\n </div>\n </div>\n <div className=\"modal-body\">\n <div className=\"row\">\n <div className=\"[ col-xs-24 ] [ mar-b-5 ] \">\n <ul className=\"nav nav-pills\">{tabMenuItems}</ul>\n </div>\n </div>\n <div className=\"row pad-x-4\">\n <div className=\"[ col-xs-24 ]\">\n <div className=\"tab-content\">\n <TabContent name=\"speed\" isActive={isTabActive}>\n <SpeedTab\n currentSpeed={criteria.speed}\n speedValues={props.speedSlider.values}\n anyLabel={props.speedSlider.anySpeedLabel}\n fromLabel={props.speedSlider.fromLabel}\n speedDescription={props.resources.speedDescription}\n speedContentFragment={props.speedContentFragment}\n onSpeedChange={props.updateSpeed}\n />\n </TabContent>\n <TabContent name=\"data\" isActive={isTabActive}>\n <DataTab\n currentData={criteria.data}\n values={props.dataSlider.values}\n includedDataLabel={props.resources.includedData}\n anyDataLabel={props.dataSlider.anyDataLabel}\n atLeastLabel={props.dataSlider.fromLabel}\n buttonsContentFragment={props.dataContentFragment}\n changeData={props.updateData}\n />\n </TabContent>\n <TabContent name=\"spend\" isActive={isTabActive}>\n <SpendTab\n resources={props.resources}\n criteria={criteria}\n spendSlider={props.spendSlider}\n upfrontSlider={props.upfrontSlider}\n spendContentFragment={props.spendContentFragment}\n updateSpend={handleUpdateSpend}\n updateUpfront={props.updateUpfront}\n showMaxUpfrontSlider={props.showMaxUpfrontSlider}\n />\n </TabContent>\n <TabContent name=\"providers\" isActive={isTabActive}>\n <SuppliersTab\n key=\"suppliers\"\n resources={props.resources}\n selectedShortUrls={criteria.common.suppliers.values}\n customerType={criteria.common.customerType}\n hasAddress={!!criteria.common.address}\n onSelectionChanged={handleSuppliersChanged}\n suppliers={props.suppliers.items\n .slice()\n .sort((a, b) => a.name.localeCompare(b.name))}\n />\n </TabContent>\n <TabContent name=\"connection\" isActive={isTabActive}>\n <ConnectionTab\n resources={props.resources}\n criteria={criteria}\n connectionTypeTiers={props.connectionTypeTiers}\n connectionTypeCategories={props.connectionTypeCategories}\n allConnectionTypes={props.allConnectionTypes}\n showTvChannels={props.showTvChannels}\n connectionTypesContentFragment={props.connectionTypesContentFragment}\n unavailableConnectionTypes={props.unavailableConnectionTypes}\n updateConnectionTypes={props.updateConnectionTypes}\n />\n </TabContent>\n <TabContent name=\"advanced\" isActive={isTabActive}>\n <AdvancedTab />\n </TabContent>\n <TabContent name=\"faq\" isActive={isTabActive}>\n <FaqTab html={props.faqContentFragment} />\n </TabContent>\n </div>\n </div>\n </div>\n </div>\n <div className=\"modal-footer pad-t-5 pad-b-3\">\n <div className=\"row\">\n <div className=\"col-xs-24 text-right\">\n <button className=\"btn btn-info\" data-dismiss=\"modal\">\n {props.resources.cancel}\n </button>\n <button className=\"btn btn-primary mar-l-2\" onClick={applyFilters} data-dismiss=\"modal\">\n {props.resources.applyAll}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default connector(FilterModal);\n","import { produce } from 'immer';\nimport defaultTo from 'lodash/defaultTo';\nimport isString from 'lodash/isString';\nimport React, { useCallback, useEffect } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport type { SuppliersModel } from '../../../../../Shared/js/@types/SuppliersModel';\nimport { RootState } from '../../../../../Shared/js/redux/rootReducer';\nimport type { SearchCriteria } from '../../../../js/@types/SearchCriteria';\nimport type { SearchModel } from '../../../../js/@types/SearchModel';\nimport { actions as searchActions } from '../../../../js/redux/searchSlice';\nimport BroadbandActions from '../../actions/BroadbandActions';\nimport DataFilter from './main/DataFilter';\nimport ErrorPanel from './main/ErrorPanel';\nimport ShowFiltersButton from './main/ShowFiltersButton';\nimport SpeedFilter from './main/SpeedFilter';\nimport SuppliersFilter from './main/SuppliersFilter';\nimport FilterModal from './modal/FilterModal';\nimport { SearchFilterContext } from './SearchFilterContext';\n\nconst ModalOpenEventName = 'Filters.OpenModal';\n\nconst mapStateToProps = (state: RootState, ownProps: { modal?: RootState['broadband']['modal'] }) => {\n return produce(ownProps, draft => {\n const productAreaState = state.broadband;\n draft.modal = defaultTo(productAreaState?.modal, ownProps.modal);\n });\n};\n\nconst mapDispatchToProps = {\n updateCriteria: searchActions.updateCriteria,\n updateData: searchActions.updateData,\n updateSpeed: searchActions.updateSpeed,\n updateSuppliers: searchActions.updateSuppliers\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport interface Props extends PropsFromRedux {\n criteria: SearchCriteria;\n legacyActions?: BroadbandActions;\n\n filtersData: SearchModel['filters'];\n hideSupplierFilter: boolean;\n showMaxUpfrontSlider: boolean;\n suppliers: SuppliersModel;\n unavailableConnectionTypes: never[];\n showModal: (tabName?: string) => void;\n}\n\nconst Filters = (props: Props) => {\n const handleShowModal = useCallback(\n (tabName?: string | void | unknown) => {\n if (isString(tabName)) {\n props.showModal(tabName);\n } else {\n props.showModal();\n }\n },\n [props]\n );\n\n const handleOnMount = useCallback(() => {\n wo$('body').on(ModalOpenEventName, handleShowModal);\n\n // Unmount\n return () => {\n wo$('body').off(ModalOpenEventName, handleShowModal);\n };\n }, [handleShowModal]);\n\n const handleShowAllProviders = useCallback(() => {\n handleShowModal('providers');\n }, [handleShowModal]);\n\n const handleRetry = useCallback(() => {\n props.legacyActions.actions.searchRetry();\n }, [props.legacyActions.actions]);\n\n const handleModalCriteriaChanged = useCallback(\n (criteria: SearchCriteria) => {\n props.updateCriteria(criteria);\n },\n [props]\n );\n\n const selectedSuppliers = props.criteria.common.suppliers;\n\n // TODO: Do not use properties with the same name as existing built-in functions, i.e. Array.values()\n // HACK: To avoid confusion between Array.values() and our custom property with the same name\n const selectedSupplierKeys = Array.isArray(selectedSuppliers) ? selectedSuppliers : selectedSuppliers?.values;\n\n const isBusinessOnly =\n props.criteria.common.customerType && props.criteria.common.customerType.toLowerCase() === 'business';\n\n const getSupplierKey = useCallback(item => item.shortUrl, []);\n\n useEffect(() => handleOnMount(), [handleOnMount]);\n\n return (\n <React.Fragment>\n <SearchFilterContext.Provider value={{data: props.filtersData, criteria:props.criteria}}>\n <FilterModal\n key=\"filters\"\n {...props.filtersData}\n criteria={props.criteria}\n suppliers={props.suppliers}\n onCriteriaChanged={handleModalCriteriaChanged}\n hideSupplierFilter={props.hideSupplierFilter}\n showMaxUpfrontSlider={props.showMaxUpfrontSlider}\n unavailableConnectionTypes={props.unavailableConnectionTypes}\n />\n <div id=\"filters-original\">\n <div className=\"row pad-y-6 pad-y-3-sm pad-b-0-xs filters-wrapper\">\n <SuppliersFilter\n suppliers={props.suppliers}\n selectedKeys={selectedSupplierKeys}\n isBusinessOnly={isBusinessOnly}\n showHeader={true}\n showTextOnly={props.hideSupplierFilter}\n textContent={props.filtersData.defaultSupplierAvailableText}\n onChanged={props.updateSuppliers}\n onShowAll={handleShowAllProviders}\n getKey={getSupplierKey}\n />\n <div className=\"col-xs-24 hidden-sm col-md-8 col-lg-9 filters-2\">\n <div className=\"row\">\n <SpeedFilter\n {...props.filtersData.speedSlider}\n current={props.criteria.speed}\n onChanged={props.updateSpeed}\n />\n <DataFilter\n {...props.filtersData.dataSlider}\n current={props.criteria.data}\n onChanged={props.updateData}\n />\n </div>\n </div>\n {props.filtersData.showAllFilters ? (\n <ShowFiltersButton title={props.filtersData.resources.filters} onClick={handleShowModal} />\n ) : null}\n </div>\n </div>\n <ErrorPanel\n title={props.filtersData.resources.errorUpdatingResults}\n description={props.filtersData.resources.pleaseTryAgain}\n retryLabel={props.filtersData.resources.retry}\n onRetry={handleRetry}\n />\n </SearchFilterContext.Provider>\n </React.Fragment>\n );\n};\n\nexport default connector(Filters);\n","import { produce } from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport type { Address } from '../../../../../Shared/js/@types/Address';\nimport { RootState } from '../../../../../Shared/js/redux/rootReducer';\nimport AddressChangeTracker from '../../../../../Shared/React/js/components/addressSearch/AddressChangeTracker';\nimport { dispatchAddressChangedEvent } from '../../../../../Shared/React/js/components/addressSearch/AddressSearch';\nimport AppComponent from '../../../../../Shared/React/js/components/AppComponent';\nimport { usePrevious } from '../../../../../Shared/React/js/utils/Hooks';\nimport type { SearchCriteria } from '../../../../js/@types/SearchCriteria';\nimport type { SearchModel } from '../../../../js/@types/SearchModel';\nimport { broadbandApi } from '../../../../js/redux/broadbandApi';\nimport { actions as broadbandActions, mapSearchModelToState } from '../../../../js/redux/broadbandSlice';\nimport { actions as modalActions } from '../../../../js/redux/modalSlice';\nimport { actions, SearchSliceState } from '../../../../js/redux/searchSlice';\nimport LegacyActions from '../../actions/BroadbandActions';\nimport { generateQueryString } from '../../utils/BroadbandQueryString';\nimport Filters from '../filters/Filters';\nimport { AvailabilityCheckModal } from '../product/availabilityCheck/AvailabilityCheckPanel';\n\nconst connector = connect(\n (\n state: RootState,\n ownProps: {\n initialState: SearchModel;\n criteria?: SearchCriteria;\n searchSettings?: SearchSliceState['settings'];\n isInitialised?: boolean;\n }\n ) => {\n const isInitialised = !isEmpty(state.broadband?.search);\n const searchState = isInitialised ? state.broadband?.search : mapSearchModelToState(ownProps.initialState);\n\n return produce(ownProps, draft => {\n draft.criteria = searchState.criteria;\n draft.searchSettings = searchState.settings;\n draft.isInitialised = isInitialised;\n });\n },\n\n {\n init: broadbandActions.init,\n searchSuccess: actions.searchSuccess,\n searchError: actions.searchError,\n showModal: modalActions.showModal,\n ...actions\n }\n);\n\nexport type Props = ConnectedProps<typeof connector>;\n\nconst QueryHelper = {\n getQueryString: (criteria: SearchCriteria, settings: SearchSliceState['settings']) => {\n return isEmpty(criteria) ? undefined : generateQueryString(criteria, undefined, settings.embeddedMode);\n },\n isEquivalent: (target: SearchCriteria, compareTo: SearchCriteria[], settings: SearchSliceState['settings']) => {\n const resetIgnoredProperties = (criteria: SearchCriteria) => {\n // Properties that are not used by the search\n // should be ignored for triggering the search request\n return produce(criteria, draft => {\n // Whould be good to fetch the results per tab for better performance and smaller page size,\n // instead of fetching all tabs at once as we do now\n draft.common.tab = null;\n });\n };\n\n const getClearQuery = (c: SearchCriteria) => QueryHelper.getQueryString(resetIgnoredProperties(c), settings);\n\n const query = getClearQuery(target);\n return compareTo.some(c => isEqual(query, getClearQuery(c)));\n }\n};\n\nconst SearchComponent = (props: Props) => {\n const isInitialised = useRef(false);\n const [isProgress, setIsProgress] = useState(false);\n\n const [criteria, setCriteria] = useState(props.criteria);\n const previousCriteria = usePrevious(criteria);\n const defaultCriteria = useRef(cloneDeep(criteria));\n\n const [triggerGetSearchResultsQuery, searchResultsQuery] = broadbandApi.useLazyGetSearchResultsQuery();\n\n // TODO: Rewrite this\n const legacyActions = useRef(new LegacyActions());\n\n useEffect(() => {\n const selector = '#search-results-partial';\n const startProgress = () => WhistleOut.startProgress(selector, 0.1, 50);\n const endProgress = () => WhistleOut.endProgress(selector);\n\n if (isProgress) {\n startProgress();\n } else {\n endProgress();\n }\n return () => endProgress();\n }, [isProgress]);\n\n const searchPageRefresh = useCallback(\n (criteria: SearchCriteria) => {\n legacyActions.current.searchPageRefresh(\n criteria,\n props.searchSettings.searchUrl,\n props.searchSettings.suppressCoverageCheck,\n props.searchSettings.coverageUrl\n );\n },\n [props.searchSettings]\n );\n\n const search = useCallback(\n (criteria: SearchCriteria, force?: boolean) => {\n triggerGetSearchResultsQuery(\n {\n baseUrl: props.initialState.resultsUrl,\n queryString: QueryHelper.getQueryString(criteria, props.searchSettings)\n },\n !force\n );\n },\n [props.initialState.resultsUrl, props.searchSettings, triggerGetSearchResultsQuery]\n );\n\n const handleShowModal = useCallback(\n (tabName?: string) => {\n props.showModal({\n tabName,\n criteria\n });\n },\n [props, criteria]\n );\n\n const retrySearch = useCallback(() => {\n if (props.initialState.embeddedMode) {\n searchPageRefresh(criteria);\n return;\n }\n search(criteria, true);\n }, [props.initialState.embeddedMode, search, searchPageRefresh, criteria]);\n\n legacyActions.current.props = {\n embeddedMode: props.initialState.embeddedMode,\n nbnConnectionTypes: props.initialState.filters?.nbnConnectionTypes,\n criteria: criteria,\n defaultCriteria: defaultCriteria.current,\n coverage: props.initialState.state.coverage,\n coverageAddress: props.initialState.state.coverageAddress,\n searchSettings: props.searchSettings\n };\n legacyActions.current.actions = {\n searchSuccess: props.searchSuccess,\n searchError: props.searchError,\n searchRetry: retrySearch,\n\n disableMaximumResultLimits: props.disableMaximumResultLimits,\n hideFeaturedResults: props.hideFeaturedResults,\n includeNbnConnections: props.includeNbnConnections,\n updateConnectionTypes: props.updateConnectionTypes,\n updateContractType: props.updateContractType,\n updateCriteria: props.updateCriteria,\n updateData: props.updateData,\n updateModem: props.updateModem,\n updatePlanSummarySupplier: props.updatePlanSummarySupplier,\n updateSort: props.updateSort,\n updateSpeed: props.updateSpeed,\n updateSuppliers: props.updateSuppliers,\n updateTab: props.updateTab,\n showModal: handleShowModal,\n widenResults: props.widenResults\n };\n\n const handleAddressChanged = useCallback(\n (address: Address) => {\n if (address?.label === criteria.common.address?.label) {\n return;\n }\n\n dispatchAddressChangedEvent({\n // TODO: Fix eslint error\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n sender: this,\n address: address\n });\n\n props.updateAddress(address);\n WhistleOut.setCoverageCookie(null);\n },\n [criteria.common.address?.label, props]\n );\n\n const handleSpeedTestResultsChanged = useCallback((e: { detail: unknown }) => {\n if (!e.detail) {\n return;\n }\n legacyActions.current.bindResults();\n }, []);\n\n const handleTransactUrlChange = useCallback(() => {\n setIsProgress(false);\n }, []);\n\n const handleShowPlans = useCallback(\n (address: Address) => {\n setIsProgress(false);\n WhistleOut.scrollTo('body');\n handleAddressChanged(address);\n },\n [handleAddressChanged]\n );\n\n useEffect(() => {\n const init = () => {\n if (!isInitialised.current) {\n props.init(props.initialState);\n legacyActions.current.init();\n isInitialised.current = true;\n }\n };\n\n init();\n wo$(document).on('woSpeedTest.resultUpdated', handleSpeedTestResultsChanged);\n\n return () => {\n wo$(document).off('woSpeedTest.resultUpdated', handleSpeedTestResultsChanged);\n };\n }, [handleSpeedTestResultsChanged, props]);\n\n useEffect(() => setCriteria(props.criteria), [props.criteria]);\n useEffect(() => setIsProgress(searchResultsQuery.isFetching), [searchResultsQuery.isFetching]);\n\n useEffect(() => {\n const onCriteriaChange = () => {\n if (!props.isInitialised) {\n return;\n }\n\n if (\n QueryHelper.isEquivalent(\n criteria,\n [previousCriteria, props.searchSettings.resultsSearchCriteria],\n props.searchSettings\n )\n ) {\n return;\n }\n\n if (props.initialState.embeddedMode && !props.searchSettings.enforceAjax) {\n searchPageRefresh(criteria);\n return;\n }\n\n search(criteria);\n };\n onCriteriaChange();\n }, [\n criteria,\n previousCriteria,\n props.initialState.embeddedMode,\n props.isInitialised,\n props.searchSettings,\n search,\n searchPageRefresh\n ]);\n\n useEffect(() => {\n const onSearchResult = () => {\n if (searchResultsQuery.isFetching) {\n return;\n }\n\n if (searchResultsQuery.error) {\n legacyActions.current.onAjaxSearchError();\n return;\n }\n\n if (!searchResultsQuery.data) {\n return;\n }\n\n legacyActions.current.onAjaxSearchSuccess(searchResultsQuery.data);\n };\n onSearchResult();\n }, [searchResultsQuery.data, searchResultsQuery.error, searchResultsQuery.isFetching]);\n\n const addressSearch = useMemo(() => props.initialState.addressSearch, [props.initialState.addressSearch]);\n\n return (\n <>\n <AddressChangeTracker onAddressChange={handleAddressChanged} initialValue={criteria.common.address} />\n <AvailabilityCheckModal\n shouldOpenTransactLink\n address={criteria.common.address}\n countryCode={addressSearch.countryCode}\n addressSearchPlaceHolder={addressSearch.text.addressSearchPlaceHolder}\n tooltipLink={addressSearch.text.tooltipLink}\n tooltipDescription={addressSearch.text.tooltipDescription}\n queryDelay={addressSearch.queryDelay}\n apiKey={addressSearch.apiKey}\n isSearchPage={!props.searchSettings.embeddedMode}\n onTransactUrlChange={handleTransactUrlChange}\n onShowPlans={handleShowPlans}\n />\n {props.initialState.filters && (\n <Filters\n filtersData={props.initialState.filters}\n suppliers={props.searchSettings.suppliers}\n criteria={criteria}\n hideSupplierFilter={props.searchSettings.hideSupplierFilter}\n showMaxUpfrontSlider={props.searchSettings.showMaxUpfrontSlider}\n unavailableConnectionTypes={props.searchSettings.unavailableConnectionTypes}\n legacyActions={legacyActions.current}\n showModal={handleShowModal}\n />\n )}\n </>\n );\n};\n\nconst SearchConnected = connector(SearchComponent);\n\nexport default function Search(props: SearchModel) {\n return (\n <AppComponent>\n <SearchConnected initialState={props} />\n </AppComponent>\n );\n}\n","import { initReact } from '../../../Shared/js/vendor/react';\nimport * as BroadbandComponents from './components';\n\nfunction initBroadbandComponents() {\n initReact();\n window.BroadbandComponents = window.BroadbandComponents || BroadbandComponents;\n}\n\ninitBroadbandComponents();\n","import React, { useContext, useMemo } from 'react';\nimport { Provider as ReduxProvider, ReactReduxContext } from 'react-redux';\nimport { BrowserRouter, useInRouterContext } from 'react-router-dom';\n\nimport { store } from '../../../js/redux/store';\n\nconst ReduxEnabled = props => {\n const context = useContext(ReactReduxContext);\n\n const wrapper = useMemo(() => <ReduxProvider store={store}>{props.children}</ReduxProvider>, [props.children]);\n\n const isInContext = useMemo(() => !!context, [context]);\n return isInContext ? <>{props.children}</> : wrapper;\n};\n\nconst RouterEnabled = props => {\n const isInRouter = useInRouterContext();\n const wrapper = useMemo(() => <BrowserRouter>{props.children}</BrowserRouter>, [props.children]);\n return isInRouter ? <>{props.children}</> : wrapper;\n};\n\nconst AppComponent = props => {\n return (\n <React.StrictMode>\n <ReduxEnabled>\n <RouterEnabled>{props.children}</RouterEnabled>\n </ReduxEnabled>\n </React.StrictMode>\n );\n};\n\nexport default AppComponent;\n","import ClassNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { Component, createRef } from 'react';\n\nimport { initBootstrapSelect } from '../../../js/vendor/deferred/bootstrap-select';\n\nexport default class Select extends Component {\n constructor(props) {\n super(props);\n\n this.id = Select.counter++;\n this.elementId = this.props.elementId || `react-select-${this.id}`;\n\n this.state = {\n initiallySelected: JSON.stringify(this.props.selectedValues),\n rawSelectedValues: this.props.selectedValues\n };\n\n this.refSelect = createRef();\n this.getContainerDom = this.getContainerDom.bind(this);\n this.onChange = this.onChange.bind(this);\n }\n\n static getDerivedStateFromProps(props, state) {\n const initiallySelected = JSON.stringify(props.selectedValues);\n return initiallySelected !== state.initialAddress\n ? {\n initiallySelected: initiallySelected,\n rawSelectedValues: props.selectedValues\n }\n : null;\n }\n\n async componentDidMount() {\n await initBootstrapSelect();\n const select = wo$(this.refSelect.current);\n WhistleOut.applySelectPicker(select);\n WhistleOut.applySelectPickersStyle(this.getContainerDom());\n\n this.setSelectedValues(this.state.rawSelectedValues);\n select.on('change', this.onChange);\n }\n\n componentWillUnmount() {\n wo$(this.refSelect.current).off('change', this.onChange);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.disabled !== this.props.disabled) {\n wo$(this.refSelect.current).selectpicker('refresh');\n WhistleOut.applySelectPickersStyle(this.getContainerDom());\n }\n\n this.setSelectedValues(this.state.rawSelectedValues);\n }\n\n optionGroupsAreSame(a, b) {\n for (let i = 0; i < a.length; i++) {\n if (!a[i] || !b[i]) {\n return false;\n }\n\n return a[i] === b[i] || a[i].label === b[i].label || a[i].values === b[i].values;\n }\n }\n\n getContainerDom() {\n const bootStrapSelect = wo$(this.refSelect.current).prevUntil('div.bootstrap-select').parent();\n return bootStrapSelect.parent();\n }\n\n setSelectedValues(values) {\n wo$(this.refSelect.current).selectpicker('val', this.mapValues(values));\n }\n\n mapValues(values) {\n return Array.isArray(values) ? values.map(this.mapValue) : this.mapValue(values);\n }\n\n mapValue(value) {\n return value !== undefined && value !== null ? value.toString() : '';\n }\n\n onChange() {\n const selectedValues = wo$(this.refSelect.current).selectpicker('val');\n this.setState({\n rawSelectedValues: selectedValues\n });\n\n console.log('select.onChange:', selectedValues);\n\n if (this.props.onChange) {\n this.props.onChange(selectedValues);\n }\n }\n\n render() {\n const groups = this.props.optionGroups || [];\n const selectClassName = ClassNames(\n 'selectpicker bs-select-hidden', //\n this.props.selectClassName\n );\n\n const renderItem = item => {\n return (\n <option title={item.title || item.value} key={item.key} value={item.key}>\n {item.value}\n </option>\n );\n };\n\n return (\n <select\n ref={this.refSelect}\n id={this.elementId}\n tabIndex={this.props.tabIndex}\n className={selectClassName}\n multiple={this.props.multiple}\n data-selected-text-format=\"count>1\"\n data-width={this.props.dataWidth}\n data-style={this.props.dataStyle}\n data-title={this.props.title}\n disabled={this.props.disabled}\n >\n {groups.map((group, index) => (\n <optgroup key={`optgroup-${group.label || index}`} label={group.label}>\n {group.values.map(renderItem)}\n </optgroup>\n ))}\n </select>\n );\n }\n}\n\n/* eslint-disable import/no-named-as-default-member */\nSelect.propTypes = {\n elementId: PropTypes.string,\n optionGroups: PropTypes.arrayOf(PropTypes.object),\n selectedValues: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.bool,\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.arrayOf(PropTypes.number),\n PropTypes.arrayOf(PropTypes.bool)\n ]),\n // TODO: Rename to className\n selectClassName: PropTypes.string,\n tabIndex: PropTypes.number,\n hidden: PropTypes.bool,\n multiple: PropTypes.bool,\n onChange: PropTypes.func,\n dataWidth: PropTypes.string,\n dataStyle: PropTypes.string,\n disabled: PropTypes.bool\n};\n/* eslint-enable */\n\nSelect.defaultProps = {\n tabIndex: -1,\n hidden: false,\n multiple: false,\n disabled: false\n};\n\nSelect.counter = 0;\n","import React, { Component } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\n\nimport AddressHelper from '../../utils/AddressHelper';\nimport AddressChangeTracker from '../addressSearch/AddressChangeTracker';\n\nexport default class AddressMap extends Component {\n constructor(props) {\n super(props);\n\n this.id = AddressMap.counter++;\n this.mapWrapperId = `header-map-wrapper-${this.id}`;\n\n this.state = {\n address: this.props.address,\n marker: null,\n isSmallScreen: this.isSmallScreen()\n };\n\n this.onAddressChange = this.onAddressChange.bind(this);\n this.onWindowResize = this.onWindowResize.bind(this);\n this.onResizeEnd = this.onResizeEnd.bind(this);\n this.getMapContainer = this.getMapContainer.bind(this);\n this.renderStaticMap = this.renderStaticMap.bind(this);\n }\n\n componentDidMount() {\n addEventListener('DOMContentLoaded', async () => {\n this.mapboxgl = await import(/* webpackChunkName: \"mapbox\" */ 'mapbox-gl');\n window.addEventListener('resize', this.onWindowResize);\n this.setView(this.state.address);\n });\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.onWindowResize);\n }\n\n componentDidUpdate() {\n this.setView(this.state.address);\n }\n\n onAddressChange(address) {\n if (this.props.ignoreAddressChange || AddressHelper.isEqual(address, this.state.address)) {\n return;\n }\n\n this.setState({ address: address });\n }\n\n getMapContainer() {\n return wo$(`#${this.props.mapContainerId}`)[0];\n }\n\n onWindowResize() {\n if (this.resizeTimer) {\n // HACK: Reset the timeout to let the resize finish\n // See: https://css-tricks.com/snippets/jquery/done-resizing-event/\n clearTimeout(this.resizeTimer);\n }\n\n this.resizeTimer = setTimeout(this.onResizeEnd, 250);\n }\n\n isSmallScreen() {\n return window.innerWidth < 992;\n }\n\n onResizeEnd() {\n const isSmallScreen = this.isSmallScreen();\n if (isSmallScreen === this.state.isSmallScreen) {\n return;\n }\n\n this.setState({ isSmallScreen: isSmallScreen }, () => {\n if (this.useStaticMap()) {\n return;\n }\n\n const mapContainer = this.getMapContainer();\n if (isSmallScreen) {\n if (mapContainer.innerHTML) {\n mapContainer.innerHTML = '';\n window.dynamicMap = null;\n\n this.onMapRemove();\n }\n } else {\n if (!mapContainer.innerHTML) {\n this.initMap();\n }\n }\n });\n }\n\n onMapRemove() {\n if (this.props.onMapRemove) {\n this.props.onMapRemove();\n }\n }\n\n onMapInit() {\n if (this.props.onMapInit) {\n this.props.onMapInit();\n }\n }\n\n initMap() {\n if (window.dynamicMap || typeof window === 'undefined') {\n return;\n }\n\n console.log('initialising header map');\n\n const location = this.getLocation(this.state.address, this.props.countryCode);\n const center = location.center || {};\n const zoom = location.zoom;\n\n this.setState({\n center: center,\n zoom: zoom\n });\n\n const mapContainer = (\n <div\n id={this.mapWrapperId}\n style={{\n width: '100%',\n height: '147px',\n zIndex: 0\n }}\n className=\"style-header-map\"\n />\n );\n\n this.getMapContainer().innerHTML = renderToStaticMarkup(mapContainer);\n this.onMapInit();\n\n const map = new this.mapboxgl.Map({\n accessToken: this.props.apiKey,\n container: this.mapWrapperId,\n style: `mapbox://styles/${this.props.styleId}`,\n\n center: center,\n zoom: zoom,\n\n interactive: false,\n trackResize: true,\n attributionControl: false\n });\n\n map.addControl(new this.mapboxgl.AttributionControl(), 'bottom-right');\n\n this.offset(map, center);\n this.setMarker(map, center);\n\n window.dynamicMap = map;\n }\n\n clearMarker() {\n if (this.state.marker) {\n this.state.marker.remove();\n }\n }\n\n setMarker(map, center) {\n if (AddressHelper.isCountry(this.state.address)) {\n return;\n }\n\n const cdn = 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7';\n var markerIconUrl =\n wo$(`#${this.props.mapContainerId}`).data('marker-url') || `${cdn}/images/marker-icon-2x.png`;\n\n var el = document.createElement('div');\n el.className = 'marker';\n el.style.backgroundImage = `url(${markerIconUrl})`;\n el.style.backgroundSize = 'contain';\n el.style.backgroundRepeat = 'no-repeat';\n el.style.width = '27px';\n el.style.height = '41px';\n\n const marker = new this.mapboxgl.Marker(el, { anchor: 'bottom' })\n .setLngLat([center.lng, center.lat])\n .addTo(map);\n\n this.setState({ marker: marker });\n }\n\n setView(address) {\n if (this.useStaticMap()) {\n this.renderStaticMap();\n return;\n }\n\n if (typeof window === 'undefined' || this.state.isSmallScreen) {\n return;\n }\n\n const map = window.dynamicMap;\n if (!map) {\n this.initMap();\n return;\n }\n\n const currentCenter = map.getCenter();\n const location = this.getLocation(address, this.props.countryCode);\n const newCenter = location.center;\n if (currentCenter.lat === newCenter.lat && currentCenter.lng === newCenter.lng) {\n return;\n }\n\n this.setCenter(map, newCenter, location.zoom);\n }\n\n setCenter(map, center, zoom) {\n if (JSON.stringify(center) === JSON.stringify(this.state.center)) {\n return;\n }\n\n this.setState({\n center: center,\n zoom: zoom\n });\n\n this.clearMarker();\n\n if (map.getZoom() !== zoom) {\n map.setZoom(zoom);\n }\n\n const currentCenter = map.getCenter();\n if (currentCenter.lng !== center.lng || currentCenter.lat !== center.lat) {\n map.panTo([center.lng, center.lat]);\n }\n\n if (AddressHelper.isCountry(this.state.address)) {\n return;\n }\n\n this.offset(map, center);\n this.setMarker(map, center);\n }\n\n offset(map, center) {\n const targetLatLng = this.getOffsetLatLng(map, center);\n map.panTo(targetLatLng);\n }\n\n getOffsetLatLng(map, center) {\n const offset = this.getOffset();\n\n // See: https://github.com/Leaflet/Leaflet/issues/859\n const targetPoint = map.project(center).sub(new this.mapboxgl.Point(offset.x, offset.y));\n\n return map.unproject(targetPoint);\n }\n\n getOffset() {\n if (this.props.getOffset) {\n return this.props.getOffset();\n }\n\n const wrapperRect = wo$(`#${this.mapWrapperId}`)[0].getBoundingClientRect();\n const centerBetween = this.props.getCenterBoundaries();\n\n const expected = {\n x: this.getCenter(centerBetween.left, centerBetween.right),\n y: this.getCenter(wrapperRect.top, wrapperRect.bottom)\n };\n\n const actual = {\n x: this.getCenter(wrapperRect.left, wrapperRect.right),\n y: this.getCenter(wrapperRect.top, wrapperRect.bottom)\n };\n\n return {\n x: expected.x - actual.x,\n y: expected.y - actual.y\n };\n }\n\n getCenter(start, end) {\n return start + (end - start) / 2;\n }\n\n getLocation(address, countryCode) {\n if (address && !AddressHelper.isCountry(address)) {\n return {\n center: {\n lat: address.latitude,\n lng: address.longitude\n },\n zoom: this.getZoom(address)\n };\n }\n\n if (!countryCode) {\n throw new Error('countryCode is undefined');\n }\n\n // Based on https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-hotelsearch\n const countries = {\n au: {\n center: { lat: -33.1382032, lng: 144.7961969 },\n zoom: 6\n },\n ca: {\n center: { lat: 62, lng: -110.0 },\n zoom: 3\n },\n mx: {\n center: { lat: 23.6, lng: -102.5 },\n zoom: 5\n },\n nz: {\n center: { lat: -40.9, lng: 174.9 },\n zoom: 5\n },\n uk: {\n center: { lat: 52.8, lng: -4.6 },\n zoom: 5\n },\n us: {\n center: { lat: 39.85, lng: -97.8 },\n zoom: 5\n }\n };\n\n return countries[countryCode] || countries['au'];\n }\n\n getZoom(address) {\n const zoomLevel = AddressMap.zoomLevel;\n\n if (!address) {\n return zoomLevel.country;\n }\n\n if (address.unit) {\n return zoomLevel.unit;\n }\n\n if (address.streetNumber) {\n return zoomLevel.streetNumber;\n }\n\n if (address.street) {\n return zoomLevel.street;\n }\n\n if (address.city) {\n return zoomLevel.city;\n }\n\n if (address.postcode) {\n return zoomLevel.postcode;\n }\n\n if (address.state) {\n return zoomLevel.state;\n }\n\n return zoomLevel.country;\n }\n\n renderStaticMap() {\n window.dynamicMap = null;\n const backgroundMapUrl = this.props.backgroundMapUrl;\n this.getMapContainer().innerHTML = `\n <div id=\"${this.mapWrapperId}\"\n class=\"style-header-map style-header-map-flat-us\"\n style=\"width: 100%; height: 147px;background: #acdafd url(${backgroundMapUrl});background-position: 65% 50%;background-repeat: no-repeat;background-size: 500px 460px;position: relative\"\n > </div>\n `;\n }\n\n useStaticMap() {\n return this.props.useStaticMap || AddressHelper.isCountry(this.state.address) || !this.mapboxgl.supported();\n }\n\n render() {\n return (\n <React.StrictMode>\n <AddressChangeTracker onAddressChange={this.onAddressChange} initialValue={this.state.address} />\n </React.StrictMode>\n );\n }\n}\n\nAddressMap.counter = 1;\nAddressMap.zoomLevel = {\n country: 6,\n\n unit: 14,\n streetNumber: 14,\n street: 13,\n\n postcode: 12,\n city: 12,\n\n state: 5\n};\n","import React, { Component } from 'react';\n\nimport AddressMap from './AddressMap';\n\nexport default class HeaderMap extends Component {\n\n constructor(props) {\n super(props);\n\n this.getCenterBoundaries = this.getCenterBoundaries.bind(this);\n }\n\n getCenterBoundaries() {\n if (this.props.getCenterBoundaries) {\n return this.props.getCenterBoundaries();\n }\n\n const locationHeaderRect = wo$('#location-header')[0].getBoundingClientRect();\n\n // HACK: .filter() or .map() are not transpiled in this particular case for some reason, giving an error in IE10 (IE9 is fine...)\n const contains = (array, p) => {\n for (let i = 0; i < array.length; i++) {\n const item = array[i].toLowerCase();\n if (p === item) {\n return true;\n }\n }\n\n return false;\n };\n\n var coverageButton = wo$('#coverage-maps-button a')[0];\n if (coverageButton\n && coverageButton.offsetParent !== null\n && !coverageButton.hidden\n && !contains(coverageButton.classList || [], 'hidden')\n ) {\n\n const coverageButtonRect = coverageButton.getBoundingClientRect();\n return {\n left: locationHeaderRect.right,\n right: coverageButtonRect.left\n };\n }\n\n const mainContentRect = wo$('#main-content')[0].getBoundingClientRect();\n return {\n left: locationHeaderRect.right,\n right: mainContentRect.right\n };\n }\n\n render() {\n return (\n <React.StrictMode>\n <AddressMap\n address={this.props.address}\n countryCode={this.props.countryCode}\n backgroundMapUrl={this.props.backgroundMapUrl}\n getCenterBoundaries={this.getCenterBoundaries}\n mapContainerId=\"header-map\"\n apiKey={this.props.apiKey}\n styleId={this.props.styleId}\n ignoreAddressChange={this.props.ignoreAddressChange}\n useStaticMap={this.props.useStaticMap}\n />\n </React.StrictMode>\n );\n }\n}\n","import PropTypes from 'prop-types';\nimport Rcslider from 'rc-slider';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport SliderHandle from './SliderHandle';\n\nconst RangeSlider = ({ minValue: minValueProps, maxValue: maxValueProps, data, onValueChanged, onValueUpdating }) => {\n const [minValue, setMinValue] = useState(minValueProps);\n const [maxValue, setMaxValue] = useState(maxValueProps);\n\n useEffect(() => {\n setMinValue(minValueProps);\n }, [minValueProps]);\n\n useEffect(() => {\n setMaxValue(maxValueProps);\n }, [maxValueProps]);\n\n const handleValueChanged = useCallback(\n ([minIndex, maxIndex]) => {\n if (onValueChanged) {\n onValueChanged(data[minIndex], data[maxIndex]);\n }\n },\n [onValueChanged, data]\n );\n\n const handleValueUpdating = useCallback(\n ([minIndex, maxIndex]) => {\n const min = data[minIndex];\n const max = data[maxIndex];\n\n setMinValue(min);\n setMaxValue(max);\n if (onValueUpdating) {\n onValueUpdating(min, max);\n }\n },\n [onValueUpdating, data]\n );\n\n const minIndex = data.indexOf(minValue);\n const maxIndex = data.indexOf(maxValue);\n\n const range = {\n min: 0,\n max: data.length - 1\n };\n\n const createHandle = useCallback(p => <SliderHandle {...p} />, []);\n\n return (\n <React.StrictMode>\n <Rcslider.Range\n min={range.min}\n max={range.max}\n onChange={handleValueUpdating}\n range={true}\n pushable={false}\n value={[minIndex === -1 ? range.min : minIndex, maxIndex === -1 ? range.max : maxIndex]}\n onAfterChange={handleValueChanged}\n step={1}\n tipFormatter={null}\n handle={createHandle}\n />\n </React.StrictMode>\n );\n};\n\n/* eslint-disable import/no-named-as-default-member */\nRangeSlider.prototype = {\n minValue: PropTypes.number.isRequired,\n maxValue: PropTypes.number.isRequired,\n data: PropTypes.arrayOf(PropTypes.number).isRequired,\n onValueChanged: PropTypes.func.isRequired,\n onValueUpdating: PropTypes.func.isRequired\n};\n/* eslint-enable */\n\nexport default RangeSlider;\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\n\nexport default class SupplierListItem extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n rawChecked: null\n };\n\n this.onCheckedChanged = this.onCheckedChanged.bind(this);\n this.renderCheckbox = this.renderCheckbox.bind(this);\n }\n\n static getDerivedStateFromProps(props, state) {\n return props.checked === state.rawChecked\n ? { rawChecked: null }\n : null;\n }\n\n onCheckedChanged() {\n const current = this.state.rawChecked !== null\n ? this.state.rawChecked\n : this.props.checked;\n\n const checked = !current;\n this.setState({ checked: checked });\n\n if (this.props.onCheckedChanged) {\n this.props.onCheckedChanged(this.props.supplierId, checked);\n }\n }\n\n renderCheckbox() {\n const checked = this.state.rawChecked !== null\n ? this.state.rawChecked\n : this.props.checked;\n\n return (\n <>\n <input\n type=\"checkbox\"\n id={this.props.supplierId}\n checked={checked}\n onChange={this.onCheckedChanged}\n disabled={this.props.disabled}\n />\n <label className=\"font-300\" htmlFor={this.props.supplierId}>\n <span>\n {this.props.name}\n </span>\n </label>\n </>\n );\n }\n\n render() {\n return this.props.isVerticallyAligned \n ? <div className=\"checkbox-tick font-4\" key={this.props.supplierId}>\n {this.renderCheckbox()}\n </div>\n : <li key={this.props.supplierId}>\n <div className=\"checkbox-tick font-4\">\n {this.renderCheckbox()}\n </div>\n </li>;\n }\n}\n\n/* eslint-disable import/no-named-as-default-member */\nSupplierListItem.propTypes = {\n supplierId: PropTypes.number,\n name: PropTypes.string,\n checked: PropTypes.bool,\n disabled: PropTypes.bool\n};\n/* eslint-enable */\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\n\nimport SupplierListItem from './SupplierListItem';\n\nexport default class SuppliersList extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n initiallySelected: props.selectedShortUrls,\n rawSelectedShortUrls: null\n };\n\n this.supplierCheckedChanged = this.supplierCheckedChanged.bind(this);\n this.renderSupplierListItem = this.renderSupplierListItem.bind(this);\n }\n\n static getDerivedStateFromProps(props, state) {\n return JSON.stringify(props.selectedShortUrls || []) !== JSON.stringify(state.initiallySelected || [])\n ? {\n initiallySelected: props.selectedShortUrls,\n rawSelectedShortUrls: null\n }\n : null;\n }\n\n supplierCheckedChanged(supplierId, checked) {\n const supplier = this.props.items.filter(p => p.id === supplierId)[0];\n\n // Use .slice() to avoid modifying the source array\n let selectedShortUrls = (this.state.rawSelectedShortUrls || this.props.selectedShortUrls || []).slice();\n if (checked) {\n selectedShortUrls.push(supplier.shortUrl);\n } else {\n selectedShortUrls = selectedShortUrls.filter(p => p !== supplier.shortUrl);\n }\n\n this.setState({ rawSelectedShortUrls: selectedShortUrls });\n if (this.props.onCheckedChanged) {\n this.props.onCheckedChanged(supplierId, checked);\n }\n }\n\n renderSupplierListItem() {\n const selectedShortUrls = this.state.rawSelectedShortUrls || this.props.selectedShortUrls || [];\n\n return this.props.items.map(supplier => {\n return (\n <SupplierListItem\n key={`other-supplier-${supplier.id}`}\n supplierId={supplier.id}\n name={supplier.name}\n checked={selectedShortUrls.some(p => supplier.shortUrl === p)}\n onCheckedChanged={this.supplierCheckedChanged}\n disabled={this.props.disabled}\n isVerticallyAligned={this.props.isVerticallyAligned}\n />\n );\n });\n }\n\n render() {\n const defaultStyles = 'supplier-list block-grid-xs-2 block-grid-md-3 block-grid-condensed pad-t-3';\n return this.props.isVerticallyAligned ?\n <>\n {this.renderSupplierListItem()}\n </>\n :\n <ul className={this.props.className || defaultStyles}>\n {this.renderSupplierListItem()}\n </ul>;\n }\n}\n\n/* eslint-disable import/no-named-as-default-member */\nSuppliersList.propTypes = {\n className: PropTypes.string,\n items: PropTypes.array,\n selectedShortUrls: PropTypes.arrayOf(PropTypes.string),\n disabled: PropTypes.bool\n};\n/* eslint-enable */\n","const defaults = {\n featuredResultLocationType: 5 // search results\n};\n\n// TODO: Try reducing cyclomatic complexity and enable the eslint rule\n// eslint-disable-next-line complexity\nexport function generateCommonQueryString(\n /**@type {import('../../../js/@types/SearchCriteriaCommon').SearchCriteriaCommon} */ common,\n /** @type {boolean} */ isEmbed\n) {\n const appendQueryParam = WhistleOut.appendQueryParam;\n let queryString = '';\n let config = WhistleOut.getSiteConfiguration();\n\n if (common.tab && common.tab !== 'all') {\n queryString = appendQueryParam(queryString, 'tab=' + common.tab);\n }\n\n if (common.resultsSortExpression && common.resultsSortExpression !== 'Price') {\n queryString = appendQueryParam(queryString, 'sort=' + common.resultsSortExpression);\n }\n\n if (common.resultsSortAscending === false) {\n queryString = appendQueryParam(queryString, 'sortascending=false');\n }\n\n if (common.includeFeaturedResults === false) {\n queryString = appendQueryParam(queryString, 'includefeatured=false');\n }\n\n if (\n isEmbed &&\n common.featuredResultLocationType !== defaults.featuredResultLocationType &&\n WhistleOut.isPositiveNumber(common.featuredResultLocationType)\n ) {\n queryString = appendQueryParam(queryString, `featuredresultlocationtype=${common.featuredResultLocationType}`);\n }\n\n if (common.includeOffersWithCampaignOnly === true || common.includeOffersWithCampaignOnly === 'true') {\n queryString = appendQueryParam(queryString, 'dealsonly=true');\n }\n\n if (common.enforceMaximumResultLimits === false) {\n queryString = appendQueryParam(queryString, 'enforcemaximumresultlimits=false');\n }\n\n if (\n common.maximumSpend &&\n WhistleOut.isPositiveNumber(common.maximumSpend) &&\n common.maximumSpend !== config.broadbandConfig.maxSpend\n ) {\n queryString = appendQueryParam(queryString, 'spend=' + common.maximumSpend);\n }\n\n if (common.minimumSpend && WhistleOut.isPositiveNumber(common.minimumSpend)) {\n queryString = appendQueryParam(queryString, 'minspend=' + common.minimumSpend);\n }\n\n if (WhistleOut.isPositiveNumber(common.maximumUpfront)) {\n queryString = appendQueryParam(queryString, 'upfront=' + common.maximumUpfront);\n }\n\n if (common.contractTerms && common.contractTerms.length > 0) {\n queryString = appendQueryParam(queryString, 'contract=' + common.contractTerms.join(','));\n }\n\n if (common.address && common.address.label) {\n const address = replaceSpaces(common.address.label);\n queryString = appendQueryParam(queryString, 'address=' + address);\n }\n\n if (common.suppliers && common.suppliers.values && common.suppliers.values.length > 0) {\n queryString = appendQueryParam(queryString, 'supplier=' + common.suppliers.values.join(','));\n }\n\n if (common.customerType && common.customerType.length > 0) {\n queryString = appendQueryParam(queryString, 'customer=' + common.customerType);\n }\n\n if (common.currentSupplierShortUrl && common.currentSupplierShortUrl !== '-None-') {\n queryString = appendQueryParam(queryString, 'currentsupplier=' + common.currentSupplierShortUrl);\n }\n\n if (common.showLessResults) {\n queryString = appendQueryParam(queryString, 'showlessresults=true');\n }\n\n if (common.debug === true || common.debug === 'true') {\n queryString = appendQueryParam(queryString, 'debug=true');\n }\n\n if (common.useCache !== undefined && !common.useCache) {\n queryString = appendQueryParam(queryString, 'cache=false');\n }\n\n if (common.maxResultsPerSupplier && common.maxResultsPerSupplier > 0) {\n queryString = appendQueryParam(queryString, 'maxresultspersupplier=' + common.maxResultsPerSupplier);\n }\n\n if (common.products && common.products.length > 0) {\n queryString = appendQueryParam(queryString, 'product=' + common.products.join(','));\n }\n\n if (common.campaignGroup && common.campaignGroup.length > 0) {\n queryString = appendQueryParam(queryString, 'campaignGroup=' + common.campaignGroup);\n }\n\n if (common.results) {\n const resultQueryString = generateResultsQueryString(common.results);\n if (resultQueryString.length > 0) {\n queryString = appendQueryParam(queryString, resultQueryString);\n }\n }\n return queryString;\n}\n\nconst generateResultsQueryString = results => {\n const appendQueryParam = WhistleOut.appendQueryParam;\n let queryString = '';\n\n if (results.maximumNumberOfResults && results.maximumNumberOfResults > 0) {\n queryString = appendQueryParam(queryString, 'maxresults=' + results.maximumNumberOfResults);\n }\n if (results.hideTransactionLinks) {\n queryString = appendQueryParam(queryString, 'transact=false');\n }\n if (results.showRowFilters === false) {\n queryString = appendQueryParam(queryString, 'showrowfilters=false');\n }\n if (results.showRowSorts === false) {\n queryString = appendQueryParam(queryString, 'showrowsorts=false');\n }\n if (results.hideEmptyTabs === true) {\n queryString = appendQueryParam(queryString, 'hideemptytabs=true');\n }\n if (results.hideSort) {\n queryString = appendQueryParam(queryString, 'hidesort=true');\n }\n if (results.hideShare) {\n queryString = appendQueryParam(queryString, 'hideshare=true');\n }\n if (results.hideWidenResults) {\n queryString = appendQueryParam(queryString, 'hidewidenresults=true');\n }\n if (results.showAllResults) {\n queryString = appendQueryParam(queryString, 'showall=true');\n }\n if (results.hideCoverage) {\n queryString = appendQueryParam(queryString, 'hidecoverage=true');\n }\n if (results.productLabel) {\n queryString = appendQueryParam(queryString, 'productlabel=' + encodeURIComponent(results.productLabel));\n }\n if (results.monetisedResultsOnly) {\n queryString = appendQueryParam(queryString, 'monetised=true');\n }\n if (results.pageSize && results.pageSize > 0 && results.pageSize !== results.defaultPageSizeConstant) {\n queryString = appendQueryParam(queryString, 'pagesize=' + results.pageSize);\n }\n return queryString;\n};\n\nconst replaceSpaces = (input, replaceWith = '+') => {\n if (!input) {\n return null;\n }\n\n return input.replace(/\\s+/g, replaceWith);\n};\n","import PropTypes from 'prop-types';\nimport React, { useCallback, useEffect } from 'react';\n\nimport type { Address } from '../../../../js/@types/Address';\nimport AddressHelper from '../../utils/AddressHelper';\nimport AppComponent from '../AppComponent';\nimport { AddressChangedEventArgs, onAddressChangedEvent } from './AddressSearch';\n\ninterface Props {\n initialValue?: Address;\n onAddressChange: (address: Address) => void;\n}\n\n/* eslint-disable import/no-named-as-default-member */\nconst propTypes = {\n initialValue: PropTypes.any,\n onAddressChange: PropTypes.func\n};\n/* eslint-enable */\n\nconst AddressChangeTrackerComponent = (props: Props) => {\n const onAddressChange = useCallback(\n (value: Address) => {\n if (props.onAddressChange) {\n props.onAddressChange(value);\n }\n },\n [props]\n );\n\n const onAddressChangedEventHandler = useCallback(\n (e: CustomEvent<AddressChangedEventArgs>) => {\n // TODO: Fix eslint error\n // eslint-disable-next-line @typescript-eslint/no-invalid-this\n if (!e.detail || e.detail.sender === this) {\n return;\n }\n\n if (AddressHelper.isEqual(props.initialValue, e.detail.address)) {\n return;\n }\n\n onAddressChange(e.detail.address);\n },\n [onAddressChange, props.initialValue]\n );\n\n const handleOnMount = useCallback(() => {\n addEventListener(onAddressChangedEvent, onAddressChangedEventHandler);\n\n // Unmount\n return () => {\n removeEventListener(onAddressChangedEvent, onAddressChangedEventHandler);\n };\n }, [onAddressChangedEventHandler]);\n\n useEffect(() => handleOnMount(), [handleOnMount]);\n\n return <></>;\n};\n\nconst AddressChangeTracker = (props: Props) => {\n return (\n <AppComponent>\n <AddressChangeTrackerComponent {...props} />\n </AppComponent>\n );\n};\n\nAddressChangeTracker.propTypes = propTypes;\nexport default AddressChangeTracker;\n","import PropTypes from 'prop-types';\nimport Rcslider from 'rc-slider';\nimport React, { useCallback } from 'react';\n\nimport SliderHandle from './SliderHandle';\n\ninterface props {\n current: number;\n data: Array<number>;\n onValueChanged: (value: number) => void;\n onValueUpdating: (value: number) => void;\n}\n\nconst Slider = ({ current, data, onValueChanged, onValueUpdating }: props) => {\n const handleValueChanged = useCallback(\n index => {\n if (onValueChanged) {\n onValueChanged(data[index]);\n }\n },\n [data, onValueChanged]\n );\n\n const handleValueUpdating = useCallback(\n index => {\n if (onValueUpdating) {\n onValueUpdating(data[index]);\n }\n },\n [data, onValueUpdating]\n );\n\n const range = {\n min: 0,\n max: data.length - 1\n };\n\n const index = data.indexOf(current);\n const createHandle = useCallback(p => <SliderHandle {...p} />, []);\n\n return (\n <React.StrictMode>\n <Rcslider\n min={range.min}\n max={range.max}\n onChange={handleValueUpdating}\n value={index}\n onAfterChange={handleValueChanged}\n step={1}\n handle={createHandle}\n />\n </React.StrictMode>\n );\n};\n\n/* eslint-disable import/no-named-as-default-member */\nSlider.prototype = {\n current: PropTypes.number.isRequired,\n data: PropTypes.arrayOf(PropTypes.number).isRequired,\n onValueChanged: PropTypes.func.isRequired,\n onValueUpdating: PropTypes.func.isRequired\n};\n/* eslint-enable */\n\nexport default Slider;\n","import { SliderProps } from 'rc-slider';\nimport React, { forwardRef } from 'react';\n\nconst SliderHandle = forwardRef((props: Parameters<SliderProps['handle']>[0], ref: React.Ref<HTMLDivElement>) => {\n return (\n <div\n ref={ref}\n className=\"rc-slider-handle rc-slider-handle-2 rc-slider-handle-upper\"\n style={{ left: `${props.offset}%` }}\n aria-disabled={props.disabled}\n ></div>\n );\n});\n\nSliderHandle.displayName = 'SliderHandle';\nexport default SliderHandle;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nexport function initReact() {\n if (window === undefined) {\n return;\n }\n\n window.React = window.React || React;\n window.ReactDOM = window.ReactDOM || ReactDOM;\n}\n"],"names":["ScreenSize","props","screenSize","isMobile","useMediaQuery","maxWidth","isTablet","minWidth","type","Tablet","Mobile","Desktop","useScreenSize","useEffect","onScreenSizeChange","children","mobile","tablet","desktop","generateQueryString","data","allAvailableConnectionsSelected","isEmbed","appendQueryParam","WhistleOut","queryString","location","speed","maxSpeed","maxUploadSpeed","customer","length","parseInt","maxUpfront","planType","modemShortUrl","simOnly","connectionTypes","values","slice","sort","join","excludeBundles","reseller","hideEmptyTabs","hideSingleResultTab","peakDataOnly","showFewerResults","uploadNotCounted","staticIp","prepaidExpiry","network","includeFiveG","undefined","state","bundles","homePhone","tv","lineRental","homePhoneCalls","tvChannels","mobilePhone","common","commonQueryString","generateCommonQueryString","goToSearchPage","searchUrl","criteria","url","fullUrl","href","BroadbandResultsAdaptor","unbindAll","searchResultsPage","wo$","off","this","bindPreviewActions","bindCoverageMap","mapContainer","find","waitFor","CoverageMap","init","instanceId","nbnMapElement","adslMapElement","mobileMapElement","coverageMapsButton","removeClass","addClass","click","scrollTo","bindFastProviders","fastProviders","on","expires","Date","setTime","getTime","Cookies","set","path","slideUp","hideCoverageMapButton","bindContractDropdown","changeContractTypeHandler","showModalHandler","contract","copyToClipboard","tabName","hide","parent","prev","hasClass","show","bindHideFeatureResults","hideFeaturedResultsHandler","bindDisableMaximumResultLimits","disableMaximumResultLimitsHandler","bindSort","changeSortHandler","sortExpression","sortAscending","isAscending","bindCoverageStrip","resetConnectionsHandler","args","preventDefault","bindCoverageErrorStrip","retrySearchHandler","bindModemCarouselLandingPage","changeModem","landingPage","bindLandingPageCriteria","attribute","callback","e","value","bindCriteriaFilters","trueOrNull","falseOrNull","setBundles","key","val","mappings","channels","split","connection","toNumber","homephone","homephonecalls","linerental","mobilephone","modem","peakdata","showlessresults","simonly","el","c","modal","closest","getCoveragePromise","coverageUrl","Promise","resolve","window","setTimeout","ajax","success","result","setCoverageCookie","coverage","hasFixed","useDefaultSuppliers","defaultConnectionTypes","bindWidenResults","widenResultsHandler","options","id","removeAll","includeAllSuppliers","reduceData","reduceSpeed","noDealsOnly","noPeakData","noUploadCounted","noStaticIp","includeMoreConnectionTypes","noBundling","removeSelectedModem","includeAllLocations","includeAllContractLengths","includeAllPrepaidExpiry","increasePriceRange","sortBy","trackEvent","bindLoadMore","loadMoreResultsHandler","tab","current","appendLoadMoreResults","results","pageSize","$results","button","total","loadedRecords","append","applyPopover","bindCta","notifications","fire","bindTab","changeTabHandler","that","selectConnectionType","applySelectPicker","$","attr","switchTabs","each","content","popover","container","trigger","placement","html","changeCurrentActiveTab","selectedTabLink","text","selectedTabLinkButton","image","src","tip","siblings","bindPlanSummary","supplierShortUrl","maxResults","showDownloadSpeed","speedTestResult","downloadSpeed","isCompleted","lastResultDate","toLocaleDateString","year","month","day","speedTestInProgress","isInProgress","prop","bindSpeedTestResult","ignorePopup","get","JSON","parse","SpeedTest","getSpeedTestParameters","resp","protocol","runNdt7Test","urls","testSpeed","fqdn","hasErrors","bindNbnAlertModal","focus","clearNbnAlertModalErrort","validateNbnAlertModal","$this","name","email","generalOptIn","is","error","complete","valid","trim","showNbnAlertModalError","config","getSiteConfiguration","regex","RegExp","test","optInYes","optInNo","field","messageSelector","coverageRequestsQueue","className","onClick","isLoading","dataWidth","descirption","selectArgs","primaryFilterAsSpeed","speedDescription","selectedValue","speedValues","onValueChanged","onSpeedChange","dataDescription","dataValues","onDataChange","Select","selectClassName","optionGroups","label","onChange","selectedValues","onSearchClick","useCallback","AddressSearch","addressSearchProps","ref","marginCss","inputClassName","hideLabel","speedDataSelectProps","searchButtonText","splashImageUrl","alt","renderSplashImage","inputValue","setInputValue","useState","address","addressSearchResult","setAddressSearchResult","isNotFound","isError","setData","setSpeed","isSearchInitiated","setIsSearchInitiated","addressSearchDesktopRef","useRef","addressSearchMobileRef","addressSearchTabletRef","resultsAdaptor","handleMount","SearchAddressActions","getCurrentLocationViaHtml5","handleOnInput","handleOnAddressChange","handleOnAddressEmptyResults","handleOnAddressResponseError","doSearch","coveragePromise","coverageCheckUrl","draft","search","then","newCriteria","produce","map","t","shortUrl","suppliers","searchLocation","getCurrentLocation","siteCountry","countryCode","toLowerCase","clientCountry","isEmptyAddress","placeholder","lookupAddress","selectFirstSuggest","autoDetectLocation","onAddressInputInit","input","addressCommonProps","onInput","onInitialized","onEmptyResults","onResponseError","toolTipText","tooltipLink","commonProps","addressSearch","addressSearchPlaceHolder","tooltipDescription","addressNotFoundMessage","addressNotFound","commonErrorMessage","unableToVerifyAddress","types","queryDelay","apiKey","showProgress","description","speedFormat","format","dataFormat","warning","searchText","HeaderMapWithStatistics","Component","constructor","super","getCenterBoundaries","bind","locationHeaderRect","getBoundingClientRect","statisticsRect","left","right","render","React","HeaderMap","backgroundMapUrl","ignoreAddressChange","mapContainerId","styleId","useStaticMap","containerRef","onModalAction","isOpen","action","onClose","tabIndex","role","items","status","default","onTransactLinkClick","getElements","document","querySelectorAll","querySelector","forEach","a","addEventListener","removeEventListener","link","element","currentTarget","Error","isDynamicLink","getPrivateDataCookieValue","privateDataModalId","onDynamicLinkClick","dataset","productShortUrl","getLinkData","Exclamation","IncompleteAddressWarning","Header","isModal","title","subtitle","htmlProps","useMemo","setAddress","handleContinueClick","onContinue","isPrivateDataEnabled","isIncompleteAddress","streetNumber","isSearchDisabled","privateDataButton","skipGlobalUpdate","disabled","onRetry","ContinueButton","target","pageView","modalView","Title","ViewPlansButton","BackLink","handleClick","style","transform","SearchPlanUnavailablePanel","isSearchPage","addressHelper","isIncomplete","isIncompleteLabel","getInitialAddress","urlHelper","getAddress","URL","searchParams","replace","actions","reducer","initialState","transactUrl","reducers","requestSearch","payload","startProgress","endProgress","onError","onResponse","onTransactUrlFound","onPopupBlocked","AvailabilityCheckPanel","dispatch","useReducer","triggerGetTransactUrlQuery","getTransactUrlQuery","broadbandApi","onAddressChange","onStatusChange","handleShowPlans","onShowPlans","handleRetry","onProgressChange","onRequest","isUninitialized","onTransactUrlChange","shouldOpenTransactLink","transactPage","open","newWin","closed","openTransactUrl","autoSubmitOnLoad","blocked","AvailabilityCheckModal","setIsOpen","setProductShortUrl","setSupplierShortUrl","setStatus","handleClose","includes","isDynamicTransactLink","handleDynamicTransactLinkClick","handleTransactUrlChange","handleTransactLinkClick","ProductPageConnected","ownProps","connector","area","subarea","supplier","product","pathname","parts","Object","assign","useProductLocation","ProductPage","AppComponent","goTo","SmartMoveVerifyPageConnected","SmartMoveVerifyPage","BroadbandAddressSearchActions","ResultsAdaptor","onCriteriaChange","Update","$set","BroadbandAddressSearch","searchCriteria","inputProps","size","BroadbandActions","changeTab","updateTab","embeddedMode","searchSettings","allConnectionsSelected","HistoryWrapper","pushQuery","initHistoryTracker","bindResults","trackPage","retrySearch","updateConnectionTypes","contractType","updateContractType","showModal","includeNbnConnections","nbnConnectionTypes","expression","updateSort","loadMoreResults","widenResults","hideFeaturedResults","disableMaximumResultLimits","updatePlanSummarySupplier","updateModem","updateData","updateSpeed","updateSuppliers","defaultCriteria","updateCriteria","coverageAddress","pagedResultsUrl","goToSearch","baseUrl","getSearchUrl","suppressCoverageCheck","searchPageRefresh","initialCriteria","p","campaignGroup","hideTabsHeaderHeading","showAllResults","hideSort","hideShare","hideWidenResults","showRowSorts","showRowFilters","maximumNumberOfResults","hideCoverage","productLabel","updatedCriteria","onAjaxSearchSuccess","$addressBar","$fastProviders","unmountComponentAtNode","fastProvidersHtml","nodeToAttach","createElement","getAds","resize","sender","resultQueryString","searchSuccess","onAjaxSearchError","searchError","isAjax","doNotRetry","getAnalyticsClientSideData","resultCount","currentSupplierId","currentSupplierShortUrl","allItems","filter","i","push","minimumSpend","maximumSpend","includeOffersWithCampaignOnly","resultsSortExpression","resultsSortAscending","placeId","shortName","longName","city","postcode","valuesString","trackPageView","getRemarketingData","connectionType","selectedTypes","remarketing","Slider","anyLabel","fromLabel","labelTitle","isRequired","containerClassName","sliderClassName","labelTemplate","setValue","handleValueUpdating","onValueUpdating","getItem","v","labelText","dangerouslySetInnerHTML","__html","dataLabel","anyDataLabel","onChanged","remove","retryLabel","tooltipProps","tooltipHtmlAttributes","template","innerHTML","speedFragment","Array","prototype","call","innerText","speedDescriptionPlaceholder","removeChild","hr","previousSibling","getTooltipProps","speedLabel","anySpeedLabel","btnRef","handleOnSelected","blur","onSelected","selected","active","buttonProps","OptionGroup","selectedKeys","selectedKeysProps","getKey","maxItemsCount","showSelectedCount","anyButtonPositionLast","showMoreVisible","header","onMoreClick","onMoreClickHandler","onSelectedItemsChanged","onSelectedItemsChangedHandler","renderItemButton","renderItemButtonHandler","renderAnyButton","renderAnyButtonHandler","getTopEligibleItems","getTopEligibleItemsHandler","setSelectedKeys","getItemByKey","keys","ordered","b","localeCompare","onAnyClick","event","getSelectedItems","topEligibleItems","topItemsCount","Math","min","itemsCount","selectedItems","unselectedCount","selectedCount","isAllSelected","anyButton","all","item","isSelected","some","lastVisibleItem","splice","indexOf","onItemSelected","more","propTypes","showAll","imageAlt","imageSrc","availableSupplierIds","showHeader","businessOnly","onShowAllProviders","shortUrls","renderHasNoItems","noProvidersFoundForCriteria","smallImageUrl","heading","availableItems","isAvailable","isBusiness","showTextOnly","textContent","isBusinessOnly","onShowAll","SearchFilterContext","createContext","include","exclude","phone","BuildOptionString","prefix","BundleSelect","context","useContext","resources","optionsSelected","setOptionsSelected","stateArray","BuildInitalState","tvOptionsSelected","setTvOptionsSelected","tc","toString","showTvChannels","setShowTvChannels","selectpicker","os","showLineRental","showMobilePhoneBundle","Number","onChangeCallBack","selectedOptions","option","o","tvIncluded","onLoad","node","jQuery","OnTvChangeCallBack","buildChannelOptions","bundle","multiple","showAllBundles","phoneBundle","tvBundle","mobilePhoneBundle","hidden","mustHaveChannels","individualChannels","individualTvChannels","kidsChannels","kidsTvChannels","sportsChannels","sportsTvChannels","AdvancedTab","chooseContractTerms","chooseModem","choosePrepaidExpiry","chooseMegaAdvanced","byoModem","allContractTerms","contractTermSelectedOptions","setSelectedContractTerms","contractTerms","ct","modemSelectedOptions","setModemSelectedOptions","prepaidExpirySelectedOptions","setPrepaidExpirySelectedOptions","valueOf","megaAdvancedSelectedOptions","setMegaAdvancedSelectedOptions","returnArray","maxResultsPerSupplier","showLessResults","BuildMegaAdvancedState","DidUnmount","onModemChange","DidMount","dom","applySelectPickersStyle","isSimOnly","OnChange","contractLength","contractTerm","modemType","anyModemLabel","homeModemsLabel","homeModemTypes","showMobileModems","mobileModemsLabel","mobileModemTypes","renderMobileBroadbandModems","prepaidExpiryValues","expiry","showMegaAdvancedFilters","superMegaAdvanced","selectOptions","megaAdvancedOptions","ConnectionType","rawChecked","onCheckedChanged","getDerivedStateFromProps","rawValue","checked","setState","htmlFor","ConnectionTab","allShortUrls","connectionTypeTiers","tier1ConnectionTypes","tier2ConnectionTypes","tier3ConnectionTypes","allUnselected","selectedShortUrls","wrapper","createRef","renderConnectionType","handleConnectionTypeValueChanged","toggleConnections","toggleTier1","toggleTier2","toggleTier3","toggleConnectionCategory","onSelectAllChange","renderConnectionTypeCategory","isChecked","AddItem","RemoveItem","connections","anyOneUnChecked","AddItems","RemoveItems","newValue","inArray","unSelectAll","index","selectAll","unavailableConnectionTypes","findIndex","connectionTypeCategory","titleClass","connectionTypeCategories","connectionTypeCategoriesClass","connectionTypesContentFragment","_ref","atLeastLabel","changeData","popoverRef","getLabel","SliderWithLabel","currentData","includedDataLabel","buttonsContentFragment","buttonsContainerRef","handleOnMount","defaultTo","minData","ModalDataSlider","currentSpeed","speedContentFragment","minValue","minValueProps","maxValue","maxValueProps","updateSpend","setMinValue","setMaxValue","max","lowestValue","biggestValue","anyPrice","handleOnValueUpdating","monthly","RangeSlider","updateUpfront","setRawValue","handleSliderValueUpdating","spendSlider","upfrontSlider","spendContentFragment","showMaxUpfrontSlider","onTierButtonClick","minSpend","maxSpend","spend","ModalSpendSlider","_extends","ModalUpfrontSlider","maximumUpfront","SuppliersTab","getInitialState","selectNone","onSupplierChecked","onPersonalChange","onBusinessChange","onSelectionChanged","availableShortUrls","personalShortUrls","isPersonal","businessShortUrls","isPersonalAvailable","isBusinessAvailable","customerType","concat","getIsAllSelected","supplierId","getSelectedUrlsForCustomerType","Set","typeChecked","typeShortUrls","otherTypeChecked","otherTypeShortUrls","s","availableSuppliers","hasAddress","providersInYourArea","providers","SuppliersList","isVerticallyAligned","unavailableSuppliers","unavailableSuppliersInYourArea","personal","business","PropTypes","isActive","checkActive","TabContent","isActiveProps","Function","ClassNames","mapDispatchToProps","modalState","broadband","activeTab","setCriteria","handleIsOpenChanged","handleOnCriteriaChanged","handleOnTabSelected","selectTab","getAttribute","applyFilters","onCriteriaChanged","handleAddressChange","addressChanged","handleSuppliersChanged","updateSelectedSuppliers","handleUpdateSpend","isTabActive","hideModal","totalConnectionTypes","tabMenuItems","hideSupplierFilter","faqContentFragment","AddressChangeTracker","speedSlider","dataSlider","includedData","dataContentFragment","allConnectionTypes","cancel","applyAll","ModalOpenEventName","productAreaState","handleShowModal","handleShowAllProviders","legacyActions","searchRetry","handleModalCriteriaChanged","selectedSuppliers","selectedSupplierKeys","isArray","getSupplierKey","Provider","filtersData","defaultSupplierAvailableText","showAllFilters","filters","errorUpdatingResults","pleaseTryAgain","retry","isInitialised","searchState","settings","QueryHelper","getQueryString","isEquivalent","compareTo","getClearQuery","query","SearchConnected","isProgress","setIsProgress","previousCriteria","usePrevious","triggerGetSearchResultsQuery","searchResultsQuery","selector","force","resultsUrl","handleAddressChanged","updateAddress","handleSpeedTestResultsChanged","detail","isFetching","resultsSearchCriteria","enforceAjax","initialValue","Search","initReact","BroadbandComponents","ReduxEnabled","ReactReduxContext","ReduxProvider","store","RouterEnabled","isInRouter","useInRouterContext","BrowserRouter","counter","elementId","initiallySelected","stringify","rawSelectedValues","refSelect","getContainerDom","initialAddress","componentDidMount","initBootstrapSelect","select","setSelectedValues","componentWillUnmount","componentDidUpdate","prevProps","optionGroupsAreSame","prevUntil","mapValues","mapValue","groups","renderItem","dataStyle","group","defaultProps","AddressMap","mapWrapperId","marker","isSmallScreen","onWindowResize","onResizeEnd","getMapContainer","renderStaticMap","async","mapboxgl","setView","AddressHelper","resizeTimer","clearTimeout","innerWidth","dynamicMap","onMapRemove","initMap","onMapInit","getLocation","center","zoom","width","height","zIndex","renderToStaticMarkup","Map","accessToken","interactive","trackResize","attributionControl","addControl","AttributionControl","offset","setMarker","clearMarker","markerIconUrl","backgroundImage","backgroundSize","backgroundRepeat","Marker","anchor","setLngLat","lng","lat","addTo","currentCenter","getCenter","newCenter","setCenter","getZoom","setZoom","panTo","targetLatLng","getOffsetLatLng","getOffset","targetPoint","project","sub","Point","x","y","unproject","wrapperRect","centerBetween","expected","top","bottom","start","end","latitude","longitude","countries","au","ca","mx","nz","uk","us","zoomLevel","unit","street","country","supported","coverageButton","offsetParent","contains","array","classList","coverageButtonRect","mainContentRect","handleValueChanged","_ref2","minIndex","maxIndex","_ref3","range","createHandle","SliderHandle","Rcslider","pushable","onAfterChange","step","tipFormatter","handle","SupplierListItem","renderCheckbox","rawSelectedShortUrls","supplierCheckedChanged","renderSupplierListItem","defaults","featuredResultLocationType","includeFeaturedResults","isPositiveNumber","enforceMaximumResultLimits","broadbandConfig","replaceSpaces","debug","useCache","products","generateResultsQueryString","hideTransactionLinks","encodeURIComponent","monetisedResultsOnly","defaultPageSizeConstant","replaceWith","arguments","AddressChangeTrackerComponent","onAddressChangedEventHandler","forwardRef","displayName","ReactDOM"],"sourceRoot":""}