{"version":3,"file":"static/js/395.c85a5ef0.chunk.js","mappings":"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","sources":["components/atoms/TopCities/index.js","components/atoms/TopBusinesses/index.js","components/atoms/Cities/index.js","components/sections/PopularCities/index.js","routes/Landing/index.js"],"sourcesContent":["import React from 'react'\n\nimport { NavLink } from 'react-router-dom'\n\nimport { SiteContext } from 'context/site-context'\n\nimport './index.scss'\n\nconst TopCities = () => {\n const [ site, setSite] = React.useContext(SiteContext)\n\n const handleCityClick = (e, location) => {\n localStorage.setItem('geoInfo', JSON.stringify({\n location: location,\n city: location.split(', ')[0],\n region_code: location.split(', ')[1],\n }))\n\n setSite({\n ...site,\n location: location,\n })\n }\n\n const getCities = () => site.popular_cities ? site.popular_cities.filter( city => city.isTop ) : []\n\n return <div className=\"top-cities-container\">\n <ul>\n {getCities().map( city => {\n return <li key={city.label}><NavLink to={`/${city.label.split(', ')[1].toLowerCase()}/${city.label.split(', ')[0].toLowerCase()}${!!new URLSearchParams(window.location.search).get('useSampleData') ? '&useSampleData=true' : ''}`} onClick={ e => handleCityClick(e, city.label)}>{city.label}</NavLink></li>\n })}\n </ul>\n </div>\n}\n\nexport default TopCities\n","import React from 'react'\n\nimport { NavLink } from 'react-router-dom'\n\nimport { SiteContext } from 'context/site-context'\n\nimport {\n getAddress,\n getProfileUrl,\n isWebpSupported,\n} from 'helpers'\n\nimport TopCities from 'components/atoms/TopCities'\n\nimport './index.scss'\n\nconst MAX_CATEGORIES_TO_SHOW = 3\nconst MAX_LISTINGS_TO_SHOW = 2\n\nconst TopBusinesses = ({ className = '' }) => {\n const [ site, setSite ] = React.useContext(SiteContext)\n\n return <React.Fragment>\n {Object.entries(site.topBusinesses).length > 0 ? <div className={`top-businesses-container ${className}`}>\n <div className=\"container\">\n <h3>Top <span className=\"highlight\">Businesses</span> in {site.location}</h3>\n <div className=\"categories-wrapper\">\n {\n Object.entries(site.topBusinesses)\n .filter( key => key[0] !== site.upsellCategory ) // Filter out any that match the hero\n .filter( (key, i) => i < MAX_CATEGORIES_TO_SHOW ) // Restrict the number of categories to render\n .map( key => {\n return <div className=\"panel\" key={key[0]}>\n <h3 style={{\n backgroundImage: `url(${isWebpSupported() && site.discover[key[0]].imageWebP ? site.discover[key[0]].imageWebP : site.discover[key[0]].image})`,\n backgroundPosition: 'center center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover'}}><span>{site.discover[key[0]].label}</span></h3>\n <div className=\"listings-container\">\n <ul>\n {key[1].results?.locations?.map( (listing, i) => {\n return i < MAX_LISTINGS_TO_SHOW ? <li key={listing.id}><a href={getProfileUrl(site, listing)}>\n <p>{listing.name}</p>\n {listing.address && <address>{getAddress(listing.address)}</address>}\n </a></li> : null}\n )}\n </ul>\n <div className=\"actions-container\">\n <NavLink to={`/results?term=${key[0]}&where=${site.location}${!!new URLSearchParams(window.location.search).get('useSampleData') ? '&useSampleData=true' : ''}`} className=\"button-trigger mini\">More...</NavLink>\n </div>\n </div>\n </div>\n })\n }\n </div>\n </div>\n </div> : <div className=\"container\">\n <h3>Popular <span className=\"highlight\">Cities</span></h3>\n <TopCities />\n </div>}\n </React.Fragment>\n}\n\nexport default TopBusinesses\n","import React from 'react'\n\nimport {\n NavLink,\n useHistory,\n} from 'react-router-dom'\n\nimport {\n findIndex,\n sortBy,\n} from 'lodash'\n\nimport { SiteContext } from 'context/site-context'\n\nimport { isWebpSupported } from 'helpers'\n\nimport cn from 'classnames'\n\nimport './index.scss'\n\nconst Cities = () => {\n const [ site, setSite] = React.useContext(SiteContext)\n\n const history = useHistory()\n\n const handleCityClick = (e, location) => {\n localStorage.setItem('geoInfo', JSON.stringify({\n location: location,\n city: location.split(', ')[0],\n region_code: location.split(', ')[1],\n }))\n\n setSite({\n ...site,\n location: location,\n })\n }\n\n // Need to reduce to an array of states with and array of Cities\n const getCities = () => {\n const cities = site.popular_cities ? sortBy(site.popular_cities, ['state']).reduce( (ordered, city) => {\n if(findIndex(ordered, { label: city.state }) === -1){\n ordered.push({\n label: city.state,\n isState: true,\n })\n }\n ordered.push({\n label: city.label.split(',')[0],\n key: city.label,\n state: city.state,\n })\n return ordered\n }, [] ) : []\n\n return cities\n }\n\n return (\n <div className=\"cities-container\">\n <ul>\n {getCities().length > 0 && getCities().map( city => {\n return <li key={city.isState ? city.label : city.key} className={cn( {state: city.isState} )}>\n {city.isState ? city.label : <NavLink to={`/${city.key.split(', ')[1].toLowerCase()}/${city.key.split(', ')[0].toLowerCase()}${!!new URLSearchParams(window.location.search).get('useSampleData') ? '&useSampleData=true' : ''}`} onClick={ e => handleCityClick(e, city.key)}>{city.label}</NavLink>}\n </li>}\n )}\n </ul>\n </div>\n )\n}\n\nexport default Cities\n","import React from 'react'\n\nimport { NavLink } from 'react-router-dom'\n\nimport { SiteContext } from 'context/site-context'\n\nimport Cities from 'components/atoms/Cities'\n\nimport './index.scss'\n\nconst PopularCities = () => {\n const [ site ] = React.useContext(SiteContext)\n\n return (\n <div className=\"popular-cities-container\">\n <div className=\"container\">\n <h2>Explore more <span className=\"highlight\">cities</span></h2>\n <div className=\"categories-wrapper\">\n <div className=\"panel\">\n <Cities />\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default PopularCities\n","import React from 'react'\n\nimport cn from 'classnames'\n\nimport { SiteContext } from 'context/site-context'\n\nimport Categories from 'components/sections/Categories'\nimport Footer from 'components/sections/Footer'\nimport Header from 'components/sections/Header'\nimport Hero from 'components/sections/Hero'\nimport PopularCities from 'components/sections/PopularCities'\nimport TopBusinesses from 'components/atoms/TopBusinesses'\n\nimport './index.scss'\n\nconst Landing = () => {\n const [ site ] = React.useContext(SiteContext)\n\n return <div className={cn('page-wrapper', {isLoadingSiteData: site.isLoadingSiteData})}>\n <Header showHeader={true} animate={false} />\n <div className=\"page-container\">\n <div className=\"main-wrapper\">\n <Hero />\n </div>\n <div className=\"rail-container\">\n <TopBusinesses />\n </div>\n </div>\n <PopularCities />\n <Categories />\n <Footer />\n </div>\n}\n\nexport default Landing\n"],"names":["TopCities","site","setSite","React","SiteContext","_jsx","className","children","popular_cities","filter","city","isTop","map","NavLink","to","label","split","toLowerCase","URLSearchParams","window","location","search","get","onClick","e","handleCityClick","localStorage","setItem","JSON","stringify","region_code","_ref","Object","entries","topBusinesses","length","_jsxs","key","upsellCategory","i","_key$1$results","_key$1$results$locati","style","backgroundImage","isWebpSupported","discover","imageWebP","image","backgroundPosition","backgroundRepeat","backgroundSize","results","locations","listing","href","getProfileUrl","name","address","getAddress","id","Cities","getCities","useHistory","sortBy","reduce","ordered","findIndex","state","push","isState","cn","PopularCities","Landing","isLoadingSiteData","Header","showHeader","animate","Hero","TopBusinesses","Categories","Footer"],"sourceRoot":""}