{"version":3,"sources":["images/vw-default--icon-dark.png","components/Map/marker-icon.png","components/Map/marker-shadow.png","config.js","reducers/appReducer.js","reducers/issueReducer.js","reducers/contactReducer.js","reducers/imagesReducer.js","components/useWindowDimensions.jsx","components/Header/index.jsx","components/Layout.js","components/usePrevious.jsx","components/Icons/icons.js","components/Images/PropTypes.jsx","components/Icons/index.jsx","components/Images/ImagePreview.jsx","components/Modal/index.jsx","components/Images/ImageUpload.jsx","components/Images/ImageComponent.jsx","components/Steps/StepComponent.jsx","actions.js","components/LoadingRing/index.jsx","utils.js","components/Issue/AddressInput.jsx","components/Map/Toolbar.jsx","components/Map/index.jsx","components/InputStatusIcons/index.jsx","components/Issue/PropTypes.jsx","components/Issue/IssueComponent.jsx","components/Contact/ContactComponent.jsx","components/Review/ErrorModalContent.jsx","components/Review/AnonymousModalContent.jsx","components/Review/ReviewComponent.jsx","components/Submit/SubmitComponent.jsx","components/GRecaptcha.jsx","index.js","App.jsx"],"names":["module","exports","geocode","countryCode","suggest","category","reverseGeocode","featureTypes","options","descriptionRequired","nameRequired","emailRequired","phoneRequired","imageRequired","pdfAllowed","validFileExtensions","title","newMessage","homeMessage","invalidLocation","mapInstructions","reverseGeocodeNotFound","anonymous","settings","name","tagline","apiUrls","accentColorHex","primaryColorHex","accentFontColorHex","primaryFontColorHex","logoUrl","bbox","google","recaptchaKey","defaultState","config","activeStep","userVerified","isSubmitting","appReducer","state","action","type","payload","submitResponse","locType","address","latitude","longitude","issue","description","issueReducer","lat","lng","email","telephone","contactReducer","images","imagesReducer","getWindowDimensions","window","width","innerWidth","height","innerHeight","useWindowDimensions","useState","windowDimensions","setWindowDimensions","useEffect","handleResize","addEventListener","removeEventListener","HeaderComponent","className","style","color","backgroundColor","src","logo","alt","Layout","props","children","defaultProps","usePrevious","value","ref","useRef","current","PropTypes","shape","url","string","file","checkmark","chevronRight","chevronLeft","chevronDown","chevronUp","closeThin","arrowLeft","arrowRight","paperplane","exclamationCircle","infoCircle","bullseye","Icon","size","icon","styles","svg","fill","display","verticalAlign","path","viewBox","d","icons","ImagePreview","onRemove","prevImages","React","activeImg","setActiveImg","length","onClick","currIdx","indexOf","find","i","prev","toUpperCase","data","next","ModalComponent","bgColor","show","closeModal","handleKeyDown","useCallback","e","keyCode","background","ImageUpload","onChange","btnText","fileInputRef","alertMsg","setAlertMsg","getImgSrc","input","Promise","resolve","imgs","count","len","files","reader","FileReader","onload","ext","substring","lastIndexOf","target","result","push","handleOnload","readAsDataURL","Boolean","textAlign","flexDirection","marginTop","marginBottom","cursor","htmlFor","disabled","multiple","id","opacity","hidden","accept","currentTarget","then","ImageComponent","stepForward","dispatch","handleChange","concat","paddingBottom","idx","splice","justifyContent","to","steps","index","label","route","StepComponent","imagesComplete","issueComplete","contactComplete","visible","step","onSubmit","history","useHistory","setActiveStep","stepLinks","setStepLinks","prevStep","canProgress","s","alignItems","aria-label","map","isComplete","isActive","key","fontSize","href","activeSuggest","activeGeocode","activeReverseGeocode","activeValidateLocation","fetchData","a","async","fetch","response","json","getSettings","suggestAddress","location","text","abort","abortController","AbortController","signal","postImages","formData","FormData","forEach","img","append","method","body","ok","postFinalData","JSON","stringify","headers","Ring","circles","Array","_","borderColor","margin","borderWidth","zoomDisable","objHead","document","getElementsByTagName","item","querySelector","remove","meta","createElement","content","appendChild","zoomEnable","setTimeout","AddressInput","onAddressComplete","geoCenter","others","suggestions","setSuggestions","isFetchingSuggestions","setIsFetchingSuggestions","fetchSuggestions","center","fetchSuggestionsDebounced","debounce","fetchSuggestionsThrottled","throttle","useCombobox","items","initialInputValue","stateReducer","changes","isSuggested","val","toLowerCase","stateChangeTypes","InputBlur","selectedItem","inputValue","onSelectedItemChange","itemToString","onInputValueChange","isOpen","getLabelProps","getMenuProps","getInputProps","getComboboxProps","getToggleButtonProps","highlightedIndex","getItemProps","position","required","placeholder","onBlur","cancel","onTouchStart","onTouchEnd","border","right","magicKey","MapToolbar","getLocation","showInfo","infoActive","boxShadow","backgroundClip","MapComponent","onComplete","onCancel","zoom","mapLocationError","showActions","showToolbar","disableScrollZoom","dragCenterIcon","offset","showLoading","mapElRef","geolocationError","setGeolocationError","showMapInfo","setShowMapInfo","dragging","setDragging","centerAt","onLocationFound","panTo","latlng","onLocationError","message","L","disable","touchZoom","doubleClickZoom","scrollWheelZoom","boxZoom","keyboard","tap","setView","offsetCenter","marker","latLng","iconUrl","shadowUrl","addTo","offsetHeight","offsetVal","targetPoint","project","add","unproject","getOffsetCenter","on","tileLayer","attribution","off","zIndex","marginLeft","aria-hidden","top","left","locate","loc","getCenter","Number","toFixed","SuccessStatus","RequiredStatus","ErrorStatus","issuePropType","number","issues","arrayOf","IssueComponent","issueCategories","locationVerified","reverseGeocodeNotFoundText","invalidLocationText","validateLocation","setLocationVerified","setIssueComplete","prevLat","prevLng","setMapLocationError","mapLoading","setMapLoading","isMap","setIsMap","validateIssueData","validateLatLng","lon","isCoverageDefined","isCovered","error","LongLabel","validate","exact","render","candidates","x","y","cat","ic","iss","maxLength","ContactComponent","setContactComplete","emailRef","phoneRef","emailStatus","setEmailStatus","phoneStatus","setPhoneStatus","getStatus","isValid","validationMessage","isEmailValid","checkValidity","isPhoneValid","str","phoneRegex","test","replace","validatePhone","minLength","ErrorModalContent","errorMessage","okClick","AnonymousModalContent","onContinue","ReviewComponent","imagesState","issueState","contactState","appState","notifyOfAnonymousText","onVerifyUser","setErrorMessage","anonVerified","setAnonVerified","isLoading","setIsLoading","postData","postImagesResponse","finalData","issueId","contactName","contactEmail","contactPhone","documentIds","finalPostResponse","Object","assign","sharedStyles","bottom","getCardStyle","overflowWrap","overflow","paddingRight","paddingLeft","SubmitComponent","successMessage","onReset","GRecaptcha","siteKey","grecaptchaRender","recaptchaRef","sitekey","callback","data-size","baseUrl","getAttribute","rootElement","getElementById","ReactDOM","basename","useLocation","setIssueCategories","setGeoCenter","setImagesComplete","useReducer","defaultAppState","defaultImagesState","dispatchImagesState","defaultIssueState","dispatchIssueState","defaultContactState","dispatchContactState","validateLoc","join","geocodeAddress","aoiFromBbox","bboxPoly","centerPoint","turfCenter","geometry","coordinates","reverse","opts","categories","fetchSettings","pathname","updateActiveStep","showHeader","grecaptcha","padding","maxWidth","execute"],"mappings":"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","file":"static/js/main.13488d2d.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC\"","export default {\r\n // https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm\r\n // https://developers.arcgis.com/rest/geocode/api-reference/geocoding-find-address-candidates.htm\r\n // params used for the geocoding suggest and the findAddressCandidates (geocode) APIs\r\n geocode: {\r\n countryCode: 'USA'\r\n },\r\n suggest: {\r\n category: 'Address'\r\n },\r\n // https://developers.arcgis.com/rest/geocode/api-reference/geocoding-reverse-geocode.htm\r\n // params used for the reversegeocode API\r\n reverseGeocode: {\r\n featureTypes: 'StreetAddress,StreetInt,StreetName'\r\n },\r\n // application option defaults\r\n // overrides come from options API\r\n options: {\r\n descriptionRequired: true,\r\n nameRequired: true,\r\n emailRequired: true,\r\n phoneRequired: true,\r\n imageRequired: false,\r\n pdfAllowed: false,\r\n validFileExtensions:'',\r\n title: 'VUEWorks Service Request Portal',\r\n newMessage: 'Your issue has been submitted successfully, thank you!',\r\n homeMessage:\r\n 'If your issue requires Emergency Police/Fire Assistance, please dial 9-1-1.',\r\n invalidLocation: \"Address is outside the organization's boundary\",\r\n mapInstructions:\r\n 'Drag the map to move the icon to the proper address/location of your concern. Once selected click on the \"Done\" button',\r\n reverseGeocodeNotFound: 'Unable to find address for the specified location',\r\n anonymous:\r\n 'I understand that I am submitting this request anonymously and that if I have not provided the correct address location or enough information to warrant an investigation into this concern, this request will be closed. Please click CONTINUE to submit this request anonymously, or CANCEL to return to the contact screen to provide contact information.'\r\n },\r\n // application default settings\r\n // overrides come from settings API\r\n settings: {\r\n name: 'VUEWorks SRP',\r\n tagline: '',\r\n apiUrls: {},\r\n accentColorHex: '#333333',\r\n primaryColorHex: '#9CBE47',\r\n accentFontColorHex: '#fff',\r\n primaryFontColorHex: '#333',\r\n logoUrl: '',\r\n bbox: null,\r\n google: {\r\n recaptchaKey: ''\r\n }\r\n }\r\n};\r\n","import config from '../config';\r\n\r\nexport const defaultState = {\r\n options: config.options,\r\n settings: config.settings,\r\n activeStep: null,\r\n userVerified: false,\r\n isSubmitting: false\r\n};\r\n\r\nconst appReducer = (state, action) => {\r\n if (action) {\r\n switch (action.type) {\r\n case 'SET_SETTINGS': {\r\n return {\r\n ...state,\r\n settings: action.payload\r\n };\r\n }\r\n case 'SET_OPTIONS': {\r\n return {\r\n ...state,\r\n options: action.payload\r\n };\r\n }\r\n case 'SET_ACTIVE_STEP': {\r\n return {\r\n ...state,\r\n activeStep: action.payload\r\n };\r\n }\r\n case 'SET_USER_VERIFIED': {\r\n return {\r\n ...state,\r\n userVerified: action.payload\r\n };\r\n }\r\n case 'SET_IS_SUBMITTING': {\r\n return {\r\n ...state,\r\n isSubmitting: action.payload\r\n };\r\n }\r\n case 'SET_SUBMIT_RESPONSE': {\r\n return {\r\n ...state,\r\n submitResponse: action.payload\r\n };\r\n }\r\n case 'RESET': {\r\n return {\r\n ...state,\r\n activeStep: null,\r\n userVerified: false,\r\n isSubmitting: false\r\n };\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n }\r\n return state;\r\n};\r\n\r\nexport default appReducer;\r\n","export const defaultState = {\r\n locType: null,\r\n address: '',\r\n latitude: null,\r\n longitude: null,\r\n category: null,\r\n issue: null,\r\n description: ''\r\n};\r\n\r\nconst issueReducer = (state, action) => {\r\n if (action) {\r\n switch (action.type) {\r\n // keep track of whether user input an address or used the map(lat, lng)\r\n case 'SET_LOC_TYPE': {\r\n return {\r\n ...state,\r\n locType: action.payload\r\n };\r\n }\r\n case 'SET_LATLNG': {\r\n const { lat: latitude, lng: longitude } = action.payload || {};\r\n return {\r\n ...state,\r\n latitude,\r\n longitude\r\n };\r\n }\r\n case 'SET_ADDRESS': {\r\n return {\r\n ...state,\r\n address: action.payload\r\n };\r\n }\r\n case 'SET_CATEGORY': {\r\n return {\r\n ...state,\r\n category: action.payload\r\n };\r\n }\r\n case 'SET_ISSUE': {\r\n return {\r\n ...state,\r\n issue: action.payload\r\n };\r\n }\r\n case 'SET_DESCRIPTION': {\r\n return {\r\n ...state,\r\n description: action.payload\r\n };\r\n }\r\n case 'RESET': {\r\n return defaultState;\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n }\r\n return state;\r\n};\r\n\r\nexport default issueReducer;\r\n","export const defaultState = {\r\n name: '',\r\n email: '',\r\n telephone: ''\r\n};\r\n\r\nconst contactReducer = (state, action) => {\r\n if (action) {\r\n switch (action.type) {\r\n case 'SET_NAME': {\r\n return {\r\n ...state,\r\n name: action.payload\r\n };\r\n }\r\n case 'SET_EMAIL': {\r\n return {\r\n ...state,\r\n email: action.payload\r\n };\r\n }\r\n case 'SET_TELEPHONE': {\r\n return {\r\n ...state,\r\n telephone: action.payload\r\n };\r\n }\r\n case 'RESET': {\r\n return defaultState;\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n }\r\n return state;\r\n};\r\n\r\nexport default contactReducer;\r\n","export const defaultState = {\r\n images: []\r\n};\r\n\r\nconst imagesReducer = (state, action) => {\r\n if (action) {\r\n switch (action.type) {\r\n case 'SET_IMAGES': {\r\n return {\r\n ...state,\r\n images: action.payload\r\n };\r\n }\r\n case 'RESET': {\r\n return defaultState;\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n }\r\n return state;\r\n};\r\n\r\nexport default imagesReducer;\r\n","import { useState, useEffect } from 'react';\r\n\r\nfunction getWindowDimensions() {\r\n const { innerWidth: width, innerHeight: height } = window;\r\n return {\r\n width,\r\n height\r\n };\r\n}\r\n\r\nexport default function useWindowDimensions() {\r\n const [windowDimensions, setWindowDimensions] = useState(\r\n getWindowDimensions()\r\n );\r\n\r\n useEffect(() => {\r\n function handleResize() {\r\n setWindowDimensions(getWindowDimensions());\r\n }\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return windowDimensions;\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport logo from '../../images/vw-default--icon-dark.png';\r\nimport './Header.scss';\r\n\r\nexport default function HeaderComponent({\r\n name,\r\n logoUrl,\r\n tagline,\r\n primaryColorHex,\r\n accentColorHex,\r\n primaryFontColorHex,\r\n accentFontColorHex\r\n}) {\r\n return (\r\n <>\r\n \r\n \r\n \"\"\r\n   {name}\r\n \r\n \r\n \r\n {tagline}\r\n \r\n \r\n );\r\n}\r\n\r\nHeaderComponent.defaultProps = {\r\n name: '',\r\n logoUrl: '',\r\n tagline: ''\r\n};\r\n\r\nHeaderComponent.propTypes = {\r\n name: PropTypes.string,\r\n logoUrl: PropTypes.string,\r\n tagline: PropTypes.string,\r\n primaryColorHex: PropTypes.string.isRequired,\r\n primaryFontColorHex: PropTypes.string.isRequired,\r\n accentColorHex: PropTypes.string.isRequired,\r\n accentFontColorHex: PropTypes.string.isRequired\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport function Layout(props) {\r\n return (\r\n <>\r\n
{props.children}
\r\n \r\n );\r\n}\r\n\r\nLayout.propTypes = {\r\n // eslint-disable-next-line\r\n children: PropTypes.any\r\n};\r\n","import { useEffect, useRef } from 'react';\r\n\r\nexport default function usePrevious(value) {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current;\r\n}\r\n","export default {\r\n checkmark: 'M864 128l-480 480-224-224-160 160 384 384 640-640z',\r\n chevronRight:\r\n 'M632.571 501.143l-424 424c-14.286 14.286-37.143 14.286-51.429 0l-94.857-94.857c-14.286-14.286-14.286-37.143 0-51.429l303.429-303.429-303.429-303.429c-14.286-14.286-14.286-37.143 0-51.429l94.857-94.857c14.286-14.286 37.143-14.286 51.429 0l424 424c14.286 14.286 14.286 37.143 0 51.429z',\r\n chevronLeft:\r\n 'M669.143 172l-303.429 303.429 303.429 303.429c14.286 14.286 14.286 37.143 0 51.429l-94.857 94.857c-14.286 14.286-37.143 14.286-51.429 0l-424-424c-14.286-14.286-14.286-37.143 0-51.429l424-424c14.286-14.286 37.143-14.286 51.429 0l94.857 94.857c14.286 14.286 14.286 37.143 0 51.429z',\r\n chevronDown:\r\n 'M961.714 461.714l-424 423.429c-14.286 14.286-37.143 14.286-51.429 0l-424-423.429c-14.286-14.286-14.286-37.714 0-52l94.857-94.286c14.286-14.286 37.143-14.286 51.429 0l303.429 303.429 303.429-303.429c14.286-14.286 37.143-14.286 51.429 0l94.857 94.286c14.286 14.286 14.286 37.714 0 52z',\r\n chevronUp:\r\n 'M961.714 760.571l-94.857 94.286c-14.286 14.286-37.143 14.286-51.429 0l-303.429-303.429-303.429 303.429c-14.286 14.286-37.143 14.286-51.429 0l-94.857-94.286c-14.286-14.286-14.286-37.714 0-52l424-423.429c14.286-14.286 37.143-14.286 51.429 0l424 423.429c14.286 14.286 14.286 37.714 0 52z',\r\n closeThin:\r\n 'M588.325 512l317.733-317.696c10.935-10.971 10.935-28.818 0-39.79-11.008-10.971-28.855-10.971-39.79 0l-317.733 317.696-317.696-317.696c-10.971-10.971-28.818-10.971-39.79 0s-10.971 28.818 0 39.79l317.696 317.696-317.696 317.733c-10.971 10.935-10.971 28.782 0 39.79 5.522 5.486 12.69 8.192 19.895 8.192s14.409-2.743 19.931-8.192l317.696-317.733 317.696 317.733c5.522 5.486 12.727 8.192 19.931 8.192 7.168 0 14.409-2.743 19.931-8.192 10.935-11.008 10.935-28.855 0-39.79l-317.806-317.733z',\r\n arrowLeft:\r\n 'M402.746 877.254l-320-320c-24.994-24.992-24.994-65.516 0-90.51l320-320c24.994-24.992 65.516-24.992 90.51 0 24.994 24.994 24.994 65.516 0 90.51l-210.746 210.746h613.49c35.346 0 64 28.654 64 64s-28.654 64-64 64h-613.49l210.746 210.746c12.496 12.496 18.744 28.876 18.744 45.254s-6.248 32.758-18.744 45.254c-24.994 24.994-65.516 24.994-90.51 0z',\r\n arrowRight:\r\n 'M621.254 877.254l320-320c24.994-24.992 24.994-65.516 0-90.51l-320-320c-24.994-24.992-65.516-24.992-90.51 0-24.994 24.994-24.994 65.516 0 90.51l210.746 210.746h-613.49c-35.346 0-64 28.654-64 64s28.654 64 64 64h613.49l-210.746 210.746c-12.496 12.496-18.744 28.876-18.744 45.254s6.248 32.758 18.744 45.254c24.994 24.994 65.516 24.994 90.51 0z',\r\n paperplane:\r\n 'M1009.376 5.12c-5.312-3.424-11.36-5.12-17.376-5.12-6.176 0-12.384 1.76-17.76 5.376l-960 640c-9.888 6.56-15.328 18.112-14.048 29.952 1.216 11.808 8.896 22.016 19.936 26.368l250.368 100.192 117.728 206.016c5.632 9.888 16.096 16 27.424 16.128 0.128 0 0.224 0 0.352 0 11.232 0 21.664-5.952 27.424-15.552l66.464-110.816 310.24 124.064c3.808 1.536 7.808 2.272 11.872 2.272 5.44 0 10.816-1.376 15.68-4.128 8.448-4.736 14.24-13.056 15.872-22.624l160-960c2.080-12.576-3.488-25.184-14.176-32.128zM100.352 664.864l741.6-494.432-539.2 577.184c-2.848-1.696-5.376-3.936-8.512-5.184l-193.888-77.568zM326.048 770.112c-0.064-0.128-0.16-0.192-0.224-0.32l606.176-648.8-516.768 805.184-89.184-156.064zM806.944 947.488l-273.312-109.312c-6.496-2.56-13.248-3.424-19.936-3.808l420.864-652.416-127.616 765.536z',\r\n exclamationCircle:\r\n 'M438.857 73.143c242.286 0 438.857 196.571 438.857 438.857s-196.571 438.857-438.857 438.857-438.857-196.571-438.857-438.857 196.571-438.857 438.857-438.857zM512 785.714v-108.571c0-10.286-8-18.857-17.714-18.857h-109.714c-10.286 0-18.857 8.571-18.857 18.857v108.571c0 10.286 8.571 18.857 18.857 18.857h109.714c9.714 0 17.714-8.571 17.714-18.857zM510.857 589.143l10.286-354.857c0-4-1.714-8-5.714-10.286-3.429-2.857-8.571-4.571-13.714-4.571h-125.714c-5.143 0-10.286 1.714-13.714 4.571-4 2.286-5.714 6.286-5.714 10.286l9.714 354.857c0 8 8.571 14.286 19.429 14.286h105.714c10.286 0 18.857-6.286 19.429-14.286z',\r\n infoCircle:\r\n 'M585.143 786.286v-91.429c0-10.286-8-18.286-18.286-18.286h-54.857v-292.571c0-10.286-8-18.286-18.286-18.286h-182.857c-10.286 0-18.286 8-18.286 18.286v91.429c0 10.286 8 18.286 18.286 18.286h54.857v182.857h-54.857c-10.286 0-18.286 8-18.286 18.286v91.429c0 10.286 8 18.286 18.286 18.286h256c10.286 0 18.286-8 18.286-18.286zM512 274.286v-91.429c0-10.286-8-18.286-18.286-18.286h-109.714c-10.286 0-18.286 8-18.286 18.286v91.429c0 10.286 8 18.286 18.286 18.286h109.714c10.286 0 18.286-8 18.286-18.286zM877.714 512c0 242.286-196.571 438.857-438.857 438.857s-438.857-196.571-438.857-438.857 196.571-438.857 438.857-438.857 438.857 196.571 438.857 438.857z',\r\n bullseye:\r\n 'M585.143 512c0 80.571-65.714 146.286-146.286 146.286s-146.286-65.714-146.286-146.286 65.714-146.286 146.286-146.286 146.286 65.714 146.286 146.286zM438.857 201.143c-171.429 0-310.857 139.429-310.857 310.857s139.429 310.857 310.857 310.857 310.857-139.429 310.857-310.857-139.429-310.857-310.857-310.857zM877.714 512c0 242.286-196.571 438.857-438.857 438.857s-438.857-196.571-438.857-438.857 196.571-438.857 438.857-438.857v0c242.286 0 438.857 196.571 438.857 438.857z'\r\n};\r\n","import PropTypes from 'prop-types';\r\n\r\nexport const ImagePropType = PropTypes.shape({\r\n url: PropTypes.string,\r\n file: PropTypes.shape({}) // TODO\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport icons from './icons';\r\n\r\nconst Icon = ({ color, size, icon }) => {\r\n const styles = {\r\n svg: {\r\n fill: 'currentColor',\r\n display: 'inline-block',\r\n verticalAlign: 'middle'\r\n },\r\n path: {\r\n fill: color\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nIcon.propTypes = {\r\n icon: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n color: PropTypes.string\r\n};\r\n\r\nIcon.defaultProps = {\r\n size: '16px',\r\n color: 'currentColor'\r\n};\r\n\r\nexport default Icon;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './ImagePreview.scss';\r\nimport usePrevious from '../usePrevious';\r\nimport { ImagePropType } from './PropTypes';\r\nimport Icon from '../Icons';\r\n\r\nexport default function ImagePreview({ images, onRemove, style }) {\r\n const prevImages = usePrevious(images);\r\n const [activeImg, setActiveImg] = React.useState(images ? images[0] : null);\r\n\r\n React.useEffect(() => {\r\n if (!activeImg && images.length) {\r\n setActiveImg(images[0]);\r\n } else if (prevImages !== images) {\r\n setActiveImg(images[images.length - 1]);\r\n }\r\n }, [activeImg, images, prevImages]);\r\n\r\n return (\r\n
\r\n {onRemove ? (\r\n {\r\n const currIdx = images.indexOf(activeImg);\r\n setActiveImg(images[currIdx - 1] || images[images.length - 1]);\r\n onRemove(currIdx);\r\n }}\r\n >\r\n \r\n \r\n ) : null}\r\n 1 ? '' : ' disabled'\r\n }`}\r\n onClick={() => {\r\n const current = images.find(i => i === activeImg);\r\n const currIdx = images.indexOf(current);\r\n const prev = images[currIdx - 1] || images[images.length - 1];\r\n if (prev) {\r\n setActiveImg(prev);\r\n }\r\n }}\r\n >\r\n \r\n \r\n
\r\n {(activeImg && activeImg.file.name.toUpperCase().indexOf('.PDF')>-1) ? \r\n :\r\n \"img\r\n }\r\n
\r\n \r\n {`${images.indexOf(activeImg) + 1} of ${images.length}`}\r\n \r\n 1 ? '' : ' disabled'\r\n }`}\r\n onClick={() => {\r\n const current = images.find(i => i === activeImg);\r\n const currIdx = images.indexOf(current);\r\n const next = images[currIdx + 1] || images[0];\r\n if (next) {\r\n setActiveImg(next);\r\n }\r\n }}\r\n >\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nImagePreview.defaultProps = {\r\n onRemove: null,\r\n style: null\r\n};\r\n\r\nImagePreview.propTypes = {\r\n onRemove: PropTypes.func,\r\n style: PropTypes.shape({}),\r\n images: PropTypes.arrayOf(ImagePropType).isRequired\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './Modal.scss';\r\n\r\nexport default function ModalComponent({\r\n bgColor,\r\n show,\r\n children,\r\n closeModal\r\n}) {\r\n const handleKeyDown = React.useCallback(\r\n e => {\r\n if (e.keyCode === 27) {\r\n closeModal();\r\n }\r\n },\r\n [closeModal]\r\n );\r\n React.useEffect(() => {\r\n window.addEventListener('keydown', handleKeyDown);\r\n return function cleanup() {\r\n window.removeEventListener('keydown', handleKeyDown);\r\n };\r\n }, [handleKeyDown]);\r\n return (\r\n
\r\n \r\n {children}\r\n
\r\n \r\n );\r\n}\r\n\r\nModalComponent.defaultProps = {\r\n show: false,\r\n children: null,\r\n bgColor: '#fff',\r\n closeModal: () => {}\r\n};\r\n\r\nModalComponent.propTypes = {\r\n show: PropTypes.bool,\r\n children: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n PropTypes.element\r\n ]),\r\n bgColor: PropTypes.string,\r\n closeModal: PropTypes.func\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ImagePropType } from './PropTypes';\r\nimport ModalComponent from '../Modal';\r\n\r\nfunction ImageUpload({ images, onChange, btnText, className, pdfAllowed, validFileExtensions }) {\r\n const fileInputRef = React.useRef();\r\n const [alertMsg, setAlertMsg] = React.useState();\r\n function getImgSrc(input) {\r\n return new Promise(resolve => {\r\n const imgs = [];\r\n let count = 0; \r\n const len = input.files.length;\r\n function handleOnload(e, file) { \r\n count += 1; \r\n const ext = file.name.substring(file.name.lastIndexOf('.') + 1).toUpperCase();\r\n if (validFileExtensions.toUpperCase().indexOf(ext) > -1) { \r\n if (ext == \"PDF\" && !pdfAllowed) {\r\n setAlertMsg(file.name + ' is not supported file type.');\r\n }\r\n else if (\r\n !imgs.find(i => e.target.result === i.url) &&\r\n !images.find(i => e.target.result === i.url)\r\n ) {\r\n imgs.push({ url: e.target.result, file });\r\n } \r\n }\r\n else { \r\n setAlertMsg(file.name + ' is not supported file type.'); \r\n }\r\n if (count === len) { \r\n resolve(imgs);\r\n fileInputRef.current.value = ''; \r\n }\r\n }\r\n if (input.files && len) {\r\n for (let i = 0; i < len; i += 1) {\r\n const reader = new window.FileReader();\r\n reader.onload = e => {\r\n handleOnload(e, input.files[i]);\r\n };\r\n reader.readAsDataURL(input.files[i]);\r\n }\r\n }\r\n });\r\n }\r\n function fileChange(e) {\r\n getImgSrc(e.currentTarget).then((imgs, files) => {\r\n onChange(imgs, files);\r\n });\r\n // fileInputRef.current.value = '';\r\n }\r\n return (\r\n <> \r\n {\r\n setAlertMsg(null);\r\n }}\r\n >\r\n \r\n {alertMsg}\r\n
\r\n {\r\n setAlertMsg(null);\r\n }}\r\n >\r\n OK\r\n \r\n
\r\n \r\n \r\n 4 ? 'not-allowed' : 'pointer',\r\n textAlign: 'center'\r\n }}\r\n className={`${className ? ` ${className} ` : ''}btn btn-primary btn-sm${\r\n images.length > 4 ? ' disabled' : ''\r\n }`}\r\n htmlFor=\"file-input\"\r\n >\r\n {btnText}\r\n 4}\r\n ref={fileInputRef}\r\n multiple\r\n id=\"file-input\"\r\n style={{\r\n opacity: 0,\r\n width: 0\r\n }}\r\n hidden\r\n type=\"file\"\r\n accept={pdfAllowed ? \"image/*,application/pdf\":\"image/*\"}\r\n onChange={fileChange}\r\n />\r\n \r\n \r\n );\r\n}\r\n\r\nImageUpload.defaultProps = {\r\n className: '',\r\n btnText: 'Get Image',\r\n images: []\r\n};\r\n\r\nImageUpload.propTypes = {\r\n className: PropTypes.string,\r\n images: PropTypes.arrayOf(ImagePropType),\r\n btnText: PropTypes.string,\r\n onChange: PropTypes.func.isRequired,\r\n pdfAllowed: PropTypes.bool,\r\n validFileExtensions: PropTypes.string\r\n};\r\n\r\nexport default ImageUpload;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport ImagePreview from './ImagePreview';\r\nimport ImageUpload from './ImageUpload';\r\nimport { ImagePropType } from './PropTypes';\r\nimport ModalComponent from '../Modal';\r\n\r\nfunction ImageComponent({ stepForward, state, dispatch, homeMessage, pdfAllowed, validFileExtensions }) {\r\n const [alertMsg, setAlertMsg] = React.useState();\r\n function handleChange(imgs) {\r\n if (imgs.length + state.images.length > 5) {\r\n setAlertMsg('Maximum of 5 ' + (pdfAllowed ? 'images/pdf':'images')+' can be uploaded.');\r\n return;\r\n }\r\n dispatch({ type: 'SET_IMAGES', payload: state.images.concat(imgs) });\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n

Found an issue?

\r\n

\r\n You can start by uploading an image {pdfAllowed ? \" or a pdf\" : \"\"} file. (Max 5\r\n {pdfAllowed ? \" images/pdf\":\" images\"})\r\n

\r\n
\r\n {\r\n setAlertMsg(null);\r\n }}\r\n >\r\n \r\n {alertMsg}\r\n
\r\n {\r\n setAlertMsg(null);\r\n }}\r\n >\r\n OK\r\n \r\n
\r\n \r\n \r\n {!state.images.length ? (\r\n
\r\n \r\n {homeMessage ?

{homeMessage}

: null}\r\n
\r\n ) : null}\r\n {state.images && state.images.length ? (\r\n <>\r\n {\r\n state.images.splice(idx, 1);\r\n dispatch({ type: 'SET_IMAGES', payload: state.images });\r\n }}\r\n />\r\n {state.images.length ? (\r\n
\r\n \r\n \r\n Done\r\n \r\n
\r\n ) : null}\r\n \r\n ) : null}\r\n \r\n );\r\n}\r\n\r\nImageComponent.defaultProps = {\r\n homeMessage: '',\r\n pdfAllowed:false\r\n};\r\n\r\nImageComponent.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n state: PropTypes.shape({\r\n images: PropTypes.arrayOf(ImagePropType)\r\n }).isRequired,\r\n stepForward: PropTypes.func.isRequired,\r\n homeMessage: PropTypes.string,\r\n pdfAllowed: PropTypes.bool,\r\n validFileExtensions: PropTypes.string\r\n};\r\n\r\nexport default ImageComponent;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useHistory } from 'react-router-dom';\r\nimport './StepComponent.scss';\r\nimport Icon from '../Icons';\r\nimport useWindowDimensions from '../useWindowDimensions';\r\nimport usePrevious from '../usePrevious';\r\n\r\nconst steps = [\r\n {\r\n index: 0,\r\n label: 'Files',\r\n route: '/'\r\n },\r\n {\r\n index: 1,\r\n label: 'Issue',\r\n route: '/issue'\r\n },\r\n {\r\n index: 2,\r\n label: 'Contact',\r\n route: '/contact'\r\n },\r\n {\r\n index: 3,\r\n label: 'Review',\r\n route: '/review'\r\n }\r\n];\r\n\r\nexport default function StepComponent({\r\n imagesComplete,\r\n imageRequired,\r\n pdfAllowed,\r\n issueComplete,\r\n contactComplete,\r\n visible,\r\n step,\r\n dispatch,\r\n onSubmit\r\n}) {\r\n const history = useHistory();\r\n const [activeStep, setActiveStep] = useState(steps[0]);\r\n const [stepLinks, setStepLinks] = useState({\r\n next: steps[1],\r\n prev: steps[steps.length - 1]\r\n });\r\n const prevStep = usePrevious(step);\r\n // keeping track of active step in state to allow\r\n // triggering step updates from outside of the step component\r\n React.useEffect(() => {\r\n if (step && step !== prevStep) {\r\n const next = steps.find(s => s.index === step.index);\r\n if (next) {\r\n setActiveStep(next);\r\n }\r\n }\r\n }, [activeStep.index, prevStep, step]);\r\n function canProgress() {\r\n switch (activeStep.index) {\r\n case 0: {\r\n if (imagesComplete || !imageRequired) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n case 1: {\r\n if (issueComplete) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n case 2: {\r\n if (contactComplete) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n case 3: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n }\r\n const { width } = useWindowDimensions();\r\n React.useEffect(() => {\r\n const next = steps.find(s => s.index === activeStep.index + 1);\r\n const prev = steps.find(s => s.index === activeStep.index - 1);\r\n setStepLinks({\r\n next,\r\n prev\r\n });\r\n }, [activeStep]);\r\n\r\n function stepForward() {\r\n const next = activeStep.index + 1;\r\n if (next > steps.length - 1) {\r\n // SUBMIT!\r\n onSubmit();\r\n return;\r\n // next = steps.length - 1;\r\n }\r\n setActiveStep(steps[next]);\r\n history.push(steps[next].route);\r\n dispatch({ type: 'SET_ACTIVE_STEP', payload: steps[next] });\r\n }\r\n function stepBack() {\r\n let next = activeStep.index - 1;\r\n if (next < 0) {\r\n next = 0;\r\n }\r\n setActiveStep(steps[next]);\r\n history.push(steps[next].route);\r\n dispatch({ type: 'SET_ACTIVE_STEP', payload: steps[next] });\r\n }\r\n function getNextButtonContent() {\r\n if (step && step.index === 3) {\r\n return width < 992 ? : 'Send';\r\n }\r\n return width < 992 ? : 'Next';\r\n }\r\n return (\r\n <>\r\n \r\n \r\n \r\n {width < 992 ? : 'Back'}\r\n \r\n \r\n
    \r\n {steps.map(s => {\r\n let isComplete;\r\n const isActive = s.index === activeStep.index;\r\n switch (s.index) {\r\n case 0: {\r\n if (imagesComplete || !imageRequired) {\r\n isComplete = true;\r\n }\r\n break;\r\n }\r\n case 1: {\r\n if (issueComplete) {\r\n isComplete = true;\r\n }\r\n break;\r\n }\r\n case 2: {\r\n if (contactComplete) {\r\n isComplete = true;\r\n }\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n return (\r\n \r\n \r\n {isComplete ? : null}\r\n \r\n {s.label}\r\n \r\n );\r\n })}\r\n
\r\n \r\n \r\n {getNextButtonContent()}\r\n \r\n \r\n \r\n {step && step.index === 3 ? (\r\n
\r\n This site is protected by reCAPTCHA and the Google{' '}\r\n Privacy Policy and{' '}\r\n Terms of Service{' '}\r\n apply.\r\n
\r\n ) : null}\r\n \r\n );\r\n}\r\n\r\nStepComponent.defaultProps = {\r\n visible: true,\r\n imagesComplete: false,\r\n imageRequired: false,\r\n pdfAllowed: false,\r\n issueComplete: false,\r\n contactComplete: false,\r\n step: null\r\n};\r\n\r\nStepComponent.propTypes = {\r\n visible: PropTypes.bool,\r\n imagesComplete: PropTypes.bool,\r\n imageRequired: PropTypes.bool,\r\n pdfAllowed: PropTypes.bool,\r\n issueComplete: PropTypes.bool,\r\n contactComplete: PropTypes.bool,\r\n step: PropTypes.shape({ index: PropTypes.number }),\r\n dispatch: PropTypes.func.isRequired,\r\n onSubmit: PropTypes.func.isRequired\r\n};\r\n","import config from './config';\r\n\r\nlet activeSuggest;\r\nlet activeGeocode;\r\nlet activeReverseGeocode;\r\nlet activeValidateLocation;\r\n\r\nexport async function fetchData(url) {\r\n const response = await window.fetch(url);\r\n const data = await response.json();\r\n return data;\r\n}\r\n\r\nexport async function getSettings() {\r\n const response = await window.fetch('api/settings');\r\n const data = await response.json();\r\n return data;\r\n}\r\n\r\nexport async function suggestAddress({ location, text }) {\r\n if (activeSuggest) {\r\n activeSuggest.abort();\r\n }\r\n const abortController = new window.AbortController();\r\n activeSuggest = abortController;\r\n const response = await window.fetch(\r\n `//geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/suggest?category=${config.suggest.category}&countryCode=${config.geocode.countryCode}&location=${location[1]},${location[0]}&text=${text}&f=json`,\r\n {\r\n signal: abortController.signal\r\n }\r\n );\r\n const data = await response.json();\r\n activeSuggest = null;\r\n return data;\r\n}\r\n\r\nexport function abortSuggest() {\r\n if (activeSuggest) {\r\n activeSuggest.abort();\r\n activeSuggest = null;\r\n }\r\n}\r\n\r\nexport async function geocodeAddress(bbox, { address }) {\r\n if (activeGeocode) {\r\n activeGeocode.abort();\r\n }\r\n const abortController = new window.AbortController();\r\n activeGeocode = abortController;\r\n if (!address) {\r\n return { error: 'Address is required.' };\r\n }\r\n const response = await window.fetch(\r\n `//geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates?SingleLine=${address}&countryCode=${\r\n config.geocode.countryCode\r\n }${bbox ? `&searchExtent=${bbox.join()}` : ''}&f=json`,\r\n {\r\n signal: abortController.signal\r\n }\r\n );\r\n const data = await response.json();\r\n activeGeocode = null;\r\n return data;\r\n}\r\n\r\nexport function abortGeocode() {\r\n if (activeGeocode) {\r\n activeGeocode.abort();\r\n activeGeocode = null;\r\n }\r\n}\r\n\r\nexport async function reverseGeocode({ lat, lng }) {\r\n if (activeReverseGeocode) {\r\n activeReverseGeocode.abort();\r\n }\r\n const abortController = new window.AbortController();\r\n activeReverseGeocode = abortController;\r\n const response = await window.fetch(\r\n `//geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/reverseGeocode?location=${lng},${lat}&featureTypes=${config.reverseGeocode.featureTypes}&f=json`,\r\n {\r\n signal: abortController.signal\r\n }\r\n );\r\n activeReverseGeocode = null;\r\n const data = await response.json();\r\n return data;\r\n}\r\n\r\nexport function abortReverseGeocode() {\r\n if (activeReverseGeocode) {\r\n activeReverseGeocode.abort();\r\n activeReverseGeocode = null;\r\n }\r\n}\r\n\r\nexport async function validateLocation(url, data) {\r\n if (activeValidateLocation) {\r\n activeValidateLocation.abort();\r\n }\r\n const abortController = new window.AbortController();\r\n activeValidateLocation = abortController;\r\n const response = await window.fetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n signal: abortController.signal\r\n });\r\n const d = await response.json();\r\n activeValidateLocation = null;\r\n return d;\r\n}\r\n\r\nexport function abortValidateLocation() {\r\n if (activeValidateLocation) {\r\n activeValidateLocation.abort();\r\n activeValidateLocation = null;\r\n }\r\n}\r\n\r\nexport async function postImages(imgs) {\r\n\r\n\tif (!imgs || imgs.length < 1) return [];\r\n\r\n const formData = new window.FormData();\r\n imgs.forEach(img => {\r\n formData.append('files', img, img.name);\r\n });\r\n\r\n const response = await window.fetch('api/issues/images', {\r\n method: 'POST',\r\n body: formData\r\n });\r\n if (response.ok) {\r\n const data = await response.json();\r\n return data;\r\n }\r\n return false;\r\n}\r\n\r\nexport async function postFinalData(data) {\r\n const response = await window.fetch('api/issues/submit', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n const json = await response.json();\r\n return json;\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './style.css';\r\n\r\nexport default function Ring({ color, size, className, style }) {\r\n const circles = [...Array(4)].map((_, index) => (\r\n \r\n ));\r\n\r\n return (\r\n \r\n {circles}\r\n \r\n );\r\n}\r\n\r\nRing.propTypes = {\r\n /** hex color */\r\n color: PropTypes.string,\r\n /** size in pixel */\r\n size: PropTypes.number,\r\n /** class name */\r\n className: PropTypes.string,\r\n /** style object */\r\n style: PropTypes.shape({})\r\n};\r\n\r\nRing.defaultProps = {\r\n color: '#333',\r\n size: 50,\r\n className: '',\r\n style: {}\r\n};\r\n","export function zoomDisable() {\r\n const objHead = document.getElementsByTagName('head').item(0);\r\n objHead.querySelector('meta[name=viewport]').remove();\r\n const meta = document.createElement('meta');\r\n meta.name = 'viewport';\r\n meta.content =\r\n 'width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=0';\r\n objHead.appendChild(meta);\r\n}\r\n\r\nexport function zoomEnable() {\r\n setTimeout(() => {\r\n const objHead = document.getElementsByTagName('head').item(0);\r\n objHead.querySelector('meta[name=viewport]').remove();\r\n const meta = document.createElement('meta');\r\n meta.name = 'viewport';\r\n meta.content =\r\n 'width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=1';\r\n objHead.appendChild(meta);\r\n }, 500);\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport debounce from 'lodash.debounce';\r\nimport throttle from 'lodash.throttle';\r\nimport { useCombobox } from 'downshift';\r\nimport { suggestAddress } from '../../actions';\r\nimport LoadingRing from '../LoadingRing';\r\nimport Icon from '../Icons';\r\nimport { zoomDisable, zoomEnable } from '../../utils';\r\n\r\nexport default function AddressInput({\r\n onAddressComplete,\r\n geoCenter,\r\n address,\r\n ...others\r\n}) {\r\n const [suggestions, setSuggestions] = React.useState([]);\r\n const [isFetchingSuggestions, setIsFetchingSuggestions] = React.useState(0);\r\n\r\n const fetchSuggestions = async (text, center) => {\r\n setIsFetchingSuggestions(true);\r\n try {\r\n const { suggestions: s } = await suggestAddress({\r\n location: center,\r\n text\r\n });\r\n setSuggestions(s);\r\n setIsFetchingSuggestions(false);\r\n } catch (e) {\r\n // suggest api failed, ignore abort\r\n if (e.name !== 'AbortError') {\r\n setIsFetchingSuggestions(false);\r\n }\r\n }\r\n };\r\n const fetchSuggestionsDebounced = React.useRef(\r\n debounce(fetchSuggestions, 500)\r\n ).current;\r\n const fetchSuggestionsThrottled = React.useRef(\r\n throttle(fetchSuggestions, 500)\r\n ).current;\r\n\r\n const handleAddressChange = value => {\r\n if (value < 5) {\r\n fetchSuggestionsThrottled(value, geoCenter);\r\n } else {\r\n fetchSuggestionsDebounced(value, geoCenter);\r\n }\r\n };\r\n\r\n const {\r\n isOpen,\r\n getLabelProps,\r\n getMenuProps,\r\n getInputProps,\r\n getComboboxProps,\r\n getToggleButtonProps,\r\n highlightedIndex,\r\n getItemProps\r\n } = useCombobox({\r\n items: suggestions,\r\n initialInputValue: address,\r\n stateReducer: (state, { type, changes }) => {\r\n function isSuggested(val) {\r\n return suggestions.find(\r\n s => s.text.toLowerCase() === val.toLowerCase()\r\n );\r\n }\r\n switch (type) {\r\n case useCombobox.stateChangeTypes.InputBlur:\r\n if (changes.selectedItem) {\r\n if (changes.selectedItem.text !== changes.inputValue) {\r\n if (isSuggested(changes.inputValue)) {\r\n onAddressComplete(changes.inputValue);\r\n } else {\r\n onAddressComplete(null);\r\n }\r\n }\r\n } else if (address !== changes.inputValue) {\r\n if (isSuggested(changes.inputValue)) {\r\n onAddressComplete(changes.inputValue);\r\n } else {\r\n onAddressComplete(null);\r\n }\r\n }\r\n return changes;\r\n default:\r\n return changes;\r\n }\r\n },\r\n onSelectedItemChange: ({ selectedItem }) => {\r\n const text = selectedItem ? selectedItem.text : '';\r\n onAddressComplete(text);\r\n },\r\n itemToString: item => (item ? item.text : ''),\r\n onInputValueChange: ({ inputValue }) => {\r\n handleAddressChange(inputValue);\r\n }\r\n });\r\n return (\r\n
\r\n {/* downshift handles a11y */}\r\n {/* eslint-disable-next-line jsx-a11y/label-has-associated-control, jsx-a11y/label-has-for */}\r\n \r\n
\r\n {\r\n fetchSuggestionsDebounced.cancel();\r\n fetchSuggestionsThrottled.cancel();\r\n }\r\n })}\r\n />\r\n
\r\n \r\n {isOpen ? : }\r\n \r\n
\r\n
\r\n \r\n {isOpen && suggestions && isFetchingSuggestions ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n {isOpen &&\r\n suggestions.map((item, index) => (\r\n \r\n {item.text}\r\n \r\n ))}\r\n \r\n
\r\n );\r\n}\r\n\r\nAddressInput.defaultProps = {\r\n geoCenter: null,\r\n address: ''\r\n};\r\n\r\nAddressInput.propTypes = {\r\n onAddressComplete: PropTypes.func.isRequired,\r\n geoCenter: PropTypes.arrayOf(PropTypes.number),\r\n address: PropTypes.string\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Icon from '../Icons';\r\n\r\nexport default function MapToolbar({ getLocation, showInfo, infoActive }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nMapToolbar.defaultProps = {\r\n infoActive: false\r\n};\r\n\r\nMapToolbar.propTypes = {\r\n infoActive: PropTypes.bool,\r\n getLocation: PropTypes.func.isRequired,\r\n showInfo: PropTypes.func.isRequired\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport 'leaflet/dist/leaflet.css';\r\nimport L from 'leaflet';\r\nimport './Map.scss';\r\nimport iconUrl from './marker-icon.png';\r\nimport shadowUrl from './marker-shadow.png';\r\nimport Toolbar from './Toolbar';\r\nimport LoadingRing from '../LoadingRing';\r\n\r\nexport default function MapComponent({\r\n onComplete,\r\n onCancel,\r\n center,\r\n zoom,\r\n mapLocationError,\r\n showActions,\r\n showToolbar,\r\n disabled,\r\n disableScrollZoom,\r\n dragCenterIcon,\r\n offset,\r\n mapInstructions,\r\n showLoading\r\n}) {\r\n const map = React.useRef();\r\n const mapElRef = React.useRef();\r\n const [geolocationError, setGeolocationError] = React.useState();\r\n const [showMapInfo, setShowMapInfo] = React.useState(!!showToolbar);\r\n const [dragging, setDragging] = React.useState(false);\r\n // store initial value passed for center\r\n const [centerAt] = React.useState(center);\r\n\r\n function onLocationFound(e) {\r\n map.current.panTo(e.latlng);\r\n }\r\n\r\n function onLocationError(e) {\r\n setGeolocationError(e.message);\r\n }\r\n\r\n function disableMapInteractions() {\r\n if (map.current) {\r\n map.current.dragging.disable();\r\n map.current.touchZoom.disable();\r\n map.current.doubleClickZoom.disable();\r\n map.current.scrollWheelZoom.disable();\r\n map.current.boxZoom.disable();\r\n map.current.keyboard.disable();\r\n if (map.current.tap) {\r\n map.current.tap.disable();\r\n }\r\n mapElRef.current.style.cursor = 'default';\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n map.current = L.map(mapElRef.current);\r\n if (disabled) {\r\n disableMapInteractions();\r\n }\r\n if (disableScrollZoom) {\r\n map.current.scrollWheelZoom.disable();\r\n }\r\n function getOffsetCenter() {\r\n const marker = L.marker(L.latLng(centerAt), {\r\n icon: L.icon({\r\n iconUrl,\r\n shadowUrl\r\n })\r\n });\r\n marker.addTo(map.current);\r\n const { offsetHeight } = mapElRef.current;\r\n const offsetFactored = offsetHeight / 6;\r\n const offsetVal = offsetHeight / 2 - offsetFactored;\r\n const targetPoint = map.current\r\n .project(L.latLng(centerAt), zoom)\r\n .add([0, offsetVal]);\r\n const targetLatLng = map.current.unproject(targetPoint, zoom);\r\n return targetLatLng;\r\n }\r\n map.current.setView(centerAt, zoom);\r\n if (offset) {\r\n const offsetCenter = getOffsetCenter();\r\n map.current.panTo(offsetCenter);\r\n }\r\n map.current.on('locationfound', onLocationFound);\r\n map.current.on('locationerror', onLocationError);\r\n map.current.on('dragstart', () => {\r\n setDragging(true);\r\n });\r\n map.current.on('dragend', () => {\r\n setDragging(false);\r\n });\r\n const basemap = L.tileLayer(\r\n 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',\r\n {\r\n attribution:\r\n 'Tiles © Esri — Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'\r\n }\r\n );\r\n basemap.addTo(map.current);\r\n return function cleanup() {\r\n map.current.off('locationfound');\r\n map.current.off('locationerror');\r\n map.current.off('dragstart');\r\n map.current.off('dragend');\r\n map.current.remove();\r\n };\r\n }, [centerAt, disableScrollZoom, disabled, offset, showToolbar, zoom]);\r\n return (\r\n <>\r\n {showLoading ? (\r\n \r\n \r\n \r\n ) : null}\r\n
\r\n {mapLocationError ? (\r\n
{mapLocationError}
\r\n ) : null}\r\n {geolocationError ? (\r\n
\r\n {\r\n setGeolocationError(null);\r\n }}\r\n >\r\n ×\r\n \r\n {geolocationError}\r\n
\r\n ) : null}\r\n
\r\n {showMapInfo ? (\r\n
\r\n
\r\n
\r\n \r\n Instructions\r\n \r\n

{mapInstructions}

\r\n
\r\n
\r\n
\r\n ) : null}\r\n {dragCenterIcon ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n\r\n \r\n \r\n {showToolbar ? (\r\n {\r\n map.current.locate();\r\n }}\r\n showInfo={() => {\r\n setShowMapInfo(!showMapInfo);\r\n }}\r\n />\r\n ) : null}\r\n \r\n
\r\n
\r\n {showActions ? (\r\n
\r\n {\r\n const loc = map.current.getCenter();\r\n onComplete([\r\n Number(loc.lat.toFixed(6)),\r\n Number(loc.lng.toFixed(6))\r\n ]);\r\n }}\r\n >\r\n Done\r\n \r\n {\r\n onCancel();\r\n }}\r\n >\r\n Cancel\r\n \r\n
\r\n ) : null}\r\n \r\n );\r\n}\r\n\r\nMapComponent.defaultProps = {\r\n center: [37.94, -96.92],\r\n zoom: 15,\r\n mapLocationError: null,\r\n showActions: true,\r\n showToolbar: true,\r\n disabled: false,\r\n dragCenterIcon: false,\r\n disableScrollZoom: false,\r\n offset: null,\r\n onComplete: () => {},\r\n onCancel: () => {},\r\n mapInstructions: '',\r\n showLoading: false\r\n};\r\n\r\nMapComponent.propTypes = {\r\n onComplete: PropTypes.func,\r\n onCancel: PropTypes.func,\r\n center: PropTypes.arrayOf(PropTypes.number),\r\n zoom: PropTypes.number,\r\n mapLocationError: PropTypes.string,\r\n showActions: PropTypes.bool,\r\n showToolbar: PropTypes.bool,\r\n disabled: PropTypes.bool,\r\n dragCenterIcon: PropTypes.bool,\r\n offset: PropTypes.bool,\r\n disableScrollZoom: PropTypes.bool,\r\n mapInstructions: PropTypes.string,\r\n showLoading: PropTypes.bool\r\n};\r\n","import React from 'react';\r\nimport './index.scss';\r\nimport Icon from '../Icons';\r\n\r\nexport function SuccessStatus({ ...others }) {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\nexport function RequiredStatus({ ...others }) {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport function ErrorStatus({ ...others }) {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import PropTypes from 'prop-types';\r\n\r\nexport const issuePropType = PropTypes.shape({\r\n id: PropTypes.number,\r\n name: PropTypes.string\r\n});\r\n\r\nexport const categoryPropType = PropTypes.shape({\r\n name: PropTypes.string,\r\n issues: PropTypes.arrayOf(issuePropType)\r\n});\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { useHistory } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport './IssueComponent.scss';\r\nimport AddressInput from './AddressInput';\r\nimport MapComponent from '../Map';\r\nimport LoadingRing from '../LoadingRing';\r\nimport {\r\n SuccessStatus,\r\n RequiredStatus,\r\n ErrorStatus\r\n} from '../InputStatusIcons';\r\nimport {\r\n reverseGeocode,\r\n abortSuggest,\r\n abortGeocode,\r\n abortReverseGeocode,\r\n abortValidateLocation\r\n} from '../../actions';\r\nimport { zoomDisable, zoomEnable } from '../../utils';\r\nimport { issuePropType, categoryPropType } from './PropTypes';\r\nimport usePrevious from '../usePrevious';\r\n\r\nexport default function IssueComponent({\r\n state,\r\n dispatch,\r\n geoCenter,\r\n issueCategories,\r\n locationVerified,\r\n descriptionRequired,\r\n mapInstructions,\r\n reverseGeocodeNotFoundText,\r\n invalidLocationText,\r\n validateLocation,\r\n setLocationVerified,\r\n geocode,\r\n setIssueComplete\r\n}) {\r\n const prevLat = usePrevious(state.latitude);\r\n const prevLng = usePrevious(state.longitude);\r\n const history = useHistory();\r\n const [mapLocationError, setMapLocationError] = useState();\r\n const [mapLoading, setMapLoading] = useState();\r\n const [isMap, setIsMap] = useState();\r\n\r\n function getLocationLabelStatus() {\r\n if (!mapLocationError) {\r\n if (locationVerified) {\r\n return ;\r\n }\r\n return ;\r\n }\r\n return ;\r\n }\r\n\r\n function getDescriptionLabel() {\r\n if (descriptionRequired) {\r\n if (state.description) {\r\n return (\r\n
\r\n \r\n  Description\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n \r\n  Description\r\n
\r\n );\r\n }\r\n return  Description;\r\n }\r\n // validate if issue data complete\r\n useEffect(() => {\r\n function validateIssueData() {\r\n let isComplete = false;\r\n if (state.category && state.issue && locationVerified) {\r\n if (state.locType === 'address' && state.address) {\r\n isComplete = true;\r\n }\r\n if (state.locType === 'latLng' && state.latitude && state.longitude) {\r\n isComplete = true;\r\n }\r\n }\r\n if (descriptionRequired && !state.description) {\r\n isComplete = false;\r\n }\r\n setIssueComplete(isComplete);\r\n }\r\n validateIssueData();\r\n }, [\r\n descriptionRequired,\r\n locationVerified,\r\n setIssueComplete,\r\n state.address,\r\n state.category,\r\n state.description,\r\n state.issue,\r\n state.latitude,\r\n state.locType,\r\n state.longitude\r\n ]);\r\n\r\n const validateLatLng = React.useCallback(\r\n async latLng => {\r\n const { isCoverageDefined, isCovered } = await validateLocation({\r\n lat: latLng[0],\r\n lon: latLng[1]\r\n });\r\n return { isCoverageDefined, isCovered };\r\n },\r\n [validateLocation]\r\n );\r\n // after effects when lat/lng values change\r\n useEffect(() => {\r\n const changed = prevLat !== state.latitude || prevLng !== state.longitude;\r\n async function validate() {\r\n setMapLocationError(null);\r\n setMapLoading(true);\r\n try {\r\n const { isCovered } = await validateLatLng([\r\n state.latitude,\r\n state.longitude\r\n ]);\r\n if (isCovered) {\r\n setLocationVerified(true);\r\n // if change occurred within map component,\r\n // reverse geocode to get address to show in UI\r\n if (isMap) {\r\n const { address, error } = await reverseGeocode({\r\n lat: state.latitude,\r\n lng: state.longitude\r\n });\r\n dispatch({\r\n type: 'SET_ADDRESS',\r\n payload: error ? '' : address.LongLabel\r\n });\r\n history.push('/issue');\r\n } else {\r\n // TODO: move logic from onAddressComplete here?\r\n }\r\n } else {\r\n setLocationVerified(false);\r\n setMapLocationError(invalidLocationText);\r\n }\r\n setMapLoading(false);\r\n } catch (e) {\r\n // global directory lat/lng validation failed, ignore aborts\r\n if (e.name !== 'AbortError') {\r\n setMapLocationError(\r\n 'An error occurred verifying location is within the organization boundary.'\r\n );\r\n }\r\n }\r\n }\r\n if (changed) {\r\n if (state.latitude && state.longitude) {\r\n validate();\r\n } else {\r\n // it changed, but we don't have a lat/lng\r\n setLocationVerified(false);\r\n }\r\n }\r\n }, [\r\n dispatch,\r\n history,\r\n invalidLocationText,\r\n isMap,\r\n prevLat,\r\n prevLng,\r\n reverseGeocodeNotFoundText,\r\n setLocationVerified,\r\n state.latitude,\r\n state.longitude,\r\n validateLatLng\r\n ]);\r\n React.useEffect(\r\n () => () => {\r\n // cleanup any outstanding requests\r\n abortSuggest();\r\n abortGeocode();\r\n abortValidateLocation();\r\n abortReverseGeocode();\r\n },\r\n []\r\n );\r\n return (\r\n <>\r\n {\r\n setIsMap(true);\r\n if (!geoCenter && !state.latitude) {\r\n return ;\r\n }\r\n const center =\r\n state.latitude && state.longitude\r\n ? [state.latitude, state.longitude]\r\n : geoCenter;\r\n return (\r\n {\r\n history.push('/issue');\r\n }}\r\n onComplete={async latLng => {\r\n if (\r\n state.latitude === latLng[0] &&\r\n state.longitude === latLng[1] &&\r\n !mapLocationError\r\n ) {\r\n history.push('/issue');\r\n }\r\n dispatch({\r\n type: 'SET_LOC_TYPE',\r\n payload: 'latLng'\r\n });\r\n dispatch({\r\n type: 'SET_LATLNG',\r\n payload: {\r\n lat: latLng[0],\r\n lng: latLng[1]\r\n }\r\n });\r\n }}\r\n mapInstructions={mapInstructions}\r\n />\r\n );\r\n }}\r\n />\r\n {\r\n setIsMap(false);\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n Issue Location\r\n {getLocationLabelStatus()}\r\n {mapLoading ? : null}\r\n
\r\n {\r\n history.push('/issue/map');\r\n }}\r\n >\r\n Click/Tap on Map\r\n \r\n {\r\n dispatch({\r\n type: 'SET_LOC_TYPE',\r\n payload: 'address'\r\n });\r\n if (address && address === state.address) {\r\n return;\r\n }\r\n dispatch({\r\n type: 'SET_LATLNG',\r\n payload: null\r\n });\r\n dispatch({\r\n type: 'SET_ADDRESS',\r\n payload: address || ''\r\n });\r\n if (address === null) {\r\n setMapLocationError(\r\n 'Please select an address from the list or use the map.'\r\n );\r\n return;\r\n }\r\n setMapLoading(true);\r\n try {\r\n const { candidates, error } = await geocode({\r\n address\r\n });\r\n if (error || !candidates.length) {\r\n setMapLocationError(invalidLocationText);\r\n return;\r\n }\r\n setMapLoading(false);\r\n const { x: lng, y: lat } = candidates[0].location;\r\n dispatch({\r\n type: 'SET_LATLNG',\r\n payload: {\r\n lat,\r\n lng\r\n }\r\n });\r\n } catch (e) {\r\n // geocode failed, ignore abort\r\n if (e.name !== 'AbortError') {\r\n setMapLoading(false);\r\n }\r\n }\r\n }}\r\n />\r\n {mapLocationError ? (\r\n
\r\n {mapLocationError}\r\n
\r\n ) : null}\r\n {!state.address && state.latitude && state.longitude ? (\r\n
\r\n {reverseGeocodeNotFoundText}\r\n
\r\n ) : null}\r\n
\r\n
\r\n
\r\n Details\r\n {state.category && state.issue ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n {\r\n const cat = issueCategories.find(\r\n ic => ic.name === e.target.value\r\n );\r\n dispatch({\r\n type: 'SET_CATEGORY',\r\n payload: cat\r\n });\r\n dispatch({\r\n type: 'SET_ISSUE',\r\n payload: null\r\n });\r\n }}\r\n >\r\n \r\n {issueCategories &&\r\n issueCategories.map(ic => (\r\n \r\n ))}\r\n \r\n {\r\n const iss = state.category.issues.find(\r\n i => Number(i.id) === Number(e.target.value)\r\n );\r\n dispatch({\r\n type: 'SET_ISSUE',\r\n payload: iss\r\n });\r\n }}\r\n >\r\n \r\n {state.category &&\r\n state.category.issues.map(i => (\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\nIssueComponent.defaultProps = {\r\n issueCategories: null,\r\n geoCenter: null,\r\n state: {\r\n locType: null,\r\n address: '',\r\n latitude: null,\r\n longitude: null,\r\n category: null,\r\n issue: null,\r\n description: ''\r\n },\r\n locationVerified: null\r\n};\r\n\r\nIssueComponent.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n // onAddressComplete: PropTypes.func.isRequired,\r\n state: PropTypes.shape({\r\n locType: PropTypes.oneOf(['address', 'latLng']),\r\n address: PropTypes.string,\r\n latitude: PropTypes.number,\r\n longitude: PropTypes.number,\r\n category: categoryPropType,\r\n issue: issuePropType,\r\n description: PropTypes.string\r\n }),\r\n issueCategories: PropTypes.arrayOf(categoryPropType),\r\n geoCenter: PropTypes.arrayOf(PropTypes.number),\r\n locationVerified: PropTypes.bool,\r\n descriptionRequired: PropTypes.bool.isRequired,\r\n mapInstructions: PropTypes.string.isRequired,\r\n reverseGeocodeNotFoundText: PropTypes.string.isRequired,\r\n invalidLocationText: PropTypes.string.isRequired,\r\n validateLocation: PropTypes.func.isRequired,\r\n geocode: PropTypes.func.isRequired,\r\n setLocationVerified: PropTypes.func.isRequired,\r\n setIssueComplete: PropTypes.func.isRequired\r\n};\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { zoomDisable, zoomEnable } from '../../utils';\r\nimport {\r\n SuccessStatus,\r\n RequiredStatus,\r\n ErrorStatus\r\n} from '../InputStatusIcons';\r\n\r\nfunction validatePhone(str) {\r\n const phoneRegex = /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;\r\n\r\n if (phoneRegex.test(str)) {\r\n const formattedPhoneNumber = str.replace(phoneRegex, '($1) $2-$3');\r\n return formattedPhoneNumber;\r\n }\r\n return false;\r\n}\r\n\r\nexport default function ContactComponent({\r\n dispatch,\r\n state,\r\n nameRequired,\r\n emailRequired,\r\n phoneRequired,\r\n setContactComplete\r\n}) {\r\n const emailRef = React.useRef();\r\n const phoneRef = React.useRef();\r\n const [emailStatus, setEmailStatus] = useState({});\r\n const [phoneStatus, setPhoneStatus] = useState({});\r\n\r\n // validate contact data\r\n React.useEffect(() => {\r\n let isComplete = false;\r\n const isEmailValid = emailRef.current.checkValidity();\r\n const isPhoneValid = state.telephone\r\n ? validatePhone(state.telephone)\r\n : true;\r\n setEmailStatus({\r\n isValid: isEmailValid,\r\n validationMessage: emailRef.current.validationMessage\r\n });\r\n setPhoneStatus({\r\n isValid: isPhoneValid,\r\n validationMessage: isPhoneValid ? '' : 'Invalid telephone number'\r\n });\r\n if (!nameRequired && !emailRequired && !phoneRequired) {\r\n isComplete = true;\r\n }\r\n if (\r\n (nameRequired && !state.name) ||\r\n (emailRequired && !state.email) ||\r\n (phoneRequired && !state.telephone) ||\r\n !isEmailValid ||\r\n !isPhoneValid\r\n ) {\r\n isComplete = false;\r\n } else {\r\n isComplete = true;\r\n }\r\n setContactComplete(isComplete);\r\n }, [emailRequired, nameRequired, phoneRequired, setContactComplete, state]);\r\n function getStatus(type) {\r\n switch (type) {\r\n case 'name': {\r\n if (nameRequired) {\r\n return state.name ? : ;\r\n }\r\n return null;\r\n }\r\n case 'email': {\r\n if (state.email && !emailStatus.isValid) {\r\n return ;\r\n }\r\n if (emailRequired) {\r\n return state.email && emailStatus.isValid ? (\r\n \r\n ) : (\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n case 'telephone': {\r\n if (state.telephone && !phoneStatus.isValid) {\r\n return ;\r\n }\r\n if (phoneRequired) {\r\n return state.telephone ? : ;\r\n }\r\n return null;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n return false;\r\n }\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\n
\r\n
\r\n );\r\n}\r\n\r\nContactComponent.defaultProps = {\r\n state: null\r\n};\r\n\r\nContactComponent.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n setContactComplete: PropTypes.func.isRequired,\r\n state: PropTypes.shape({\r\n name: PropTypes.string,\r\n email: PropTypes.string,\r\n telephone: PropTypes.string\r\n }),\r\n nameRequired: PropTypes.bool.isRequired,\r\n emailRequired: PropTypes.bool.isRequired,\r\n phoneRequired: PropTypes.bool.isRequired\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport default function ErrorModalContent({ errorMessage, okClick }) {\r\n return (\r\n
\r\n {errorMessage}\r\n \r\n \r\n OK\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nErrorModalContent.propTypes = {\r\n okClick: PropTypes.func.isRequired,\r\n errorMessage: PropTypes.string.isRequired\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport default function AnonymousModalContent({\r\n message,\r\n onContinue,\r\n onCancel\r\n}) {\r\n return (\r\n
\r\n {message}\r\n \r\n \r\n Continue\r\n \r\n \r\n Cancel\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nAnonymousModalContent.propTypes = {\r\n onContinue: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n message: PropTypes.string.isRequired\r\n};\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useHistory } from 'react-router';\r\nimport './ReviewComponent.scss';\r\nimport ImagePreview from '../Images/ImagePreview';\r\nimport MapComponent from '../Map';\r\nimport useWindowDimensions from '../useWindowDimensions';\r\nimport { ImagePropType } from '../Images/PropTypes';\r\nimport { issuePropType, categoryPropType } from '../Issue/PropTypes';\r\nimport { postImages, postFinalData } from '../../actions';\r\nimport ErrorModalContent from './ErrorModalContent';\r\nimport AnonymousModalContent from './AnonymousModalContent';\r\nimport LoadingRing from '../LoadingRing';\r\nimport ModalComponent from '../Modal';\r\n\r\nexport default function ReviewComponent({\r\n imagesState,\r\n issueState,\r\n contactState,\r\n appState,\r\n geoCenter,\r\n dispatch,\r\n isSubmitting,\r\n pdfAllowed,\r\n notifyOfAnonymousText,\r\n onVerifyUser\r\n}) {\r\n const { width } = useWindowDimensions();\r\n const history = useHistory();\r\n const [errorMessage, setErrorMessage] = useState();\r\n const [anonVerified, setAnonVerified] = useState(\r\n contactState.email && contactState.telephone\r\n );\r\n const [isLoading, setIsLoading] = useState();\r\n function getCardStyle() {\r\n const sharedStyles = {\r\n position: 'absolute',\r\n zIndex: 1000,\r\n backgroundColor: '#fff',\r\n margin: 0,\r\n border: 'solid 1px'\r\n };\r\n if (width <= 992) {\r\n return Object.assign(sharedStyles, {\r\n bottom: '0.4rem',\r\n left: '0.4rem',\r\n right: '0.4rem',\r\n height: '60%'\r\n });\r\n }\r\n return Object.assign(sharedStyles, {\r\n width: '500px',\r\n height: '250px',\r\n left: 'calc(50% - 250px)',\r\n bottom: '1rem'\r\n });\r\n }\r\n function showModal() {\r\n return Boolean(\r\n (isSubmitting && !contactState.email && !contactState.telephone) ||\r\n errorMessage ||\r\n isLoading\r\n );\r\n }\r\n function showAnonymousModalContent() {\r\n return (\r\n isSubmitting &&\r\n !contactState.email &&\r\n !contactState.telephone &&\r\n !anonVerified\r\n );\r\n }\r\n const postData = React.useCallback(\r\n async data => {\r\n const images = data.images.map(i => i.file);\r\n const postImagesResponse = await postImages(images);\r\n if (postImagesResponse) {\r\n const finalData = {\r\n issueId: issueState.issue.id,\r\n location: issueState.address,\r\n latitude: issueState.latitude,\r\n longitude: issueState.longitude,\r\n description: issueState.description,\r\n contactName: contactState.name,\r\n contactEmail: contactState.email,\r\n contactPhone: contactState.telephone,\r\n documentIds: postImagesResponse !== -1 ? postImagesResponse : []\r\n };\r\n try {\r\n const finalPostResponse = await postFinalData(finalData);\r\n if (finalPostResponse.error) {\r\n // error\r\n setIsLoading(false);\r\n setErrorMessage(finalPostResponse.error);\r\n } else {\r\n // success\r\n dispatch({\r\n type: 'SET_SUBMIT_RESPONSE',\r\n payload: finalPostResponse\r\n });\r\n history.push('/submit');\r\n }\r\n } catch (e) {\r\n // failed making the fetch\r\n setIsLoading(false);\r\n setErrorMessage(\r\n 'Failed posting data - please try again or contact an administrator.'\r\n );\r\n }\r\n } else {\r\n setIsLoading(false);\r\n setErrorMessage(\r\n 'Failed posting images - please try again or contact an administrator.'\r\n );\r\n }\r\n },\r\n [\r\n contactState.email,\r\n contactState.name,\r\n contactState.telephone,\r\n dispatch,\r\n history,\r\n issueState.address,\r\n issueState.description,\r\n issueState.issue.id,\r\n issueState.latitude,\r\n issueState.locType,\r\n issueState.longitude\r\n ]\r\n );\r\n React.useEffect(() => {\r\n const data = Object.assign({}, imagesState, issueState, contactState);\r\n if (isSubmitting) {\r\n if (appState.userVerified && anonVerified) {\r\n setIsLoading(true);\r\n postData(data);\r\n dispatch({ type: 'SET_IS_SUBMITTING', payload: false });\r\n } else if (anonVerified && !appState.userVerified) {\r\n onVerifyUser();\r\n }\r\n }\r\n }, [\r\n anonVerified,\r\n appState.userVerified,\r\n contactState,\r\n dispatch,\r\n imagesState,\r\n isSubmitting,\r\n issueState,\r\n onVerifyUser,\r\n postData\r\n ]);\r\n return (\r\n <>\r\n
\r\n

Review & Send

\r\n
\r\n \r\n {\r\n dispatch({ type: 'SET_IS_SUBMITTING', payload: false });\r\n }}\r\n >\r\n
\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n {errorMessage ? (\r\n {\r\n setErrorMessage(null);\r\n dispatch({ type: 'SET_IS_SUBMITTING', payload: false });\r\n }}\r\n />\r\n ) : null}\r\n {showAnonymousModalContent() ? (\r\n {\r\n setAnonVerified(true);\r\n }}\r\n onCancel={() => {\r\n dispatch({ type: 'SET_IS_SUBMITTING', payload: false });\r\n }}\r\n />\r\n ) : null}\r\n
\r\n \r\n {geoCenter ? (\r\n \r\n ) : null}\r\n
\r\n \r\n
0 ? 'block' : 'none'}` }}>\r\n \r\n
\r\n
\r\n
\r\n {contactState.name || No name provided}\r\n
\r\n
{contactState.email || No email provided}
\r\n
\r\n {contactState.telephone || No telephone provided}\r\n
\r\n
\r\n
\r\n \r\n
\r\n

0 ? 'none' : 'block'}` }}>{pdfAllowed ? \"No images/pdf provided\" : \"No images provided\"}

\r\n

{issueState.address || No address provided}

\r\n

\r\n \r\n {issueState.category && issueState.category.name}\r\n \r\n \r\n {issueState.issue && issueState.issue.name}\r\n \r\n

\r\n

\r\n \r\n {issueState.description || No description provided}\r\n \r\n

\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nReviewComponent.defaultProps = {\r\n geoCenter: null,\r\n isSubmitting: false,\r\n pdfAllowed: false,\r\n};\r\n\r\nReviewComponent.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n onVerifyUser: PropTypes.func.isRequired,\r\n appState: PropTypes.shape({\r\n userVerified: PropTypes.oneOfType([PropTypes.bool, PropTypes.string])\r\n }).isRequired,\r\n imagesState: PropTypes.shape({\r\n images: PropTypes.arrayOf(ImagePropType).isRequired\r\n }).isRequired,\r\n contactState: PropTypes.shape({\r\n name: PropTypes.string,\r\n email: PropTypes.string,\r\n telephone: PropTypes.string\r\n }).isRequired,\r\n issueState: PropTypes.shape({\r\n category: categoryPropType,\r\n issue: issuePropType,\r\n description: PropTypes.string,\r\n address: PropTypes.string,\r\n locType: PropTypes.string,\r\n latitude: PropTypes.number,\r\n longitude: PropTypes.number\r\n }).isRequired,\r\n geoCenter: PropTypes.arrayOf(PropTypes.number),\r\n isSubmitting: PropTypes.bool,\r\n pdfAllowed: PropTypes.bool,\r\n notifyOfAnonymousText: PropTypes.string.isRequired\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useHistory } from 'react-router';\r\nimport Icon from '../Icons';\r\n\r\nexport default function SubmitComponent({\r\n successMessage,\r\n submitResponse,\r\n onReset\r\n}) {\r\n const history = useHistory();\r\n React.useEffect(\r\n () => () => {\r\n onReset();\r\n },\r\n [onReset]\r\n );\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n

Your issue submission was successful.

\r\n
\r\n

The service request number is:

\r\n

{submitResponse.id}

\r\n {successMessage ?

{successMessage}

: null}\r\n
\r\n {\r\n history.push('/');\r\n }}\r\n >\r\n Close\r\n \r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nSubmitComponent.defaultProps = {\r\n successMessage: ''\r\n};\r\n\r\nSubmitComponent.propTypes = {\r\n successMessage: PropTypes.string,\r\n onReset: PropTypes.func.isRequired,\r\n submitResponse: PropTypes.shape({\r\n id: PropTypes.string\r\n }).isRequired\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport default function GRecaptcha({ dispatch, siteKey, grecaptchaRender }) {\r\n const recaptchaRef = React.useRef();\r\n React.useEffect(() => {\r\n if (!siteKey || !grecaptchaRender) {\r\n return;\r\n }\r\n const expireKey = 'expired-callback';\r\n const errorKey = 'error-callback';\r\n grecaptchaRender(recaptchaRef.current, {\r\n sitekey: siteKey,\r\n callback: e => {\r\n dispatch({\r\n type: 'SET_USER_VERIFIED',\r\n payload: e\r\n });\r\n },\r\n [expireKey]: () => {\r\n dispatch({\r\n type: 'SET_USER_VERIFIED',\r\n payload: false\r\n });\r\n },\r\n [errorKey]: () => {\r\n dispatch({\r\n type: 'SET_USER_VERIFIED',\r\n payload: false\r\n });\r\n }\r\n });\r\n }, [dispatch, grecaptchaRender, siteKey]);\r\n\r\n return (\r\n
\r\n );\r\n}\r\n\r\nGRecaptcha.defaultProps = {\r\n siteKey: null,\r\n grecaptchaRender: null\r\n};\r\n\r\nGRecaptcha.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n grecaptchaRender: PropTypes.func,\r\n siteKey: PropTypes.string\r\n};\r\n","// import 'bootstrap/dist/css/bootstrap.css';\r\nimport './custom_bootstrap';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\n// import registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement\r\n);\r\n\r\n// registerServiceWorker();\r\n","import React, { useState } from 'react';\r\nimport { Route, Redirect, Switch } from 'react-router';\r\nimport { useLocation } from 'react-router-dom';\r\nimport bboxPoly from '@turf/bbox-polygon';\r\nimport turfCenter from '@turf/center-of-mass';\r\nimport './App.scss';\r\nimport appReducer, {\r\n defaultState as defaultAppState\r\n} from './reducers/appReducer';\r\nimport issueReducer, {\r\n defaultState as defaultIssueState\r\n} from './reducers/issueReducer';\r\nimport contactReducer, {\r\n defaultState as defaultContactState\r\n} from './reducers/contactReducer';\r\nimport imagesReducer, {\r\n defaultState as defaultImagesState\r\n} from './reducers/imagesReducer';\r\nimport useWindowDimensions from './components/useWindowDimensions';\r\nimport Header from './components/Header';\r\nimport { Layout } from './components/Layout';\r\nimport ImageComponent from './components/Images/ImageComponent';\r\nimport StepComponent from './components/Steps/StepComponent';\r\nimport IssueComponent from './components/Issue/IssueComponent';\r\nimport ContactComponent from './components/Contact/ContactComponent';\r\nimport ReviewComponent from './components/Review/ReviewComponent';\r\nimport SubmitComponent from './components/Submit/SubmitComponent';\r\nimport GRecaptcha from './components/GRecaptcha';\r\nimport {\r\n getSettings,\r\n fetchData,\r\n validateLocation,\r\n geocodeAddress\r\n} from './actions';\r\n\r\nexport default function App() {\r\n const loc = useLocation();\r\n const { width } = useWindowDimensions();\r\n const [issueCategories, setIssueCategories] = useState();\r\n const [geoCenter, setGeoCenter] = useState();\r\n const [locationVerified, setLocationVerified] = useState(false);\r\n const [imagesComplete, setImagesComplete] = useState(false);\r\n const [issueComplete, setIssueComplete] = useState(false);\r\n const [contactComplete, setContactComplete] = useState(false);\r\n\r\n const [state, dispatch] = React.useReducer(appReducer, defaultAppState);\r\n const [imagesState, dispatchImagesState] = React.useReducer(\r\n imagesReducer,\r\n defaultImagesState\r\n );\r\n const [issueState, dispatchIssueState] = React.useReducer(\r\n issueReducer,\r\n defaultIssueState\r\n );\r\n const [contactState, dispatchContactState] = React.useReducer(\r\n contactReducer,\r\n defaultContactState\r\n );\r\n // wrap validate method with callback that updates with dynamic apiUrl\r\n const validateLoc = React.useCallback(\r\n data => validateLocation(state.settings.apiUrls.validateLocation, data),\r\n [state.settings.apiUrls.validateLocation]\r\n );\r\n const geocode = React.useCallback(\r\n data => geocodeAddress(state.settings.bbox, data),\r\n [state.settings.bbox]\r\n );\r\n const onReset = React.useCallback(() => {\r\n dispatch({ type: 'RESET' });\r\n dispatchImagesState({ type: 'RESET' });\r\n dispatchIssueState({ type: 'RESET' });\r\n dispatchContactState({ type: 'RESET' });\r\n setImagesComplete(false);\r\n setIssueComplete(false);\r\n setContactComplete(false);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n async function fetchSettings() {\r\n const settings = await getSettings();\r\n dispatch({\r\n type: 'SET_SETTINGS',\r\n payload: Object.assign(defaultAppState.settings, settings)\r\n });\r\n const aoiFromBbox = bboxPoly(settings.bbox);\r\n const centerPoint = turfCenter(aoiFromBbox);\r\n if (centerPoint && centerPoint.geometry) {\r\n setGeoCenter(centerPoint.geometry.coordinates.reverse());\r\n }\r\n const {\r\n title,\r\n newMessage,\r\n homeMessage,\r\n invalidLocation,\r\n mapInstructions,\r\n anonymous\r\n } = defaultAppState.options;\r\n const opts = await fetchData(settings.apiUrls.options);\r\n // use defaults if API sends falsey values\r\n opts.title = opts.title || title;\r\n opts.newMessage = opts.newMessage || newMessage;\r\n opts.homeMessage = opts.homeMessage || homeMessage;\r\n opts.invalidLocation = opts.invalidLocation || invalidLocation;\r\n opts.mapInstructions = opts.mapInstructions || mapInstructions;\r\n opts.anonymous = opts.anonymous || anonymous;\r\n // end default values block\r\n dispatch({\r\n type: 'SET_OPTIONS',\r\n payload: Object.assign(defaultAppState.options, opts)\r\n });\r\n setIssueCategories(opts.categories);\r\n }\r\n fetchSettings();\r\n }, []);\r\n\r\n const isMap = React.useCallback(() => loc.pathname === '/issue/map', [loc]);\r\n\r\n function updateActiveStep(idx) {\r\n if (!state.activeStep || state.activeStep.index !== idx) {\r\n dispatch({\r\n type: 'SET_ACTIVE_STEP',\r\n payload: { index: idx }\r\n });\r\n }\r\n }\r\n\r\n function showHeader() {\r\n if (isMap()) {\r\n if (width > 992) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n function showSteps() {\r\n if (isMap() || loc.pathname === '/submit') {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // validate image data\r\n React.useEffect(() => {\r\n const isComplete = !!imagesState.images.length;\r\n setImagesComplete(isComplete);\r\n }, [imagesState]);\r\n\r\n return (\r\n <>\r\n \r\n\r\n {showHeader() ? (\r\n \r\n ) : null}\r\n \r\n {state.options.title && showHeader() ? (\r\n

{state.options.title}

\r\n ) : null}\r\n {\r\n dispatch({ type: 'SET_IS_SUBMITTING', payload: true });\r\n }}\r\n />\r\n \r\n \r\n {\r\n // NOTE: hardcoded step index\r\n updateActiveStep(0);\r\n return (\r\n {\r\n dispatch({\r\n type: 'SET_ACTIVE_STEP',\r\n payload: { index: state.activeStep.index + 1 }\r\n });\r\n }}\r\n homeMessage={state.options.homeMessage}\r\n pdfAllowed={state.options.pdfAllowed}\r\n validFileExtensions={state.options.validFileExtensions}\r\n />\r\n );\r\n }}\r\n />\r\n {\r\n if (!imagesComplete && state.options.imageRequired) {\r\n return ;\r\n }\r\n // NOTE: hardcoded step index\r\n updateActiveStep(1);\r\n return (\r\n \r\n );\r\n }}\r\n />\r\n {\r\n if (!imagesComplete && state.options.imageRequired) {\r\n return ;\r\n }\r\n if (!issueComplete) {\r\n return ;\r\n }\r\n // NOTE: hardcoded step index\r\n updateActiveStep(2);\r\n return (\r\n \r\n );\r\n }}\r\n />\r\n {\r\n if (!imagesComplete && state.options.imageRequired) {\r\n return ;\r\n }\r\n if (!issueComplete) {\r\n return ;\r\n }\r\n if (!contactComplete) {\r\n return ;\r\n }\r\n // NOTE: hardcoded step index\r\n updateActiveStep(3);\r\n return (\r\n {\r\n window.grecaptcha.execute();\r\n }}\r\n appState={state}\r\n imagesState={imagesState}\r\n issueState={issueState}\r\n contactState={contactState}\r\n pdfAllowed={state.options.pdfAllowed}\r\n isSubmitting={state.isSubmitting}\r\n dispatch={dispatch}\r\n notifyOfAnonymousText={state.options.anonymous}\r\n geoCenter={\r\n issueState.latitude\r\n ? [issueState.latitude, issueState.longitude]\r\n : null\r\n }\r\n />\r\n );\r\n }}\r\n />\r\n {\r\n if (!imagesComplete && state.options.imageRequired) {\r\n return ;\r\n }\r\n updateActiveStep(0);\r\n return (\r\n \r\n );\r\n }}\r\n />\r\n {/* Catch all other routes and redirect home */}\r\n } />\r\n \r\n \r\n
\r\n \r\n );\r\n}\r\n"],"sourceRoot":""}