{"version":3,"sources":["views/Home/components/CategoryHead.js","views/Home/components/CategoryList.js","config/constants.js","services/dataService.js","views/Home/components/ServicesList.js","views/Details/components/Contact.js","views/Details/components/Content.js","views/Details/index.js","views/Home/components/About.js","views/Search/index.js","views/Home/components/MapSearchBox.js","views/Home/components/MapView.js","views/Home/index.js","App.js","serviceWorker.js","index.js"],"names":["CategoryHead","onClickSearchIcon","props","ReactGA","event","category","action","openSearch","onClickInfoIcon","handleDrawerToggle","history","push","classes","this","className","container","IconButton","onClick","infoIconButton","InfoIcon","style","color","title","React","Component","withStyles","theme","display","alignItems","justifyContent","paddingLeft","breakpoints","down","paddingTop","paddingRight","infoIcon","up","CategoryList","state","categories","pageview","root","map","item","index","ListItem","button","handleServiceToggle","key","ListItemText","primary","width","backgroundColor","palette","background","paper","paddingBottom","list","mapArea","center","lat","lng","zoom","createDB","openDB","upgrade","db","oldVersion","newVersion","transaction","deleteObjectStore","createObjectStore","serviceStore","keyPath","autoIncrement","createIndex","initialize","gaOptions","siteSpeedSampleRate","dataService","Promise","resolve","reject","fetch","api","method","then","res","json","a","version","response","responsepacket","FileName","replace","date","Date","get","lastSyncedVersion","lastSyncedDate","nonInteraction","getAll","allservices","Set","s","formattedCategories","sortedCategories","sort","b","toLowerCase","services","IReferList","tx","store","clear","forEach","service","agency_name","length","service_category","agency_id","toString","add","done","catch","err","console","log","put","exception","description","fatal","id","getFromIndex","getAllFromIndex","allbycat","ServicesList","allServices","query","search","onClickBackIcon","handleServiceBack","onClickMapIcon","label","handleMapViewToggle","onClickItem","name","closeDrawer","encodeURIComponent","strings","split","results","filter","str","includes","every","match","updateSearchResults","slice","handleInput","target","value","setState","onClearIconClick","serviceQuery","getServicesByCategory","categoryID","an","bn","head","searchIcon","InputBase","placeholder","autoFocus","autoComplete","inputRoot","input","inputInput","onChange","e","inputProps","clearIcon","titleContainer","Button","mapIcon","serviceSort","secondary","street","suburb_town","postcode","join","height","flex","main","zIndex","fontSize","borderBottom","position","borderRadius","shape","fade","common","white","marginLeft","spacing","marginRight","pointerEvents","flexDirection","top","right","padding","transition","transitions","create","Contact","isValidUrl","string","URL","_","serviceDetails","addressString","trim","encodeURI","hostname","website","content","OutboundLink","eventLabel","link","to","Avatar","greyavatar","webicon","details","para","Divider","divider","avatar","icon","phone","phone2","Link","href","email","maxWidth","wordBreak","cursor","marginTop","Content","service_description","opening_hours","after_hours_appointments","availability_waiting_period","fees","eligibility_conditions","outpost_locations","referral_process","staff_qualifications","relevant_websites","marginBottom","Details","createRef","path","params","tail","parseInt","getServiceDetails","nextProps","lastState","mobileDevice","ref","detail","goBack","showServiceList","back","closeDetails","close","overflow","withRouter","About","loading","getFormattedDate","month","getMonth","String","getDate","getFullYear","text","data","document","querySelector","innerHTML","syncing","error","heading","wrapper","identity","src","alt","downloadContainer","downloadLink","buttonContainer","disabled","variant","endIcon","footer","loadingContent","CircularProgress","footerContent","minHeight","textAlign","overflowScrolling","WebkitOverflowScrolling","margin","alignSelf","fontWeight","fontStyle","Search","hideSearch","hideMapView","flexGrow","MapSearchBox","onPlacesChanged","gotoPlace","searchBox","getPlaces","searchRef","rest","Input","inputRef","formControl","disableUnderline","startAdornment","InputAdornment","googlemaps","ReactDOM","findDOMNode","places","SearchBox","addListener","clearInstanceListeners","HtmlTooltip","tooltip","typography","pxToRem","border","arrow","Tooltip","Marker","useState","open","setOpen","click","setClick","wrapperRef","useRef","useEffect","handleClickOutside","current","contains","addEventListener","removeEventListener","interactive","placement","onClose","onOpen","disableFocusListener","disableHoverListener","disableTouchListener","PopperProps","disablePortal","Fragment","Typography","clickEvent","MapView","handleSearchRestore","onClickListIcon","hideTooltip","openTooltip","showTooltip","apiHasLoaded","controls","ControlPosition","TOP_LEFT","searchbar","apiReady","getCurrentPosition","navigator","geolocation","newPosition","coords","latitude","longitude","updatePosition","location","geometry","onMapChange","selectedService","decodeURIComponent","mapContainer","locationButton","bootstrapURLKeys","libraries","defaultCenter","defaultZoom","yesIWantToUseGoogleMapApiInternals","onGoogleApiLoaded","maps","Latitude","parseFloat","Longitude","mixins","toolbar","left","Home","mobileOpen","searchOpen","serviceListOpen","serviceList","mapViewOpen","sidebar","window","pushState","drawer","toolbarIcon","appTitle","currentlocation","updateDimensions","innerWidth","setSidebar","onpopstate","undefined","hash","startsWith","newState","Object","keys","getData","CssBaseline","AppBar","appBar","Toolbar","aria-label","edge","menuButton","mainWrapper","Hidden","smUp","implementation","Drawer","anchor","drawerPaper","ModalProps","keepMounted","xsDown","render","boxShadow","flexDirextion","menuButtonHidden","easing","sharp","duration","enteringScreen","drawerPaperClose","overflowX","leavingScreen","appBarSpacer","logo","createMuiTheme","App","ThemeProvider","exact","component","isLocalhost","Boolean","registerValidSW","swUrl","config","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","getElementById","protocol","process","origin","headers","contentType","status","indexOf","ready","unregister","reload","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.9ec4bef7.chunk.js","sourcesContent":["import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport InfoIcon from '@material-ui/icons/Home';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\nclass CategoryHead extends React.Component{\r\n \r\n onClickSearchIcon=()=>{\r\n const {ReactGA} = this.props;\r\n ReactGA.event({\r\n category: 'Categories',\r\n action: 'Search Pressed'\r\n });\r\n this.props.openSearch()\r\n }\r\n\r\n onClickInfoIcon=()=>{\r\n this.props.handleDrawerToggle()\r\n this.props.history.push(\"/\");\r\n }\r\n\r\n render(){\r\n const {classes} = this.props;\r\n return(
\r\n \r\n \r\n \r\n
Categories
\r\n \r\n \r\n \r\n
)\r\n }\r\n}\r\n\r\nconst styles = theme => ({\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n paddingLeft:'env(safe-area-inset-left)',\r\n [theme.breakpoints.down('sm')]: {\r\n paddingTop: 'env(safe-area-inset-top)',\r\n paddingRight: 'env(safe-area-inset-right)',\r\n }\r\n },\r\n infoIcon: {\r\n color: '#fff'\r\n },\r\n infoIconButton: {\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none'\r\n },\r\n }\r\n})\r\n\r\nexport default withStyles(styles)(CategoryHead)","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n width: '100%',\r\n backgroundColor: theme.palette.background.paper,\r\n paddingBottom: 'env(safe-area-inset-bottom)',\r\n paddingLeft: 'env(safe-area-inset-left)',\r\n [theme.breakpoints.down('sm')]: {\r\n paddingRight: 'env(safe-area-inset-right)',\r\n },\r\n flex: 1,\r\n overflow: 'auto',\r\n overflowScrolling: \"auto\",\r\n WebkitOverflowScrolling: \"touch\",\r\n },\r\n list: {\r\n color: '#4a4a4a'\r\n }\r\n});\r\n\r\n\r\nclass CategoryList extends React.Component {\r\n state={\r\n categories: []\r\n }\r\n\r\n componentDidMount(){\r\n const {ReactGA} = this.props;\r\n ReactGA.pageview('/categories');\r\n }\r\n\r\n render(){\r\n const {classes, categories} = this.props;\r\n return (\r\n
\r\n {categories && categories.map((item, index)=>this.props.handleServiceToggle(item)} style={{color: '#4a4a4a'}} key={index}>\r\n \r\n \r\n )}\r\n
\r\n )};\r\n}\r\n\r\nexport default withStyles(styles)(CategoryList)\r\n","export const mapArea = {\r\n center: {\r\n lat: -36.8676567,\r\n lng: 144.8707738\r\n },\r\n zoom: 7\r\n };\r\n\r\n export const googleAnalyticsCode = \"UA-21971987-2\";","import { openDB } from 'idb';\r\nimport {googleAnalyticsCode} from \"../config/constants\";\r\nimport ReactGA from 'react-ga';\r\nconst api = \"https://irefervic.com/Service1.svc/\";\r\nReactGA.initialize(googleAnalyticsCode, {\r\n gaOptions: {\r\n siteSpeedSampleRate: 100\r\n }\r\n }); \r\n\r\nfunction createDB(){\r\n const db = openDB('iRefer', 2, {\r\n upgrade(db, oldVersion, newVersion, transaction) {\r\n if (oldVersion === 1) {\r\n db.deleteObjectStore('keyValuePairs');\r\n db.deleteObjectStore('services');\r\n }\r\n db.createObjectStore('keyValuePairs');\r\n const serviceStore = db.createObjectStore('services', { keyPath: 'id', autoIncrement: true });\r\n serviceStore.createIndex('service_category', 'service_category');\r\n serviceStore.createIndex('agency_id', 'agency_id');\r\n serviceStore.createIndex('keywords', 'keywords'); \r\n }\r\n });\r\n return db;\r\n}\r\n\r\nfunction fetchData(){\r\n return new Promise(function(resolve, reject) {\r\n const url = api+\"GetExcelData\";\r\n fetch(url, {method: \"POST\"}).then(res=>res.json())\r\n .then(async res=>{\r\n const services = res.response.responsepacket.IReferList;\r\n createDB().then(async db=>{\r\n const tx = db.transaction('services', 'readwrite');\r\n tx.store.clear();\r\n services.forEach((service, index) => {\r\n if(service.agency_name.length>0){\r\n service.service_category = service.service_category.replace(/^\\s+|\\s+$/g, '');\r\n service.agency_id = index.toString();\r\n tx.store.add(service);\r\n }\r\n });\r\n await tx.done;\r\n });\r\n resolve(res);\r\n }).catch(err=>{\r\n console.log(err)\r\n reject(err)\r\n })\r\n })\r\n}\r\n\r\nexport default class dataService{\r\n static getData(){\r\n return new Promise(function(resolve, reject) {\r\n const url = api+\"GetVersion\";\r\n fetch(url, {method: \"POST\"}).then(res=>res.json())\r\n .then(async res=>{\r\n const version = res.response.responsepacket.FileName.replace(\"Book\", \"\").replace(\".xlsx\", \"\");\r\n const date = new Date(res.response.responsepacket.Date);\r\n createDB().then(async db=>{\r\n const lastSyncedVersion = await db.get('keyValuePairs', 'lastSyncVersion');\r\n const lastSyncedDate = await db.get('keyValuePairs', 'lastSyncedDate');\r\n if(lastSyncedVersion && lastSyncedVersion === version ){\r\n ReactGA.event({\r\n category: 'Sync',\r\n action: 'Data up-to-date',\r\n nonInteraction: true\r\n });\r\n let allservices = await db.getAll('services');\r\n let categories = [...new Set(allservices.map(s => s['service_category']))];\r\n const formattedCategories = categories.map(category=>category.replace(/^\\s+|\\s+$/g, ''));\r\n const sortedCategories = formattedCategories.sort((a,b) => (a.toLowerCase()>b.toLowerCase())*2-1);\r\n resolve({services: allservices, categories: sortedCategories, lastSyncedDate: lastSyncedDate});\r\n } else {\r\n fetchData().then(async res=>{\r\n await db.put('keyValuePairs', version, 'lastSyncVersion');\r\n await db.put('keyValuePairs', date, 'lastSyncedDate');\r\n let allservices = await db.getAll('services');\r\n let categories = [...new Set(allservices.map(s => s['service_category']))];\r\n const formattedCategories = categories.map(category=>category.replace(/^\\s+|\\s+$/g, ''));\r\n const sortedCategories = formattedCategories.sort((a,b) => (a.toLowerCase()>b.toLowerCase())*2-1);\r\n ReactGA.event({\r\n category: 'Sync',\r\n action: 'Data synced',\r\n nonInteraction: true\r\n });\r\n resolve({services: allservices, categories: sortedCategories, lastSyncedDate: date});\r\n }).catch(err=>{\r\n ReactGA.exception({\r\n description: 'Error with sync',\r\n fatal: true\r\n });\r\n reject(err)\r\n })\r\n }\r\n });\r\n }).catch(err=>{\r\n ReactGA.exception({\r\n description: 'Error with sync',\r\n fatal: true\r\n });\r\n console.log(err)\r\n reject(err)\r\n })\r\n })\r\n }\r\n\r\n static async getAllCategories(){\r\n return new Promise(function(resolve, reject) {\r\n createDB().then(async db=>{\r\n var allservices = await db.getAll('services');\r\n let categories = [...new Set(allservices.map(s => s['service_category']))];\r\n const formattedCategories = categories.map(category=>category.replace(/^\\s+|\\s+$/g, ''));\r\n const sortedCategories = formattedCategories.sort((a,b) => (a.toLowerCase()>b.toLowerCase())*2-1);\r\n resolve({categories: sortedCategories});\r\n })\r\n })\r\n }\r\n\r\n static async getAllServices(){\r\n return new Promise(function(resolve, reject) {\r\n createDB().then(async db=>{\r\n let allservices = await db.getAll('services');\r\n let categories = [...new Set(allservices.map(s => s['service_category']))];\r\n const formattedCategories = categories.map(category=>category.replace(/^\\s+|\\s+$/g, ''));\r\n const sortedCategories = formattedCategories.sort((a,b) => (a.toLowerCase()>b.toLowerCase())*2-1);\r\n resolve({services: allservices, categories: sortedCategories});\r\n })\r\n })\r\n }\r\n\r\n static async getServiceDetails(id){\r\n return new Promise(function(resolve, reject) {\r\n createDB().then(async db=>{\r\n var service = await db.getFromIndex('services', 'agency_id', id);\r\n resolve(service);\r\n }).catch(err=>{\r\n console.log(err)\r\n })\r\n })\r\n }\r\n\r\n static async getServicesByCategory(category){\r\n return new Promise(function(resolve, reject){\r\n createDB().then(async db=>{\r\n var allbycat = await db.getAllFromIndex('services', 'service_category', category);\r\n resolve(allbycat);\r\n })\r\n })\r\n }\r\n\r\n}","import React from 'react';\r\nimport { withStyles, fade } from '@material-ui/core/styles';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';\r\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\r\nimport Button from '@material-ui/core/Button';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport dataService from '../../../services/dataService';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n [theme.breakpoints.up('sm')]: {\r\n height: 'calc(100vh - 64px - env(safe-area-inset-top))'\r\n },\r\n height: '100vh',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n list: {\r\n flex:1,\r\n paddingBottom: 'env(safe-area-inset-bottom)',\r\n paddingLeft: 'env(safe-area-inset-left)',\r\n [theme.breakpoints.down('xs')]: {\r\n paddingRight: 'env(safe-area-inset-right)'\r\n },\r\n overflow: 'auto',\r\n overflowScrolling: \"auto\",\r\n WebkitOverflowScrolling: \"touch\",\r\n },\r\n head: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: theme.palette.primary.main,\r\n // flex:0,\r\n zIndex: 111,\r\n width: 340,\r\n paddingTop: 'calc(10px + env(safe-area-inset-top))',\r\n paddingLeft: 'env(safe-area-inset-left)',\r\n paddingBottom: 10,\r\n [theme.breakpoints.down('xs')]: {\r\n paddingRight: 'env(safe-area-inset-right)',\r\n width: '100%',\r\n justifyContent: 'space-between'\r\n },\r\n minHeight: 65\r\n},\r\nmapIcon:{\r\n display: 'block',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none',\r\n },\r\n color: \"#fff\"\r\n},\r\ntitle: {\r\n color: '#fff',\r\n fontSize: 18\r\n},\r\nitem: {\r\n borderBottom: \"1px solid #f1f1f1\"\r\n},\r\nsearch: {\r\n position: 'relative',\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n marginLeft: 0,\r\n width: '100%',\r\n [theme.breakpoints.up('sm')]: {\r\n marginLeft: theme.spacing(0),\r\n width: 'auto',\r\n flex: 1,\r\n marginRight: 10\r\n },\r\n color: \"#fff\"\r\n },\r\nsearchIcon: {\r\n width: theme.spacing(5),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n},\r\ntitleContainer: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n flex: 1\r\n},\r\nclearIcon: {\r\n width: theme.spacing(3),\r\n height: '100%',\r\n position: 'absolute',\r\n top: -5,\r\n right: 15\r\n},\r\ninputRoot: {\r\n color: 'inherit',\r\n width: '100%',\r\n},\r\ninputInput: {\r\n padding: theme.spacing(1, 1, 1, 5),\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n},\r\n});\r\n\r\n\r\nclass ServicesList extends React.Component {\r\n state={\r\n allServices: [],\r\n services: [],\r\n query: '',\r\n search: false\r\n }\r\n\r\n onClickBackIcon=()=>{\r\n this.props.handleServiceBack();\r\n }\r\n\r\n onClickMapIcon=()=>{\r\n const {ReactGA} = this.props;\r\n ReactGA.event({\r\n category: 'Map',\r\n action: 'Map Pressed',\r\n label: 'Services'\r\n });\r\n this.props.handleMapViewToggle(this.state.services)\r\n }\r\n\r\n componentDidMount(){\r\n\r\n const {ReactGA} = this.props;\r\n if(this.props.serviceQuery){\r\n this.setState({\r\n search: true,\r\n query: this.props.serviceQuery\r\n })\r\n }\r\n dataService.getServicesByCategory(this.props.categoryID).then(res=>{\r\n if(this.props.serviceQuery){\r\n this.setState({\r\n services: this.search(this.props.serviceQuery, res),\r\n allServices: res\r\n })\r\n } else {\r\n this.setState({\r\n services: res,\r\n allServices: res\r\n })\r\n this.props.updateSearchResults(res, \"\")\r\n }\r\n })\r\n ReactGA.pageview('/services');\r\n }\r\n\r\n onClickItem=(id, name)=>{\r\n this.props.closeDrawer();\r\n this.props.history.push(\"/service/\"+encodeURIComponent(id)+\"/\"+encodeURIComponent(name))\r\n }\r\n\r\n search=(query,list)=>{\r\n const strings = query.split(\" \");\r\n const results = list.filter(item=>{\r\n return (\r\n strings.map(str=>item[\"keywords\"].toLowerCase().includes(str.toLowerCase())).every(match=>match) || \r\n strings.map(str=>item[\"service_category\"].toLowerCase().includes(str.toLowerCase())).every(match=>match) ||\r\n strings.map(str=>item[\"agency_name\"].toLowerCase().includes(str.toLowerCase())).every(match=>match)\r\n )\r\n })\r\n this.props.updateSearchResults(results.slice(0,20), query)\r\n return results.slice(0,20)\r\n }\r\n\r\n\r\n handleInput=(event)=>{\r\n const query = event.target.value;\r\n this.setState({\r\n query,\r\n services: this.search(query, this.state.allServices)\r\n })\r\n }\r\n\r\n onClickSearchIcon=()=>{\r\n this.setState({\r\n search: true\r\n })\r\n }\r\n\r\n onClearIconClick=()=>{\r\n this.setState({\r\n query: '',\r\n services: this.state.allServices\r\n })\r\n }\r\n\r\n serviceSort(a, b) {\r\n const an = a.agency_name.toLowerCase();\r\n const bn = b.agency_name.toLowerCase();\r\n if (an == bn) return a.id - b.id;\r\n else return an > bn ? 1 : -1;\r\n }\r\n\r\n render(){\r\n const {classes} = this.props;\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n {this.state.search ?
\r\n
\r\n \r\n
\r\n this.handleInput(e)}\r\n inputProps={{ 'aria-label': 'search' }}\r\n />\r\n
\r\n \r\n \r\n \r\n
\r\n
:< div className={classes.titleContainer}>\r\n
{this.props.categoryID}
\r\n \r\n \r\n \r\n
}\r\n \r\n
\r\n
\r\n {this.state.services && this.state.services.sort(this.serviceSort).map((item, index)=>this.onClickItem(item.agency_id, item.agency_name)} style={{color: '#4a4a4a'}} key={index}>\r\n \r\n \r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(ServicesList);\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Avatar, Divider, Link } from '@material-ui/core';\r\nimport MapIcon from '@material-ui/icons/Map';\r\nimport PhoneIcon from '@material-ui/icons/Phone';\r\nimport EmailIcon from '@material-ui/icons/Email';\r\nimport LinkIcon from '@material-ui/icons/Link';\r\n\r\nclass Contact extends React.Component{\r\n isValidUrl=(string)=>{\r\n try {\r\n new URL(string);\r\n } catch (_) {\r\n return false; \r\n }\r\n \r\n return true;\r\n }\r\n render() {\r\n const {classes, serviceDetails, ReactGA} = this.props;\r\n let addressString = serviceDetails.street ? serviceDetails.street.trim() : '';\r\n if (serviceDetails.suburb_town) addressString += (addressString.length > 0 ? ', ' : '') + serviceDetails.suburb_town;\r\n if (serviceDetails.postcode) addressString += (addressString.length > 0 ? ', ' : '') + serviceDetails.postcode;\r\n\r\n let query = serviceDetails.map && serviceDetails.map.length > 0\r\n ? encodeURI(serviceDetails.map)\r\n : serviceDetails.street && serviceDetails.street.length > 0\r\n ? `${encodeURI(serviceDetails.agency_name)}, ${encodeURI(serviceDetails.street)}`\r\n : null;\r\n\r\n if(serviceDetails.street)\r\n switch (serviceDetails.street.toLowerCase()) {\r\n case \"contact service\":\r\n case \"for closest location click web link below\":\r\n case \"multiple locations\":\r\n case \"various locations\":\r\n case \"school outreach\":\r\n query = null;\r\n addressString = serviceDetails.street ? serviceDetails.street.trim() : '';\r\n if (serviceDetails.suburb_town) addressString += (addressString.length > 0 ? '\\n' : '') + serviceDetails.suburb_town;\r\n break;\r\n default: break;\r\n }\r\n\r\n if(serviceDetails.suburb_town)\r\n switch (serviceDetails.suburb_town.toLowerCase()) {\r\n case \"online service\":\r\n case \"state-wide\":\r\n case \"online/telephone service\":\r\n case \"telephone service\":\r\n query = null;\r\n addressString = serviceDetails.street ? serviceDetails.street.trim() : '';\r\n if (serviceDetails.suburb_town) addressString += (addressString.length > 0 ? '\\n' : '') + serviceDetails.suburb_town;\r\n break;\r\n default: break;\r\n }\r\n\r\n let website = serviceDetails.website;\r\n let hostname;\r\n\r\n if(website){\r\n website = website.replace(/[^a-zA-Z0-9-_/:.<>#%{}|^~`;@=+\"?&]/g, '');\r\n if(!website.includes(\"http\")){\r\n website = `http://${website}`\r\n }\r\n if(this.isValidUrl(website)){\r\n hostname = new URL(website).hostname.replace('www.','');\r\n }\r\n }\r\n return(
\r\n {website && this.isValidUrl(website) &&
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Website\r\n
\r\n
\r\n
\r\n
\r\n \r\n {hostname}\r\n \r\n
\r\n \r\n
}\r\n {addressString && addressString.length>0 &&
\r\n
\r\n {query && query.length > 0 ?\r\n \r\n \r\n \r\n \r\n \r\n : \r\n \r\n }\r\n
\r\n
\r\n Address\r\n
\r\n
\r\n
\r\n
\r\n {query && query.length > 0 ?\r\n \r\n {addressString}\r\n \r\n : {addressString}}\r\n
\r\n \r\n
}\r\n {serviceDetails.phone && serviceDetails.phone.length>0 &&
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Phone\r\n
\r\n
\r\n
\r\n
\r\n \r\n {serviceDetails.phone}\r\n \r\n
\r\n \r\n
}\r\n {serviceDetails.phone2 && serviceDetails.phone2.length>0 &&
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Alternate Phone\r\n
\r\n
\r\n
\r\n
\r\n \r\n {serviceDetails.phone2}\r\n \r\n
\r\n \r\n
}\r\n {serviceDetails.email && serviceDetails.email.length>0 &&
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Email\r\n
\r\n
\r\n
\r\n
\r\n \r\n
{serviceDetails.email}
\r\n \r\n
\r\n
}\r\n
)\r\n }\r\n}\r\n\r\nconst styles = theme => ({\r\n content:{\r\n backgroundColor: '#c1ccc4',\r\n maxWidth: 350,\r\n width: '40%',\r\n // minHeight: `calc(100vh - 55px)`,\r\n paddingBottom: 'env(safe-area-inset-bottom)',\r\n [theme.breakpoints.up('sm')]: {\r\n // minHeight: 'calc(100vh - 129px)'\r\n },\r\n overflow: 'auto',\r\n overflowScrolling: \"auto\",\r\n WebkitOverflowScrolling: \"touch\",\r\n height:'100%'\r\n },\r\n item: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingLeft: 10,\r\n paddingRight: 'max(10px, env(safe-area-inset-right))'\r\n },\r\n list: {\r\n paddingTop: 10\r\n },\r\n avatar: {\r\n backgroundColor: theme.palette.primary.main,\r\n zIndex:0\r\n },\r\n greyavatar: {\r\n backgroundColor: '#c1ccc4',\r\n },\r\n icon: {\r\n color: '#fff'\r\n },\r\n webicon: {\r\n color: theme.palette.primary.main\r\n },\r\n details: {\r\n marginLeft: 10\r\n },\r\n title: {\r\n fontSize: 18\r\n },\r\n para: {\r\n paddingTop: 5,\r\n paddingBottom: 2,\r\n wordBreak: 'break-word',\r\n paddingLeft: 10,\r\n paddingRight: 10\r\n },\r\n link:{\r\n color: 'inherit',\r\n cursor: 'pointer'\r\n },\r\n divider: {\r\n marginTop: 10\r\n },\r\n website: {\r\n backgroundColor: theme.palette.primary.main,\r\n color: \"#fff\",\r\n paddingTop: 10,\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 5\r\n }\r\n})\r\n\r\nexport default withStyles(styles)(Contact)\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nclass Content extends React.Component{\r\n render(){\r\n const {classes, serviceDetails} = this.props;\r\n return(
\r\n {serviceDetails.service_description && serviceDetails.service_description.length>0 &&
\r\n
\r\n Service Description\r\n
\r\n
\r\n {serviceDetails.service_description}\r\n
}\r\n {serviceDetails.opening_hours && serviceDetails.opening_hours.length>0 &&
\r\n
\r\n Opening Hours\r\n
\r\n
\r\n {serviceDetails.opening_hours}\r\n
\r\n
}\r\n {serviceDetails.after_hours_appointments && serviceDetails.after_hours_appointments.length>0 &&
\r\n
\r\n After Hours Appointments\r\n
\r\n
\r\n {serviceDetails.after_hours_appointments}\r\n
\r\n
}\r\n {serviceDetails.availability_waiting_period && serviceDetails.availability_waiting_period.length>0 &&
\r\n
\r\n Availability/Waiting Period\r\n
\r\n
\r\n {serviceDetails.availability_waiting_period}\r\n
\r\n
}\r\n {serviceDetails.fees && serviceDetails.fees.length>0 &&
\r\n
\r\n Fees\r\n
\r\n
\r\n {serviceDetails.fees}\r\n
\r\n
}\r\n {serviceDetails.eligibility_conditions && serviceDetails.eligibility_conditions.length>0 &&
\r\n
\r\n Eligibility Conditions\r\n
\r\n
\r\n {serviceDetails.eligibility_conditions}\r\n
\r\n
}\r\n {serviceDetails.outpost_locations && serviceDetails.outpost_locations.length>0 &&
\r\n
\r\n Outpost Locations\r\n
\r\n
\r\n {serviceDetails.outpost_locations}\r\n
\r\n
}\r\n {serviceDetails.referral_process && serviceDetails.referral_process.length>0 &&
\r\n
\r\n Referral Process\r\n
\r\n
\r\n {serviceDetails.referral_process}\r\n
\r\n
}\r\n {serviceDetails.staff_qualifications && serviceDetails.staff_qualifications.length>0 &&
\r\n
\r\n Staff Qualifications\r\n
\r\n
\r\n {serviceDetails.staff_qualifications}\r\n
\r\n
}\r\n {serviceDetails.website && serviceDetails.website.length>0 &&
\r\n
\r\n Website\r\n
\r\n
\r\n {serviceDetails.website}\r\n
\r\n
}\r\n {serviceDetails.relevant_websites && serviceDetails.relevant_websites.length>0 &&
\r\n
\r\n Relevant Websites\r\n
\r\n
\r\n {serviceDetails.relevant_websites}\r\n
\r\n
}\r\n
)\r\n }\r\n}\r\n\r\nconst styles = theme => ({\r\n content:{\r\n flex: 1,\r\n padding: 10,\r\n marginBottom: 50,\r\n [theme.breakpoints.down('sm')]: {\r\n paddingLeft: 'max(10px, env(safe-area-inset-left))'\r\n },\r\n overflow: 'auto',\r\n overflowScrolling: \"auto\",\r\n WebkitOverflowScrolling: \"touch\",\r\n height:'100%'\r\n },\r\n title: {\r\n fontSize: 18,\r\n color: theme.palette.primary.main,\r\n width: '100%'\r\n },\r\n para: {\r\n paddingTop: 0,\r\n paddingBottom: 15,\r\n wordBreak: \"break-word\"\r\n }\r\n})\r\n\r\nexport default withStyles(styles)(Content)","import React from 'react';\r\nimport {withRouter} from 'react-router'\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\r\nimport { IconButton } from '@material-ui/core';\r\n\r\nimport Contact from \"./components/Contact\";\r\nimport Content from \"./components/Content\";\r\nimport dataService from '../../services/dataService';\r\n\r\nclass Details extends React.Component{\r\n constructor(props){\r\n super(props);\r\n this.head = React.createRef()\r\n }\r\n\r\n state={\r\n serviceDetails:{}\r\n }\r\n\r\n componentDidMount(){\r\n const path = this.props.match.params.tail ? this.props.match.params.id + \"/\" + this.props.match.params.tail : this.props.match.params.id;\r\n const id = parseInt(path) + ''; // just get the number from the start of the path (as a string)\r\n dataService.getServiceDetails(id).then(res=>{\r\n this.setState({\r\n serviceDetails: res,\r\n id: id\r\n })\r\n })\r\n const {ReactGA} = this.props;\r\n ReactGA.pageview('/serviceDetail');\r\n }\r\n\r\n UNSAFE_componentWillUpdate(nextProps, state){\r\n const path = nextProps.match.params.tail ? nextProps.match.params.id + \"/\" + nextProps.match.params.tail : nextProps.match.params.id;\r\n const id = parseInt(path) + ''; // just get the number from the start of the path (as a string)\r\n if(id !== state.id){\r\n dataService.getServiceDetails(id).then(res=>{\r\n this.setState({\r\n serviceDetails: res,\r\n id: id\r\n })\r\n })\r\n }\r\n }\r\n\r\n render(){\r\n const {classes, lastState, mobileDevice, services, ReactGA} = this.props;\r\n return(
\r\n
\r\n
\r\n {mobileDevice && {this.props.history.goBack(); mobileDevice && lastState === \"map\" ? this.props.handleMapViewToggle(services) : this.props.showServiceList(services, null, lastState)}} className={classes.back} >\r\n \r\n }\r\n {this.state.serviceDetails.agency_name}\r\n {!mobileDevice && {this.props.closeDetails(); this.props.showServiceList(services, null, lastState)}} className={classes.close} >\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
)\r\n }\r\n}\r\n\r\nconst styles = theme => ({\r\n root: {\r\n [theme.breakpoints.up('sm')]: {\r\n height: 'calc(100vh - 64px - env(safe-area-inset-top))'\r\n },\r\n height: '100vh',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flex: 1,\r\n position:'relative'\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n position: 'relative',\r\n flex: 1,\r\n overflow: 'hidden'\r\n },\r\n back: {\r\n marginRight: 10,\r\n padding: 0,\r\n color: \"#fff\"\r\n },\r\n close: {\r\n right: 0,\r\n color: \"#fff\"\r\n },\r\n head: {\r\n flex:0,\r\n zIndex: 111,\r\n width: '100%'\r\n },\r\n detail: {\r\n fontSize: 18,\r\n position: 'relative',\r\n alignItems: 'center',\r\n backgroundColor: theme.palette.primary.main,\r\n color: '#fff',\r\n paddingTop: 'max(15px, env(safe-area-inset-top))',\r\n paddingRight: 'max(15px, env(safe-area-inset-right))',\r\n paddingLeft: 'max(15px, env(safe-area-inset-left))',\r\n paddingBottom: 8,\r\n [theme.breakpoints.up('sm')]: {\r\n paddingTop: 0,\r\n paddingLeft: 15,\r\n paddingBottom:2\r\n }\r\n }\r\n})\r\n\r\nexport default withStyles(styles)(withRouter(Details))\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\nimport { Button, CircularProgress } from '@material-ui/core';\r\n\r\nclass About extends React.Component {\r\n\r\n state = {\r\n loading: false\r\n }\r\n\r\n componentDidMount() {\r\n const { ReactGA } = this.props;\r\n ReactGA.pageview('/about');\r\n\r\n // load the about html file (from the public folder)\r\n fetch(\"https://irefervic.com/about.html\")\r\n .then(response => {\r\n return response.text()\r\n })\r\n .then(data => {\r\n document.querySelector(\"#content\").innerHTML = data;\r\n });\r\n }\r\n\r\n getFormattedDate=(date)=>{\r\n const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\r\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n let month = monthNames[date.getMonth()];\r\n let day = String(date.getDate());\r\n let year = date.getFullYear();\r\n return day + ' ' + month + ' '+ year;\r\n }\r\n\r\n render() {\r\n const { classes, lastSyncedDate, syncing } = this.props;\r\n const { error } = this.state;\r\n return (\r\n
\r\n
\r\n
\r\n iRefer: Service Information and Referral Database\r\n
\r\n
\r\n
\r\n
\r\n \"vic\"\r\n
\r\n
\r\n \"vic\"\r\n \"vic\"\r\n
\r\n
\r\n }\r\n >\r\n Get Started\r\n \r\n
\r\n
\r\n {/*
*/}\r\n
\r\n
\r\n
\r\n {syncing ?
\r\n \r\n Syncing data with server\r\n
: error ?
Information could not be retrieved
:\r\n
Last updated at {this.getFormattedDate(lastSyncedDate)}
}\r\n
\r\n
)\r\n }\r\n}\r\n\r\nconst styles = theme => ({\r\n main: {\r\n [theme.breakpoints.up('sm')]: {\r\n height: 'calc(100vh - 64px - env(safe-area-inset-top))'\r\n },\r\n height: '100vh',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n head: {\r\n padding: 20,\r\n fontSize: 18,\r\n color: '#fff',\r\n minHeight: 65,\r\n textAlign: 'center',\r\n backgroundColor: theme.palette.primary.main,\r\n paddingTop: 'max(20px, env(safe-area-inset-top))',\r\n paddingRight: 'max(20px, env(safe-area-inset-right))',\r\n paddingLeft: 'max(20px, env(safe-area-inset-left))',\r\n // flex: 0,\r\n [theme.breakpoints.up('sm')]: {\r\n paddingLeft: '0'\r\n },\r\n zIndex:5\r\n },\r\n wrapper: {\r\n flex: 1,\r\n overflow: 'auto',\r\n overflowScrolling: \"auto\",\r\n WebkitOverflowScrolling: \"touch\",\r\n },\r\n content: {\r\n flex: 1,\r\n padding: 10,\r\n maxWidth: 960,\r\n margin: 'auto',\r\n marginBottom: 100,\r\n paddingRight: 'max(10px, env(safe-area-inset-right))',\r\n paddingLeft: 'max(10px, env(safe-area-inset-left))',\r\n [theme.breakpoints.up('sm')]: {\r\n paddingLeft: 10\r\n }\r\n },\r\n heading: {\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none'\r\n },\r\n },\r\n identity: {\r\n marginTop: 20,\r\n textAlign: 'center',\r\n alignSelf: 'center'\r\n },\r\n title: {\r\n fontSize: 18,\r\n fontWeight: '600'\r\n },\r\n center: {\r\n fontStyle: 'italic',\r\n textAlign: 'center'\r\n },\r\n para: {\r\n paddingTop: 5,\r\n paddingBottom: 5\r\n },\r\n button: {\r\n borderRadius: 20,\r\n textAlign: 'center',\r\n alignSelf: 'center',\r\n margin: 'auto',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none',\r\n },\r\n },\r\n buttonContainer: {\r\n textAlign: 'center',\r\n margin: 30\r\n },\r\n downloadContainer: {\r\n textAlign: 'center',\r\n margin: 30,\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'none',\r\n }\r\n },\r\n downloadLink: {\r\n paddingLeft: 5,\r\n paddingRight: 5\r\n },\r\n footer: {\r\n width: '100%'\r\n },\r\n footerContent: {\r\n justifyContent: 'center',\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n height: 'calc(60px + env(safe-area-inset-bottom))',\r\n backgroundColor: theme.palette.primary.main,\r\n paddingRight: 'env(safe-area-inset-right)',\r\n paddingLeft: 'env(safe-area-inset-left)', \r\n paddingTop: 0,\r\n [theme.breakpoints.up('sm')]: {\r\n paddingLeft: '0'\r\n },\r\n },\r\n loadingContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#ff8800',\r\n color: '#fff',\r\n height: 60,\r\n },\r\n error: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#d3574e',\r\n color: '#fff',\r\n height: 60,\r\n }\r\n})\r\n\r\nexport default withStyles(styles)(About)","import React from 'react';\r\nimport { withStyles, fade } from '@material-ui/core/styles';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport Button from '@material-ui/core/Button';\r\nimport { IconButton } from '@material-ui/core';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';\r\n\r\nclass Search extends React.Component{\r\n state={\r\n query: '',\r\n services: []\r\n }\r\n onClickBackIcon=()=>{\r\n this.props.hideSearch()\r\n }\r\n\r\n onClickMapIcon=()=>{\r\n const {ReactGA} = this.props;\r\n ReactGA.event({\r\n category: 'Map',\r\n action: 'Map Pressed',\r\n label: 'Search'\r\n });\r\n this.props.handleMapViewToggle(this.state.services, this.state.query, \"map\")\r\n }\r\n\r\n onClickItem=(item)=>{\r\n this.props.closeDrawer();\r\n this.props.hideMapView(this.state.services, this.state.query, this.props.mobileDevice ? \"search\" : \"map\");\r\n this.props.history.push(\"/service/\"+item.agency_id+\"/\"+item.agency_name)\r\n }\r\n\r\n onClearIconClick=()=>{\r\n this.setState({\r\n query: ''\r\n })\r\n }\r\n\r\n search=(query,list)=>{\r\n const strings = query.split(\" \");\r\n const results = list.filter(item=>{\r\n return (\r\n strings.map(str=>item[\"keywords\"].toLowerCase().includes(str.toLowerCase())).every(match=>match) || \r\n strings.map(str=>item[\"service_category\"].toLowerCase().includes(str.toLowerCase())).every(match=>match) ||\r\n strings.map(str=>item[\"agency_name\"].toLowerCase().includes(str.toLowerCase())).every(match=>match)\r\n )\r\n })\r\n this.props.updateSearchResults(results.slice(0,20), query)\r\n return results.slice(0,20)\r\n }\r\n\r\n handleInput=(event)=>{\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n this.setState({\r\n [name]: value\r\n })\r\n const query = value;\r\n if(query.length>2){\r\n this.setState({\r\n query,\r\n services: this.search(query, this.props.services)\r\n })\r\n }\r\n }\r\n\r\n componentDidMount(){\r\n if(this.props.query){\r\n if(this.props.query.length>2){\r\n this.setState({\r\n services: this.search(this.props.query, this.props.services)\r\n })\r\n }\r\n this.setState({\r\n query: this.props.query\r\n })\r\n }\r\n const {ReactGA} = this.props;\r\n ReactGA.pageview('/search');\r\n }\r\n\r\n render(){\r\n const {classes} = this.props;\r\n return(
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n this.handleInput(e)}\r\n inputProps={{ 'aria-label': 'search' }}\r\n />\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {this.state.services.map((item, index)=>this.onClickItem(item)} style={{color: '#4a4a4a'}} key={index}>\r\n \r\n \r\n )}\r\n
\r\n
)\r\n }\r\n}\r\n\r\nconst styles = theme => ({\r\n main: {\r\n [theme.breakpoints.up('sm')]: {\r\n height: 'calc(100vh - 64px - env(safe-area-inset-top))'\r\n },\r\n height: '100vh',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n head:{\r\n backgroundColor: theme.palette.primary.main,\r\n color: '#fff',\r\n height: 'calc(64px + env(safe-area-inset-top))',\r\n paddingTop: 'env(safe-area-inset-top)',\r\n paddingLeft: 'env(safe-area-inset-left)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: 340,\r\n [theme.breakpoints.down('xs')]: {\r\n paddingRight: 'env(safe-area-inset-right)',\r\n width: '100%'\r\n },\r\n zIndex: 111,\r\n minHeight: 65\r\n },\r\n container: {\r\n paddingTop: 'env(safe-area-inset-top)',\r\n paddingBottom: 'env(safe-area-inset-bottom)',\r\n paddingLeft: 'env(safe-area-inset-left)',\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n paddingRight: 'env(safe-area-inset-right)'\r\n },\r\n overflow: 'auto',\r\n overflowScrolling: \"auto\",\r\n WebkitOverflowScrolling: \"touch\",\r\n },\r\n back: {\r\n color: '#fff',\r\n padding: 0\r\n },\r\n search: {\r\n position: 'relative',\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n marginLeft: 0,\r\n marginRight: 5,\r\n width: '100%',\r\n [theme.breakpoints.up('sm')]: {\r\n marginLeft: theme.spacing(0),\r\n width: 'auto',\r\n flexGrow: 1\r\n },\r\n },\r\n searchIcon: {\r\n width: theme.spacing(5),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n mapIcon: {\r\n color: '#fff',\r\n marginLeft: theme.spacing(1),\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none'\r\n }\r\n },\r\n clearIcon: {\r\n width: theme.spacing(3),\r\n height: '100%',\r\n position: 'absolute',\r\n top: -5,\r\n right: 15\r\n },\r\n inputRoot: {\r\n color: 'inherit',\r\n width: '100%',\r\n },\r\n inputInput: {\r\n padding: theme.spacing(1, 1, 1, 5),\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n },\r\n item: {\r\n borderBottom: \"1px solid #f1f1f1\"\r\n }\r\n})\r\n\r\nexport default withStyles(styles)(Search)","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n\r\nclass MapSearchBox extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.searchRef = React.createRef();\r\n }\r\n\r\n render() {\r\n const {gotoPlace, ...rest} = this.props;\r\n return <>\r\n this.searchRef = e}\r\n placeholder=\"Search area...\"\r\n classes={{formControl: this.props.classes.root}}\r\n disableUnderline\r\n startAdornment={\r\n \r\n \r\n \r\n }\r\n {...rest}\r\n />\r\n \r\n }\r\n onPlacesChanged = () => {\r\n if (this.props.gotoPlace) {\r\n this.props.gotoPlace(this.searchBox.getPlaces());\r\n }\r\n }\r\n componentDidMount() {\r\n const {googlemaps} = this.props; \r\n var input = ReactDOM.findDOMNode(this.searchRef);\r\n this.searchBox = new googlemaps.places.SearchBox(input);\r\n this.searchBox.addListener('places_changed', this.onPlacesChanged);\r\n }\r\n componentWillUnmount() {\r\n const {googlemaps} = this.props; \r\n googlemaps.event.clearInstanceListeners(this.searchBox);\r\n }\r\n}\r\n\r\nconst styles = theme => ({\r\n formControl: {\r\n flex: 1\r\n },\r\n root: {\r\n backgroundColor: \"#fff\",\r\n height: 40,\r\n paddingLeft: 5,\r\n flex: 1\r\n }\r\n})\r\n\r\nexport default withStyles(styles)(MapSearchBox)","import React, { useRef, useEffect } from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\r\nimport MyLocationIcon from '@material-ui/icons/MyLocation';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport ListIcon from '@material-ui/icons/List';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport GoogleMapReact from 'google-map-react';\r\nimport dataService from '../../../services/dataService';\r\nimport { withRouter } from 'react-router';\r\nimport {mapArea} from \"../../../config/constants\";\r\nimport MapSearchBox from './MapSearchBox';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n width: '100%',\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n list: {\r\n color: '#4a4a4a'\r\n },\r\n head: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: '0 15px',\r\n ...theme.mixins.toolbar,\r\n minHeight: 65,\r\n paddingTop: 'env(safe-area-inset-top)',\r\n [theme.breakpoints.down('xs')]: {\r\n paddingLeft: 'max(15px, env(safe-area-inset-left))',\r\n paddingRight: 'env(safe-area-inset-right)'\r\n }\r\n },\r\n title: {\r\n fontSize: 18\r\n },\r\n action: {\r\n display: 'none',\r\n [theme.breakpoints.down('xs')]: {\r\n display: 'block'\r\n },\r\n },\r\n mapContainer:{\r\n width: '100%',\r\n marginTop: 'env(safe-area-inset-top)',\r\n height: 'calc(100vh - 65px - env(safe-area-inset-top))',\r\n [theme.breakpoints.up('sm')]: {\r\n height: 'calc(100vh - 128px - env(safe-area-inset-top))'\r\n },\r\n },\r\n searchbar:{\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n margin: 10,\r\n display: \"flex\"\r\n },\r\n locationButton: {\r\n background: \"white\",\r\n width: 40,\r\n height: 40,\r\n marginRight: 70,\r\n marginLeft: 10,\r\n \"&:hover\": {\r\n background: \"#fff\"\r\n },\r\n },\r\n});\r\n\r\nconst HtmlTooltip = withStyles(theme => ({\r\n tooltip: {\r\n backgroundColor: '#fff',\r\n width: 250,\r\n color: '#000',\r\n fontSize: theme.typography.pxToRem(10),\r\n border: '1px solid #dadde9',\r\n marginLeft: -3\r\n },\r\n arrow:{\r\n color: '#fff'\r\n }\r\n }))(Tooltip);\r\n\r\nfunction Marker (props){\r\n const [open, setOpen] = React.useState(false);\r\n const [click, setClick] = React.useState(false);\r\n const wrapperRef = useRef(null);\r\n useOutsideAlerter(wrapperRef);\r\n\r\n const handleClose = () => {\r\n if(!click){\r\n setOpen(false);\r\n }\r\n };\r\n\r\n const handleOpen = () => {\r\n if(!props.click){\r\n setOpen(true);\r\n }\r\n };\r\n\r\n const handleClick=()=>{\r\n setClick(true); \r\n setOpen(true);\r\n props.clickEvent();\r\n }\r\n\r\n function useOutsideAlerter(ref) {\r\n useEffect(() => {\r\n /**\r\n * Alert if clicked on outside of element\r\n */\r\n function handleClickOutside(event) {\r\n if (ref.current && !ref.current.contains(event.target)) {\r\n setOpen(false);\r\n }\r\n }\r\n \r\n // Bind the event listener\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n document.addEventListener(\"touchstart\", handleClickOutside);\r\n return () => {\r\n // Unbind the event listener on clean up\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n document.removeEventListener(\"touchstart\", handleClickOutside);\r\n };\r\n }, [ref]);\r\n }\r\n\r\n return(
\r\n \r\n
{props.hideMapView && props.hideMapView(props.services, props.query || props.category, \"map\"); props.closeDrawer && props.closeDrawer(); props.history.push(\"/service/\"+props.service.agency_id+\"/\"+props.service.agency_name)}}\r\n >\r\n {props.service.agency_name}\r\n {props.service.map}\r\n
\r\n \r\n }\r\n >\r\n \r\n \r\n
);\r\n}\r\n\r\nclass MapView extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state= {\r\n services: [],\r\n selectedService: '',\r\n click: false,\r\n apiReady: false,\r\n }\r\n this.searchbar = React.createRef();\r\n }\r\n\r\n onClickBackIcon=()=>{\r\n if(this.props.match.params.category){\r\n this.props.showServiceList(this.state.services, this.props.match.params.category);\r\n } else {\r\n this.props.handleSearchRestore(this.state.services);\r\n }\r\n }\r\n\r\n onClickListIcon=()=>{\r\n const {ReactGA} = this.props;\r\n if(this.props.match.params.category){\r\n ReactGA.event({\r\n category: 'Map',\r\n action: 'List Pressed',\r\n label: 'Services'\r\n });\r\n this.props.showServiceList(this.state.services, this.props.match.params.category, \"\", this.props.query);\r\n } else {\r\n ReactGA.event({\r\n category: 'Map',\r\n action: 'List Pressed',\r\n label: 'Search'\r\n });\r\n this.props.handleSearchRestore(this.state.services);\r\n }\r\n }\r\n\r\n componentDidMount(){\r\n if(!this.props.services && this.props.match && this.props.match.params.category){\r\n dataService.getServicesByCategory(decodeURIComponent(this.props.match.params.category)).then(res=>{\r\n this.setState({\r\n services: res\r\n })\r\n })\r\n } else {\r\n this.setState({\r\n services: this.props.services\r\n })\r\n }\r\n const {ReactGA} = this.props;\r\n ReactGA.pageview('/map');\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps){\r\n if(nextProps.match.params.category !== this.props.match.params.category){\r\n dataService.getServicesByCategory(decodeURIComponent(nextProps.match.params.category)).then(res=>{\r\n this.setState({\r\n services: res\r\n })\r\n })\r\n }\r\n if(nextProps.services){\r\n this.setState({\r\n services: nextProps.services\r\n })\r\n }\r\n }\r\n\r\n hideTooltip=()=>{\r\n this.setState({\r\n openTooltip: false\r\n })\r\n }\r\n\r\n showTooltip=()=>{\r\n this.setState({\r\n openTooltip: true\r\n })\r\n }\r\n\r\n clickEvent=()=>{\r\n this.setState({\r\n click: true\r\n })\r\n }\r\n\r\n apiHasLoaded=(map, googlemaps)=>{\r\n if (map && googlemaps) {\r\n map.controls[googlemaps.ControlPosition.TOP_LEFT].push(this.searchbar.current);\r\n this.setState({\r\n apiReady: true,\r\n map: map,\r\n googlemaps: googlemaps\r\n });\r\n }\r\n }\r\n\r\n getCurrentPosition=()=>{\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition((position)=>{\r\n const newPosition = {\r\n center: {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude\r\n },\r\n zoom: 12\r\n }\r\n this.props.updatePosition(newPosition);\r\n },(err)=>{\r\n console.log(\"Couldn't fetch your position\")\r\n });\r\n }\r\n }\r\n\r\n onPlacesChanged=(location)=>{\r\n if(location.length>0){\r\n const position = location[0];\r\n const newPosition = {\r\n center: {\r\n lat: position.geometry.location.lat(),\r\n lng: position.geometry.location.lng()\r\n },\r\n zoom: 12\r\n }\r\n this.props.updatePosition(newPosition)\r\n }\r\n }\r\n\r\n onMapChange=(map)=>{\r\n const newPosition = {\r\n center: map.center,\r\n zoom: map.zoom\r\n }\r\n this.props.updatePosition(newPosition)\r\n }\r\n\r\n render(){\r\n const {classes, history, closeDrawer, hideMapView, position} = this.props;\r\n const services = this.state.services;\r\n const { apiReady, googlemaps, map} = this.state;\r\n const {onPlacesChanged} = this;\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n
{this.props.query || decodeURIComponent(this.props.match.params.category || '')}
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {apiReady && (<>\r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n this.apiHasLoaded(map, maps)}\r\n >\r\n {services.map(service=>\r\n service.Latitude && service.Latitude.length>0 && parseFloat(service.Latitude) && service.Longitude && service.Longitude.length>0 && parseFloat(service.Longitude)&& \r\n )}\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(withStyles(styles)(MapView));\r\n","import React from 'react';\r\nimport {\r\n Switch, Route, withRouter\r\n} from \"react-router-dom\";\r\n\r\nimport { withStyles, fade } from '@material-ui/core/styles';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport Hidden from '@material-ui/core/Hidden';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport InfoIcon from '@material-ui/icons/Home';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport CategoryHead from './components/CategoryHead';\r\nimport CategoryList from './components/CategoryList';\r\nimport ServicesList from \"./components/ServicesList\";\r\nimport Details from '../Details';\r\nimport About from './components/About';\r\nimport Search from '../Search';\r\nimport MapView from './components/MapView';\r\nimport ReactGA from 'react-ga';\r\nimport dataService from '../../services/dataService';\r\nimport {googleAnalyticsCode, mapArea} from \"../../config/constants\";\r\n\r\nconst drawerWidth = 340;\r\n\r\nReactGA.initialize(googleAnalyticsCode, {\r\n gaOptions: {\r\n siteSpeedSampleRate: 100\r\n }\r\n});\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n height: '100vh',\r\n overflow: 'hidden',\r\n flexDirection: 'column'\r\n },\r\n appBar: {\r\n zIndex: 11111,\r\n boxShadow: 'none',\r\n display: 'none',\r\n flex:0,\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'block',\r\n paddingTop: 'env(safe-area-inset-top)',\r\n paddingRight: 'env(safe-area-inset-right)',\r\n paddingLeft: 'env(safe-area-inset-left)',\r\n },\r\n },\r\n mainWrapper: {\r\n flex: 1,\r\n display: 'flex',\r\n flexDirextion: 'row',\r\n },\r\n drawer: {\r\n height: '100vh',\r\n [theme.breakpoints.up('sm')]: {\r\n height: 'calc(100vh - 64px - env(safe-area-inset-top))'\r\n },\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n toolbarIcon: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: '0 15px',\r\n backgroundColor: theme.palette.primary.main,\r\n zIndex: 111,\r\n width: drawerWidth,\r\n paddingLeft: 'max(15px, env(safe-area-inset-left))',\r\n [theme.breakpoints.down('xs')]: {\r\n paddingRight: 'max(15px, env(safe-area-inset-right))',\r\n width: '100%',\r\n top:0,\r\n },\r\n minHeight: 65,\r\n // flex:0\r\n },\r\n menuButtonHidden: {\r\n display: 'none',\r\n },\r\n title: {\r\n flexGrow: 1,\r\n fontSize: '1.3em'\r\n },\r\n menuButton: {\r\n marginRight: 0,\r\n },\r\n drawerPaper: {\r\n position: 'relative',\r\n width: '100%',\r\n border: 'none',\r\n [theme.breakpoints.up('sm')]: {\r\n width: drawerWidth\r\n },\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n },\r\n drawerPaperClose: {\r\n overflowX: 'hidden',\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n width: theme.spacing(7),\r\n [theme.breakpoints.up('sm')]: {\r\n width: theme.spacing(9),\r\n },\r\n },\r\n appBarSpacer: {\r\n ...theme.mixins.toolbar,\r\n display: 'none',\r\n height: 64,\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'block'\r\n },\r\n },\r\n content: {\r\n flexGrow: 1,\r\n height: '100vh',\r\n overflow: 'auto',\r\n },\r\n container: {\r\n paddingTop: theme.spacing(4),\r\n paddingBottom: theme.spacing(4),\r\n },\r\n paper: {\r\n padding: theme.spacing(2),\r\n display: 'flex',\r\n overflow: 'auto',\r\n flexDirection: 'column',\r\n },\r\n appTitle:{\r\n fontSize: 18,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexGrow: 1,\r\n color: '#fff'\r\n },\r\n logo: {\r\n width: 35,\r\n marginRight: 10\r\n },\r\n search: {\r\n position: 'relative',\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n marginRight: theme.spacing(2),\r\n marginLeft: 0,\r\n width: '100%',\r\n [theme.breakpoints.up('sm')]: {\r\n marginLeft: theme.spacing(3),\r\n width: 'auto',\r\n },\r\n },\r\n searchIcon: {\r\n width: theme.spacing(7),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }\r\n});\r\n\r\nclass Home extends React.Component{\r\n\r\n state = {\r\n mobileDevice: false,\r\n mobileOpen: false,\r\n searchOpen: false,\r\n serviceListOpen: false,\r\n serviceList: [],\r\n mapViewOpen: false,\r\n categoryID: null,\r\n data: null,\r\n error: null,\r\n sidebar: null,\r\n syncing: false,\r\n categories: [],\r\n query: '',\r\n lastState: 'home',\r\n lastSyncedDate: new Date(),\r\n position: {\r\n center: mapArea.center,\r\n zoom: mapArea.zoom\r\n }\r\n }\r\n\r\n handleDrawerToggle = () => {\r\n if (!this.state.mobileOpen) {\r\n window.history.pushState(null, \"\", window.location.href);\r\n }\r\n this.setState({\r\n mobileOpen: !this.state.mobileOpen\r\n })\r\n };\r\n\r\n closeDrawer = () => {\r\n this.setState({\r\n mobileOpen: false\r\n })\r\n };\r\n\r\n openSearch = () => {\r\n this.setState({\r\n searchOpen: true,\r\n mapViewOpen: true,\r\n query: null,\r\n serviceList: []\r\n })\r\n };\r\n\r\n hideSearch = () =>{\r\n this.setState({\r\n searchOpen: false,\r\n mapViewOpen: false,\r\n query: null,\r\n serviceListOpen: false\r\n })\r\n if(!this.state.mobileDevice){\r\n this.props.history.push('/'); \r\n }\r\n }\r\n\r\n handleSearchRestore=(services)=>{\r\n this.setState({\r\n searchOpen: true,\r\n services: this.state.services,\r\n mapViewOpen: false,\r\n lastState: 'search'\r\n })\r\n }\r\n\r\n handleServiceToggle=(id)=>{\r\n this.setState({\r\n serviceListOpen: !this.state.serviceListOpen,\r\n categoryID: id\r\n })\r\n this.props.history.push(\"/category/\"+encodeURIComponent(id));\r\n }\r\n\r\n updateSearchResults=(services, query)=>{\r\n this.setState({\r\n serviceList: services,\r\n query: query,\r\n lastState: \"search\"\r\n })\r\n }\r\n\r\n handleMapViewToggle=(services, query, lastState)=>{\r\n if (this.state.mobileOpen) {\r\n window.history.pushState(null, \"\", window.location.href);\r\n // console.log(\"history push state\")\r\n }\r\n this.setState({\r\n serviceList: services || [],\r\n serviceListOpen: false,\r\n mapViewOpen: true,\r\n mobileOpen: this.state.mobileDevice,\r\n searchOpen: false,\r\n query: query || this.state.query,\r\n lastState: lastState || this.state.lastState\r\n })\r\n }\r\n\r\n hideMapView=(services, query, lastState)=>{\r\n this.setState({\r\n mapViewOpen: false,\r\n query: query || this.state.query,\r\n serviceList: services || [],\r\n lastState: lastState || this.state.lastState\r\n })\r\n }\r\n\r\n showServiceList=(services, id, lastState, serviceQuery)=>{\r\n this.setState({\r\n mobileOpen: this.state.mobileDevice,\r\n categoryID: id || this.state.categoryID,\r\n serviceList: services || [],\r\n serviceListOpen: true,\r\n mapViewOpen: lastState === \"map\" ? true: false,\r\n lastState: 'service',\r\n serviceQuery\r\n })\r\n }\r\n\r\n handleServiceBack=()=>{\r\n this.setState({\r\n serviceListOpen: false,\r\n mapViewOpen: false\r\n })\r\n if(this.state.mobileDevice){\r\n this.props.history.goBack();\r\n } else {\r\n this.props.history.push('/'); \r\n this.hideMapView();\r\n }\r\n }\r\n\r\n closeDetails=()=>{\r\n if(this.state.categoryID){\r\n this.handleServiceToggle(this.state.categoryID);\r\n }\r\n }\r\n \r\n drawer=()=>{\r\n const {searchOpen, serviceListOpen, categories, mapViewOpen, mobileDevice, serviceList, services, categoryID, query, lastState} = this.state;\r\n const {handleDrawerToggle, closeDrawer, hideSearch, openSearch, handleSearchRestore, handleMapViewToggle, hideMapView, handleServiceToggle, showServiceList, handleServiceBack} = this;\r\n const {classes, history} = this.props;\r\n return(\r\n searchOpen?:\r\n serviceListOpen?:\r\n mapViewOpen?:\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n )\r\n };\r\n\r\n componentWillUnmount() {\r\n window.onpopstate = undefined;\r\n this.currentlocation = null;\r\n }\r\n\r\n currentlocation = null;\r\n componentDidMount(){\r\n\r\n if (this.currentlocation === null) this.currentlocation = window.location.hash;\r\n //window.history.pushState(null, \"\", window.location.href);\r\n window.onpopstate = () => {\r\n // console.log(\"Going from\", this.currentlocation, \"to\", window.location.hash);\r\n // console.log(this.props.history);\r\n // console.log(this.state);\r\n if ((!this.state.mobileDevice || this.state.serviceListOpen || this.state.mapViewOpen) && this.currentlocation.toLowerCase().startsWith('#/category') && window.location.hash == \"#/\") {\r\n if (this.state.mobileDevice && this.state.mapViewOpen) {\r\n this.hideMapView();\r\n }\r\n else {\r\n this.setState({\r\n serviceListOpen: false,\r\n mapViewOpen: false\r\n })\r\n }\r\n }\r\n else if (this.currentlocation.toLowerCase().startsWith('#/service') && window.location.hash.toLowerCase().startsWith(\"#/category\") && this.state.mobileDevice) {\r\n // console.log(\"I'm here, damnit\");\r\n //crap, what do I do here?\r\n // this.state.mobileDevice && this.state.lastState === \"map\" ? this.handleMapViewToggle(this.state.services) : this.showServiceList(this.state.services, null, this.state.lastState)\r\n // if (this.state.lastState !== \"map\") {\r\n // this.hideMapView();\r\n //if (this.state.mobileDevice && this.state.lastState === \"map\") this.handleMapViewToggle(this.state.services);\r\n let newState = {};\r\n if (!this.state.mobileOpen) newState.mobileOpen = true;\r\n if (this.state.lastState === \"map\" && this.state.mapViewOpen == false) {\r\n newState.mapViewOpen = true;\r\n }\r\n // console.log(\"newState\", Object.keys(newState).length, newState);\r\n if (newState && Object.keys(newState).length > 0) this.setState(newState);\r\n // }\r\n }\r\n else if (this.currentlocation == \"#/\" && window.location.hash == \"#/\" && this.state.mobileDevice) {\r\n //closing the drawer\r\n this.setState({ mobileOpen: false });\r\n }\r\n else if (this.currentlocation.toLowerCase().startsWith('#/category') && window.location.hash.toLowerCase().startsWith(\"#/category\") && this.state.mobileOpen && this.state.mapViewOpen) {\r\n\r\n this.setState({ mapViewOpen: false });\r\n }\r\n this.currentlocation = window.location.hash;\r\n };\r\n \r\n this.setState({\r\n syncing: true,\r\n })\r\n\r\n if(window.innerWidth<600){\r\n this.setState({\r\n mobileDevice: true\r\n })\r\n }\r\n\r\n window.addEventListener('resize', this.updateDimensions);\r\n dataService.getData().then(res=>{\r\n this.setState({\r\n services: res.services,\r\n categories: res.categories,\r\n lastSyncedDate: res.lastSyncedDate,\r\n syncing: false\r\n })\r\n }).catch(err=>{\r\n this.setState({\r\n syncing: false,\r\n error: true\r\n })\r\n })\r\n }\r\n\r\n updateDimensions=()=>{\r\n if(window.innerWidth<600){\r\n this.setState({\r\n mobileDevice: true\r\n })\r\n } else {\r\n this.setState({\r\n mobileDevice: false\r\n })\r\n }\r\n }\r\n\r\n updatePosition=(position)=>{\r\n this.setState({\r\n position\r\n })\r\n }\r\n\r\n setSidebar=()=>{\r\n this.setState({\r\n sidebar: true\r\n })\r\n }\r\n\r\n render(){\r\n const {mobileOpen, services, lastSyncedDate, syncing} = this.state;\r\n const {handleDrawerToggle, drawer, setSidebar, hideMapView} = this;\r\n const {classes} = this.props;\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n iRefer: Service Information and Referral Database\r\n \r\n {this.props.history.push('/'); this.hideMapView()}}\r\n className={classes.menuButton}\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n {this.state.mapViewOpen ? :\r\n \r\n
} />\r\n } />\r\n } />\r\n \r\n }\r\n
\r\n
\r\n
\r\n )};\r\n}\r\n\r\nexport default withStyles(styles)(withRouter(Home));\r\n","import React from 'react';\r\nimport {\r\n HashRouter as Router,\r\n Switch,\r\n Route\r\n} from \"react-router-dom\";\r\nimport { createMuiTheme, ThemeProvider } from '@material-ui/core/styles';\r\n\r\nimport Home from \"./views/Home\";\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {main: \"#5a3f99\"},\r\n white: \"#fff\"\r\n },\r\n});\r\n\r\nfunction App() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (window.location.protocol === 'file:') {\r\n // `file:` should be ignored for some none-browser environment, such as `Electron`.\r\n return;\r\n }\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.register();\r\n"],"sourceRoot":""}