{"version":3,"sources":["common/components/LinkButton.jsx","common/components/ErrorMessage.jsx","common/components/GridLayout.jsx","common/constants.js","common/components/Collapsible.jsx","ui/StoreLocatorHeader.jsx","ui/Map.jsx","providers/addressToLocationProvider.js","providers/storeTypeIconProvider.js","providers/searchByLocationProvider.js","providers/clients/findStores.js","providers/clients/getStoreTypes.js","common/errors/response-error.js","common/errors/invalid-find-stores-response.js","common/errors/invalid-get-store-types-response.js","common/response_handler.js","providers/storesProvider.js","providers/storeTypesProvider.js","common/tagging/index.js","ui/StoreLocation.jsx","ui/MapContainer.jsx","ui/StoreLocationList.jsx","ui/StoreLocator.jsx","ui/UserMessage.jsx","ui/SearchStores.jsx","App.js","index.js"],"names":["LinkButton","styled","a","FontFamilies","Regular","props","width","ColorCodes","Black","margin","ErrorTitle","Text","ErrorMessage","title","message","backgroundColor","border","borderRadius","padding","src","Images","Icons","Error","fontSize","fontWeight","color","fontFamily","Bold","text","default","Grid","div","alignItems","GridItem","spacing","xs","sm","md","lg","CommonImages","Icon4U","IconBIR","IconChatz","IconShop","IconVAD","CollapseArrow","ExpandArrow","IconLocationWhite","CollapseIcon","Image","Collapsible","useState","open","setOpen","children","openText","closeText","onClick","hoverBackgroundColor","Grey2","hoverCursor","height","StoreLocatorHeader","id","Red1","href","defaultProps","Map","this","loadMap","prevProps","google","currentLocation","recenterMap","map","current","maps","center","LatLng","lat","lng","panTo","mapRef","refs","node","ReactDOM","findDOMNode","zoom","initialCenter","mapConfig","React","Children","c","cloneElement","mapCenter","ref","size","renderChildren","Component","addressToLocation","address","getStoresByStoreType","setUserMessage","geocodeService","window","Geocoder","searchAddress","geocode","componentRestrictions","country","results","status","GeocoderStatus","OK","geometry","location","getStoreTypeIcon","storeType","icon","searchByLocation","navigator","geolocation","getCurrentPosition","pos","coords","latitude","longitude","visible","findStores","storeTypes","findStoreUrl","Environment","apiHost","url","store","description","reqURL","join","axios","get","getStoreTypes","getStoreTypesUrl","ResponseError","displayable","trace","InvalidFindStoresResponseError","InvalidGetStoreTypesResponseError","parseError","eresp","responseError","Errors","response","data","Array","isArray","messages","length","shift","result","exceptionMessage","headers","isValidResponse","resp","HttpStatusCodes","hasOwnProperty","findStoresService","ResponseHandler","reloadTealiumConfig","getTagEvent","eventName","eventObj","eventConfig","Config","init","configUrl","uiBase","name","event","Object","assign","tag","eventType","info","tealium","Tealium","with","context","tagEvent","EventTypes","Event","tagView","View","titleCase","str","replace","txt","charAt","toUpperCase","substr","toLowerCase","Point","HeaderLine","DetailLine","LocationIcon","img","Link","Container","VFillContainer","StoreLocation","show","item","index","storeName","storeAddressLine1","streetName","storeAddressLine2","city","storeDisctrict","state","display","key","style","flex","distance","toFixed","siteType","alt","lineHeight","mainPhone","email","geographicLocation","x","y","MapContainer","showingInfoWindow","activeMarker","selectedPlace","onMarkerClick","marker","e","setState","onClose","displayMarkers","storeGeos","label","path","fillColor","fillOpacity","anchor","labelOrigin","origin","strokeWeight","scale","position","screen","render","only","document","getElementById","onOpen","onInfoWindowOpen","GoogleApiWrapper","apiKey","StoreLocationList","stores","storeList","slice","moreStoresList","wrap","CheckBoxTitle","StoreLocator","handleCheckedStoreType","loading","Fragment","flexGrow","labelId","typeId","minWidth","onClickArgs","isChecked","marginRight","UserMessage","autocompleteService","SearchTitle","useStyles","makeStyles","theme","palette","secondary","SearchStores","handleSearchByAddress","handleSearchByLocation","classes","inputValue","setInputValue","options","setOptions","handleChange","target","value","handleKeyDown","fetch","useMemo","throttle","input","callback","getPlacePredictions","useEffect","active","places","AutocompleteService","background","Autocomplete","getOptionLabel","option","onChange","newValue","filterOptions","autoComplete","includeInputInList","freeSolo","disableOpenOnFocus","renderInput","params","TextField","variant","fullWidth","onKeyDown","renderOption","matches","structured_formatting","main_text_matched_substrings","parts","parse","main_text","match","offset","container","LocationOn","className","part","highlight","Typography","secondary_text","activeBackgroundColor","Purple1","justify","textAlign","iconUrl","initStoreTypes","App","selectedStoreTypes","userMessage","isLoading","filterCheckedStoreTypes","then","catch","error","finally","trim","checkedStoreTypes","forEach","type","filter","getStoreList","getStoreTypesService","i","storeTypeList","Local","uiHost","apiBase","Dev","QA","Staging","Prod","autoDetect"],"mappings":"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","file":"static/js/main.4e0ac9c4.chunk.js","sourcesContent":["import React from 'react';\nimport {\n FontFamilies,\n ColorCodes,\n} from '@vodacom/web-common';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\n\nexport const LinkButton = styled.a`\n font-weight: 700;\n font-family:${FontFamilies.Regular};\n width:${(props) => props.width};\n display: inline-block;\n font-size: 14px;\n line-height: 1.4;\n color:${ColorCodes.Black};\n box-shadow: 0 1px 3px rgba(50, 50, 50, 0.75);\n margin: ${(props) => props.margin || '0 20px'};\n padding: 6px 15px;\n border: none;\n border-radius:3px;\n text-align: center;\n cursor: pointer;\n white-space: nowrap;\n text-decoration: none;\n &:hover{\n background-color:lightgray;\n }\n`;\n","import React from 'react';\nimport {\n FontFamilies,\n HContainer,\n VContainer,\n Text,\n BodyText,\n Images,\n Image,\n} from '@vodacom/web-common';\nimport { PropTypes } from 'prop-types';\nimport styled from 'styled-components';\n\nconst ErrorTitle = styled(Text)`\n margin: 0 0 20px;\n`;\n\nexport const ErrorMessage = (props) => {\n const { title, message } = props;\n return (\n \n \n \n \n \n \n \n {title}\n \n \n \n \n \n );\n};\n\nErrorMessage.propTypes = {\n title: PropTypes.string,\n message: PropTypes.string,\n};\n\nErrorMessage.default = {\n title: null,\n message: null,\n};\n","import styled from 'styled-components';\n\nexport const Grid = styled.div`\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n box-sizing: border-box;\n align-items: ${(props) => props.alignItems};\n margin: ${(props) => props.margin};\n padding: ${(props) => props.padding};\n`;\n\nexport const GridItem = styled.div`\n flex-grow: 0;\n padding: ${(props) => props.spacing}%;\n\n @media (min-width: 0px){\n max-width: ${(props) => props.xs && ((props.xs / 12) * 100) - (props.spacing * 2 || 0)}}%;\n flex-basis: ${(props) => props.xs && ((props.xs / 12) * 100) - (props.spacing * 2 || 0)}%;\n }\n @media (min-width: 600px){\n max-width: ${(props) => props.sm && ((props.sm / 12) * 100) - (props.spacing * 2 || 0)}%;\n flex-basis: ${(props) => props.sm && ((props.sm / 12) * 100) - (props.spacing * 2 || 0)}%;\n }\n @media (min-width: 960px){\n max-width: ${(props) => props.md && ((props.md / 12) * 100) - (props.spacing * 2 || 0)}%;\n flex-basis: ${(props) => props.md && ((props.md / 12) * 100) - (props.spacing * 2 || 0)}%;\n }\n @media (min-width: 1280px){\n max-width: ${(props) => props.lg && ((props.lg / 12) * 100) - (props.spacing * 2 || 0)}%;\n flex-basis: ${(props) => props.lg && ((props.lg / 12) * 100) - (props.spacing * 2 || 0)}%;\n }\n`;\n\nexport const Hidden = styled.div`\n @media only screen and (min-width:600px) {\n width: inherit;\n flex-grow: 0;\n display: inherit;\n & ~ & {\n display: none;\n width:0;\n }\n }\n`;\n","import {\r\n Images as CommonImages,\r\n} from '@vodacom/web-common';\r\n\r\nexport const Images = {\r\n Icons: {\r\n ...CommonImages.Icons,\r\n Icon4U: '/cloud/contact-us/find-a-store/assets/images/4u.png',\r\n IconBIR: '/cloud/contact-us/find-a-store/assets/images/bir.png',\r\n IconChatz: '/cloud/contact-us/find-a-store/assets/images/chatz.png',\r\n IconShop: '/cloud/contact-us/find-a-store/assets/images/shop.png',\r\n IconVAD: '/cloud/contact-us/find-a-store/assets/images/vad.png',\r\n CollapseArrow: '/cloud/contact-us/find-a-store/assets/images/collapse-arrow.png',\r\n ExpandArrow: '/cloud/contact-us/find-a-store/assets/images/expand-arrow.png',\r\n IconLocationWhite: '/cloud/contact-us/find-a-store/assets/images/iconLocationWhite.png',\r\n },\r\n};\r\n\r\nexport const googleMapKey = 'AIzaSyAcYJvEdp_TxOAP7ezWXcLlWAhZH_mz6ZM';\r\n\r\nexport const storeTypes = [\r\n { typeId: 6, description: 'Chatz' },\r\n { typeId: 1, description: 'Repair Centre' },\r\n { typeId: 2, description: 'Vodacom 4U' },\r\n { typeId: 3, description: 'Vodacom Approved Dealer' },\r\n { typeId: 4, description: 'Vodacom Shop' },\r\n { typeId: 5, description: 'Vodacom Express' },\r\n];\r\n","import React, { useState } from 'react';\nimport {\n HContainerV,\n VContainer,\n Text,\n Image,\n FontFamilies,\n ColorCodes,\n} from '@vodacom/web-common';\nimport PropTypes, { element } from 'prop-types';\nimport styled from 'styled-components';\nimport { Images } from '../constants';\n\nconst CollapseIcon = styled(Image)`\n margin: 0 10px 0 0;\n`;\n\nexport function Collapsible(props) {\n const [open, setOpen] = useState(false);\n const {\n children,\n openText,\n closeText,\n title,\n } = props;\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n return (\n \n \n \n \n {title || open ? closeText : openText}\n \n \n {\n open && (\n \n {children}\n \n )\n }\n \n );\n}\n\nCollapsible.propTypes = {\n openText: PropTypes.string,\n closeText: PropTypes.string,\n title: PropTypes.string,\n children: PropTypes.arrayOf(element).isRequired,\n};\n\nCollapsible.defaultProps = {\n openText: null,\n closeText: null,\n title: null,\n};\n","import React from 'react';\r\nimport {\r\n FontFamilies,\r\n ColorCodes,\r\n H1,\r\n BodyText,\r\n VFillContainer,\r\n HContainerV,\r\n} from '@vodacom/web-common';\r\nimport { LinkButton } from '../common/components';\r\n\r\nexport default function StoreLocatorHeader() {\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n \r\n Shop online\r\n \r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n VContainer,\n Spinner,\n} from '@vodacom/web-common';\n\nexport default class Map extends React.Component {\n componentDidMount() {\n this.loadMap();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.google !== this.props.google) {\n this.loadMap();\n }\n\n if (prevProps.currentLocation !== this.props.currentLocation) {\n this.recenterMap();\n }\n }\n\n recenterMap() {\n const { map } = this;\n const current = this.props.currentLocation;\n\n const { google } = this.props;\n const { maps } = google;\n\n if (map) {\n const center = new maps.LatLng(current.lat, current.lng);\n map.panTo(center);\n }\n }\n\n loadMap() {\n if (this.props && this.props.google) {\n // checks if google is available\n const { google } = this.props;\n const { maps } = google;\n\n const mapRef = this.refs.map;\n\n // reference to the actual DOM element\n const node = ReactDOM.findDOMNode(mapRef);\n\n const { zoom } = this.props;\n const { lat, lng } = this.props.initialCenter;\n const center = new maps.LatLng(lat, lng);\n const mapConfig = {\n\n center,\n zoom,\n };\n\n // maps.Map() is constructor that instantiates the map\n this.map = new maps.Map(node, mapConfig);\n }\n }\n\n renderChildren() {\n const { children } = this.props;\n\n if (!children) return;\n\n return React.Children.map(children, (c) => {\n if (!c) return;\n return React.cloneElement(c, {\n map: this.map,\n google: this.props.google,\n mapCenter: this.props.initialCenter,\n });\n });\n }\n\n render() {\n return (\n
\n \n \n \n {this.renderChildren()}\n
\n );\n }\n}\n\nMap.defaultProps = {\n zoom: 11,\n initialCenter: {\n lat: -25.9699636,\n lng: 28.1280342,\n },\n visible: true,\n};\n","export default function addressToLocation(address, getStoresByStoreType, setUserMessage) {\r\n const geocodeService = {\r\n current: null,\r\n };\r\n\r\n if (!geocodeService.current && window.google) {\r\n geocodeService.current = new window.google.maps.Geocoder();\r\n }\r\n\r\n if (!geocodeService.current) {\r\n return undefined;\r\n }\r\n\r\n const searchAddress = `${address}, South Africa`;\r\n\r\n return geocodeService.current.geocode({\r\n address: searchAddress,\r\n componentRestrictions: {country: 'ZA' },\r\n }, (results, status) => {\r\n if (status === window.google.maps.GeocoderStatus.OK) {\r\n if (results[0]) {\r\n const lat = results[0].geometry.location.lat();\r\n const lng = results[0].geometry.location.lng();\r\n return getStoresByStoreType(lat, lng);\r\n }\r\n } else {\r\n setUserMessage('Location not found', 'We cannot find the address that you\\'ve entered. Please try again, using a different address.');\r\n }\r\n return results;\r\n });\r\n}\r\n","import { Images } from '../common';\n\nexport default function getStoreTypeIcon(storeType) {\n let icon = {\n src: Images.Icons.IconShop,\n color: '#e60000',\n };\n\n if (storeType === 'Vodacom Approved Dealer') {\n icon = {\n src: Images.Icons.IconVAD,\n color: '#5e2750',\n };\n }\n if (storeType === 'Vodacom 4U') {\n icon = {\n src: Images.Icons.Icon4U,\n color: '#eb9700',\n };\n }\n if (storeType === 'Chatz') {\n icon = {\n src: Images.Icons.IconChatz,\n color: '#007c92',\n };\n }\n if (storeType === 'Vodacom Express') {\n icon = {\n src: Images.Icons.IconBIR,\n color: '#00CB86',\n };\n }\n\n return icon;\n}\n","export default function searchByLocation(getStoresByStoreType, setUserMessage) {\r\n if (navigator && navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition((pos) => {\r\n const lat = pos.coords.latitude;\r\n const lng = pos.coords.longitude;\r\n getStoresByStoreType(lat, lng);\r\n },\r\n () => {\r\n const message = `We are unable to establish your exact location,\r\n please view the results below or alternatively refine your search\r\n by entering a postcode, city, address or please try again later.`;\r\n setUserMessage('Exact Location not found', message);\r\n });\r\n } else {\r\n setUserMessage('Unable to establish location', 'We are unable to establish your device location.');\r\n }\r\n}\r\n","import axios from 'axios';\r\nimport {\r\n Environment,\r\n} from '@vodacom/web-env';\r\n\r\nexport default function findStores(lat, lng, storeTypes) {\r\n const findStoreUrl = `${Environment.current.apiHost}/cloud/rest/v1/geographicSiteManagement/geographicSites`;\r\n const url = `${findStoreUrl}?latitude=+${lat}&longitude=+${lng}`;\r\n const storeType = storeTypes.map((store) => `&storeTypes=${store.description}`);\r\n const clientType = '&clientType=CBU';\r\n const reqURL = `${url}${storeType.join('')}${clientType}`;\r\n return axios.get(reqURL);\r\n}\r\n","import axios from 'axios';\nimport {\n Environment,\n} from '@vodacom/web-env';\n\nexport default function getStoreTypes() {\n const getStoreTypesUrl = `${Environment.current.apiHost}/cloud/rest/v1/storelocator/stores/storetypes`;\n return axios.get(getStoreTypesUrl);\n}","export default class ResponseError extends Error {\n constructor(message) {\n super(message);\n\n this.message = message;\n this.displayable = {\n title: 'Oops!',\n message: 'We are experiencing technical difficulties. Please try again later.',\n };\n this.trace = null;\n }\n}\n","import ResponseError from './response-error';\n\nexport default class InvalidFindStoresResponseError extends ResponseError {\n constructor(message) {\n super(message);\n\n this.message = 'Invalid response from \"Find Stores\" request!';\n }\n}\n","import ResponseError from './response-error';\n\nexport default class InvalidGetStoreTypesResponseError extends ResponseError {\n constructor(message) {\n super(message);\n\n this.message = 'Invalid response from \"Get Store Types\" request!';\n }\n}\n","import * as Errors from './errors';\n\nexport function parseError(eresp) {\n let responseError;\n\n responseError = new Errors.ResponseError();\n\n if (eresp instanceof Errors.ResponseError) {\n responseError = eresp;\n }\n\n if (\n eresp\n && eresp.response\n && eresp.response.data\n && Array.isArray(eresp.response.data.messages)\n && eresp.response.data.messages.length\n ) {\n responseError.displayable.message = [...eresp.response.data.messages].shift().message;\n }\n\n if (\n eresp\n && eresp.response\n && eresp.response.data\n && eresp.response.data.result\n && eresp.response.data.result.exceptionMessage\n ) {\n responseError.message = eresp.response.data.result.exceptionMessage;\n }\n\n if (\n eresp\n && eresp.response\n && eresp.response.headers\n && eresp.response.headers['x-b3-traceid']\n ) {\n responseError.trace = eresp.response.headers['x-trace-id'];\n }\n\n return responseError;\n}\n","import HttpStatusCodes from 'http-status-codes';\nimport { findStores } from './clients';\nimport * as ResponseHandler from '../common/response_handler';\nimport { InvalidFindStoresResponseError } from '../common/errors';\n\nfunction isValidResponse(resp) {\n return !!(\n resp\n && resp.status === HttpStatusCodes.OK\n && resp.data\n && resp.data.hasOwnProperty\n );\n}\n\nexport default async function findStoresService(lat, lng, storeTypes) {\n try {\n const resp = await findStores(lat, lng, storeTypes);\n if (!isValidResponse(resp)) {\n throw new InvalidFindStoresResponseError();\n }\n\n return resp;\n } catch (error) {\n throw ResponseHandler.parseError(error);\n }\n}\n","import HttpStatusCodes from 'http-status-codes';\nimport { getStoreTypes } from './clients';\nimport * as ResponseHandler from '../common/response_handler';\nimport { InvalidGetStoreTypesResponseError } from '../common/errors';\n\nfunction isValidResponse(resp) {\n return !!(\n resp\n && resp.status === HttpStatusCodes.OK\n && resp.data\n && resp.data.hasOwnProperty\n );\n}\n\nexport default async function getStoreTypesService() {\n try {\n const resp = await getStoreTypes();\n if (!isValidResponse(resp)) {\n throw new InvalidGetStoreTypesResponseError();\n }\n\n return resp;\n } catch (error) {\n throw ResponseHandler.parseError(error);\n }\n}\n","import {\r\n Tealium,\r\n EventTypes,\r\n} from '@vodacom/web-tealium';\r\nimport {\r\n Config,\r\n} from '@vodacom/web-config';\r\nimport {\r\n Environment,\r\n} from '@vodacom/web-env';\r\n\r\n\r\nlet reloadTealiumConfig = false;\r\n\r\nconst getTagEvent = async (\r\n eventName,\r\n eventObj,\r\n) => {\r\n\r\n let eventConfig = Config.get(\r\n 'tagging',\r\n 'tealium'\r\n );\r\n\r\n if (reloadTealiumConfig || !eventConfig) {\r\n\r\n await Config.init({\r\n configUrl: `${Environment.current.uiBase}tealium.json`,\r\n name: 'tealium',\r\n });\r\n\r\n reloadTealiumConfig = true;\r\n\r\n eventConfig = Config.get(\r\n 'tagging',\r\n 'tealium'\r\n ) || {};\r\n\r\n }\r\n\r\n let event = eventConfig[eventName]\r\n ? eventConfig[eventName]\r\n : {};\r\n\r\n Object.assign(\r\n event || {},\r\n eventObj || {}\r\n );\r\n\r\n return event;\r\n};\r\n\r\nconst tag = async (\r\n eventType,\r\n eventName,\r\n info = {},\r\n eventObj = {},\r\n) => {\r\n\r\n const tealium = Tealium.with('vodafone', 'za-microservice', Environment.current.tealium);\r\n\r\n let event = await getTagEvent(\r\n eventName,\r\n eventObj,\r\n );\r\n\r\n let context = {\r\n ...info,\r\n };\r\n \r\n event && tealium.tag(\r\n eventType,\r\n event,\r\n context,\r\n );\r\n};\r\n\r\nexport const tagEvent = async (\r\n eventName,\r\n info = {},\r\n eventObj = {}\r\n) => {\r\n\r\n tag(\r\n EventTypes.Event,\r\n eventName,\r\n info,\r\n eventObj,\r\n );\r\n};\r\n\r\nexport const tagView = async (\r\n eventName,\r\n info = {},\r\n eventObj = {},\r\n) => {\r\n tag(\r\n EventTypes.View,\r\n eventName,\r\n info,\r\n eventObj,\r\n );\r\n};","import React from 'react';\r\nimport {\r\n VFillContainer,\r\n Text,\r\n FontFamilies,\r\n HSeparator,\r\n} from '@vodacom/web-common';\r\nimport PropTypes from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { getStoreTypeIcon } from '../providers';\r\nimport { LinkButton } from '../common/components';\r\nimport { tagEvent } from '../common/tagging';\r\n\r\nfunction titleCase(str) {\r\n const titleCase = /\\w\\S*/g;\r\n return typeof str === 'string'\r\n && str.replace(\r\n titleCase,\r\n function(txt) {\r\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n }\r\n ) \r\n}\r\n\r\nconst pointLetter = 'ABCDEFGHIJKLMNOPQRSTUVWQYZ';\r\n\r\nconst Point = styled.div`\r\n border-radius:50px;\r\n height: 50px;\r\n width: 50px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: ${(props) => props.color || 'black'};\r\n font-weight: ${(props) => props.fontWeight || 'bold'};\r\n font-size: 17px;\r\n font-family: ${(props) => props.fontFamily || 'Arial, sans-serif'};\r\n margin: ${(props) => props.margin || '0 10px 0 0'};\r\n background-color: ${(props) => props.backgroundColor || '#f5f5f5'};\r\n`;\r\n\r\nconst HeaderLine = styled(Text)`\r\n align-items: center;\r\n margin: 0 0 20px;\r\n`;\r\n\r\nconst DetailLine = styled(Text)`\r\n margin: 0 0 15px;\r\n`;\r\n\r\nconst LocationIcon = styled.img`\r\n margin: 0 4px 5px;\r\n`;\r\n\r\nconst Link = styled.a`\r\n color: inherit;\r\n text-decoration: none;\r\n`;\r\n\r\nconst Container = styled(VFillContainer)`\r\n display: inline;\r\n`;\r\n\r\nexport default function StoreLocation(props) {\r\n const { show, item, index } = props;\r\n const storeName = titleCase(item.name);\r\n const storeAddressLine1 = titleCase(item.address.streetName);\r\n const storeAddressLine2 = titleCase(item.address.city);\r\n const storeDisctrict = titleCase(item.address.state);\r\n\r\n const handleGetDirections = () => {\r\n tagEvent('get_directions')\r\n const { x, y } = item.address.geographicLocation.geometry[0];\r\n window.open(`https://www.google.com/maps/dir/?api=1&destination=${x},${y}`);\r\n }\r\n\r\n return (\r\n \r\n {show && (\r\n \r\n {pointLetter[index]}\r\n \r\n {`${item.distance ? item.distance.toFixed(2) : '-'}km`}\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n {storeName}\r\n \r\n {`${storeDisctrict}, ${storeAddressLine1}, ${storeAddressLine2}`}\r\n \r\n \r\n {`Tel: ${item.mainPhone}`}\r\n \r\n \r\n {item.email}\r\n \r\n \r\n\r\n \r\n Get directions now\r\n \r\n {show && }\r\n \r\n );\r\n}\r\n\r\nStoreLocation.propTypes = {\r\n item: PropTypes.object.isRequired,\r\n index: PropTypes.number,\r\n show: PropTypes.bool,\r\n};\r\n\r\nStoreLocation.defaultProps = {\r\n show: true,\r\n index: -1,\r\n};\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {\r\n GoogleApiWrapper,\r\n InfoWindow,\r\n Marker,\r\n} from 'google-maps-react';\r\nimport Map from './Map';\r\nimport { googleMapKey } from '../common';\r\nimport { getStoreTypeIcon } from '../providers';\r\nimport StoreLocation from './StoreLocation';\r\n\r\nconst pointLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\r\nexport class MapContainer extends Component {\r\n\r\n state = {\r\n showingInfoWindow: false,\r\n activeMarker: {},\r\n selectedPlace: {}\r\n };\r\n\r\n onInfoWindowOpen(props, e) {\r\n const screen = \r\n ReactDOM.render(React.Children.only(screen), document.getElementById(\"iwc\"));\r\n }\r\n\r\n onMarkerClick = (props, marker, e) =>\r\n this.setState({\r\n selectedPlace: props,\r\n activeMarker: marker,\r\n showingInfoWindow: true\r\n });\r\n\r\n onClose = props => {\r\n if (this.state.showingInfoWindow) {\r\n this.setState({\r\n showingInfoWindow: false,\r\n activeMarker: null\r\n });\r\n }\r\n };\r\n\r\n displayMarkers = storeGeos => {\r\n return storeGeos.map((item, index) => {\r\n const lat = item.address.geographicLocation.geometry[0].x;\r\n const lng = item.address.geographicLocation.geometry[0].y;\r\n const storeType = item.siteType.description;\r\n if (this.props.google) { \r\n return \r\n } \r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n {this.props.storeGeos && this.displayMarkers(this.props.storeGeos)}\r\n {\r\n this.onInfoWindowOpen(this.props, e);\r\n }}\r\n >\r\n {this.state.selectedPlace.store\r\n ?
\r\n :
\r\n }\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default GoogleApiWrapper({\r\n apiKey: googleMapKey\r\n})(MapContainer);","import React from 'react';\nimport {\n VContainer,\n BodyText,\n} from '@vodacom/web-common';\nimport PropTypes from 'prop-types';\nimport StoreLocation from './StoreLocation';\nimport { Collapsible } from '../common/components';\n\nexport default function StoreLocationList({ stores }) {\n const storeList = stores && stores.slice(0, 2);\n const moreStoresList = stores && stores.slice(2, stores.length);\n\n return (\n \n 1 ? 'stores' : 'store'})`}\n />\n \n {storeList.map((item, index) => (\n \n ))}\n {moreStoresList.length > 0 && (\n \n {moreStoresList.map((item, index) => (\n \n ))}\n \n )}\n \n \n );\n}\n\nStoreLocationList.propTypes = {\n stores: PropTypes.array,\n};\n\nStoreLocationList.defaultProps = {\n stores: [],\n};\n","import React from 'react';\nimport {\n Spinner,\n VFillContainer,\n HContainerV,\n Text,\n BodyText,\n CheckBox,\n FontFamilies,\n ColorCodes,\n H2,\n HSeparator,\n} from '@vodacom/web-common';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport MapContainer from './MapContainer';\nimport StoreLocationList from './StoreLocationList';\nimport { getStoreTypeIcon } from '../providers';\nimport { GridItem, Grid } from '../common/components';\n\nconst CheckBoxTitle = styled(Text)`\n margin: 0 10px 5px 0;\n`;\n\nexport default function StoreLocator({\n stores,\n storeTypes,\n handleCheckedStoreType,\n currentLocation,\n loading,\n}) {\n return (\n \n \n \n \n \n \n \n \n Show\n \n \n {storeTypes.map((item) => {\n const name = item.description;\n const labelId = `checkbox-list-label-${name}`;\n\n return (\n \n \n \n \n \n );\n })}\n \n \n {loading\n ? \n : stores && }\n \n \n \n \n \n \n \n );\n}\n\nStoreLocator.propTypes = {\n stores: PropTypes.array.isRequired,\n storeTypes: PropTypes.array.isRequired,\n handleCheckedStoreType: PropTypes.func.isRequired,\n currentLocation: PropTypes.object.isRequired,\n loading: PropTypes.bool.isRequired,\n};\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ErrorMessage } from '../common/components';\r\n\r\nexport default function UserMessage(props) {\r\n const { message: { title, message } } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nUserMessage.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n message: PropTypes.string.isRequired,\r\n};\r\n","/* eslint-disable*/\r\nimport React from 'react';\r\nimport {\r\n Button,\r\n ColorCodes,\r\n Text,\r\n FontFamilies,\r\n VFillContainer,\r\n} from '@vodacom/web-common';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport {\r\n Grid,\r\n TextField,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport throttle from 'lodash/throttle';\r\nimport styled from 'styled-components';\r\nimport PropTypes from 'prop-types';\r\nimport { LocationOn } from '@material-ui/icons';\r\nimport {\r\n Grid as VGrid,\r\n GridItem,\r\n} from '../common/components/GridLayout';\r\nimport { Images } from '../common';\r\n\r\nconst autocompleteService = { current: null };\r\n\r\nconst SearchTitle = styled(Text)`\r\n margin:0 0 8px;\r\n`;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n icon: {\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(1),\r\n },\r\n}));\r\n\r\nexport default function SearchStores({\r\n handleSearchByAddress,\r\n handleSearchByLocation,\r\n}) {\r\n const classes = useStyles();\r\n const [inputValue, setInputValue] = React.useState('');\r\n const [options, setOptions] = React.useState([]);\r\n\r\n const handleChange = (event) => {\r\n setInputValue(event.target.value);\r\n };\r\n\r\n const handleKeyDown = (e) => {\r\n if (e.key === 'Enter') {\r\n handleSearchByAddress(e.target.value);\r\n }\r\n };\r\n\r\n const fetch = React.useMemo(\r\n () => throttle((input, componentRestrictions, callback) => {\r\n autocompleteService.current.getPlacePredictions(input, componentRestrictions, callback);\r\n }, 200),\r\n [],\r\n );\r\n\r\n React.useEffect(() => {\r\n let active = true;\r\n if (!autocompleteService.current && window.google) {\r\n autocompleteService.current = new window.google.maps.places.AutocompleteService();\r\n }\r\n if (!autocompleteService.current) {\r\n return undefined;\r\n }\r\n\r\n if (!inputValue) {\r\n setOptions([]);\r\n return undefined;\r\n }\r\n\r\n fetch({\r\n input: inputValue,\r\n componentRestrictions: { country: 'za' },\r\n },\r\n (results) => {\r\n if (active) {\r\n setOptions(results || []);\r\n }\r\n });\r\n\r\n return () => {\r\n active = false;\r\n };\r\n }, [inputValue, fetch]);\r\n\r\n return (\r\n \r\n \r\n {`Enter a postcode, city, address or select your current location to display\r\n the stores near you`}\r\n \r\n \r\n \r\n (typeof option === 'string' ? option : option.description)}\r\n onChange={(event, newValue) => {\r\n setInputValue(newValue ? newValue.description : '');\r\n }}\r\n filterOptions={(x) => x}\r\n options={options}\r\n autoComplete\r\n includeInputInList\r\n freeSolo\r\n disableOpenOnFocus\r\n renderInput={(params) => (\r\n \r\n )}\r\n renderOption={(option) => {\r\n const matches = option.structured_formatting.main_text_matched_substrings;\r\n const parts = parse(\r\n option.structured_formatting.main_text,\r\n matches.map((match) => [match.offset, match.offset + match.length]),\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n\r\n \r\n {option.structured_formatting.secondary_text}\r\n \r\n \r\n \r\n );\r\n }}\r\n />\r\n \r\n \r\n handleSearchByAddress(inputValue)}\r\n activeBackgroundColor={ColorCodes.Purple1}\r\n borderRadius=\"3px\"\r\n border=\"none\"\r\n width=\"100%\"\r\n height=\"42px\"\r\n text=\"Search\"\r\n />\r\n \r\n \r\n \r\n or\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nSearchStores.propTypes = {\r\n handleSearchByAddress: PropTypes.func.isRequired,\r\n handleSearchByLocation: PropTypes.func.isRequired,\r\n};\r\n","import React, { Component } from 'react';\r\nimport {\r\n VFillContainer,\r\n Spinner,\r\n} from '@vodacom/web-common';\r\nimport StoreLocatorHeader from './ui/StoreLocatorHeader';\r\nimport StoreLocator from './ui/StoreLocator';\r\nimport UserMessage from './ui/UserMessage';\r\nimport SearchStores from './ui/SearchStores';\r\nimport {\r\n addressToLocation,\r\n searchByLocation,\r\n findStoresService,\r\n getStoreTypesService,\r\n} from './providers';\r\nimport { storeTypes } from './common';\r\nimport {\r\n tagEvent,\r\n tagView,\r\n} from './common/tagging';\r\n\r\nconst initStoreTypes = storeTypes.map(storeType => {\r\n return { ...storeType, isChecked: true }\r\n});\r\n\r\nexport default class App extends Component {\r\n state = {\r\n stores: [],\r\n loading: false,\r\n selectedStoreTypes: initStoreTypes,\r\n currentLocation: {\r\n lat: null,\r\n lng: null,\r\n },\r\n userMessage: null,\r\n };\r\n\r\n loading = (isLoading) => {\r\n this.setState({ loading: isLoading });\r\n }\r\n\r\n setUserMessage = (title, message) => {\r\n this.setState({ userMessage:\r\n { title: title,\r\n message: message\r\n }\r\n });\r\n }\r\n\r\n getStoresByStoreType = (lat, lng) => {\r\n this.setState({\r\n currentLocation: {\r\n lat: lat,\r\n lng: lng,\r\n }\r\n });\r\n this.loading(true);\r\n\r\n findStoresService(lat, lng, this.filterCheckedStoreTypes())\r\n .then(resp => {\r\n this.setState({\r\n stores: resp.data.result,\r\n userMessage:null,\r\n });\r\n })\r\n .catch(error => {\r\n let title, message = '';\r\n if (error.displayable)\r\n {\r\n title = error.displayable.title;\r\n message = error.displayable.message;\r\n } else {\r\n title = 'Oops';\r\n message = 'Something went wrong. Please try again later';\r\n }\r\n\r\n this.setUserMessage(title, message);\r\n })\r\n .finally(() => {\r\n this.loading(false);\r\n });\r\n }\r\n\r\n handleSearchByAddress = (inputValue) => {\r\n tagEvent('search_address')\r\n inputValue.trim()\r\n ? addressToLocation(inputValue.trim(), this.getStoresByStoreType, this.setUserMessage)\r\n : this.setUserMessage(\"Location not found\", \"Please specify a valid address.\");\r\n }\r\n\r\n handleSearchByLocation = () => {\r\n tagEvent('current_location')\r\n searchByLocation(this.getStoresByStoreType, this.setUserMessage);\r\n }\r\n\r\n handleCheckedStoreType = (item) => {\r\n const checkedStoreTypes = this.state.selectedStoreTypes;\r\n checkedStoreTypes.forEach(type => {\r\n if (type.description === item.description)\r\n {\r\n type.isChecked = !item.isChecked;\r\n }\r\n })\r\n this.setState({\r\n selectedStoreTypes: checkedStoreTypes\r\n });\r\n const { lat, lng } = this.state.currentLocation;\r\n this.getStoresByStoreType(lat, lng);\r\n }\r\n\r\n filterCheckedStoreTypes = () => {\r\n const storeTypes = this.state.selectedStoreTypes;\r\n const currentSelectedStoreTypes = storeTypes.filter(storeType => storeType.isChecked);\r\n return currentSelectedStoreTypes;\r\n };\r\n\r\n getStoreList = (resp) => {\r\n const storeList = resp;\r\n return storeList;\r\n }\r\n\r\n componentDidMount() {\r\n \r\n this.loading(true);\r\n tagView('page_view')\r\n\r\n getStoreTypesService().then(resp => {\r\n const storeTypeList = resp.data.storeTypeList.filter(item => item.typeId <= 6);\r\n\r\n const i = storeTypeList.map(storeType => {\r\n return { ...storeType, isChecked: true }\r\n });\r\n this.setState({\r\n selectedStoreTypes: i,\r\n userMessage: null\r\n });\r\n })\r\n .catch(error => {\r\n const { title, message } = error.displayable;\r\n this.setUserMessage(title, message);\r\n })\r\n .finally(() => {\r\n this.loading(false);\r\n this.handleSearchByLocation();\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n\r\n \r\n \r\n {this.state.loading &&
}\r\n {this.state.userMessage && }\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {\r\n Environment,\r\n} from '@vodacom/web-env';\r\nimport App from './App';\r\n\r\nEnvironment.init({\r\n Local: {\r\n uiHost: 'http://localhost:3001',\r\n uiBase: '/cloud/contact-us/find-a-store/',\r\n apiHost: 'https://wwwqa.vodacom.co.za',\r\n apiBase: '/rest/services/',\r\n name: 'Localhost',\r\n tealium: 'dev',\r\n },\r\n Dev: {\r\n uiHost: 'https://wwwdev.vodacom.co.za',\r\n uiBase: '/cloud/contact-us/find-a-store/',\r\n apiHost: 'https://wwwdev.vodacom.co.za',\r\n apiBase: '/rest/services/',\r\n name: 'Development',\r\n tealium: 'dev',\r\n },\r\n QA: {\r\n uiHost: 'https://wwwqa.vodacom.co.za',\r\n uiBase: '/cloud/contact-us/find-a-store/',\r\n apiHost: 'https://wwwqa.vodacom.co.za',\r\n apiBase: '/rest/services/',\r\n name: 'Quality Assurance',\r\n tealium: 'qa',\r\n },\r\n Staging: {\r\n uiHost: 'https://wwwstg.vodacom.co.za',\r\n uiBase: '/cloud/contact-us/find-a-store/',\r\n apiHost: 'https://wwwstg.vodacom.co.za',\r\n apiBase: '/rest/services/',\r\n name: 'Staging',\r\n tealium: 'qa',\r\n },\r\n Prod: {\r\n uiHost: 'https://www.vodacom.co.za/',\r\n uiBase: '/cloud/contact-us/find-a-store/',\r\n apiHost: 'https://www.vodacom.co.za/',\r\n apiBase: '/rest/services/',\r\n name: 'Production',\r\n tealium: 'prod',\r\n },\r\n}, {\r\n autoDetect: true,\r\n});\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n"],"sourceRoot":""}