{"version":3,"file":"6529.js","sources":["webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/state/index.ts","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/icons/GreenMarker.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/icons/OrangeMarker.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/icons/RedMarker.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/icons/MajorWorksMarker.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/icons/MarkerCluster.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/Legend/index.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/map_utils/index.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/Search/index.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/SidePanel/Accordion/AccordionContent.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/SidePanel/Accordion/AccordionSection.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/SidePanel/Accordion/index.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/SidePanel/index.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/hooks/useMapData/index.ts","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/hooks/useGoogleMap/index.ts","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/hooks/useGeolocation/index.ts","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/hooks/useGooglePlacesAutoComplete/index.ts","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/Map/index.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/components/App.tsx","webpack://frontend/./src/react_repo/components/Outages/OutagesMapNew/index.tsx","webpack://frontend/./src/react_repo/components/residential/hooks/index.tsx","webpack://frontend/./src/react_repo/components/residential/shared/ErrorOrLoading/index.tsx","webpack://frontend/./src/react_repo/components/residential/shared/NavBtn/index.tsx","webpack://frontend/./src/react_repo/components/residential/shared/Overlay/index.tsx","webpack://frontend/./src/react_repo/components/residential/shared/Spinner/index.tsx"],"sourcesContent":["export function updateStore(state, payload) {\r\n return {\r\n ...state,\r\n ...payload\r\n }\r\n}\r\n","import { Icon, makeIconsString } from \"utils/Icon\"\r\n\r\nconst GreenMarker = () => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const greenMarkerString = makeIconsString(GreenMarker)\r\n\r\nexport default GreenMarker\r\n","import { Icon, makeIconsString } from \"utils/Icon\"\r\n\r\nconst OrangeMarker = () => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const orangeMarkerString = makeIconsString(OrangeMarker)\r\n\r\nexport default OrangeMarker\r\n","import { Icon, makeIconsString } from \"utils/Icon\"\r\n\r\nconst RedMarker = () => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const redMarkerString = makeIconsString(RedMarker)\r\n\r\nexport default RedMarker\r\n","import { Icon, makeIconsString } from \"utils/Icon\"\r\n\r\nconst MajorWorksMarker = () => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const majorWorksString = makeIconsString(MajorWorksMarker)\r\n\r\nexport default MajorWorksMarker\r\n","const MarkerCluster = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\n\r\n\r\nexport default MarkerCluster\r\n","import GreenMarker from '../../icons/GreenMarker'\r\nimport OrangeMarker from '../../icons/OrangeMarker'\r\nimport RedMarker from '../../icons/RedMarker'\r\nimport MajorWorksMarker from '../../icons/MajorWorksMarker'\r\nimport MarkerCluster from '../../icons/MarkerCluster'\r\n\r\nconst Legend = () => {\r\n return (\r\n
\r\n

Map Legend:

\r\n
\r\n
\r\n
\r\n \r\n
\r\n

Number of Grouped Outages

\r\n
\r\n
\r\n
\r\n \r\n
\r\n

Current Water Outage

\r\n
\r\n
\r\n
\r\n \r\n
\r\n

Recently Completed Works

\r\n
\r\n
\r\n
\r\n \r\n
\r\n

Upcoming Water Outage

\r\n
\r\n
\r\n
\r\n \r\n
\r\n

Major Works

\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Legend\r\n","// @ts-nocheck\r\nimport MarkerClusterer from '@google/markerclusterer'\r\nimport {\r\n ContentType1,\r\n CreatePolygonType,\r\n SetClustererType,\r\n AnyUseRef,\r\n MapApiPropsType,\r\n CountTextType,\r\n OutageAreasType,\r\n RemoveMarkersType,\r\n AddMarkerType,\r\n PlaceChangedType,\r\n FeatureType\r\n} from '../interfaces/index'\r\n\r\nimport greenMarker from '../icons/greenMarker.svg'\r\nimport orangeMarker from '../icons/orangeMarker.svg'\r\nimport redMarker from '../icons/redMarker.svg'\r\nimport majorWorksMarker from '../icons/majorWorks.svg'\r\n\r\nexport const updateGTM = (category: string, action: string, label?: string) => {\r\n if ((global as any).digitalData) {\r\n ; (global as any).digitalData.tool = {\r\n name: 'outages map',\r\n category,\r\n action,\r\n label\r\n }\r\n ; (global as any).dataLayer.push({ event: 'outageMapSearch' })\r\n }\r\n}\r\n\r\nexport function getTitle(status: string): string {\r\n switch (status) {\r\n case 'Completed':\r\n case 'Closed':\r\n return 'Recently Completed Works'\r\n case 'Active':\r\n return 'Current Water Outage'\r\n case 'Registered':\r\n return 'Upcoming Water Outage'\r\n default:\r\n return ''\r\n }\r\n}\r\n\r\nexport function getMessage(planned: boolen) {\r\n return planned ? 'Planned water on: ' : 'Estimated water on: '\r\n}\r\n\r\nexport function getDetails(content: ContentType1): string | null {\r\n switch (content.status) {\r\n case 'Completed':\r\n case 'Closed':\r\n return getLocalDateTimeString(parseDateTime(content.actual_on))\r\n case 'Major':\r\n case 'Active':\r\n return getLocalDateTimeString(parseDateTime(content.estimated_on))\r\n case 'Registered':\r\n if (content.extension === 'True' && content.estimated_on) {\r\n return getLocalDateTimeString(parseDateTime(content.estimated_on))\r\n }\r\n if (content.planned_on) {\r\n return getLocalDateTimeString(parseDateTime(content.planned_on))\r\n } else if (content.estimated_on) {\r\n return getLocalDateTimeString(parseDateTime(content.estimated_on))\r\n }\r\n return ''\r\n default:\r\n return ''\r\n }\r\n}\r\n\r\nexport const createPolygons = ({\r\n features,\r\n polygons,\r\n markers,\r\n markerEvents,\r\n infoWindow,\r\n map,\r\n state\r\n}: CreatePolygonType) => {\r\n if (features && google.maps) {\r\n features.forEach((d) => {\r\n // Calculate outage type\r\n const type = getOutageType(d?.properties?.status)\r\n if (type && Array.isArray(d?.geometry?.coordinates)) {\r\n // Create polygons for outages and add to map\r\n const coordinates = d.geometry.coordinates\r\n for (let i = 0; i < coordinates.length; i++) {\r\n if (Array.isArray(coordinates[0])) {\r\n const paths = coordinates[i].reduce(\r\n (arr: Array, tuple: Array) => {\r\n const latLng = new google.maps.LatLng(tuple[1], tuple[0])\r\n return arr.concat(latLng)\r\n },\r\n []\r\n )\r\n\r\n const polygon = new google.maps.Polygon({\r\n status: d.properties.status,\r\n paths: paths,\r\n strokeColor: type && type.color ? type.color : '#FF0000',\r\n strokeOpacity: 0.8,\r\n strokeWeight: 2,\r\n fillColor: type && type.color ? type.color : '#FF0000',\r\n fillOpacity: 0.35\r\n })\r\n polygons?.current.push(polygon)\r\n\r\n // Create feature and add as a marker\r\n const feature = {\r\n position: polygon.getApproximateCenter(),\r\n status: d.properties.status,\r\n region: d.properties.region,\r\n end_date: d.properties.end_date,\r\n town: d.properties.town,\r\n start_date: d.properties.start_date,\r\n extension_status: d.properties.extension_status,\r\n estimated_off: d.properties.estimated_off,\r\n start_date_interruption: d.properties.start_date_interruption,\r\n end_date_interruption: d.properties.end_date_interruption,\r\n estimated_on: d.properties.estimated_on,\r\n planned_off: d.properties.planned_off,\r\n planned_on: d.properties.planned_on,\r\n actual_off: d.properties.actual_off,\r\n actual_on: d.properties.actual_on,\r\n extension: d.properties.extension,\r\n affected_suburbs: d.properties.affected_suburbs,\r\n affected_customers_outage: d.properties.affected_customers_outage,\r\n name: d?.properties.name,\r\n notes: d?.properties.notes,\r\n url: d?.properties.url,\r\n outagesFormUrl: state?.outagesFormUrl\r\n }\r\n addMarker({\r\n feature,\r\n markers,\r\n markerEvents,\r\n infoWindow,\r\n\r\n map\r\n })\r\n\r\n // Add polygon to map\r\n polygon.setMap(map)\r\n } else {\r\n const myLatlng = new google.maps.LatLng(\r\n coordinates[0],\r\n coordinates[1]\r\n )\r\n // Create feature and add as a marker\r\n const feature = {\r\n position: myLatlng,\r\n status: d.properties.status,\r\n region: d.properties.region,\r\n end_date: d.properties.end_date,\r\n town: d.properties.town,\r\n start_date: d.properties.start_date,\r\n extension_status: d.properties.extension_status,\r\n estimated_off: d.properties.estimated_off,\r\n start_date_interruption: d.properties.start_date_interruption,\r\n end_date_interruption: d.properties.end_date_interruption,\r\n estimated_on: d.properties.estimated_on,\r\n planned_off: d.properties.planned_off,\r\n planned_on: d.properties.planned_on,\r\n actual_off: d.properties.actual_off,\r\n actual_on: d.properties.actual_on,\r\n extension: d.properties.extension,\r\n affected_suburbs: d.properties.affected_suburbs,\r\n affected_customers_outage: d.properties.affected_customers_outage,\r\n name: d?.properties.name,\r\n notes: d?.properties.notes,\r\n url: d?.properties.url,\r\n outagesFormUrl: state?.outagesFormUrl\r\n }\r\n addMarker({\r\n feature,\r\n markers,\r\n markerEvents,\r\n infoWindow,\r\n\r\n map\r\n })\r\n }\r\n }\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setClusterer = ({ markers, clusterer, map }: SetClustererType) => {\r\n // Add a marker clusterer to manage the markers\r\n clusterer.current = new MarkerClusterer(map, markers?.current, {\r\n zoom: map.getZoom() ?? 15,\r\n imagePath:\r\n 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'\r\n })\r\n}\r\n\r\nexport const setMap =\r\n (markers: AnyUseRef, map: google.maps.Map) => (position: any) => {\r\n map.setZoom(15)\r\n map.setCenter(position)\r\n for (let i = 0; i < markers?.current.length; i++) {\r\n const marker = markers?.current[i]\r\n if (\r\n position.lat() === marker.position.lat() &&\r\n position.lng() === marker.position.lng()\r\n ) {\r\n new google.maps.event.trigger(marker, 'click', { skipGtm: true })\r\n }\r\n }\r\n }\r\n\r\nexport const createCountText = ({\r\n completedCount,\r\n upcomingCount,\r\n outageCount,\r\n majorCount\r\n}: CountTextType) => {\r\n let text = ''\r\n if (majorCount) {\r\n text = text + `${majorCount} major work${majorCount > 1 ? 's' : ''}, `\r\n }\r\n if (outageCount) {\r\n text = text + `${outageCount} outage${outageCount > 1 ? 's' : ''}, `\r\n }\r\n if (completedCount) {\r\n text =\r\n text +\r\n `${completedCount} recently completed work${completedCount > 1 ? 's' : ''\r\n }, `\r\n }\r\n if (upcomingCount) {\r\n text =\r\n text +\r\n `${upcomingCount} upcoming water outage${upcomingCount > 1 ? 's' : ''}, `\r\n }\r\n return text.substring(0, text.length - 2)\r\n}\r\n\r\nexport const createGuid = () => {\r\n function s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1)\r\n }\r\n return (\r\n s4() +\r\n s4() +\r\n '-' +\r\n s4() +\r\n '-' +\r\n s4() +\r\n '-' +\r\n s4() +\r\n '-' +\r\n s4() +\r\n s4() +\r\n s4()\r\n )\r\n}\r\n\r\nexport const getPin = (status: string) => {\r\n switch (status) {\r\n case 'Active':\r\n return redMarker\r\n case 'Registered':\r\n return orangeMarker\r\n case 'Major':\r\n return majorWorksMarker\r\n default:\r\n return greenMarker\r\n }\r\n}\r\n\r\nexport const removeMarkers = ({\r\n polygons,\r\n markers,\r\n markerEvents,\r\n clusterer,\r\n status\r\n}: RemoveMarkersType) => {\r\n // Iterate between each polygon and clear map that are removed\r\n const newPolygons = polygons?.current.reduce((array: Array, curr: any) => {\r\n if (curr.status === status || status === 'all' || curr.type === status) {\r\n curr.setMap(null)\r\n } else {\r\n array.push(curr)\r\n }\r\n return array\r\n }, [])\r\n\r\n // Iterate between each marker and clear marker that are removed\r\n const newMarkers = markers?.current.reduce((array: Array, curr: any) => {\r\n if (curr.markerData.status === status || status === 'all') {\r\n curr.setMap(null)\r\n clusterer?.current.removeMarker(curr)\r\n const position = curr.position.lat() + '-' + curr.position.lng()\r\n const eventListener = markerEvents?.current[position]\r\n google.maps && new google.maps.event.removeListener(eventListener)\r\n markerEvents.current[position] = null\r\n } else {\r\n array.push(curr)\r\n }\r\n return array\r\n }, [])\r\n\r\n markers.current = newMarkers\r\n polygons.current = newPolygons\r\n}\r\n\r\n// here\r\n\r\nexport const createOutageAreas = ({ markers, state }: OutageAreasType) => {\r\n // Create list of outages\r\n const tempOutages = markers?.current.reduce((array: Array, curr: any) => {\r\n if (\r\n (curr.markerData.status === 'Active' && state?.active) ||\r\n (curr.markerData.status === 'Completed' && state?.completed) ||\r\n (curr.markerData.status === 'Closed' && state?.completed) ||\r\n (curr.markerData.status === 'Major' && state?.major) ||\r\n (curr.markerData.status === 'Registered' && state?.registered)\r\n ) {\r\n // Iterate between all affected suburbs and add to result\r\n if (\r\n curr.markerData.affected_suburbs &&\r\n curr.markerData.affected_suburbs.length > 0\r\n ) {\r\n curr.markerData.affected_suburbs.forEach((s: string) => {\r\n array.push({\r\n content: curr.markerData,\r\n label: s\r\n })\r\n })\r\n }\r\n }\r\n return array\r\n }, [])\r\n\r\n // Create list of outage areas\r\n const tempOutageAreas = tempOutages.reduce((array: Array, curr: any) => {\r\n const suburb = curr.label\r\n const { status } = curr.content\r\n const index = array.map((x) => x.suburb).indexOf(suburb)\r\n if (index >= 0) {\r\n // Increment the counts and add to outages list\r\n if (status === 'Completed' || status === 'Closed') {\r\n array[index].completedCount++\r\n }\r\n if (status === 'Registered') {\r\n array[index].upcomingCount++\r\n }\r\n if (status === 'Active') {\r\n array[index].outageCount++\r\n }\r\n if (status === 'Major') {\r\n array[index].majorCount++\r\n }\r\n array[index].outages.push(curr)\r\n } else {\r\n // Add new suburb and sort\r\n array.push({\r\n suburb,\r\n isOpen: false,\r\n completedCount: status === 'Completed' || status === 'Closed' ? 1 : 0,\r\n upcomingCount: status === 'Registered' ? 1 : 0,\r\n outageCount: status === 'Active' ? 1 : 0,\r\n majorCount: status === 'Major' ? 1 : 0,\r\n outages: [curr]\r\n })\r\n array.sort((x, y) => {\r\n const xSuburb = x.suburb\r\n const ySuburb = y.suburb\r\n if (xSuburb < ySuburb) {\r\n return -1\r\n }\r\n if (xSuburb > ySuburb) {\r\n return 1\r\n }\r\n return 0\r\n })\r\n }\r\n return array\r\n }, [])\r\n return tempOutageAreas\r\n}\r\n\r\nexport const resetMap = (map: google.maps.Map, ref: AnyUseRef) => {\r\n if (ref?.current) {\r\n ref?.current?.close()\r\n }\r\n map.setCenter({ lat: -27.2008942, lng: 122.0053344 })\r\n map.setZoom(4)\r\n}\r\n\r\nexport const getOutageType = (\r\n status: string\r\n): { type: string; color: string } | undefined => {\r\n if (status === 'Completed' || status === 'Closed') {\r\n return { type: 'complete', color: getColor.complete }\r\n }\r\n if (status === 'Active') {\r\n return { type: 'outage', color: getColor.outage }\r\n }\r\n if (status === 'Registered') {\r\n return { type: 'planned', color: getColor.planned }\r\n }\r\n if (status === 'Major') {\r\n return { type: 'major', color: getColor.major }\r\n }\r\n}\r\n\r\nexport const getColor: { [index: string]: string } = {\r\n outage: '#dd1e35',\r\n complete: '#6fbf4a',\r\n planned: '#fcb526',\r\n major: '#f57e3a'\r\n}\r\n\r\n// Add new methods to the Polygon object\r\nexport const addPolygonFeature = () => {\r\n // Calculate the bounding box of the polygon\r\n google.maps.Polygon.prototype.getBoundingBox = function () {\r\n const bounds = new google.maps.LatLngBounds()\r\n this.getPath().forEach(function (element: any) {\r\n bounds.extend(element)\r\n })\r\n return bounds\r\n }\r\n\r\n // Calculate the approximate centre of the polygon\r\n\r\n google.maps.Polygon.prototype.getApproximateCenter = function () {\r\n let boundsHeight = 0,\r\n boundsWidth = 0,\r\n centrePoint,\r\n heightIncr = 0,\r\n maxSearchSteps = 10,\r\n n = 1,\r\n northWest,\r\n polygonBounds = this.getBoundingBox(),\r\n testPos,\r\n widthIncr = 0\r\n\r\n // Get polygon centre point\r\n centrePoint = polygonBounds.getCenter()\r\n if (new google.maps.geometry.poly.containsLocation(centrePoint, this)) {\r\n // Nothing to do centre point is in polygon use it as is\r\n return centrePoint\r\n } else {\r\n // Calculate NorthWest point so we can work out height of polygon NW->SE\r\n\r\n northWest = new google.maps.LatLng(\r\n polygonBounds.getNorthEast().lat(),\r\n polygonBounds.getSouthWest().lng()\r\n )\r\n\r\n // Work out how tall and wide the bounds are and what our search\r\n // increment will be\r\n boundsHeight = new google.maps.geometry.spherical.computeDistanceBetween(\r\n northWest,\r\n polygonBounds.getSouthWest()\r\n )\r\n heightIncr = boundsHeight / maxSearchSteps\r\n boundsWidth = new google.maps.geometry.spherical.computeDistanceBetween(\r\n northWest,\r\n polygonBounds.getNorthEast()\r\n )\r\n widthIncr = boundsWidth / maxSearchSteps\r\n\r\n // Expand out from centre point and find a point within polygon at 0, 90,\r\n // 180, 270 degrees\r\n for (; n <= maxSearchSteps; n++) {\r\n // Test point North of centre point\r\n testPos = new google.maps.geometry.spherical.computeOffset(\r\n centrePoint,\r\n heightIncr * n,\r\n 0\r\n )\r\n if (new google.maps.geometry.poly.containsLocation(testPos, this)) {\r\n break\r\n }\r\n\r\n // Test point East of centre point\r\n testPos = new google.maps.geometry.spherical.computeOffset(\r\n centrePoint,\r\n widthIncr * n,\r\n 90\r\n )\r\n if (new google.maps.geometry.poly.containsLocation(testPos, this)) {\r\n break\r\n }\r\n\r\n // Test point South of centre point\r\n testPos = new google.maps.geometry.spherical.computeOffset(\r\n centrePoint,\r\n heightIncr * n,\r\n 180\r\n )\r\n if (new google.maps.geometry.poly.containsLocation(testPos, this)) {\r\n break\r\n }\r\n\r\n // Test point West of centre point\r\n testPos = new google.maps.geometry.spherical.computeOffset(\r\n centrePoint,\r\n widthIncr * n,\r\n 270\r\n )\r\n if (new google.maps.geometry.poly.containsLocation(testPos, this)) {\r\n break\r\n }\r\n }\r\n return testPos\r\n }\r\n }\r\n}\r\n\r\nexport const addMarker = ({\r\n feature,\r\n markers,\r\n markerEvents,\r\n infoWindow,\r\n map\r\n}: AddMarkerType) => {\r\n // Create marker and add to markers\r\n\r\n const marker = new google.maps.Marker({\r\n markerData: feature,\r\n position: feature.position,\r\n optimized: false,\r\n icon: getIcon(feature.status, google.maps),\r\n\r\n animation: google.maps.Animation.DROP,\r\n map: map\r\n })\r\n markers?.current.push(marker)\r\n\r\n // Create info window\r\n\r\n const info = new google.maps.InfoWindow({\r\n content: createTemplate(feature)\r\n })\r\n\r\n // Add event listener to the marker to display info window when clicked\r\n const eventListener = new google.maps.event.addListener(\r\n marker,\r\n 'click',\r\n ({ skipGtm }: { skipGtm: boolean }) => {\r\n if (!skipGtm) {\r\n updateGTM(\r\n 'marker click',\r\n joinList(feature.affected_suburbs),\r\n feature.status\r\n )\r\n }\r\n\r\n if (infoWindow?.current) {\r\n infoWindow?.current.close()\r\n }\r\n\r\n infoWindow.current = info\r\n map.setCenter(marker.getPosition())\r\n map.setZoom(15)\r\n infoWindow?.current.open(map, marker)\r\n }\r\n )\r\n\r\n // Add event listener to the marker events\r\n const position = feature.position.lat() + '-' + feature.position.lng()\r\n markerEvents.current[position] = eventListener\r\n}\r\n\r\n// When the user selects a city, get the place details for the city and\r\n// zoom the map in on the city.\r\nexport const onPlaceChanged = ({ autocomplete, map }: PlaceChangedType) => {\r\n const place = autocomplete.getPlace()\r\n if (place && place.geometry) {\r\n map.panTo(place.geometry.location)\r\n map.setZoom(13)\r\n }\r\n}\r\n\r\nexport const getIcon = (status: string, google: MapApiPropsType) => {\r\n if (status === 'Completed' || status == 'Closed') {\r\n return {\r\n url: greenMarker,\r\n\r\n scaledSize: new google.Size(50, 50)\r\n }\r\n }\r\n if (status === 'Active') {\r\n return {\r\n url: redMarker,\r\n\r\n scaledSize: new google.Size(50, 50)\r\n }\r\n }\r\n if (status === 'Registered') {\r\n return {\r\n url: orangeMarker,\r\n\r\n scaledSize: new google.Size(50, 50)\r\n }\r\n }\r\n if (status === 'Major') {\r\n return {\r\n url: majorWorksMarker,\r\n\r\n scaledSize: new google.Size(50, 50)\r\n }\r\n }\r\n}\r\n\r\nexport const parseDateTime = (dateString: string) => {\r\n const components = dateString.split(' ')\r\n if (components.length !== 2) return null\r\n const dateComponents = components[0].split('/')\r\n if (dateComponents.length !== 3) return null\r\n const timeComponents = components[1].split(':')\r\n if (timeComponents.length !== 3) return null\r\n return new Date(\r\n parseInt(dateComponents[2]),\r\n parseInt(dateComponents[1]) - 1,\r\n parseInt(dateComponents[0]),\r\n parseInt(timeComponents[0]),\r\n parseInt(timeComponents[1]),\r\n parseInt(timeComponents[0])\r\n )\r\n}\r\n\r\nexport const getLocalDateTimeString = (dateValue: Date | null) => {\r\n if (!dateValue) return null\r\n const date = dateValue.getDate()\r\n const months = dateValue.getMonth() + 1\r\n const years = dateValue.getFullYear()\r\n let hours = dateValue.getHours()\r\n let minutes: number | string = dateValue.getMinutes()\r\n const ampm = hours >= 12 ? 'pm' : 'am'\r\n hours = hours % 12\r\n hours = hours ? hours : 12 // the hour '0' should be '12'\r\n minutes = minutes < 10 ? '0' + String(minutes) : String(minutes)\r\n return (\r\n (date < 10 ? '0' + date : date) +\r\n '/' +\r\n (months < 10 ? '0' + months : months) +\r\n '/' +\r\n years +\r\n ' ' +\r\n hours +\r\n ':' +\r\n minutes +\r\n ' ' +\r\n ampm\r\n )\r\n}\r\n\r\nfunction joinList(listArray: Array) {\r\n if (!listArray || listArray.length === 0) return ''\r\n if (listArray.length === 1) return listArray[0]\r\n if (listArray.length === 2) return listArray[0] + ' and ' + listArray[1]\r\n\r\n const lastItem = listArray.slice(listArray.length - 1)\r\n const otherItems = listArray.slice(0, listArray.length - 1)\r\n return otherItems.join(', ') + ' and ' + lastItem\r\n}\r\n\r\nexport const createTemplate = (details: FeatureType) => {\r\n const lastUpdated = getLocalDateTimeString(new Date())\r\n const affectedSuburbs = joinList(details.affected_suburbs)\r\n const outagesFormUrl = details.outagesFormUrl\r\n if (details.status === 'Completed' || details.status === 'Closed') {\r\n let actualOn = ''\r\n if (details.actual_on) {\r\n actualOn = getLocalDateTimeString(\r\n parseDateTime(details.actual_on)\r\n ) as string\r\n }\r\n return `
\r\n
Recently completed works
\r\n
Work has recently been completed at ${affectedSuburbs}
\r\n

\r\n Maintenance was recently carried out at ${affectedSuburbs}, service has\r\n been restored and water was turned back on at ${actualOn}.\r\n

\r\n

\r\n As a result of the maintenance, you may notice discoloured water.\r\n Running a tap for approximately 2 minutes should return water to\r\n normal. If water does not return to normal, please contact us at 13 13\r\n 75.\r\n

\r\n
`\r\n }\r\n if (details.status === 'Active') {\r\n let outageStart = ''\r\n if (details.actual_off) {\r\n outageStart = getLocalDateTimeString(\r\n parseDateTime(details.actual_off)\r\n ) as string\r\n } else if (details.estimated_off) {\r\n outageStart = getLocalDateTimeString(\r\n parseDateTime(details.estimated_off)\r\n ) as string\r\n }\r\n let outageEnd = ''\r\n if (details.planned_on) {\r\n outageEnd = getLocalDateTimeString(\r\n parseDateTime(details.planned_on)\r\n ) as string\r\n } else if (details.estimated_on) {\r\n outageEnd = getLocalDateTimeString(\r\n parseDateTime(details.estimated_on)\r\n ) as string\r\n }\r\n\r\n if (details.extension === 'True') {\r\n outageEnd = getLocalDateTimeString(\r\n parseDateTime(details.estimated_on)\r\n ) as string\r\n }\r\n\r\n return `
\r\n
Water outage
\r\n
Work in progress to restore outage at ${affectedSuburbs}
\r\n

An outage is currently being worked on in ${affectedSuburbs}.

\r\n

\r\n Outage start: ${outageStart}
\r\n Estimated water on: ${outageEnd}\r\n

\r\n

Updates will be provided as they become available

\r\n

Last updated: ${lastUpdated}

\r\n

\r\n We apologise for any inconvenience caused and appreciate your\r\n patience\r\n

\r\n Sign up for supply alerts\r\n
`\r\n }\r\n if (details.status === 'Registered') {\r\n let plannedOff = ''\r\n if (details.planned_off) {\r\n plannedOff = getLocalDateTimeString(\r\n parseDateTime(details.planned_off)\r\n ) as string\r\n } else if (details.estimated_off) {\r\n plannedOff = getLocalDateTimeString(\r\n parseDateTime(details.estimated_off)\r\n ) as string\r\n }\r\n let plannedOn = ''\r\n if (details.planned_on) {\r\n plannedOn = getLocalDateTimeString(\r\n parseDateTime(details.planned_on)\r\n ) as string\r\n } else if (details.estimated_on) {\r\n plannedOn = getLocalDateTimeString(\r\n parseDateTime(details.estimated_on)\r\n ) as string\r\n }\r\n\r\n if (details.extension === 'True') {\r\n plannedOn = getLocalDateTimeString(\r\n parseDateTime(details.estimated_on)\r\n ) as string\r\n }\r\n\r\n let isPlanned = details.planned_flag === \"True\";\r\n const customerAffected = `

Affected customers: ${details.affected_customers_outage}

`\r\n\r\n return `
\r\n
Upcoming water outage
\r\n
${isPlanned ? 'Scheduled maintenance is planned to begin in ' : 'Urgent repairs are required in '}${affectedSuburbs}
\r\n
\r\n

\r\n ${isPlanned ? 'Planned' : 'Estimated'} water off: ${plannedOff}
\r\n ${isPlanned ? 'Planned' : 'Estimated'} water on: ${plannedOn}\r\n

\r\n ${details.affected_customers_outage ? customerAffected : ''}\r\n

Updates will be provided as they become available

\r\n

\r\n We apologise for the inconvenience inconvenience and thank you for your patience while we complete this essential work.\r\n

\r\n Sign up for supply alerts\r\n
`\r\n }\r\n\r\n if (details.status === 'Major') {\r\n let outageStart = ''\r\n if (details.actual_off) {\r\n outageStart = getLocalDateTimeString(\r\n parseDateTime(details.actual_off)\r\n ) as string\r\n } else if (details.estimated_off) {\r\n outageStart = getLocalDateTimeString(\r\n parseDateTime(details.estimated_off)\r\n ) as string\r\n }\r\n let outageEnd = ''\r\n if (details.planned_on) {\r\n outageEnd = getLocalDateTimeString(\r\n parseDateTime(details.planned_on)\r\n ) as string\r\n } else if (details.estimated_on) {\r\n outageEnd = getLocalDateTimeString(\r\n parseDateTime(details.estimated_on)\r\n ) as string\r\n }\r\n\r\n if (details.extension == 'True') {\r\n outageEnd = getLocalDateTimeString(\r\n parseDateTime(details.estimated_on)\r\n ) as string\r\n }\r\n return `
\r\n
${details.name || 'Major Works'}
\r\n
Works are underway at ${affectedSuburbs}
\r\n

\r\n Start: ${outageStart}
\r\n End: ${outageEnd}\r\n

\r\n

\r\n ${details.notes}\r\n

\r\n ${details?.url ? \"More about discoloured water\" : \"Sign up for supply alerts\"}\r\n
`\r\n }\r\n return `
\r\n
${affectedSuburbs}
\r\n
There are no known outages at this address
\r\n

Last updated: ${lastUpdated}

\r\n

\r\n If you are experiencing a water outage at this address, please report the outage to one of our 24 hour support crew, so we can investigate.\r\n

\r\n
`\r\n}\r\n","import { useEffect, useRef, useState } from 'react'\r\nimport { onPlaceChanged, updateGTM } from '../../map_utils/index'\r\nimport { SearchType } from '../../interfaces/index'\r\nimport { useComponentSize } from '../../../../residential/hooks'\r\nimport { Icon } from 'utils'\r\nimport { useStateMachine } from 'little-state-machine'\r\nimport { updateStore } from '../../state'\r\n\r\n\r\nconst Search = ({ autocomplete, map, searchRef }: SearchType) => {\r\n const { state, actions } = useStateMachine({ updateStore })\r\n const [show, setShow] = useState(false)\r\n const [mobile, setMobile] = useState(false)\r\n const ref = useRef('')\r\n const searchNodeMobile = useRef(null)\r\n const filterNode = useRef(null)\r\n const searchButtonNode = useRef(null)\r\n const filterButtonNode = useRef(null)\r\n\r\n const onChange = () => {\r\n actions.updateStore({ address: searchRef?.current?.value })\r\n if (map) {\r\n onPlaceChanged({ autocomplete, map })\r\n if (\r\n searchRef?.current?.value != null &&\r\n ref?.current != null &&\r\n ref?.current !== searchRef?.current?.value\r\n ) {\r\n ref.current = searchRef?.current?.value\r\n // Retrieve place for analytics\r\n const place = autocomplete.getPlace()\r\n if (place) {\r\n // Calculate the name to pass analytics\r\n let name = place.name\r\n if (place.place_id) {\r\n name = place.vicinity\r\n }\r\n name = name.replace(/[0-9]/g, '')\r\n updateGTM('search', name)\r\n }\r\n }\r\n }\r\n }\r\n\r\n const onClick = () => {\r\n setShow(!show)\r\n }\r\n const widthRef = useRef(null)\r\n const size = useComponentSize(widthRef)\r\n\r\n // hide open filter or search dropdown on click outside\r\n const handleMousedown = (e: MouseEvent) => {\r\n const { target } = e\r\n if (\r\n !filterNode?.current?.contains(target as Node) &&\r\n !filterButtonNode?.current?.contains(target as Node)\r\n ) {\r\n // outside click\r\n setShow(false)\r\n }\r\n if (\r\n !searchNodeMobile?.current?.contains(target as Node) &&\r\n !searchButtonNode?.current?.contains(target as Node)\r\n ) {\r\n // outside click\r\n searchNodeMobile?.current?.classList.add('wc-outages__searchdrop--hidden')\r\n }\r\n }\r\n\r\n const toggleSearch = () => {\r\n searchNodeMobile?.current?.classList.toggle(\r\n 'wc-outages__searchdrop--hidden'\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n if (size && size.width) {\r\n setMobile(size.width < 720)\r\n }\r\n }, [size])\r\n\r\n useEffect(() => {\r\n document.addEventListener('mousedown', handleMousedown)\r\n return () => {\r\n document.removeEventListener('mousedown', handleMousedown)\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (!state?.address && searchRef?.current?.value) {\r\n searchRef.current.value = ''\r\n }\r\n }, [state?.address, searchRef])\r\n\r\n if (autocomplete) {\r\n autocomplete.addListener('place_changed', onChange)\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n Enter an address\r\n \r\n\r\n \r\n \r\n Search\r\n \r\n
\r\n {!mobile && (\r\n \r\n )}\r\n
\r\n {mobile && (\r\n \r\n Sign up for water supply alerts\r\n \r\n )}\r\n {!mobile && (\r\n \r\n Sign up for water supply alerts\r\n \r\n )}\r\n
\r\n\r\n {!mobile && (\r\n \r\n \r\n Filter\r\n \r\n )}\r\n\r\n {!mobile && (\r\n
\r\n {show && (\r\n
\r\n
Filter outages by:
\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\n )}\r\n
\r\n )}\r\n
\r\n \r\n {mobile && (\r\n \r\n )}\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default Search\r\n\r\n","import {\r\n createGuid,\r\n getDetails,\r\n getMessage,\r\n getPin,\r\n getTitle,\r\n updateGTM\r\n} from '../../../map_utils/index'\r\nimport { AccordionContentType } from '../../../interfaces/index'\r\n\r\nconst AccordionContent = ({ content, setLocation, scrollToMap }: AccordionContentType) => {\r\n const title =\r\n content.status === 'Major' ? content.name : getTitle(content.status)\r\n // Function to move the map to marker location\r\n const handleClick = () => {\r\n setLocation(content.position)\r\n updateGTM('suburb filter', content.region, title)\r\n scrollToMap()\r\n }\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{title}
\r\n

{getMessage(content.planned_flag === \"True\")}

\r\n

{getDetails(content)}

\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default AccordionContent\r\n","import {\r\n Fragment,\r\n KeyboardEventHandler,\r\n ReactNode,\r\n useEffect,\r\n useRef,\r\n useState\r\n} from 'react'\r\nimport { createGuid } from '../../../map_utils/index'\r\nimport AccordionContent from './AccordionContent'\r\nimport { AccordionSectionType } from '../../../interfaces/index'\r\n\r\nconst AccordionSection = ({\r\n index,\r\n id,\r\n label,\r\n count,\r\n content,\r\n isOpen,\r\n setIsOpen,\r\n setLocation,\r\n scrollToMap\r\n}: AccordionSectionType) => {\r\n const [isSectionOpen, setIsSectionOpen] = useState(isOpen)\r\n const refContainer = useRef(null)\r\n const [maxHeight, setMaxHeight] = useState(0)\r\n const isEven = Number(index) % 2 !== 0\r\n const btnClass = `wc-outages__accordion__button${isOpen ? ' wc-outages__accordion__button--is-open' : ''}${isEven ? ' wc-outages__accordion--alt' : ''}`;\r\n const contentClass = `wc-outages__accordion__content${isEven ? ' wc-outages__accordion--alt' : ''}`\r\n const containerClass = 'wc-outages__accordion__container'\r\n\r\n // Create content items\r\n const items: Array = content.reduce(\r\n (arrayOfItems: Array, currentItem: any) => {\r\n const newLocal = (\r\n
\r\n \r\n
\r\n )\r\n return [...arrayOfItems, newLocal]\r\n },\r\n []\r\n )\r\n\r\n // Set the max height of accordion\r\n useEffect(() => {\r\n if (refContainer?.current && isSectionOpen) {\r\n // @ts-ignore\r\n setMaxHeight(refContainer?.current.scrollHeight)\r\n } else {\r\n setMaxHeight(0)\r\n }\r\n }, [refContainer, isSectionOpen])\r\n\r\n // Function to handle the key press\r\n const handleKeyPressOpen = (e: KeyboardEventHandler) => {\r\n // @ts-ignore\r\n if (e.key === 13 || e.key === 32) {\r\n setIsSectionOpen(!isSectionOpen)\r\n setIsOpen(!isSectionOpen)\r\n // @ts-ignore\r\n } else if (e.key === 27) {\r\n setIsSectionOpen(false)\r\n setIsOpen(false)\r\n }\r\n }\r\n\r\n return (\r\n \r\n

\r\n {\r\n setIsSectionOpen(!isSectionOpen)\r\n setIsOpen(!isSectionOpen)\r\n }}\r\n // @ts-ignore\r\n onKeyDown={handleKeyPressOpen}\r\n >\r\n

{label}

\r\n
\r\n

({count})

\r\n
\r\n \r\n

\r\n \r\n
{items}
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default AccordionSection\r\n","import { Fragment } from 'react'\r\nimport { createCountText, createGuid } from '../../../map_utils/index'\r\nimport AccordionSection from './AccordionSection'\r\nimport { AccordionType } from '../../../interfaces/index'\r\n\r\nconst Accordion = ({ id, content, setLocation, setIsOpen, scrollToMap }: AccordionType) => {\r\n return (\r\n \r\n {content.map((d, i) => {\r\n const {\r\n suburb,\r\n isOpen,\r\n completedCount,\r\n upcomingCount,\r\n outageCount,\r\n majorCount,\r\n outages\r\n } = d\r\n const fn = setIsOpen(suburb)\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nexport default Accordion\r\n","import { setMap } from '../../map_utils/index'\r\nimport Accordion from './Accordion/index'\r\nimport { SidePanelType } from '../../interfaces/index'\r\nimport { useStateMachine } from 'little-state-machine'\r\nimport { updateStore } from '../../state'\r\n\r\nconst SidePanel = ({\r\n fresh,\r\n content,\r\n markers,\r\n resetMapData,\r\n setIsOpen,\r\n scrollToMap,\r\n map\r\n}: SidePanelType) => {\r\n const { state, actions } = useStateMachine({ updateStore })\r\n const setLocation = setMap(markers, map)\r\n if (!content?.length && state?.address) {\r\n return (\r\n
\r\n
\r\n

\r\n Outages by suburb:\r\n

\r\n
\r\n
\r\n
{state?.address.split(',')[0]}
\r\n
There are no known outages at this address
\r\n

\r\n If you are experiencing a water outage at this address, please\r\n report the outage to one of our 24 hour support crew, so we can\r\n investigate. Report a fault\r\n

\r\n
\r\n
\r\n {\r\n actions.updateStore({\r\n address: ''\r\n })\r\n resetMapData()\r\n }}\r\n className=\"wc-outages__button--reset\"\r\n >\r\n
Reset Map
\r\n \r\n
\r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

\r\n Outages by suburb:\r\n

\r\n
\r\n
\r\n {content?.length > 0 && (\r\n \r\n )}\r\n
\r\n
\r\n {!fresh && (\r\n {\r\n actions.updateStore({\r\n address: ''\r\n })\r\n resetMapData()\r\n }}\r\n className=\"wc-outages__button--reset\"\r\n >\r\n
Reset Map
\r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default SidePanel\r\n","import { useState, useEffect, useRef, useCallback } from 'react'\r\n\r\ninterface ApiEndpoint {\r\n url: string\r\n key: string\r\n}\r\ninterface MapData {\r\n events: ApiEndpoint\r\n mapData: ApiEndpoint\r\n}\r\n\r\nexport const useMapData = (endpoints: MapData) => {\r\n const [data, setData] = useState([])\r\n const [error, setError] = useState(null)\r\n const [loading, setLoading] = useState(true)\r\n const controller = useRef(new AbortController())\r\n const getData = useCallback(async () => {\r\n try {\r\n const mapData = await fetch(endpoints.mapData.url, {\r\n signal: controller.current.signal,\r\n headers: {\r\n Authorization: `Bearer ${endpoints.mapData.key}`,\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Ocp-Apim-Subscription-Key': endpoints.mapData.key\r\n }\r\n })\r\n .then((d) => d.json())\r\n .catch((err) => {\r\n setError(err)\r\n setLoading(false)\r\n })\r\n const events = await fetch(endpoints.events.url, {\r\n signal: controller.current.signal,\r\n headers: {\r\n Authorization: `Bearer ${endpoints.events.key}`,\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Ocp-Apim-Subscription-Key': endpoints.events.key\r\n }\r\n })\r\n .then((d) => d.json())\r\n .catch((err) => {\r\n setError(err)\r\n setLoading(false)\r\n })\r\n\r\n const mappedEvents = events?.features?.reduce(\r\n (majorEvents, curr) => {\r\n if (curr?.properties?.type === 'Major Project') {\r\n curr.properties.status = 'Major'\r\n return [...majorEvents, curr]\r\n } else {\r\n return majorEvents\r\n }\r\n },\r\n [endpoints]\r\n )\r\n\r\n setData([...mappedEvents, ...(mapData?.features ?? [])])\r\n setLoading(false)\r\n } catch (err) {\r\n setError(err as Error)\r\n setLoading(false)\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (error) {\r\n console.log(`fetchMapDataError: ${error?.message}`)\r\n }\r\n }, [error])\r\n\r\n return { data, error, loading }\r\n}\r\n","import { useEffect, useState, RefObject } from 'react'\r\nimport { InitialConfigType } from '../../../interfaces'\r\n\r\nconst initialConfig: InitialConfigType = {\r\n zoom: 4,\r\n center: { lat: -27.2008942, lng: 122.0053344 },\r\n language: 'en',\r\n region: 'AU',\r\n disableDefaultUI: true,\r\n zoomControl: true,\r\n mapTypeControl: false,\r\n scaleControl: false,\r\n streetViewControl: false,\r\n rotateControl: false,\r\n fullscreenControl: false,\r\n keyboardShortcuts: true,\r\n gestureHandling: 'cooperative'\r\n}\r\n\r\nexport const useGoogleMap = (\r\n mapRef: RefObject\r\n): google.maps.Map | null => {\r\n const [map, setMap] = useState(null)\r\n useEffect(() => {\r\n if (!map && mapRef.current) {\r\n const newMap = new window.google.maps.Map(\r\n mapRef.current as HTMLElement,\r\n initialConfig\r\n )\r\n setMap(newMap)\r\n }\r\n }, [mapRef, map])\r\n return map\r\n}\r\n","import { useState, useEffect } from 'react'\r\n\r\ninterface Position {\r\n coords: {\r\n latitude: number\r\n longitude: number\r\n }\r\n}\r\n\r\ninterface PositionError {\r\n code: number\r\n message: string\r\n}\r\n\r\nexport const useGeolocation = () => {\r\n const [position, setPosition] = useState(null)\r\n const [error, setError] = useState(null)\r\n const [isMobile, setIsMobile] = useState(false)\r\n useEffect(() => {\r\n isMobile &&\r\n navigator.geolocation.getCurrentPosition(\r\n (position) => setPosition(position),\r\n (error) => setError(error)\r\n )\r\n }, [isMobile])\r\n\r\n useEffect(() => {\r\n const mobileRegex =\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i\r\n const mobileUserAgent = navigator.userAgent\r\n setIsMobile(mobileRegex.test(mobileUserAgent))\r\n }, [])\r\n\r\n return { position, error }\r\n}\r\n","import { useEffect, useState, RefObject } from 'react'\r\nimport { useGeolocation } from '../useGeolocation'\r\n\r\nexport const useGooglePlacesAutocomplete = (\r\n searchRef: RefObject\r\n) => {\r\n const { position } = useGeolocation()\r\n const [autocomplete, setAutocomplete] =\r\n useState()\r\n const [waBounds] = useState(\r\n new window.google.maps.LatLngBounds()\r\n )\r\n\r\n useEffect(() => {\r\n if (searchRef) {\r\n waBounds.extend(new window.google.maps.LatLng(-34.922256, 112.771782))\r\n waBounds.extend(new window.google.maps.LatLng(-13.411688, 128.807354))\r\n const service: google.maps.places.Autocomplete =\r\n new window.google.maps.places.Autocomplete(\r\n searchRef?.current as HTMLInputElement,\r\n {\r\n componentRestrictions: { country: 'au' },\r\n bounds: waBounds,\r\n strictBounds: true\r\n }\r\n )\r\n setAutocomplete(service)\r\n }\r\n }, [searchRef])\r\n\r\n useEffect(() => {\r\n if (autocomplete && position) {\r\n const geolocation = {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude\r\n }\r\n const service = new window.google.maps.DistanceMatrixService()\r\n service.getDistanceMatrix(\r\n {\r\n origins: [geolocation],\r\n destinations: [geolocation],\r\n travelMode: google.maps.TravelMode.DRIVING\r\n },\r\n function (response, status) {\r\n if (status === 'OK') {\r\n const distance = response?.rows[0].elements[0].distance.value\r\n const radius = (distance ?? 4000) / 2\r\n const circle = new google.maps.Circle({\r\n center: geolocation,\r\n radius: radius\r\n })\r\n const circleBounds = circle.getBounds()\r\n circleBounds && autocomplete.setBounds(circleBounds)\r\n } else {\r\n console.error('Error: ' + status)\r\n }\r\n }\r\n )\r\n }\r\n }, [autocomplete, position])\r\n\r\n return autocomplete\r\n}\r\n","import { useEffect, useRef, useState } from 'react'\r\nimport Legend from '../Legend/index'\r\nimport Search from '../Search/index'\r\nimport SidePanel from '../SidePanel/index'\r\nimport { useMapData } from '../hooks/useMapData'\r\nimport { useStateMachine } from 'little-state-machine'\r\nimport { useGoogleMap } from '../hooks/useGoogleMap'\r\nimport { useGooglePlacesAutocomplete } from '../hooks/useGooglePlacesAutoComplete'\r\nimport { AddMapDataType, MapPropsType } from '../../interfaces'\r\nimport {\r\n removeMarkers,\r\n resetMap,\r\n createPolygons,\r\n setClusterer,\r\n createOutageAreas,\r\n addPolygonFeature\r\n} from '../../map_utils'\r\nimport { DEFAULT_ERROR_MESSAGE } from 'constant'\r\nimport { ErrorOrLoading } from '../../../../residential/shared'\r\nimport { updateStore } from '../../state'\r\nimport { scrollToRef } from 'utils'\r\n\r\nconst Map = (props: MapPropsType) => {\r\n const { state, actions } = useStateMachine({ updateStore })\r\n const mapContainerRef = useRef(null)\r\n const [zoom, setZoom] = useState(4)\r\n const map = useGoogleMap(mapContainerRef)\r\n const searchRef = useRef(null)\r\n const autocomplete = useGooglePlacesAutocomplete(searchRef)\r\n const { data, error, loading } = useMapData({\r\n events: { url: props.getEventsApi, key: props.getEventsKey },\r\n mapData: { url: props.getOutagesApi, key: props.getOutagesKey }\r\n })\r\n const polygons = useRef([])\r\n const markers = useRef([])\r\n const markerEvents = useRef([])\r\n const infoWindow = useRef(null)\r\n const clusterer = useRef(null)\r\n const [outageAreas, setOutageAreas] = useState()\r\n\r\n function resetMapData() {\r\n if (map) {\r\n actions.updateStore({\r\n active: true,\r\n completed: true,\r\n registered: true,\r\n major: true\r\n })\r\n removeMarkers({\r\n polygons,\r\n markers,\r\n markerEvents,\r\n clusterer,\r\n status: 'all'\r\n })\r\n\r\n // Reset the map\r\n resetMap(map, infoWindow)\r\n\r\n // Re-create the polygons\r\n createPolygons({\r\n features: data,\r\n polygons,\r\n markers,\r\n markerEvents,\r\n infoWindow,\r\n map,\r\n state\r\n })\r\n\r\n // Add a marker clusterer to manage the markers\r\n setClusterer({ markers, clusterer, map })\r\n\r\n // Create outage areas\r\n const tempOutageAreas = createOutageAreas({ markers, state })\r\n setOutageAreas(tempOutageAreas)\r\n }\r\n }\r\n const addMapData = (mapData: AddMapDataType) => {\r\n actions.updateStore({\r\n active: mapData.active,\r\n completed: mapData.completed,\r\n registered: mapData.registered,\r\n major: mapData.major\r\n })\r\n // Remove the markers\r\n removeMarkers({\r\n polygons,\r\n markers,\r\n markerEvents,\r\n clusterer,\r\n status: 'all'\r\n })\r\n\r\n if (map) {\r\n // Reset the map\r\n resetMap(map, infoWindow)\r\n\r\n // Filter the data and create polygons\r\n const filteredData = data.filter(\r\n (d) =>\r\n (d?.properties?.status === 'Active' && state?.active) ||\r\n (d?.properties?.status === 'Completed' && state?.completed) ||\r\n (d?.properties?.status === 'Closed' && state?.completed) ||\r\n (d?.properties?.status === 'Registered' && state?.registered) ||\r\n (d?.properties?.status === 'Major' && state?.major)\r\n )\r\n\r\n createPolygons({\r\n polygons,\r\n features: filteredData,\r\n\r\n infoWindow,\r\n markers,\r\n markerEvents,\r\n map,\r\n state\r\n })\r\n // Add a marker clusterer to manage the markers\r\n setClusterer({ markers, clusterer, map })\r\n // Create outage areas\r\n const tempOutageAreas = createOutageAreas({ markers, state })\r\n\r\n // Copy across any isOpen values from current\r\n if (outageAreas?.current) {\r\n ; (outageAreas?.current as Array).forEach((s) => {\r\n const index = (tempOutageAreas as Array)\r\n .map((x) => x.suburb)\r\n .indexOf(s.suburb)\r\n if (index >= 0) {\r\n tempOutageAreas[index].isOpen = s.isOpen\r\n }\r\n })\r\n }\r\n setOutageAreas(tempOutageAreas)\r\n }\r\n }\r\n\r\n // Function to update outage area is open flag\r\n const setIsOpen = (suburb: string) => (isOpen: boolean) => {\r\n const index = outageAreas\r\n .map((x: { [index: string]: any }) => x.suburb)\r\n .indexOf(suburb)\r\n if (index >= 0) {\r\n setOutageAreas((obj: Array<{ [index: string]: any }>) => {\r\n obj[index].isOpen = isOpen\r\n return obj\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (map) {\r\n map.addListener('zoom_changed', () => {\r\n const z = map.getZoom() ?? 15\r\n setZoom(z)\r\n })\r\n }\r\n }, [map])\r\n // Initialise geo coder and add functionality to polygon\r\n useEffect(() => {\r\n if (google.maps.Geocoder) {\r\n addPolygonFeature()\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (data && !loading && !error && map) {\r\n createPolygons({\r\n features: data,\r\n polygons,\r\n markers,\r\n markerEvents,\r\n infoWindow,\r\n\r\n map,\r\n state\r\n })\r\n // Add a marker clusterer to manage the markers\r\n setClusterer({ markers, clusterer, map })\r\n // Create outage areas\r\n const tempOutageAreas = createOutageAreas({ markers, state })\r\n setOutageAreas(tempOutageAreas)\r\n }\r\n }, [data, loading, error, map])\r\n\r\n // Add/remove active map data based on the active flag\r\n useEffect(() => {\r\n if (!state?.active) {\r\n removeMarkers({\r\n polygons,\r\n markers,\r\n markerEvents,\r\n clusterer,\r\n status: 'Active'\r\n })\r\n const tempOutageAreas = createOutageAreas({\r\n markers,\r\n state: { ...state, active: false }\r\n })\r\n setOutageAreas(tempOutageAreas)\r\n }\r\n }, [state?.active])\r\n // // Add/remove completed map data based on the completed flag\r\n useEffect(() => {\r\n if (!state?.completed) {\r\n removeMarkers({\r\n polygons,\r\n markers,\r\n markerEvents,\r\n clusterer,\r\n status: 'Completed'\r\n })\r\n const tempOutageAreas = createOutageAreas({\r\n markers,\r\n state: { ...state, completed: false }\r\n })\r\n setOutageAreas(tempOutageAreas)\r\n }\r\n }, [state?.completed])\r\n // // Add/remove registered map data based on the registered flag\r\n useEffect(() => {\r\n if (!state?.registered) {\r\n removeMarkers({\r\n polygons,\r\n markers,\r\n markerEvents,\r\n clusterer,\r\n status: 'Registered'\r\n })\r\n\r\n const tempOutageAreas = createOutageAreas({\r\n markers,\r\n state: { ...state, registered: false }\r\n })\r\n setOutageAreas(tempOutageAreas)\r\n }\r\n }, [state?.registered])\r\n\r\n // // Add/remove registered map data based on the registered flag\r\n useEffect(() => {\r\n if (!state?.Major) {\r\n removeMarkers({\r\n polygons,\r\n markers,\r\n markerEvents,\r\n clusterer,\r\n status: 'Major'\r\n })\r\n\r\n const tempOutageAreas = createOutageAreas({\r\n markers,\r\n state: { ...state, registered: false }\r\n })\r\n setOutageAreas(tempOutageAreas)\r\n }\r\n }, [state?.major])\r\n\r\n // bound listener function\r\n const boundListenerFunction = () => {\r\n if (map) {\r\n // Create list of outages\r\n const bounds = map.getBounds()\r\n const tempOutages = markers?.current.reduce(\r\n (array: Array, current: { [index: string]: any }) => {\r\n if (\r\n (current.markerData.status === 'Active' && state?.active) ||\r\n (current.markerData.status === 'Completed' && state?.completed) ||\r\n (current.markerData.status === 'Closed' && state?.completed) ||\r\n (current.markerData.status === 'Registered' && state?.registered) ||\r\n (current.markerData.status === 'Major' && state?.major)\r\n ) {\r\n // Check if marker is within bounds\r\n if (bounds?.contains(current.getPosition())) {\r\n // Iterate between all affected suburbs and add to result\r\n if (\r\n current.markerData.affected_suburbs &&\r\n current.markerData.affected_suburbs.length > 0\r\n ) {\r\n current.markerData.affected_suburbs.forEach((s: string) => {\r\n array.push({\r\n content: current.markerData,\r\n label: s\r\n })\r\n })\r\n }\r\n }\r\n }\r\n return array\r\n },\r\n []\r\n )\r\n\r\n // Create list of outage areas\r\n const tempOutageAreas = tempOutages.reduce(\r\n (array: Array, current: { [index: string]: any }) => {\r\n const suburb = current.label\r\n const { status } = current.content\r\n const index = array.map((x) => x.suburb).indexOf(suburb)\r\n if (index >= 0) {\r\n // Increment the counts and add to outages list\r\n if (status === 'Completed' || status === 'Closed') {\r\n array[index].completedCount++\r\n }\r\n if (status === 'Registered') {\r\n array[index].upcomingCount++\r\n }\r\n if (status === 'Active') {\r\n array[index].outageCount++\r\n }\r\n if (status === 'Major') {\r\n array[index].majorCount++\r\n }\r\n array[index].outages.push(current)\r\n } else {\r\n // Add new suburb and sort\r\n array.push({\r\n suburb,\r\n isOpen: false,\r\n completedCount:\r\n status === 'Completed' || status === 'Closed' ? 1 : 0,\r\n upcomingCount: status === 'Registered' ? 1 : 0,\r\n outageCount: status === 'Active' ? 1 : 0,\r\n majorCount: status === 'Major' ? 1 : 0,\r\n outages: [current]\r\n })\r\n array.sort((x, y) => {\r\n const xSuburb = x.suburb\r\n const ySuburb = y.suburb\r\n if (xSuburb < ySuburb) {\r\n return -1\r\n }\r\n if (xSuburb > ySuburb) {\r\n return 1\r\n }\r\n return 0\r\n })\r\n }\r\n return array\r\n },\r\n []\r\n )\r\n\r\n // Copy across any isOpen values from current\r\n if (outageAreas?.current) {\r\n outageAreas?.current.forEach((s: { [index: string]: any }) => {\r\n const index = tempOutageAreas\r\n .map((x: { [index: string]: any }) => x.suburb)\r\n .indexOf(s.suburb)\r\n if (index >= 0) {\r\n tempOutageAreas[index].isOpen = s.isOpen\r\n }\r\n })\r\n }\r\n setOutageAreas(tempOutageAreas)\r\n }\r\n }\r\n\r\n // Set up bound listeners\r\n useEffect(() => {\r\n if (map) {\r\n map.addListener('bounds_changed', boundListenerFunction)\r\n }\r\n }, [map])\r\n\r\n useEffect(() => {\r\n const { active, completed, registered, major } = state\r\n addMapData({\r\n active,\r\n completed,\r\n registered,\r\n major\r\n })\r\n }, [state?.active, state?.completed, state?.registered, state?.major])\r\n\r\n function scrollToMap() {\r\n scrollToRef(mapContainerRef)\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n <>\r\n
\r\n )\r\n}\r\n\r\nexport default Map\r\n","import { useEffect } from 'react'\r\nimport { useLoadScript } from '@react-google-maps/api'\r\nimport { useStateMachine } from 'little-state-machine'\r\nimport { updateStore } from '../state/index'\r\nimport Map from './Map/index'\r\nimport { FromSitecorePropsType } from '../interfaces/index'\r\nimport { Icon } from 'utils'\r\nimport { ErrorOrLoading } from '../../../residential/shared'\r\nimport Legend from './Legend'\r\nimport { DEFAULT_ERROR_MESSAGE } from 'constant'\r\ntype Libraries = (\r\n | 'drawing'\r\n | 'geometry'\r\n | 'localContext'\r\n | 'places'\r\n | 'visualization'\r\n)[]\r\nconst libraries: Libraries = ['drawing', 'geometry', 'places']\r\n\r\nconst App = (props: FromSitecorePropsType) => {\r\n const { isLoaded, loadError } = useLoadScript({\r\n // @ts-ignore\r\n libraries,\r\n googleMapsApiKey: props.mapApiKey\r\n })\r\n\r\n const { actions } = useStateMachine({ updateStore })\r\n useEffect(() => {\r\n actions.updateStore({\r\n ready: isLoaded,\r\n reportFormUrl: props.reportFormUrl,\r\n outagesFormUrl: props.outagesFormUrl\r\n })\r\n return () => {\r\n actions.updateStore({\r\n address: '',\r\n active: true,\r\n completed: true,\r\n registered: true,\r\n major: true,\r\n ready: false,\r\n markerData: [],\r\n features: [],\r\n markers: [],\r\n getAddress: void 0,\r\n map: void 0,\r\n reportFormUrl: void 0,\r\n outagesFormUrl: void 0\r\n })\r\n }\r\n }, [isLoaded])\r\n const PreMap = ({ outagesFormUrl, loading, error }: { outagesFormUrl: string; loading: boolean; error?: Error }) => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n Enter an address\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\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n {isLoaded ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n )\r\n}\r\n\r\nexport default App\r\n","import { createStore, StateMachineProvider } from 'little-state-machine'\r\nimport App from './components/App'\r\nimport { FromSitecorePropsType } from './interfaces'\r\n\r\ncreateStore(\r\n {\r\n address: '',\r\n active: true,\r\n completed: true,\r\n registered: true,\r\n major: true,\r\n ready: false,\r\n markerData: [],\r\n features: [],\r\n markers: [],\r\n getAddress: void 0,\r\n reportFormUrl: void 0,\r\n outagesFormUrl: void 0\r\n } as Record,\r\n { name: 'outages' }\r\n)\r\n\r\nconst OutageMap = (props: FromSitecorePropsType) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default OutageMap\r\n","import { useState, useEffect, useReducer } from 'react'\r\n\r\ntype Action =\r\n | { type: 'request' }\r\n | {\r\n type: 'success'\r\n results: Array> | Record\r\n }\r\n | { type: 'failure'; error: string }\r\n\r\ntype State = {\r\n data?: Array> | Record\r\n loading: boolean\r\n error?: string\r\n}\r\nfunction reducer(state: State, action: Action): State {\r\n switch (action.type) {\r\n case 'request':\r\n return { loading: true, error: '' }\r\n case 'success':\r\n return { loading: false, data: action.results, error: '' }\r\n case 'failure':\r\n return { loading: false, error: action.error }\r\n }\r\n}\r\n\r\ninterface FetchType {\r\n data: any\r\n error?: Error\r\n loading: boolean\r\n fetch: (url: string, options?: any) => void\r\n setLoading: (loading: boolean) => void\r\n}\r\n// fetch data from api, optionally using options\r\nconst useFetch = (url: string, options?: any): FetchType => {\r\n const [{ data, loading, error }, dispatch] = useReducer(reducer, {\r\n error: '',\r\n loading: false\r\n })\r\n async function Asyncfetch(url: string, options: RequestInit = {}) {\r\n dispatch({ type: 'request' })\r\n try {\r\n const response = await fetch(url, options)\r\n if (response?.ok && response?.status !== 404) {\r\n const contentType = response.headers.get('content-type')\r\n const resData =\r\n contentType === contentType && contentType?.includes('json')\r\n ? await response.json()\r\n : contentType?.includes('text')\r\n ? await response.text()\r\n : await response.blob()\r\n dispatch(\r\n !!resData\r\n ? { type: 'success', results: resData }\r\n : { type: 'failure', error: 'No data available' }\r\n )\r\n } else {\r\n dispatch({ type: 'failure', error: 'No data available' })\r\n }\r\n } catch (error) {\r\n dispatch({\r\n type: 'failure',\r\n error: (error as Error)?.message || 'No data available'\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (url) {\r\n Asyncfetch(url, options)\r\n }\r\n }, [url, options])\r\n\r\n return {\r\n data: data,\r\n error: error ? new Error(error) : undefined,\r\n loading,\r\n fetch: Asyncfetch,\r\n setLoading: (loading: boolean) => {}\r\n }\r\n}\r\n\r\n// get size of element\r\nconst getSize = (el: HTMLElement) => {\r\n if (!el) return {}\r\n return {\r\n width:\r\n el.offsetWidth >= 35 && el.offsetWidth < 600\r\n ? el.offsetWidth - 35\r\n : el.offsetWidth,\r\n height: el.offsetHeight\r\n }\r\n}\r\nconst useComponentSize = (ref) => {\r\n const [componentSize, setComponentSize] = useState(getSize(ref?.current))\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n function handleResize() {\r\n if (ref && ref?.current) {\r\n setComponentSize(getSize(ref?.current))\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n handleResize()\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return componentSize\r\n}\r\n\r\nexport { useFetch, useComponentSize }\r\n","import { useEffect, useState } from 'react'\r\nimport Overlay from '../Overlay'\r\nimport Spinner from '../Spinner'\r\n\r\ninterface ErrorOrLoadingType {\r\n useErrorMessage?: boolean\r\n error?: Error\r\n loading: boolean\r\n}\r\n\r\nconst ErrorOrLoading = ({\r\n error,\r\n loading,\r\n useErrorMessage\r\n}: ErrorOrLoadingType) => {\r\n const [errorMessage, setErrorMessage] = useState('')\r\n useEffect(() => {\r\n if (!error) {\r\n setErrorMessage('')\r\n } else {\r\n console.log(error)\r\n setErrorMessage(\r\n useErrorMessage\r\n ? error.message\r\n : 'Whoops, it looks like something went wrong. Please, try refreshing the page. If the issue continues, please contact us on 13 13 85'\r\n )\r\n }\r\n }, [error])\r\n return error || loading ? (\r\n \r\n {loading && !error && }\r\n {!!error &&

{errorMessage}

}\r\n
\r\n ) : (\r\n <>\r\n )\r\n}\r\n\r\nexport default ErrorOrLoading\r\n","interface NavBtnType {\r\n isLeft: boolean\r\n disabled: boolean\r\n onclick: () => void\r\n}\r\n\r\nconst NavBtn = ({ isLeft, disabled, onclick }: NavBtnType) => (\r\n \r\n)\r\n\r\nexport default NavBtn\r\n","import { ReactNode } from 'react'\r\n\r\ninterface OverlayType {\r\n children: ReactNode\r\n mode: 'dark' | 'light'\r\n}\r\n\r\nconst Overlay = ({ children, mode = 'light' }: OverlayType) => {\r\n return (\r\n \r\n {children}\r\n
\r\n )\r\n}\r\n\r\nexport default Overlay\r\n","import { memo } from 'react'\r\n\r\nconst Spinner = memo(() => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n})\r\n\r\nexport default Spinner\r\n"],"names":["updateStore","state","payload","GreenMarker","Icon","makeIconsString","OrangeMarker","RedMarker","MajorWorksMarker","MarkerCluster","updateGTM","category","action","label","global","createPolygons","features","polygons","markers","markerEvents","infoWindow","map","google","d","_d_properties","_d_geometry","type","getOutageType","Array","coordinates","i","paths","arr","tuple","latLng","polygon","addMarker","feature","setClusterer","clusterer","MarkerClusterer","setMap","position","marker","createCountText","completedCount","upcomingCount","outageCount","majorCount","text","createGuid","s4","Math","getPin","status","redMarker","orangeMarker","majorWorksMarker","greenMarker","removeMarkers","newPolygons","array","curr","newMarkers","eventListener","createOutageAreas","tempOutages","s","suburb","index","x","y","xSuburb","ySuburb","resetMap","ref","_ref_current","getColor","addPolygonFeature","bounds","element","centrePoint","polygonBounds","getIcon","info","createTemplate","skipGtm","joinList","onPlaceChanged","autocomplete","place","google1","parseDateTime","dateString","components","dateComponents","timeComponents","Date","parseInt","getLocalDateTimeString","dateValue","date","months","years","hours","minutes","ampm","String","listArray","lastItem","otherItems","details","lastUpdated","affectedSuburbs","outagesFormUrl","actualOn","outageStart","outageEnd","plannedOff","plannedOn","isPlanned","customerAffected","searchRef","actions","useStateMachine","show","setShow","useState","mobile","setMobile","useRef","searchNodeMobile","filterNode","searchButtonNode","filterButtonNode","widthRef","size","useComponentSize","handleMousedown","e","_filterNode_current","_filterButtonNode_current","_searchNodeMobile_current","_searchButtonNode_current","_searchNodeMobile_current1","target","useEffect","document","_searchRef_current","_searchRef_current1","_searchRef_current2","_searchRef_current3","name","content","setLocation","scrollToMap","title","getTitle","planned","getDetails","id","count","isOpen","setIsOpen","isSectionOpen","setIsSectionOpen","refContainer","maxHeight","setMaxHeight","isEven","Number","btnClass","contentClass","items","arrayOfItems","currentItem","AccordionContent","Fragment","outages","fn","AccordionSection","fresh","resetMapData","Accordion","useMapData","endpoints","data","setData","error","setError","loading","setLoading","controller","AbortController","getData","useCallback","_events_features","mapData","fetch","err","events","mappedEvents","majorEvents","_curr_properties","initialConfig","useGoogleMap","mapRef","window","useGeolocation","setPosition","isMobile","setIsMobile","navigator","mobileUserAgent","mobileRegex","useGooglePlacesAutocomplete","setAutocomplete","waBounds","geolocation","service","response","distance","circleBounds","circle","props","mapContainerRef","zoom","setZoom","outageAreas","setOutageAreas","addMapData","_d_properties1","_d_properties2","_d_properties3","_d_properties4","tempOutageAreas","boundListenerFunction","current","active","completed","registered","major","Search","SidePanel","obj","scrollToRef","ErrorOrLoading","Error","DEFAULT_ERROR_MESSAGE","undefined","Legend","libraries","isLoaded","loadError","useLoadScript","Map","PreMap","createStore","StateMachineProvider","App","reducer","useFetch","url","options","dispatch","useReducer","Asyncfetch","contentType","resData","getSize","el","componentSize","setComponentSize","handleResize","useErrorMessage","errorMessage","setErrorMessage","Overlay","Spinner","isLeft","disabled","onclick","children","mode","memo"],"mappings":"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"}