{"version":3,"sources":["components/OnlineStatusProvider.js","code/Utils.js","components/authorization/UserProvider.js","components/Notification.js","components/NotificationProvider.js","components/NotificationButton.js","components/NavMenu.js","components/Layout.js","components/Rating.js","components/ReportBug.js","components/authorization/Register.js","components/authorization/Logout.js","components/authorization/ForgotPassword.js","components/authorization/ResetPassword.js","components/Confirmation.js","sounds/medium-realpoot110.mp3","sounds/428156__higgs01__yay.wav","components/SoundProvider.js","components/ServiceWorkerProvider.js","symbols/poochievements/ribbon.png","components/Poochievement.js","symbols/poochievements/certified.png","symbols/poochievements/distinguished.png","symbols/poochievements/poofessional.png","symbols/poochievements/tenured.png","symbols/poochievements/heroic.png","components/PoochievementNotification.js","components/SetRating.js","symbols/mens svg 1inch.svg","symbols/womens svg 1inch.svg","symbols/allgender svg 1inch.svg","symbols/handicap svg 1inch.svg","components/Amenities.js","components/Comment.js","components/Reviews.js","components/Marker.js","symbols/blue dot 12x12.png","components/GooglePlaceSearchBox.js","components/FilterButton.js","components/ReportCrapper.js","components/DropPinMapComponent.js","components/AddCrapperForm.js","components/Map.js","components/authorization/ExternalSigninButton.js","components/authorization/AppleSigninButton.js","components/authorization/GoogleSigninButton.js","components/authorization/Login.js","symbols/poocoffee.png","components/LoadingGraphic.js","components/Home.js","components/Privacy.js","components/Profile.js","components/authorization/UserManager.js","components/Poochievements.js","components/authorization/GoogleResponse.js","components/authorization/AppleResponse.js","App.js","registerServiceWorker.js","index.js"],"names":["OnlineStatusContext","createContext","OnlineStatusProvider","children","useState","navigator","onLine","onlineStatus","setOnlineStatus","useEffect","window","addEventListener","removeEventListener","Provider","value","useOnlineStatus","useContext","Utils","IsLoggedInLight","_isLoggedIn","localStorage","getItem","IsLoggedIn","a","fetch","response","json","_isLoggedInModel","_username","_userid","_roles","isLoggedIn","username","userId","roles","SendDeviceInfo","info","fcmToken","deviceOS","deviceId","deviceInfo","fcmtoken","deviceos","deviceid","postOptions","method","headers","body","JSON","stringify","status","UserContext","UserProvider","user","setUser","isLoggingIn","setIsLoggingIn","updateUser","userDeets","checkLogin","userid","Notification","props","popupOpen","isOpen","okClick","notification","title","message","image","type","notificationId","imageUrl","Modal","zIndex","toggle","ModalHeader","className","ModalBody","style","display","justifyContent","src","width","captioned","url","maxWidth","ModalFooter","onClick","NotificationContext","NotificationProvider","setPopupOpen","notifications","setNotifications","setNotification","querystr","useLocation","search","history","useHistory","SubscribeToPush","UnSubscribeToPush","TasksAfterLoggedIn","CheckForNotifications","params","URLSearchParams","get","messageId","NaN","idNum","parseInt","handlePush","replace","document","handleIosPush","data","detail","Id","getNotification","notificationFromDb","OpenNotificationPopup","seen","notificationToMarkSeen","notificationsCopy","find","n","SetNotificationAsSeen","id","CloseNotificationPopup","length","notificationsList","i","push","NotificationButton","listOpen","setListOpen","hasNotifications","newCount","filter","position","verticalAlign","top","right","minWidth","Object","values","map","notificationViewModel","Bell","xmlns","height","fill","viewBox","d","NotificationItem","bgColor","setBgColor","onNotificationClick","backgroundColor","Date","timestamp","toLocaleDateString","NavMenu","collapsed","setCollapsed","userMenuCollapsed","setUserMenuCollapsed","isGuest","includes","isAdmin","closeNavbar","Navbar","Container","Button","marginRight","color","NavbarToggler","Row","Col","Collapse","navbar","Nav","NavItem","NavLink","tag","Link","to","textAlign","pathname","target","UserIcon","Layout","Rating","rating","canEdit","fontStyle","fontSize","remainder","Math","floor","content","onStarClick","Star","star","disabled","HalfStar","FullStar","EmptyStar","ReportBug","bugMessage","setBugMessage","SubmitBug","bugReportModel","BugReportMessage","alert","text","then","onSubmit","e","preventDefault","wrap","name","placeholder","onChange","Register","email","password","rememberme","formValues","setValues","apiresponse","errors","setErrors","handleInputChange","checked","validateUsername","validateEmail","validatePassword","RegisterUser","registerModel","err","parseJSON","marginTop","Logout","LogoutUser","ForgotPassword","setUsername","inProgress","setInProgress","completed","setCompleted","CreateResetToken","forgotPasswordModel","Username","ResetPassword","token","newPassword","setPassword","SetNewPassword","resetPasswordModel","NewPassword","Token","Confirmation","SoundContext","SoundProvider","fartAudioElement","useRef","Audio","fartFile","yayAudioElement","yayFile","fart","current","yay","useSound","ServiceWorkerContext","ServiceWorkerProvider","version","setVersion","messageChannel","MessageChannel","serviceWorker","controller","postMessage","port2","port1","onmessage","event","payload","Poochievement","description","Pooticipation","ribbon","CertifiedCrapper","DistinguishedCrapper","Poofessional","TenuredCrapper","HeroicCrapper","LegendaryCrapper","PooingSpree","PooingFrenzy","PooingRiot","PooingRampage","InterstateCrapper","InternationalCrapper","PoochievementNotificationContext","PoochievementNotification","pooChievements","setPoochievements","audioElement","CheckForNewPoochievements","onOpened","canvas","getElementById","confetti","resize","myConfetti","play","pooChievement","index","SetRating","crapper","ratingToEdit","defaultValues","Multistall","multistall","SeparateMens","separateMens","AllGender","allGender","HandicapAccessible","handicapAccessible","BabyChangingStation","babyChangeStation","Shower","shower","Fee","fee","Comments","comment","swVersion","confirmationOpen","setConfirmationOpen","saving","setSaving","toggleConfirmation","pooChievementsObject","handleSubmit","setRating","confirmationOkClicked","onRatingSubmit","success","postheaders","bath","RatingId","ratingId","Comment","viewModel","bathroom","didUserGetPoochievements","onDeleteRating","confirm","locationName","starNum","onCancel","Amenities","MensIcon","WomensIcon","HandicapIcon","AllGenderIcon","FeeIcon","ShowerIcon","BabyIcon","ratingNum","date","toDateString","showEditButton","setShowEditButton","onEditRatingClickFromComments","Reviews","bathId","bathroomId","ratings","setRatings","submitRatingVisible","setSubmitRatingVisible","setRatingToEdit","getRatings","onShowSubmitRatingClick","onEditRatingClick","ratingInfo","CrapperMarker","iconHtmlToUse","Crapper","gpslat","gpslong","bathType","bathroomType","typeName","renderToString","myIcon","DivIcon","html","iconSize","iconAnchor","popupAnchor","registerLink","loginLink","commentsVisible","setCommentsVisible","onShowCommentsClick","Marker","icon","Popup","fontWeight","onEditCrapperClicked","size","UserMarker","Icon","iconUrl","NewCrapperMarker","draggable","PooMarkerIcon","lineHeight","PooMarkerNoRatings","EditCrapperIcon","GooglePlaceSearchBox","autoCompleteRef","inputRef","options","fields","setupAutocomplete","google","maps","places","Autocomplete","addListener","getPlace","place","location","geometry","lat","lng","coords","placeSelected","script","createElement","async","defer","appendChild","onload","addGooglePlacesScript","focus","ref","FilterButton","MinRating","BabyChangeStation","filterVisible","setFilterVisible","filterValues","setFilterValues","onShowFilterClick","onApplyFilterClick","onApplyFilter","onClearFilter","role","ReportCrapper","crapperId","reportMessage","setReportMessage","SubmitReport","reportCrapperModel","CrapperId","ReportCrapperMessage","onReportSubmit","DropPinMapComponent","MapContainer","center","dragging","touchZoom","zoomControl","zoom","scrollWheelZoom","TileLayer","attribution","onLocationUpdated","DropPinMapController","pinCoords","setPinCoords","useMap","setView","AddCrapperForm","crapperAndRating","initialValues","BathroomId","LocationName","GPSLat","GPSLong","BathroomTypeId","bathroomTypeId","bathroomTypes","setTypes","showDeleteButton","setShowDeleteButton","reportCrapperVisible","setReportCrapperVisible","confirmationMessage","setConfirmationMessage","editingCrapperLocation","setEditingCrapperLocation","toggleClosed","getBathroomTypesList","DeleteButtonVisibility","isSameUser","hasRatingsFromOtherUsers","createdBy","ratingsResponse","some","r","intVal","isNaN","onDeleteCrapper","createCrapper","confirmText","Address","City","State","Zipcode","toggleOpenClosed","toggleOpen","onEditLocationClick","btype","Map","maxZoom","ZoomControl","maxNativeZoom","MapController","isOnline","initCoords","crappers","setCrappers","showSearchButton","setShowSearchButton","userCoords","setUserCoords","clusterKey","setClusterKey","updatingCrappers","setUpdatingCrappers","showZoomInMessage","setShowZoomInMessage","showNewCrapperMarker","setShowNewCrapperMarker","newCrapperCoords","setNewCrapperCoords","addCrapperOpen","setAddCrapperOpen","crapperBeingEdited","setCrapperBeingEdited","mapBounds","showNewCrapperMarkerRef","getCrappers","queryStr","latitude","String","longitude","_southWest","_northEast","substring","filteredCrappers","FilterCrappers","filtered","entries","val","fromEntries","onSearchClick","goToUserLocation","geolocation","getCurrentPosition","getMapBounds","currentMapBounds","getBounds","mapzoom","getZoom","toggleCloseAddCrapper","editingLocation","toggleShowNewCrapperMarker","toggleOpenAddCrapper","show","hasEventListeners","on","getCenter","marginLeft","maxClusterRadius","removeOutsideVisibleBounds","bottom","ExternalSigninButton","logo","border","borderRadius","padding","boxShadow","marginBottom","AppleSigninButton","GoogleSigninButton","Login","error","setError","ContinueAsGuest","GoogleLogin","assign","AppleLogin","LoginUser","loginModel","LoadingGraphic","poocoffee","opacity","Home","Privacy","href","Profile","getUser","EditUser","profileModel","onDeleteProfile","UserManager","setRole","setRoles","users","setUsers","CreateRole","roleModel","Name","GetRoles","GetUsers","_user","userName","numRatings","numCrappersCreated","_role","Poochievements","getPoochievements","GoogleResponse","signingIn","setSigningIn","googleLogin","AppleResponse","appleLogin","App","exact","path","component","isLocalhost","Boolean","hostname","match","registerValidSW","swUrl","register","registration","onupdatefound","installingWorker","installing","onstatechange","state","console","log","catch","baseUrl","getElementsByTagName","getAttribute","rootElement","ReactDOM","render","basename","URL","process","origin","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.29cdf0eb.chunk.js","sourcesContent":["import React, { useEffect, useState, createContext, useContext } from 'react';\r\n\r\nconst OnlineStatusContext = createContext(true);\r\n\r\nexport const OnlineStatusProvider = ({ children }) => {\r\n const [onlineStatus, setOnlineStatus] = useState(navigator.onLine);\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"offline\", () => {\r\n setOnlineStatus(false);\r\n });\r\n window.addEventListener(\"online\", () => {\r\n setOnlineStatus(true);\r\n });\r\n\r\n return () => {\r\n window.removeEventListener(\"offline\", () => {\r\n setOnlineStatus(false);\r\n });\r\n window.removeEventListener(\"online\", () => {\r\n setOnlineStatus(true);\r\n });\r\n };\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport const useOnlineStatus = () => {\r\n const store = useContext(OnlineStatusContext);\r\n return store;\r\n};","export default class Utils {\r\n static IsLoggedInLight = () => {\r\n var _isLoggedIn = localStorage.getItem('isLoggedIn');\r\n if (_isLoggedIn === null) {\r\n return false;\r\n }\r\n else {\r\n if (_isLoggedIn === 'true') {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n static IsLoggedIn = async () => {\r\n const response = await fetch('api/authenticate/isloggedin');\r\n const _isLoggedInModel = await response?.json();\r\n\r\n let _isLoggedIn = false;\r\n let _username = null;\r\n let _userid = '';\r\n let _roles = [];\r\n\r\n if (_isLoggedInModel != null) {\r\n\r\n //localStorage.setItem('username', _isLoggedInModel.username);\r\n //localStorage.setItem('isLoggedIn', _isLoggedInModel.isLoggedIn);\r\n _isLoggedIn = _isLoggedInModel.isLoggedIn;\r\n _username = _isLoggedInModel.username;\r\n _userid = _isLoggedInModel.userId;\r\n _roles = _isLoggedInModel.roles;\r\n }\r\n\r\n return {_isLoggedIn, _username, _userid, _roles};\r\n }\r\n\r\n static SendDeviceInfo = async (info) => {\r\n let fcmToken, deviceOS, deviceId;\r\n if (info == null) {\r\n fcmToken = localStorage.getItem('fcmToken');\r\n deviceOS = localStorage.getItem('OS');\r\n deviceId = localStorage.getItem('deviceid');\r\n }\r\n else {\r\n fcmToken = info.fcmToken;\r\n deviceOS = info.deviceOS;\r\n deviceId = info.deviceId;\r\n }\r\n\r\n const deviceInfo = {\r\n fcmtoken: fcmToken,\r\n deviceos: deviceOS,\r\n deviceid: deviceId\r\n };\r\n\r\n const postOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(deviceInfo)\r\n };\r\n\r\n const response = await fetch('api/device', postOptions);\r\n\r\n if (response.status == 200)\r\n return true;\r\n else\r\n return false;\r\n }\r\n}","import React, { useEffect, useState, createContext } from 'react';\r\nimport Utils from '../../code/Utils.js';\r\n\r\nexport const UserContext = createContext();\r\n\r\nexport const UserProvider = ({ children }) => {\r\n const [user, setUser] = useState(null);\r\n const [isLoggingIn, setIsLoggingIn] = useState(false);\r\n\r\n const updateUser = (userDeets) => {\r\n setUser(userDeets);\r\n }\r\n\r\n const checkLogin = async () => {\r\n setIsLoggingIn(true); //checking login\r\n\r\n let response = await Utils.IsLoggedIn();\r\n\r\n updateUser({ username: response._username, isLoggedIn: response._isLoggedIn, userid: response._userid, roles: response._roles });\r\n\r\n setIsLoggingIn(false);\r\n }\r\n\r\n useEffect(() => {\r\n if (user == null) {\r\n //alert('in user provider');\r\n checkLogin();\r\n //Utils.SendDeviceInfo();\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}","import React from 'react';\r\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\r\nimport { InstagramEmbed } from 'react-social-media-embed';\r\n\r\nexport const Notification = (props) => {\r\n const popupOpen = props.isOpen;\r\n const okClick = props.okClick;\r\n const notification = props.notification;\r\n\r\n let title = '';\r\n let message = '';\r\n let image = '';\r\n let id = 0;\r\n let type = 0;\r\n\r\n if (notification != null) {\r\n id = notification.notificationId;\r\n title = notification.title;\r\n message = notification.message;\r\n image = notification.imageUrl;\r\n type = notification.type;\r\n }\r\n\r\n return (\r\n \r\n \r\n {title}\r\n \r\n \r\n
\r\n {message}\r\n {type == 1 &&\r\n
\r\n \r\n
\r\n }\r\n {type == 2 &&\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}","import React, { useState, createContext, useEffect, useContext } from 'react';\r\nimport { Notification } from './Notification';\r\nimport { useLocation, useHistory } from \"react-router-dom\";\r\nimport { UserContext } from './authorization/UserProvider';\r\nimport Utils from '../code/Utils.js';\r\n\r\nexport const NotificationContext = createContext();\r\n\r\nexport const NotificationProvider = ({ children }) => {\r\n const [popupOpen, setPopupOpen] = useState(false);\r\n const [notifications, setNotifications] = useState([]);\r\n const [notification, setNotification] = useState(null);\r\n const { user } = useContext(UserContext);\r\n\r\n const querystr = useLocation().search;\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n //add the event handler that listens to the ios app push event\r\n SubscribeToPush();\r\n\r\n return () => {\r\n UnSubscribeToPush();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (user != null && user.isLoggedIn) {\r\n TasksAfterLoggedIn();\r\n }\r\n }, [user]);\r\n\r\n const TasksAfterLoggedIn = async () => {\r\n //check for new notifications this user should see\r\n await CheckForNotifications();\r\n\r\n //android app sets the query string with notification stuff. check it\r\n if (querystr !== \"\") {\r\n\r\n const params = new URLSearchParams(querystr);\r\n\r\n //if applicable send firebase info if we have received an fcm token\r\n let fcmToken = params.get(\"fcmtoken\");\r\n let deviceOS = params.get(\"deviceos\");\r\n let deviceId = params.get(\"deviceid\");\r\n if (fcmToken != null) {\r\n await Utils.SendDeviceInfo({ fcmToken, deviceOS, deviceId });\r\n }\r\n\r\n //check if a message has come in\r\n let messageId = params.get(\"messageid\");\r\n if (messageId != null) {\r\n let idNum = parseInt(messageId);\r\n if (idNum != NaN) {\r\n await handlePush(idNum);\r\n }\r\n }\r\n\r\n //remove the querystring\r\n history.replace({ search: '' });\r\n }\r\n }\r\n\r\n const SubscribeToPush = () => {\r\n //ios\r\n document.addEventListener('push-notification', handleIosPush, false);\r\n\r\n //android\r\n //document.addEventListener('push-notification', handleIosPush);\r\n }\r\n\r\n const UnSubscribeToPush = () => {\r\n //ios\r\n document.removeEventListener('push-notification', handleIosPush);\r\n\r\n //android\r\n //document.addEventListener('push-notification', handleIosPush);\r\n } \r\n\r\n const handleIosPush = async (data) => {\r\n if (data?.detail?.Id != null) {\r\n let idNum = parseInt(data.detail.Id);\r\n if (idNum != NaN) {\r\n await handlePush(idNum);\r\n }\r\n }\r\n }\r\n\r\n const handlePush = async (Id) => {\r\n let notificationFromDb = await getNotification(Id);\r\n if (notificationFromDb != null) {\r\n await OpenNotificationPopup(notificationFromDb);\r\n }\r\n }\r\n\r\n const getNotification = async (Id) => {\r\n const response = await fetch('api/notification/' + Id);\r\n\r\n if (response.status == 200) {\r\n const data = await response?.json();\r\n return data;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n const okClick = () => {\r\n CloseNotificationPopup();\r\n }\r\n\r\n const OpenNotificationPopup = async (notification) => {\r\n //set the state for the notification popup, then open\r\n setNotification(notification);\r\n setPopupOpen(true);\r\n\r\n //now update the server that this notification has now been seen\r\n if (notification != null && notification.notificationId > 0 && notification.seen == false) {\r\n //set as seen for the UI in order to trigger change of color\r\n let notificationsCopy = notifications;\r\n let notificationToMarkSeen = notificationsCopy.find(n => n.notificationId == notification.notificationId);\r\n if (notificationToMarkSeen?.seen != null) {\r\n notificationToMarkSeen.seen = true;\r\n setNotifications(notificationsCopy);\r\n };\r\n\r\n //set as seen in the db so that it wont show up next time\r\n await SetNotificationAsSeen(notification.notificationId);\r\n }\r\n }\r\n\r\n const SetNotificationAsSeen = async (id) => {\r\n\r\n const postOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: id\r\n };\r\n\r\n const response = await fetch('api/notification/userseen', postOptions);\r\n }\r\n\r\n const CloseNotificationPopup = async () => {\r\n setPopupOpen(false);\r\n setNotification(null);\r\n await CheckForNotifications();\r\n }\r\n\r\n const CheckForNotifications = async () => {\r\n \r\n const response = await fetch('api/notification/latest');\r\n\r\n if (response.status == 200) {\r\n const data = await response?.json();\r\n\r\n if (data != null && data.length > 0) {\r\n let notificationsList = [];\r\n for (let i = 0; i < data.length; i++) {\r\n //let thisNotification = { notification: data[i], seen: false };\r\n notificationsList.push(data[i]);\r\n }\r\n\r\n setNotifications(notificationsList);\r\n return true;\r\n }\r\n }\r\n\r\n setNotifications([]);\r\n return false;\r\n \r\n }\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n );\r\n}","import React, { useContext, useEffect, useState } from 'react';\r\nimport { NotificationContext } from './NotificationProvider';\r\n\r\nexport const NotificationButton = (props) => {\r\n const { notifications } = useContext(NotificationContext);\r\n const [listOpen, setListOpen] = useState(false);\r\n\r\n const hasNotifications = notifications != null && notifications.length > 0;\r\n\r\n const newCount = notifications?.filter(n => {\r\n if (n.seen == false) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }).length;\r\n\r\n const onClick = () => {\r\n setListOpen(!listOpen);\r\n }\r\n\r\n if (!hasNotifications)\r\n return null;\r\n else\r\n return (\r\n
\r\n \r\n \r\n {newCount > 0 &&\r\n {newCount} \r\n } \r\n \r\n {\r\n listOpen &&\r\n \r\n }\r\n
\r\n );\r\n}\r\n\r\nconst Bell = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst NotificationItem = (props) => {\r\n const notification = props.notification;\r\n const seen = notification?.seen ?? false;\r\n const [bgColor, setBgColor] = useState('');\r\n const { OpenNotificationPopup } = useContext(NotificationContext);\r\n\r\n useEffect(() => {\r\n if (seen) {\r\n setBgColor('white');\r\n } else {\r\n setBgColor('#cddae5');\r\n }\r\n }, []);\r\n\r\n const onNotificationClick = async () => {\r\n setBgColor('white');\r\n OpenNotificationPopup(notification);\r\n props.onClick();\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n
{notification.title}
\r\n {new Date(notification.timestamp).toLocaleDateString()}\r\n
\r\n \r\n {notification.message}\r\n \r\n
\r\n );\r\n}","import React, { Component, useState, useContext } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink, Button, UncontrolledDropdown, DropdownToggle, DropdownMenu, DropdownItem, Col, Row, Nav } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport './NavMenu.css';\r\nimport { UserContext } from './authorization/UserProvider';\r\nimport { NotificationButton } from './NotificationButton';\r\n\r\nexport const NavMenu = (props) => {\r\n const displayName = NavMenu.name;\r\n\r\n const { user } = useContext(UserContext);\r\n const isLoggedIn = user?.isLoggedIn ?? false;\r\n const [collapsed, setCollapsed] = useState(true);\r\n const [userMenuCollapsed, setUserMenuCollapsed] = useState(true);\r\n const isGuest = user != null && user.roles != null && user.roles.includes('Guest');\r\n const isAdmin = user != null && user.roles != null && user.roles.includes('Admin');\r\n\r\n const closeNavbar = () => {\r\n setCollapsed(true);\r\n setUserMenuCollapsed(true);\r\n }\r\n\r\n const toggleHamburgerMenu = () => {\r\n setCollapsed(!collapsed);\r\n }\r\n\r\n const toggleUserMenu = () => {\r\n setUserMenuCollapsed(!userMenuCollapsed);\r\n }\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\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst UserIcon = (props) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport const Layout = (props) => {\r\n const displayName = Layout.name;\r\n const children = props.children;\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n}\r\n","import React, { Component, useState } from 'react';\r\n\r\nexport const Rating = (props) => {\r\n const rating = props.rating;\r\n const canEdit = props.canEdit;\r\n\r\n if (rating == null || (rating == -1 && !canEdit)) {\r\n return (
No Ratings yet
);\r\n }\r\n\r\n const remainder = rating - Math.floor(rating);\r\n let content = [];\r\n\r\n for (let i = 1; i < 6; i++) {\r\n let type;\r\n if (rating >= i) {\r\n type = 'Full';\r\n } else if (rating < i && rating > i - 1 && remainder > 0.25 && remainder < 0.75) {\r\n type = 'Half';\r\n } else {\r\n type = 'Empty';\r\n }\r\n\r\n content.push( props.onStarClick(i)} />);\r\n }\r\n\r\n return (\r\n
\r\n {content}\r\n
\r\n );\r\n}\r\n\r\nconst Star = (props) => {\r\n const type = props.type;\r\n const canEdit = props.canEdit;\r\n\r\n let star;\r\n\r\n if (type == 'Full') {\r\n star = ;\r\n } else if (type == 'Half') {\r\n star = ;\r\n } else {\r\n star = ;\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst HalfStar = (props) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst FullStar = (props) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst EmptyStar = (props) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n}","import React, { Component, useState, useEffect, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Rating } from './Rating';\r\nimport { Button } from 'reactstrap';\r\nimport { UserContext } from './authorization/UserProvider';\r\n\r\nexport const ReportBug = (props) => {\r\n\r\n const [bugMessage, setBugMessage] = useState('');\r\n const { user } = useContext(UserContext);\r\n\r\n useEffect(() => {\r\n if (user == null || user.isLoggedIn == false) {\r\n props.history.push('/');\r\n return;\r\n }\r\n }, []);\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.value;\r\n\r\n setBugMessage(value);\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n SubmitBug();\r\n }\r\n\r\n const SubmitBug = async () => {\r\n var postheaders = { 'Content-Type': 'application/json' }\r\n\r\n var bugReportModel = { BugReportMessage: bugMessage };\r\n\r\n const postOptions = {\r\n method: 'POST',\r\n headers: postheaders,\r\n body: JSON.stringify(bugReportModel)\r\n };\r\n\r\n const response = await fetch('api/bugreport', postOptions);\r\n \r\n if (response.status == 200) {\r\n alert('Bug Report Submitted!');\r\n props.history.push('/');\r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n }\r\n \r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Report a Bug!

\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Cancel\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","import { parseJSON } from 'jquery';\r\nimport React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UserContext } from './UserProvider';\r\n\r\nexport const Register = (props) => {\r\n const [formValues, setValues] = useState({\r\n username: '',\r\n email: '',\r\n password: '',\r\n rememberme: true\r\n });\r\n\r\n const [errors, setErrors] = useState({\r\n username: '',\r\n email: '',\r\n password: '',\r\n apiresponse: ''\r\n });\r\n\r\n const { user, checkLogin } = useContext(UserContext);\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.type === 'checkbox' ? e.target.checked : e.target.value;\r\n\r\n setErrors({ ...errors, apiresponse: '' });\r\n\r\n if (e.target.name == 'username') {\r\n validateUsername(value);\r\n }\r\n if (e.target.name == 'email') {\r\n validateEmail(value);\r\n }\r\n if (e.target.name == 'password') {\r\n validatePassword(value);\r\n }\r\n\r\n setValues({ ...formValues, [e.target.name]: value });\r\n }\r\n\r\n const validateUsername = (value) => {\r\n if (value.length == 0) {\r\n setErrors({ ...errors, username: 'user name required!' });\r\n return false;\r\n }\r\n else {\r\n setErrors({ ...errors, username: '' });\r\n return true;\r\n }\r\n }\r\n\r\n const validateEmail = (value) => {\r\n if (value.length == 0) {\r\n setErrors({ ...errors, email: 'email required!' });\r\n return false;\r\n }\r\n else {\r\n setErrors({ ...errors, email: '' });\r\n return true;\r\n }\r\n }\r\n\r\n const validatePassword = (value) => {\r\n if (value.length < 6) {\r\n setErrors({ ...errors, password: 'needs to be 6 characters or more!' });\r\n return false;\r\n }\r\n else {\r\n setErrors({ ...errors, password: '' });\r\n return true;\r\n }\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n //first round validation\r\n let valid = validateUsername(formValues.username) &&\r\n validateEmail(formValues.email) &&\r\n validatePassword(formValues.password);\r\n\r\n if (valid)\r\n {\r\n //call to register\r\n RegisterUser();\r\n }\r\n }\r\n\r\n const RegisterUser = async () => {\r\n var registerModel = formValues;\r\n\r\n const postOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(registerModel)\r\n };\r\n\r\n const response = await fetch('api/authenticate/register', postOptions);\r\n\r\n if (response.status == 200) {\r\n\r\n //const userInfo = {\r\n // username: formValues.username,\r\n // isLoggedIn: true\r\n //};\r\n //updateUser(userInfo);\r\n //let isCookieThere = await Utils.IsLoggedIn();\r\n\r\n //localStorage.setItem('username', formValues.username);\r\n //localStorage.setItem('isLoggedIn', true);\r\n await checkLogin();\r\n\r\n props.history.push('/');\r\n }\r\n else {\r\n response.text().then(value => {\r\n //alert(parseJSON(value)?.message);\r\n let err = parseJSON(value)?.message;\r\n if (err == null) {\r\n err = 'Register Failed. Make sure of the following:'\r\n + '\\n-Username, Email address, password are required.'\r\n + '\\n-Username should only have alphanumeric characters and underscores.'\r\n + '\\n-Password should be at least 6 characters.';\r\n }\r\n setErrors({ ...errors, apiresponse: err });\r\n }\r\n );\r\n }\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Register

\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {errors.username}\r\n
\r\n
\r\n \r\n \r\n \r\n {errors.email}\r\n
\r\n
\r\n \r\n \r\n \r\n {errors.password}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Cancel\r\n
\r\n
\r\n
\r\n {errors.apiresponse}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","import React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UserContext } from './UserProvider';\r\n\r\nexport const Logout = (props) => {\r\n const { user, updateUser } = useContext(UserContext);\r\n\r\n useEffect(() => {\r\n LogoutUser();\r\n }, []);\r\n\r\n const LogoutUser = async () => {\r\n const postOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: {}\r\n };\r\n\r\n //localStorage.setItem('username', '');\r\n //localStorage.setItem('isLoggedIn', false);\r\n\r\n const response = await fetch('api/authenticate/logout', postOptions);\r\n\r\n if (response.status == 200) {\r\n updateUser(null);\r\n }\r\n else {\r\n alert('Logout Failed');\r\n }\r\n\r\n props.history.push('/');\r\n }\r\n return ('Logging Out...');\r\n}","import React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UserContext } from './UserProvider';\r\n\r\nexport const ForgotPassword = (props) => {\r\n const [username, setUsername] = useState('');\r\n const [inProgress, setInProgress] = useState(false);\r\n const [completed, setCompleted] = useState(false);\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.value;\r\n\r\n setUsername(value);\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n setInProgress(true);\r\n CreateResetToken();\r\n\r\n }\r\n\r\n const CreateResetToken = async () => {\r\n var forgotPasswordModel = { Username: username };\r\n\r\n const postOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(forgotPasswordModel)\r\n };\r\n\r\n const response = await fetch('api/authenticate/forgotpassword', postOptions);\r\n\r\n setInProgress(false);\r\n if (response.status == 200) {\r\n //props.history.push('/');\r\n setCompleted(true);\r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n //const asdf = await response.json()\r\n //alert(asdf);\r\n }\r\n\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n Forgot Password\r\n
\r\n
\r\n {completed &&\r\n 'Submitted! Check your email for a link to reset your login.'\r\n }\r\n {!completed &&\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Cancel\r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n );\r\n}","import React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { Link, useLocation } from 'react-router-dom';\r\nimport { UserContext } from './UserProvider';\r\n\r\nexport const ResetPassword = (props) => {\r\n const querystr = new URLSearchParams(useLocation().search);\r\n\r\n const username = querystr.get(\"username\");\r\n const token = querystr.get(\"token\");\r\n const [newPassword, setPassword] = useState('');\r\n const [inProgress, setInProgress] = useState(false);\r\n const [completed, setCompleted] = useState(false);\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.value;\r\n\r\n setPassword(value);\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n setInProgress(true);\r\n SetNewPassword();\r\n\r\n }\r\n\r\n const SetNewPassword = async () => {\r\n var resetPasswordModel = { Username: username, NewPassword: newPassword, Token: token };\r\n\r\n const postOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(resetPasswordModel)\r\n };\r\n\r\n const response = await fetch('api/authenticate/resetpassword', postOptions);\r\n\r\n setInProgress(false);\r\n if (response.status == 200) {\r\n //props.history.push('/');\r\n setCompleted(true);\r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n //const asdf = await response.json()\r\n //alert(asdf);\r\n }\r\n\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n Reset Password\r\n
\r\n
\r\n {completed &&\r\n
\r\n Success!
\r\n Go to Login\r\n
\r\n }\r\n {!completed &&\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Cancel\r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n );\r\n}","import React, { useEffect, useState, useContext, useRef } from 'react';\r\nimport { Modal, ModalBody, ModalFooter } from 'reactstrap';\r\n\r\nexport const Confirmation = (props) => {\r\n const okClick = () => {\r\n props.okClick();\r\n }\r\n\r\n return (\r\n props.toggle()}>\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

{props.message}

\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}","export default __webpack_public_path__ + \"static/media/medium-realpoot110.22d46b1b.mp3\";","export default __webpack_public_path__ + \"static/media/428156__higgs01__yay.0ea8216b.wav\";","import React, { useEffect, useRef, createContext, useContext } from 'react';\r\nimport fartFile from '../sounds/medium-realpoot110.mp3';\r\nimport yayFile from '../sounds/428156__higgs01__yay.wav';\r\n\r\nconst SoundContext = createContext(true);\r\n\r\nexport const SoundProvider = ({ children }) => {\r\n const fartAudioElement = useRef(new Audio(fartFile));\r\n const yayAudioElement = useRef(new Audio(yayFile));\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport const useSound = () => {\r\n const store = useContext(SoundContext);\r\n return store;\r\n};","import React, { useEffect, createContext, useContext, useState } from 'react';\r\n\r\nexport const ServiceWorkerContext = createContext();\r\n\r\nexport const ServiceWorkerProvider = ({ children }) => {\r\n const [version, setVersion] = useState(null);\r\n\r\n const messageChannel = new MessageChannel();\r\n\r\n useEffect(() => {\r\n navigator.serviceWorker.controller?.postMessage({\r\n type: 'INIT_PORT',\r\n }, [messageChannel.port2]);\r\n\r\n messageChannel.port1.onmessage = (event) => {\r\n setVersion(event?.data?.payload);\r\n };\r\n\r\n navigator.serviceWorker.controller?.postMessage({\r\n type: 'GET_VERSION',\r\n });\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}","export default \"data:image/png;base64,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\"","import React from 'react';\r\nimport ribbon from '../symbols/poochievements/ribbon.png';\r\nimport poofessional from '../symbols/poochievements/poofessional.png';\r\nimport distinguished from '../symbols/poochievements/distinguished.png';\r\nimport certified from '../symbols/poochievements/certified.png';\r\nimport tenured from '../symbols/poochievements/tenured.png';\r\nimport heroic from '../symbols/poochievements/heroic.png';\r\n\r\nexport const Poochievement = (props) => {\r\n\r\n let poochievement;\r\n let name;\r\n let description;\r\n let image;\r\n switch (props.type) {\r\n case 1:\r\n image = ;\r\n name = \"Poo-ticipation Award\";\r\n description = \"You've submitted your first Rating! Submit more ratings to acquire more poochievements!\";\r\n break;\r\n case 2:\r\n image = ;\r\n name = \"Pooing Spree!\";\r\n description = \"You've submitted 5 ratings this month!\";\r\n break;\r\n case 3:\r\n image = ;\r\n name = \"Pooing Frenzy!\";\r\n description = \"You've submitted 10 ratings this month!\";\r\n break;\r\n case 4:\r\n image = ;\r\n name = \"Pooing Riot!\";\r\n description = \"You've sumitted 15 ratings this month!\";\r\n break;\r\n case 5:\r\n image = ;\r\n name = \"Pooing Rampage!\";\r\n description = \"You're on a role! You've submitted 20 ratings this month!\";\r\n break;\r\n case 6:\r\n image = ;\r\n name = \"Inter-state Crapper\";\r\n description = \"You've submitted ratings in multiple states!\";\r\n break;\r\n case 7:\r\n image = ;\r\n name = \"International Crapper!\";\r\n description = \"Your pooing prowess knows no bounds! You've submitted ratings in multiple countries!\";\r\n break;\r\n case 8:\r\n image = ;\r\n name = \"Certified Crapper\";\r\n description = \"You've earned a stamp of apooval. You can put this certification on your resume! You've submitted 5 total ratings!\";\r\n break;\r\n case 9:\r\n image = ;\r\n name = \"Distinguished Crapper\";\r\n description = \"Your poo-complishments have earned you the respect of poo-nation. You've submitted 10 total ratings!\";\r\n break;\r\n case 10:\r\n image = ;\r\n name = \"Poofessional\";\r\n description = \"Congratulations on becoming a Poofessional! They say do what you love and you'll never work a day in your life. You've submitted 15 total ratings!\";\r\n break;\r\n case 11:\r\n image = ;\r\n name = \"Tenured Crapper\";\r\n description = \"Your pooing mastery has been recognized. You're essentially unfireable now. You've submitted 25 total ratings!\";\r\n break;\r\n case 12:\r\n image = ;\r\n name = \"Heroic Crapper\";\r\n description = \"You've been decorated for your valor and determination to keep poo-nation informed. You've submitted 50 total ratings!\";\r\n break;\r\n case 13:\r\n image = ;\r\n name = \"Legendary Crapper\";\r\n description = \"Songs and books will be written about your epic poo-liferation. You've earned a spot at the Gates of Poo-halla. You've submitted 100 total ratings!\";\r\n break;\r\n default:\r\n image = null;\r\n name = \"\";\r\n description = \"\";\r\n break;\r\n }\r\n\r\n return (\r\n
\r\n {image}\r\n {name}\r\n {description}\r\n
\r\n );\r\n}\r\n\r\nconst Pooticipation = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst CertifiedCrapper = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst DistinguishedCrapper = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst Poofessional = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst TenuredCrapper = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst HeroicCrapper = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst LegendaryCrapper = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst PooingSpree = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst PooingFrenzy = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst PooingRiot = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst PooingRampage = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst InterstateCrapper = () => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst InternationalCrapper = () => {\r\n return (\r\n \r\n );\r\n}","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React, { useState, createContext } from 'react';\r\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\r\nimport * as confetti from 'canvas-confetti';\r\nimport { Poochievement } from './Poochievement';\r\nimport { useSound } from './SoundProvider';\r\n\r\nexport const PoochievementNotificationContext = createContext();\r\n\r\nexport const PoochievementNotification = ({children}) => {\r\n const [pooChievements, setPoochievements] = useState({})\r\n const [popupOpen, setPopupOpen] = useState(false);\r\n const audioElement = useSound();\r\n const yay = audioElement?.yay;\r\n\r\n const throwConfetti = () => {\r\n var canvas = document.getElementById(\"canvasId\");\r\n var myConfetti = confetti.create(canvas, { resize: true });\r\n myConfetti();\r\n yay.play();\r\n }\r\n\r\n const okClick = () => {\r\n setPopupOpen(false);\r\n }\r\n\r\n const CheckForNewPoochievements = async (/*args*/) => {\r\n const response = await fetch('api/poochievements/new');\r\n\r\n if (response.status == 200) {\r\n const data = await response?.json();\r\n\r\n if (data != null && data.length > 0) {\r\n setPoochievements(data);\r\n setPopupOpen(true);\r\n return true;\r\n }\r\n }\r\n\r\n setPoochievements({});\r\n setPopupOpen(false);\r\n return false;\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n
Poochievements Acquired!
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {Object.values(pooChievements).map((pooChievement, index) =>\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 {children}\r\n
\r\n );\r\n}","import React, { Component, useState, useEffect, useContext } from 'react';\r\nimport { Rating } from './Rating';\r\nimport { useLocation, Link } from 'react-router-dom';\r\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\r\nimport { Confirmation } from './Confirmation';\r\nimport { useSound } from './SoundProvider';\r\nimport { ServiceWorkerContext } from './ServiceWorkerProvider';\r\nimport { PoochievementNotificationContext } from './PoochievementNotification';\r\n\r\nexport const SetRating = (props) => {\r\n\r\n const crapper = props.crapper;\r\n const ratingToEdit = props.ratingToEdit;\r\n const defaultValues = {\r\n Multistall: crapper?.multistall,\r\n SeparateMens: crapper?.separateMens,\r\n AllGender: crapper?.allGender,\r\n HandicapAccessible: crapper?.handicapAccessible,\r\n BabyChangingStation: crapper?.babyChangeStation,\r\n Shower: crapper?.shower,\r\n Fee: crapper?.fee,\r\n Rating: ratingToEdit?.rating ?? 0,\r\n Comments: ratingToEdit?.comment ?? ''\r\n };\r\n\r\n const swVersion = useContext(ServiceWorkerContext);\r\n\r\n const [formValues, setValues] = useState(defaultValues);\r\n\r\n const [confirmationOpen, setConfirmationOpen] = useState(false);\r\n const [saving, setSaving] = useState(false);\r\n\r\n const toggleConfirmation = () => {\r\n setConfirmationOpen(!confirmationOpen);\r\n }\r\n\r\n const audioElement = useSound();\r\n const fart = audioElement?.fart;\r\n\r\n const pooChievementsObject = useContext(PoochievementNotificationContext);\r\n\r\n useEffect(() => {\r\n if (props.isOpen) {\r\n setValues(defaultValues);\r\n }\r\n }, [props.isOpen]);\r\n\r\n const onStarClick = (starNum) => {\r\n setValues({ ...formValues, Rating: starNum });\r\n }\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.type === 'checkbox' ? e.target.checked : e.target.value;\r\n\r\n setValues({ ...formValues, [e.target.name]: value });\r\n }\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n let success = await setRating();\r\n\r\n if (success) {\r\n toggleConfirmation(); //open confirmation\r\n props.toggle(); //toggle self closed\r\n }\r\n }\r\n\r\n const onCancelClick = () => {\r\n props.onCancel();\r\n }\r\n\r\n const confirmationOkClicked = () => {\r\n toggleConfirmation();\r\n props.onRatingSubmit();\r\n }\r\n\r\n const setRating = async () => {\r\n setSaving(true);\r\n\r\n let success = false;\r\n\r\n var postheaders = { 'Content-Type': 'application/json' }\r\n\r\n var bath = crapper;\r\n bath.multistall = formValues.Multistall;\r\n bath.separateMens = formValues.SeparateMens;\r\n bath.handicapAccessible = formValues.HandicapAccessible;\r\n bath.babyChangeStation = formValues.BabyChangingStation;\r\n bath.shower = formValues.Shower;\r\n bath.fee = formValues.Fee;\r\n bath.allGender = formValues.AllGender;\r\n\r\n var rating = {\r\n RatingId: ratingToEdit?.ratingId ?? 0,\r\n Rating: formValues.Rating,\r\n Comment: formValues.Comments\r\n };\r\n\r\n var viewModel = { bathroom: bath, rating: rating, swVersion: swVersion };\r\n\r\n const postOptions = {\r\n method: 'PUT',\r\n headers: postheaders,\r\n body: JSON.stringify(viewModel)\r\n };\r\n\r\n const response = await fetch('api/bathroom', postOptions);\r\n\r\n if (response.status == 200) {\r\n let data = await response.json();\r\n success = true;\r\n let didUserGetPoochievements = await pooChievementsObject?.CheckForNewPoochievements();\r\n\r\n //only play the fart if the user didn't get any poochievements from this rating\r\n if (didUserGetPoochievements == null || didUserGetPoochievements == false) {\r\n fart.play(); //play fart\r\n }\r\n }\r\n else {\r\n success = false;\r\n response.text().then(text => alert(text));\r\n }\r\n\r\n setSaving(false);\r\n\r\n return success;\r\n }\r\n\r\n const onDeleteRating = async () => {\r\n if (ratingToEdit == null)\r\n return;\r\n\r\n const r = window.confirm(\"Are you sure you want to delete this rating?!\");\r\n if (r == false)\r\n return;\r\n\r\n const postOptions = {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' }\r\n };\r\n\r\n const response = await fetch('api/rating/' + ratingToEdit.ratingId, postOptions);\r\n\r\n if (response.status == 200) {\r\n props.toggle(); //toggle self closed\r\n props.onRatingSubmit(); \r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n }\r\n }\r\n\r\n return (\r\n
\r\n props.toggle()}>\r\n {crapper.locationName}\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
\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
\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 {saving ?\r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n {ratingToEdit != null &&\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}","export default __webpack_public_path__ + \"static/media/mens svg 1inch.a6503766.svg\";","export default __webpack_public_path__ + \"static/media/womens svg 1inch.b7ac068a.svg\";","export default __webpack_public_path__ + \"static/media/allgender svg 1inch.8dfff5a0.svg\";","export default __webpack_public_path__ + \"static/media/handicap svg 1inch.d810db64.svg\";","import React from 'react';\r\nimport mensIcon from '../symbols/mens svg 1inch.svg'; \r\nimport womensIcon from '../symbols/womens svg 1inch.svg';\r\nimport allgenderIcon from '../symbols/allgender svg 1inch.svg';\r\nimport handicapIcon from '../symbols/handicap svg 1inch.svg';\r\nimport { divIcon } from 'leaflet';\r\n\r\nexport const Amenities = (props) => {\r\n let crapper = props.crapper;\r\n let content = [];\r\n let i = 0;\r\n\r\n if (crapper.separateMens) {\r\n content.push();\r\n content.push();\r\n }\r\n //if (crapper.separateWomens) {\r\n // content.push();\r\n //}\r\n if (crapper.allGender) {\r\n content.push();\r\n }\r\n if (crapper.handicapAccessible) {\r\n content.push();\r\n }\r\n if (crapper.babyChangeStation) {\r\n content.push();\r\n }\r\n if (crapper.fee) {\r\n content.push();\r\n }\r\n if (crapper.shower) {\r\n content.push();\r\n }\r\n return (\r\n
\r\n {content}\r\n
\r\n );\r\n}\r\n\r\nconst MensIcon = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nconst WomensIcon = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nconst HandicapIcon = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nconst AllGenderIcon = () => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nconst FeeIcon = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nconst ShowerIcon = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nconst BabyIcon = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Rating } from './Rating';\r\nimport { UserContext } from './authorization/UserProvider';\r\n\r\nexport const Comment = (props) => {\r\n const rating = props.rating;\r\n\r\n const ratingNum = rating.rating;\r\n const username = rating?.username ?? 'anonymous';\r\n const comment = rating?.comment ?? '';\r\n const timestamp = rating?.timestamp;\r\n\r\n //convert to just the date\r\n let date = '';\r\n if (timestamp != null)\r\n date = new Date(timestamp)?.toDateString();\r\n\r\n const { user } = useContext(UserContext);\r\n\r\n const [showEditButton, setShowEditButton] = useState(false);\r\n\r\n useEffect(() => {\r\n if (user != null && user.username === username)\r\n setShowEditButton(true);\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {username}\r\n
\r\n {date}\r\n
\r\n {showEditButton &&\r\n \r\n }\r\n
\r\n \r\n
\r\n {comment}\r\n
\r\n
\r\n );\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { Comment } from './Comment';\r\nimport { SetRating } from './SetRating';\r\n\r\nexport const Reviews = (props) => {\r\n const crapper = props.crapper;\r\n const bathId = crapper?.bathroomId ?? 0;\r\n const [ratings, setRatings] = useState({});\r\n const [submitRatingVisible, setSubmitRatingVisible] = useState(false);\r\n const [ratingToEdit, setRatingToEdit] = useState({});\r\n\r\n useEffect(() => {\r\n getRatings();\r\n }, []);\r\n\r\n const onShowSubmitRatingClick = () => {\r\n setSubmitRatingVisible(!submitRatingVisible);\r\n }\r\n\r\n const refreshRatings = () => {\r\n getRatings();\r\n }\r\n\r\n const getRatings = async (/*args*/) => {\r\n const response = await fetch('api/rating/' + bathId);\r\n\r\n const data = await response?.json();\r\n\r\n setRatings(data);\r\n }\r\n\r\n const onEditRatingClick = (rating) => {\r\n setRatingToEdit(rating);\r\n setSubmitRatingVisible(!submitRatingVisible);\r\n }\r\n\r\n return (\r\n
\r\n {Object.values(ratings).map((ratingInfo) =>\r\n \r\n )}\r\n \r\n
\r\n );\r\n}","import React, { Component, useRef, useState, useEffect, useContext } from 'react';\r\nimport { renderToString } from 'react-dom/server';\r\nimport { Marker, Popup } from 'react-leaflet'\r\nimport { Link } from 'react-router-dom';\r\nimport bluedot from '../symbols/blue dot 12x12.png'; // relative path to image \r\nimport { Rating } from './Rating';\r\nimport { SetRating } from './SetRating';\r\nimport { Amenities } from './Amenities.js';\r\nimport { DivIcon, Icon } from 'leaflet';\r\nimport { post } from 'jquery';\r\nimport { Reviews } from './Reviews';\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, NavLink } from 'reactstrap';\r\nimport { UserContext } from './authorization/UserProvider';\r\nimport { Confirmation } from './Confirmation';\r\n\r\nexport const CrapperMarker = (props) => {\r\n var crapper = props.Crapper;\r\n const position = [crapper.gpslat, crapper.gpslong];\r\n\r\n const bathType = crapper?.bathroomType?.typeName;\r\n\r\n let iconHtmlToUse;\r\n if (crapper?.rating == -1) {\r\n iconHtmlToUse = renderToString();\r\n }\r\n else {\r\n iconHtmlToUse = renderToString();\r\n }\r\n \r\n const myIcon = new DivIcon({\r\n html: iconHtmlToUse,\r\n className: '', //leave blank to overwrite the default class (caused blank white squares)\r\n iconSize: [36, 48],\r\n iconAnchor: [25, 48],\r\n popupAnchor: [6,-48]\r\n });\r\n\r\n const { user } = useContext(UserContext);\r\n const isLoggedIn = user != null && user.roles != null && !user.roles.includes('Guest');\r\n const registerLink = Register\r\n const loginLink = Login\r\n\r\n const [commentsVisible, setCommentsVisible] = useState(false);\r\n const [submitRatingVisible, setSubmitRatingVisible] = useState(false);\r\n //const [ratingToEdit, setRatingToEdit] = useState(null);\r\n //const [isLoggedIn, setIsLoggedIn] = useState(false);\r\n //const popupRef = useRef(null);\r\n\r\n const onShowCommentsClick = () => {\r\n setCommentsVisible(!commentsVisible);\r\n }\r\n\r\n const onShowSubmitRatingClick = () => {\r\n setSubmitRatingVisible(!submitRatingVisible);\r\n }\r\n\r\n const onRatingSubmit = () => {\r\n //setSubmitRatingVisible(!submitRatingVisible);\r\n props.onRatingSubmit();\r\n }\r\n\r\n const onEditCrapperClicked = () => {\r\n props.onEditCrapperClicked(crapper);\r\n }\r\n\r\n useEffect(() => {\r\n //if (user != null)\r\n // setIsLoggedIn(user.isLoggedIn);\r\n //else\r\n // setIsLoggedIn(false);\r\n }, []);\r\n\r\n const popupWidth = commentsVisible ? '100%' : '';\r\n\r\n return (\r\n \r\n \r\n
\r\n {crapper.locationName} \r\n {bathType}\r\n \r\n
\r\n \r\n {isLoggedIn ?\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n :\r\n
{registerLink} or {loginLink} to see and add reviews!
\r\n }\r\n
\r\n
\r\n \r\n {crapper.locationName}\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\nexport const UserMarker = (props) => {\r\n const myIcon = new Icon({\r\n iconUrl: bluedot\r\n });\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport const DropPinMarker = (props) => {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport const NewCrapperMarker = (props) => {\r\n return (\r\n \r\n \r\n );\r\n}\r\n\r\nconst ToiletMarkerIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst ToiletMarkerNoRatings = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst PooMarkerIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst PooMarkerNoRatings = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst EditCrapperIcon = () => {\r\n return (\r\n \r\n );\r\n}","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHXSURBVChTVZJLaxRBFIVPVU93T3pmnMkYMSOKOxciZBV/QRYirgQDWYvBLJSA4NK1OxNlIIIgLpRsIog/QRGyEMGNL1QiyiSO8+qZflVX1fV20KAXioLifPfcOlUC/1Rn7ydubZd8XfZajgcbyGz39nyggqmpPwrgAFh61K3Efv2mrDrLpZqc9SuA69nvkmy7qqK19flGWuj2gcX2+2DkHXvm1GsL5TrQnAWOt4DDNaAXs3PXPA3CcOnO2aaScRyjlzo3NIkFEMGRDDSBM9PA+TJwrgG0ZpyLY7+6XDSXlx98dLWhK2Q0SANkAMu75d0l4BDPMOPxuXSurr7oOTLJ6Ygx9oRVGYxSUDGhvwd86AIvc+A1w90IUJk4lZlSRQrBg5AlkyfQaQIVWQwY+LQDvPoCbH8FvnWAdAxuyEa+K39JQTtWZ9DJBDnfKRlpDHaBHwx0GBhyAz2hd1KZSG5em8tdSRuwljtEyKMRu0RIQ4VkQEiGQBYSKNLtjQtNy5lwfOV83ZX2+T6UscukDzXmFYbIRhPYcPxkOu8/LLQHD3dp7U25l7rXcxIrlsRJIQRJKT97JXHvaKDvP145rQrdf1+jqMW7b13OtyEgSJMcbq3OcU5/C/gNlzbrqvvm1ZkAAAAASUVORK5CYII=\"","import React, { Component, useRef, useState, useEffect } from 'react';\r\n\r\nexport const GooglePlaceSearchBox = (props) => {\r\n\r\n const autoCompleteRef = useRef();\r\n const inputRef = useRef();\r\n const options = {\r\n //componentRestrictions: { country: \"us\" },\r\n fields: [\"geometry\", \"name\"],\r\n };\r\n\r\n const addGooglePlacesScript = () => {\r\n const existingScript = document.getElementById('googlePlaces');\r\n if (!existingScript) {\r\n const script = document.createElement('script');\r\n script.src = 'https://maps.googleapis.com/maps/api/js?key=AIzaSyBngU2phEcG_QO8iCJOaHSMnQ24imOBhsM&libraries=places';\r\n script.id = 'googlePlaces';\r\n script.async = true;\r\n script.defer = true;\r\n\r\n document.body.appendChild(script);\r\n\r\n script.onload = () => {\r\n setupAutocomplete();\r\n };\r\n }\r\n };\r\n\r\n const setupAutocomplete = () => {\r\n\r\n autoCompleteRef.current = new window.google.maps.places.Autocomplete(\r\n inputRef.current,\r\n options\r\n );\r\n\r\n autoCompleteRef.current.addListener(\"place_changed\", async function () {\r\n const place = await autoCompleteRef.current.getPlace();\r\n const location = place?.geometry?.location;\r\n if (location != null) {\r\n let lat = location.lat();\r\n let lng = location.lng();\r\n let coords = { lat: lat, lng: lng };\r\n props.placeSelected(coords)\r\n }\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n addGooglePlacesScript();\r\n }, []);\r\n\r\n const onInputDivClick = () => {\r\n if (inputRef?.current != null) {\r\n inputRef.current.focus();\r\n }\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n}","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport { Rating } from './Rating';\r\n\r\nexport const FilterButton = (props) => {\r\n const defaultValues =\r\n {\r\n MinRating: -1,\r\n Multistall: false,\r\n SeparateMens: false,\r\n AllGender: false,\r\n HandicapAccessible: false,\r\n BabyChangeStation: false,\r\n Shower: false,\r\n Fee: false,\r\n }\r\n const [filterVisible, setFilterVisible] = useState(false);\r\n const [inProgress, setInProgress] = useState(false);\r\n const [filterValues, setFilterValues] = useState(defaultValues);\r\n\r\n const onShowFilterClick = () => {\r\n setFilterVisible(!filterVisible);\r\n }\r\n\r\n const onStarClick = (starNum) => {\r\n setFilterValues({ ...filterValues, MinRating: starNum });\r\n }\r\n\r\n const onApplyFilterClick = async () => {\r\n setInProgress(true);\r\n setFilterVisible(false);\r\n\r\n await props.onApplyFilter(filterValues);\r\n \r\n setInProgress(false);\r\n\r\n }\r\n\r\n const onClearFilter = async () => {\r\n setInProgress(true);\r\n\r\n setFilterValues(defaultValues);\r\n setFilterVisible(false);\r\n\r\n await props.onApplyFilter(defaultValues);\r\n \r\n setInProgress(false);\r\n }\r\n\r\n const handleInputChange = (e) => {\r\n let value = e.target.type === 'checkbox' ? e.target.checked : e.target.value;\r\n\r\n setFilterValues({ ...filterValues, [e.target.name]: value });\r\n }\r\n\r\n useEffect(() => {\r\n\r\n }, []);\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}","import React, { Component, useState } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Rating } from './Rating';\r\nimport { Button } from 'reactstrap';\r\nimport { UserContext } from './authorization/UserProvider';\r\n\r\nexport const ReportCrapper = (props) => {\r\n const crapperId = props.crapperId;\r\n const [reportMessage, setReportMessage] = useState('');\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.value;\r\n\r\n setReportMessage(value);\r\n }\r\n\r\n const onCancelClick = () => {\r\n props.onCancel();\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n SubmitReport();\r\n }\r\n\r\n const SubmitReport = async () => {\r\n var postheaders = { 'Content-Type': 'application/json' }\r\n\r\n var reportCrapperModel = { CrapperId: crapperId, ReportCrapperMessage: reportMessage };\r\n\r\n const postOptions = {\r\n method: 'POST',\r\n headers: postheaders,\r\n body: JSON.stringify(reportCrapperModel)\r\n };\r\n\r\n const response = await fetch('api/reportcrapper', postOptions);\r\n\r\n if (response.status == 200) {\r\n alert('Submitted!');\r\n props.onReportSubmit();\r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n }\r\n\r\n }\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\n}","import React, { useEffect, useState } from 'react';\r\nimport { MapContainer, TileLayer, Marker, Popup, useMap, Tooltip } from 'react-leaflet'\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport const DropPinMapComponent = (props) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nconst DropPinMapController = (props) => {\r\n const initCoords = { lat: 0, lng: 0 };\r\n\r\n const [pinCoords, setPinCoords] = useState(initCoords);\r\n\r\n //since mapcontainer props are immutable, need to edit them with this child component\r\n const map = useMap();\r\n\r\n const crapper = props.crapper;\r\n const isEditing = crapper == null ? false : true;\r\n\r\n useEffect(() => {\r\n //if editing position\r\n if (crapper != null) {\r\n var coords = { lat: crapper.gpslat, lng: crapper.gpslong };\r\n map.setView(coords, 20);\r\n setPinCoords(coords);\r\n }\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n}","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Form } from 'reactstrap';\r\nimport { Rating } from './Rating';\r\nimport { UserContext } from './authorization/UserProvider';\r\nimport { ReportCrapper } from './ReportCrapper';\r\nimport { Confirmation } from './Confirmation';\r\nimport { useSound } from './SoundProvider';\r\nimport { DropPinMapComponent } from './DropPinMapComponent';\r\nimport { PoochievementNotificationContext } from './PoochievementNotification';\r\n\r\nexport const AddCrapperForm = (props) => {\r\n\r\n //if editing initially fill form values with this crapper\r\n const crapper = props.crapperAndRating?.crapper;\r\n\r\n const { user } = useContext(UserContext);\r\n const pooChievementsObject = useContext(PoochievementNotificationContext);\r\n const initialValues = {\r\n BathroomId: crapper?.bathroomId ?? 0,\r\n LocationName: crapper?.locationName ?? '',\r\n Multistall: crapper?.multistall ?? false,\r\n SeparateMens: crapper?.separateMens ?? false,\r\n AllGender: crapper?.allGender ?? false,\r\n HandicapAccessible: crapper?.handicapAccessible ?? false,\r\n BabyChangeStation: crapper?.babyChangeStation ?? false,\r\n Shower: crapper?.shower ?? false,\r\n Fee: crapper?.fee ?? false,\r\n GPSLat: crapper?.gpslat ?? 0,\r\n GPSLong: crapper?.gpslong ?? 0,\r\n BathroomTypeId: crapper?.bathroomTypeId ?? 1,\r\n Rating: -1,\r\n Comment: ''\r\n };\r\n\r\n const [formValues, setValues] = useState(initialValues);\r\n\r\n const [bathroomTypes, setTypes] = useState({});\r\n const [addressCollapsed, setAddressCollapsed] = useState(true);\r\n const [GPSCollapsed, setGPSCollapsed] = useState(true);\r\n const [showDeleteButton, setShowDeleteButton] = useState(false);\r\n const [reportCrapperVisible, setReportCrapperVisible] = useState(false);\r\n const [confirmationMessage, setConfirmationMessage] = useState('');\r\n const [confirmationOpen, setConfirmationOpen] = useState(false);\r\n const [saving, setSaving] = useState(false);\r\n const [editingCrapperLocation, setEditingCrapperLocation] = useState(false);\r\n\r\n const toggleConfirmation = () => {\r\n let isOpenBeforeToggle = confirmationOpen;\r\n setConfirmationOpen(!confirmationOpen);\r\n\r\n //if the confirmation message opened, it means we are done successfully editing/adding the crapper.\r\n //this means the user either clicked ok, or clicked away from the confirmation message to close the popup\r\n //if (isOpenBeforeToggle)\r\n //props.history.push('/');\r\n }\r\n\r\n const confirmationOkClicked = () => {\r\n toggleConfirmation();\r\n props.onRatingSubmit();\r\n }\r\n\r\n const audioElement = useSound();\r\n const fart = audioElement?.fart;\r\n\r\n useEffect(() => {\r\n if (props.isOpen) {\r\n if (user == null || user.isLoggedIn == false) {\r\n props.toggleClosed();\r\n return;\r\n }\r\n\r\n if (!editingCrapperLocation) {\r\n setValues(initialValues);\r\n getBathroomTypesList();\r\n DeleteButtonVisibility();\r\n }\r\n else {\r\n setValues({ ...formValues, GPSLat: crapper?.gpslat ?? 0, GPSLong: crapper?.gpslong ?? 0 });\r\n setEditingCrapperLocation(false);\r\n }\r\n\r\n setReportCrapperVisible(false);\r\n }\r\n }, [props.isOpen]);\r\n\r\n const DeleteButtonVisibility = async () => {\r\n //if this is the user who created the crapper AND there aren't any reviews from other users yet, then allow delete\r\n let isSameUser = false;\r\n let hasRatingsFromOtherUsers = false;\r\n\r\n if (user?.username != null) {\r\n if (user.userid == crapper?.createdBy) {\r\n isSameUser = true;\r\n }\r\n }\r\n\r\n if (formValues.BathroomId != 0) {\r\n const ratingsResponse = await fetch('api/rating/' + formValues.BathroomId);\r\n\r\n const data = await ratingsResponse?.json();\r\n\r\n if (data != null)\r\n hasRatingsFromOtherUsers = data.some(r => r.username != user?.username);\r\n }\r\n\r\n if (isSameUser && !hasRatingsFromOtherUsers)\r\n setShowDeleteButton(true);\r\n }\r\n\r\n const handleInputChange = (e) => {\r\n let value = e.target.type === 'checkbox' ? e.target.checked : e.target.value;\r\n\r\n if (e.target.name == 'BathroomTypeId') {\r\n let intVal = parseInt(value, 10);\r\n value = isNaN(intVal) ? 0 : intVal;\r\n }\r\n\r\n setValues({ ...formValues, [e.target.name]: value });\r\n }\r\n\r\n const onStarClick = (starNum) => {\r\n setValues({ ...formValues, Rating: starNum });\r\n }\r\n\r\n const onReportSubmitted = () => {\r\n setReportCrapperVisible(false);\r\n props.toggleClosed();\r\n }\r\n\r\n const onDeleteCrapper = async () => {\r\n var bathId = crapper?.bathroomId;\r\n if (bathId == null)\r\n return;\r\n\r\n const r = window.confirm(\"Are you sure you want to delete this crapper?!\");\r\n if (r == false)\r\n return;\r\n\r\n const postOptions = {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' }\r\n };\r\n\r\n const response = await fetch('api/bathroom/' + bathId, postOptions);\r\n\r\n if (response.status == 200) {\r\n props.toggleClosed();\r\n props.onRatingSubmit();\r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n }\r\n }\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n let result = await createCrapper();\r\n\r\n if (result) {\r\n let confirmText = formValues.BathroomId == 0 ? 'Crapper Successfully Created!' : 'Crapper Successfully Edited!';\r\n setConfirmationMessage(confirmText);\r\n toggleConfirmation();\r\n props.toggleClosed();\r\n }\r\n \r\n }\r\n\r\n const getBathroomTypesList = async () => {\r\n\r\n const response = await fetch('api/bathroom/types');\r\n\r\n const data = await response?.json();\r\n\r\n setTypes(data);\r\n }\r\n\r\n const editLocationClicked = () => {\r\n setEditingCrapperLocation(true);\r\n var coords = { lat: crapper.gpslat, lng: crapper.gpslong };\r\n props.onEditLocationClick(coords);\r\n props.toggleClosed(true);\r\n }\r\n\r\n const createCrapper = async () => {\r\n setSaving(true);\r\n\r\n var bath = {\r\n BathroomId: formValues.BathroomId,\r\n LocationName: formValues.LocationName,\r\n Multistall: formValues.Multistall,\r\n SeparateMens: formValues.SeparateMens,\r\n AllGender: formValues.AllGender,\r\n HandicapAccessible: formValues.HandicapAccessible,\r\n BabyChangeStation: formValues.BabyChangeStation,\r\n Shower: formValues.Shower,\r\n Fee: formValues.Fee,\r\n Address: formValues.Address,\r\n City: formValues.City,\r\n State: formValues.State,\r\n Zipcode: formValues.Zipcode,\r\n GPSLat: formValues.GPSLat,\r\n GPSLong: formValues.GPSLong,\r\n BathroomTypeId: formValues.BathroomTypeId\r\n };\r\n\r\n var rating = {\r\n Rating: formValues.Rating,\r\n Comment: formValues.Comment\r\n };\r\n\r\n var viewModel = { bathroom: bath, rating: rating };\r\n\r\n var method = bath.BathroomId == 0 ? 'POST' : 'PUT';\r\n\r\n const postOptions = {\r\n method: method,\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(viewModel)\r\n };\r\n\r\n const response = await fetch('api/bathroom', postOptions);\r\n\r\n if (response.status == 200) {\r\n let didUserGetPoochievements = await pooChievementsObject?.CheckForNewPoochievements();\r\n\r\n //only play the fart if the user didn't get any poochievements from this rating\r\n if (didUserGetPoochievements == null || didUserGetPoochievements == false) {\r\n fart.play(); //play fart\r\n }\r\n\r\n setSaving(false);\r\n return true; \r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n setSaving(false);\r\n return false;\r\n }\r\n }\r\n\r\n const toggleOpenClosed = () => {\r\n if (props.isOpen)\r\n props.toggleClosed();\r\n else\r\n props.toggleOpen();\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {formValues?.BathroomId != 0 ? 'Edit Crapper' : 'Create Crapper'}\r\n \r\n \r\n
\r\n
\r\n Location\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Basic Info\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {Object.values(bathroomTypes).map((btype) =>\r\n \r\n )} \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Amenities\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 \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
\r\n
\r\n {formValues.BathroomId == 0 &&\r\n
\r\n
\r\n Rating\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 {saving ?\r\n \r\n :\r\n \r\n }\r\n \r\n \r\n
\r\n
\r\n {showDeleteButton &&\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n {!showDeleteButton && formValues.BathroomId != 0 &&\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n\r\n
\r\n setReportCrapperVisible(!reportCrapperVisible)}>\r\n Report\r\n \r\n setReportCrapperVisible(!reportCrapperVisible)} />\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n}","import React, { useEffect, useState, useContext, useRef, useMemo } from 'react';\r\nimport { MapContainer, TileLayer, Marker, Popup, useMap, ZoomControl, useMapEvent } from 'react-leaflet';\r\nimport { CrapperMarker, NewCrapperMarker, UserMarker } from './Marker.js';\r\nimport { GooglePlaceSearchBox } from './GooglePlaceSearchBox';\r\nimport { Link } from 'react-router-dom';\r\nimport { map } from 'jquery';\r\nimport { UserContext } from './authorization/UserProvider';\r\nimport { useOnlineStatus } from './OnlineStatusProvider.js';\r\nimport MarkerClusterGroup from 'react-leaflet-markercluster';\r\nimport { FilterButton } from './FilterButton';\r\nimport { AddCrapperForm } from './AddCrapperForm.js';\r\n\r\nexport const Map = (props) => {\r\n\r\n const isOnline = useOnlineStatus();\r\n\r\n if (isOnline) {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n else {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n Oops, looks like you are offline\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport const MapController = (props) => {\r\n //since mapcontainer props are immutable, need to edit them with this child component\r\n const map = useMap();\r\n \r\n const isOnline = useOnlineStatus();\r\n const { user } = useContext(UserContext);\r\n \r\n const isLoggedIn = user != null && user.isLoggedIn && user.roles != null && !user.roles.includes('Guest');\r\n\r\n const registerLink = Register\r\n const loginLink = Login\r\n\r\n const initCoords = { lat: 0, lng: 0 };\r\n const [crappers, setCrappers] = useState({});\r\n const [showSearchButton, setShowSearchButton] = useState(false);\r\n const [userCoords, setUserCoords] = useState(initCoords);\r\n const [clusterKey, setClusterKey] = useState(0);\r\n const [updatingCrappers, setUpdatingCrappers] = useState(false);\r\n const [showZoomInMessage, setShowZoomInMessage] = useState(false);\r\n const [showNewCrapperMarker, setShowNewCrapperMarker] = useState(false);\r\n const [newCrapperCoords, setNewCrapperCoords] = useState(initCoords);\r\n const [addCrapperOpen, setAddCrapperOpen] = useState(false);\r\n const [crapperBeingEdited, setCrapperBeingEdited] = useState(null);\r\n\r\n const mapBounds = useRef();\r\n const filterValues = useRef();\r\n const showNewCrapperMarkerRef = useRef(false);\r\n\r\n const getCrappers = async (center) => {\r\n setUpdatingCrappers(true);\r\n let queryStr = 'mapbounds?';\r\n\r\n if (center?.latitude != null)\r\n queryStr += 'centerlat=' + String(center.latitude) + '&';\r\n\r\n if (center?.longitude != null)\r\n queryStr += 'centerlng=' + String(center.longitude) + '&';\r\n\r\n if (mapBounds.current?._southWest?.lat != null)\r\n queryStr += 'swlat=' + mapBounds.current?._southWest?.lat + '&';;\r\n\r\n if (mapBounds.current?._southWest?.lng != null)\r\n queryStr += 'swlng=' + mapBounds.current?._southWest?.lng + '&';\r\n\r\n if (mapBounds.current?._northEast?.lat != null)\r\n queryStr += 'nelat=' + mapBounds.current?._northEast?.lat + '&';\r\n\r\n if (mapBounds.current?._northEast?.lng != null)\r\n queryStr += 'nelng=' + mapBounds.current?._northEast?.lng;\r\n\r\n if (queryStr.substring(queryStr.length - 1, 1) == '&')\r\n queryStr = queryStr.substring(0, queryStr.length - 2);\r\n\r\n const response = await fetch('api/bathroom/' + queryStr);\r\n\r\n if (response.status == 200) {\r\n const crappers = await response?.json();\r\n let filteredCrappers = FilterCrappers(crappers);\r\n\r\n setCrappers(filteredCrappers);\r\n setClusterKey(clusterKey => clusterKey + 1);\r\n }\r\n\r\n setUpdatingCrappers(false);\r\n }\r\n\r\n const FilterCrappers = (crappers) => {\r\n if (crappers != null && filterValues.current != null) {\r\n //convert to an array\r\n let crapperArray = Object.entries(crappers);\r\n\r\n //filter\r\n let filtered = crapperArray.filter(([key, val]) => {\r\n if (val.rating < filterValues.current.MinRating)\r\n return false;\r\n\r\n if (filterValues.current.Multistall == true && val.multistall != true)\r\n return false;\r\n\r\n if (filterValues.current.SeparateMens == true && val.separateMens != true)\r\n return false;\r\n\r\n if (filterValues.current.AllGender == true && val.allGender != true)\r\n return false;\r\n\r\n if (filterValues.current.HandicapAccessible == true && val.handicapAccessible != true)\r\n return false;\r\n\r\n if (filterValues.current.BabyChangeStation == true && val.babyChangeStation != true)\r\n return false;\r\n\r\n if (filterValues.current.Shower == true && val.shower != true)\r\n return false;\r\n\r\n if (filterValues.current.Fee == true && val.fee != true)\r\n return false;\r\n\r\n return true;\r\n });\r\n\r\n //convert array back to object\r\n return Object.fromEntries(filtered);\r\n }\r\n else {\r\n return crappers;\r\n }\r\n }\r\n\r\n const onSearchClick = async () => {\r\n await getCrappers();\r\n setShowSearchButton(false);\r\n }\r\n\r\n const onQueryOverpassClick = async () => {\r\n let queryStr = 'mapbounds?';\r\n\r\n if (mapBounds.current?._southWest?.lat != null)\r\n queryStr += 'swlat=' + mapBounds.current?._southWest?.lat + '&';\r\n\r\n if (mapBounds.current?._southWest?.lng != null)\r\n queryStr += 'swlng=' + mapBounds.current?._southWest?.lng + '&';\r\n\r\n if (mapBounds.current?._northEast?.lat != null)\r\n queryStr += 'nelat=' + mapBounds.current?._northEast?.lat + '&';\r\n\r\n if (mapBounds.current?._northEast?.lng != null)\r\n queryStr += 'nelng=' + mapBounds.current?._northEast?.lng;\r\n\r\n if (queryStr.substring(queryStr.length - 1, 1) == '&')\r\n queryStr = queryStr.substring(0, queryStr.length - 2);\r\n\r\n const response = await fetch('api/overpass/' + queryStr);\r\n\r\n if (response.status == 200) {\r\n await getCrappers();\r\n }\r\n }\r\n\r\n const triggerRefresh = async () => {\r\n navigator.geolocation.getCurrentPosition(function (position) {\r\n //setUserCoords({ lat: position.coords.latitude, lng: position.coords.longitude });\r\n getCrappers(position.coords);\r\n });\r\n }\r\n\r\n const onRatingSubmit = async () => {\r\n await getCrappers();\r\n }\r\n\r\n const goToUserLocation = async () => {\r\n navigator.geolocation.getCurrentPosition(function (position) {\r\n setUserCoords({ lat: position.coords.latitude, lng: position.coords.longitude });\r\n\r\n let coords = [position.coords.latitude, position.coords.longitude];\r\n map.setView(coords, 16);\r\n\r\n getCrappers(position.coords);\r\n }\r\n );\r\n }\r\n\r\n const getMapBounds = () => {\r\n\r\n let currentMapBounds = map.getBounds();\r\n let mapzoom = map.getZoom();\r\n\r\n mapBounds.current = currentMapBounds;\r\n\r\n //if at a reasonable zoom, and currently not updating crappers, auto-fetch crappers\r\n if (mapzoom > 10 && !updatingCrappers) {\r\n setShowZoomInMessage(false);\r\n getCrappers();\r\n } else {\r\n //setShowSearchButton(true);\r\n }\r\n\r\n if (mapzoom <= 10)\r\n setShowZoomInMessage(true);\r\n };\r\n\r\n const onApplyFilter = async (values) => {\r\n if (values != null) {\r\n filterValues.current = values;\r\n\r\n if (mapBounds.current == null) {\r\n mapBounds.current = map.getBounds();\r\n }\r\n\r\n await getCrappers();\r\n }\r\n }\r\n\r\n const onSearchResultsReceived = (place) => {\r\n var coords = { lat: place.lat, lng: place.lon };\r\n map.setView(coords, 16);\r\n }\r\n\r\n const onGooglePlaceSelected = (coords) => {\r\n if (coords != null)\r\n map.setView(coords, 20);\r\n }\r\n\r\n const toggleCloseAddCrapper = (editingLocation) => {\r\n if (!editingLocation) {\r\n setCrapperBeingEdited(null);\r\n toggleShowNewCrapperMarker(false);\r\n }\r\n setAddCrapperOpen(false);\r\n }\r\n\r\n const toggleOpenAddCrapper = () => {\r\n //setCrapperBeingEdited(crapper);\r\n setAddCrapperOpen(true);\r\n }\r\n\r\n const onNewCrapperCoordsSave = () => { \r\n let crapper = { bathroomId: 0, gpslat: newCrapperCoords.lat, gpslong: newCrapperCoords.lng };\r\n setCrapperBeingEdited({ crapper: crapper });\r\n toggleOpenAddCrapper();\r\n }\r\n\r\n const onNewCrapperCoordsCancel = () => {\r\n toggleShowNewCrapperMarker(false);\r\n setCrapperBeingEdited(null);\r\n }\r\n\r\n const onAddCrapperClick = () => {\r\n let coords = map.getCenter();\r\n if (coords != null) {\r\n map.setView(coords, 20);\r\n setNewCrapperCoords(coords);\r\n toggleShowNewCrapperMarker(true);\r\n }\r\n }\r\n\r\n const onDragEnd = () => {\r\n getMapBounds();\r\n }\r\n\r\n const onMapMove = () => {\r\n if (showNewCrapperMarkerRef.current == true) {\r\n let coords = map.getCenter();\r\n if (coords != null) {\r\n setNewCrapperCoords(coords);\r\n }\r\n }\r\n }\r\n\r\n const toggleShowNewCrapperMarker = (show) => {\r\n setShowNewCrapperMarker(show);\r\n showNewCrapperMarkerRef.current = show;\r\n }\r\n\r\n const addCrapperEditLocationClick = (coords) => {\r\n toggleCloseAddCrapper();\r\n if (coords != null) {\r\n map.setView(coords, 20);\r\n setNewCrapperCoords(coords);\r\n toggleShowNewCrapperMarker(true);\r\n }\r\n }\r\n\r\n const onEditCrapperClicked = (crapper) => {\r\n setCrapperBeingEdited({ crapper: crapper });\r\n toggleOpenAddCrapper();\r\n }\r\n\r\n const onZoomInToSeeCrappersClick = () => {\r\n let coords = map.getCenter();\r\n if (coords != null) {\r\n map.setView(coords, 12);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n //run right away when entering page, or if online status changes\r\n if (isOnline) {\r\n goToUserLocation();\r\n }\r\n }, [isOnline]);\r\n\r\n if (!map.hasEventListeners('dragend'))\r\n map.on('dragend', onDragEnd);\r\n\r\n if (!map.hasEventListeners('zoomend'))\r\n map.on('zoomend', getMapBounds);\r\n\r\n if (!map.hasEventListeners('move'))\r\n map.on('move', onMapMove);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {showZoomInMessage && !showSearchButton &&\r\n
\r\n \r\n
\r\n }\r\n {showSearchButton &&\r\n
\r\n \r\n
\r\n }\r\n \r\n {!showNewCrapperMarker &&\r\n \r\n {Object.values(crappers).map((crapper) =>\r\n \r\n )}\r\n \r\n }\r\n {showNewCrapperMarker &&\r\n \r\n \r\n }\r\n
\r\n {showNewCrapperMarker ?\r\n
\r\n \r\n \r\n
\r\n :\r\n
\r\n {isLoggedIn ?\r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n }\r\n { !isLoggedIn &&\r\n
{registerLink} or {loginLink} to create and review crappers!
\r\n }\r\n
\r\n \r\n
\r\n );\r\n}","import React, { Component } from 'react';\r\n\r\nexport const ExternalSigninButton = (props) => {\r\n const height = props.height + 'px';\r\n const width = props.width + 'px';\r\n const text = props.text;\r\n const logo = props.logo;\r\n\r\n return (\r\n props.onClick()}>\r\n \r\n {text}\r\n \r\n );\r\n}","import React, { Component } from 'react';\r\nimport { ExternalSigninButton } from './ExternalSigninButton';\r\n\r\nexport const AppleSigninButton = (props) => {\r\n const height = props.height;\r\n const width = props.width;\r\n const buttonText = 'Sign in with Apple';\r\n const logo = 'https://upload.wikimedia.org/wikipedia/commons/f/fa/Apple_logo_black.svg'\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport { ExternalSigninButton } from './ExternalSigninButton';\r\n\r\nexport const GoogleSigninButton = (props) => {\r\n const height = props.height;\r\n const width = props.width;\r\n const buttonText = 'Sign in with Google';\r\n const logo = 'https://upload.wikimedia.org/wikipedia/commons/5/53/Google_%22G%22_Logo.svg'\r\n return (\r\n \r\n );\r\n}","import React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UserContext } from './UserProvider';\r\nimport Utils from '../../code/Utils';\r\nimport { AppleSigninButton } from './AppleSigninButton';\r\nimport { GoogleSigninButton } from './GoogleSigninButton';\r\n\r\nexport const Login = (props) => {\r\n const [formValues, setValues] = useState({\r\n username: '',\r\n //email: '',\r\n password: '',\r\n rememberme: true\r\n });\r\n\r\n useEffect(() => {\r\n\r\n }, []);\r\n\r\n const [error, setError] = useState('');\r\n\r\n const { user, checkLogin } = useContext(UserContext);\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.type === 'checkbox' ? e.target.checked : e.target.value;\r\n \r\n setValues({ ...formValues, [e.target.name]: value });\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n LoginUser();\r\n }\r\n\r\n const ContinueAsGuest = async () => {\r\n const postOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n //body: JSON.stringify(loginModel)\r\n };\r\n\r\n const response = await fetch('api/authenticate/loginguest', postOptions);\r\n\r\n if (response.status == 200) {\r\n checkLogin();\r\n }\r\n else {\r\n setError('Guest Login failed. Try again');\r\n }\r\n }\r\n\r\n const GoogleLogin = async () => {\r\n\r\n const postOptions = {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'text/plain',\r\n }\r\n };\r\n\r\n const response = await fetch('api/authenticate/login-google', postOptions);\r\n\r\n if (response.status == 200) {\r\n var url = await response.text();\r\n //window.open(url, '_blank');\r\n window.location.assign(url);\r\n }\r\n else {\r\n setError('Google Signin Failed. Try again');\r\n }\r\n }\r\n\r\n const AppleLogin = async () => {\r\n\r\n const postOptions = {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'text/plain',\r\n }\r\n };\r\n\r\n const response = await fetch('api/authenticate/login-apple', postOptions);\r\n\r\n if (response.status == 200) {\r\n\r\n var url = await response.text();\r\n window.location.assign(url);\r\n }\r\n else {\r\n setError('Apple Signin Failed. Try again');\r\n }\r\n }\r\n\r\n const LoginUser = async () => {\r\n var loginModel = formValues;\r\n\r\n const postOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(loginModel)\r\n };\r\n\r\n const response = await fetch('api/authenticate/login', postOptions);\r\n \r\n if (response.status == 200) {\r\n checkLogin();\r\n }\r\n else {\r\n setError('Username/Password combination failed. Try again');\r\n }\r\n \r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Login

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

\r\n
Or
\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n Forgot Password?\r\n
\r\n
\r\n \r\n
\r\n {error}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Or
\r\n
\r\n
\r\n Register\r\n
\r\n
\r\n
Or
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}","export default __webpack_public_path__ + \"static/media/poocoffee.343a17df.png\";","import React, { Component } from 'react';\r\nimport poocoffee from '../symbols/poocoffee.png';\r\nimport '../coffeesteam.css';\r\n\r\nexport const LoadingGraphic = (props) => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Loading...\r\n
\r\n
\r\n
\r\n );\r\n}","import React, { Component, useEffect, useState, useContext} from 'react';\r\nimport { Map } from './Map.js';\r\nimport { Login } from './authorization/Login';\r\nimport { useOnlineStatus } from './OnlineStatusProvider.js';\r\nimport { UserContext } from './authorization/UserProvider';\r\nimport { LoadingGraphic } from './LoadingGraphic.js';\r\n\r\nexport const Home = (props) => {\r\n const { user, isLoggingIn } = useContext(UserContext);\r\n //const isOnline = useOnlineStatus();\r\n const isOnline = true;\r\n const loginSuccess = () => {\r\n }\r\n\r\n //const isLoggingIn = true;\r\n //const user = null;\r\n if (isOnline) {\r\n if (user != null && user.isLoggedIn) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n else {\r\n if (isLoggingIn) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n else {\r\n return ;\r\n }\r\n }\r\n }\r\n else {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n Oops, looks like you are offline\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport const Privacy = (props) => {\r\n return (\r\n
\r\n

CrapMap Privacy Policy

\r\n

Last updated: February 09, 2022

\r\n

This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.

\r\n

We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the Privacy Policy Template.

\r\n

Interpretation and Definitions

\r\n

Interpretation

\r\n

The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.

\r\n

Definitions

\r\n

For the purposes of this Privacy Policy:

\r\n
    \r\n
  • \r\n

    Account means a unique account created for You to access our Service or parts of our Service.

    \r\n
  • \r\n
  • \r\n

    Application means the software program provided by the Company downloaded by You on any electronic device, named CrapMap

    \r\n
  • \r\n
  • \r\n

    Company (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to CrapMap.

    \r\n
  • \r\n
  • \r\n

    Country refers to: Georgia, United States

    \r\n
  • \r\n
  • \r\n

    Device means any device that can access the Service such as a computer, a cellphone or a digital tablet.

    \r\n
  • \r\n
  • \r\n

    Personal Data is any information that relates to an identified or identifiable individual.

    \r\n
  • \r\n
  • \r\n

    Service refers to the Application.

    \r\n
  • \r\n
  • \r\n

    Service Provider means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used.

    \r\n
  • \r\n
  • \r\n

    You means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.

    \r\n
  • \r\n
\r\n

Collecting and Using Your Personal Data

\r\n

Types of Data Collected

\r\n

Personal Data

\r\n

While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:

\r\n
    \r\n
  • \r\n

    Email address

    \r\n
  • \r\n
\r\n

Information Collected while Using the Application

\r\n

While using Our Application, in order to provide features of Our Application, We may collect, with Your prior permission:

\r\n
    \r\n
  • Information regarding your location
  • \r\n
\r\n

We use this information to provide features of Our Service, to improve and customize Our Service. The information may be uploaded to the Company's servers and/or a Service Provider's server or it may be simply stored on Your device.

\r\n

You can enable or disable access to this information at any time, through Your Device settings.

\r\n

Use of Your Personal Data

\r\n

The Company may use Personal Data for the following purposes:

\r\n
    \r\n
  • \r\n

    To manage Your Account: to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user.

    \r\n
  • \r\n
  • \r\n

    To contact You: To contact You by email in the case You choose to reset your password.

    \r\n
  • \r\n
  • \r\n

    To manage Your requests: To attend and manage Your requests to Us.

    \r\n
  • \r\n
\r\n

Retention of Your Personal Data

\r\n

The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.

\r\n

Disclosure of Your Personal Data

\r\n

Business Transactions

\r\n

If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.

\r\n

Law enforcement

\r\n

Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).

\r\n

Other legal requirements

\r\n

The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:

\r\n
    \r\n
  • Comply with a legal obligation
  • \r\n
  • Protect and defend the rights or property of the Company
  • \r\n
  • Prevent or investigate possible wrongdoing in connection with the Service
  • \r\n
  • Protect the personal safety of Users of the Service or the public
  • \r\n
  • Protect against legal liability
  • \r\n
\r\n

Security of Your Personal Data

\r\n

The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.

\r\n

Children's Privacy

\r\n

Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers.

\r\n

If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information.

\r\n

Links to Other Websites

\r\n

Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit.

\r\n

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

\r\n

Changes to this Privacy Policy

\r\n

We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page.

\r\n

We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the "Last updated" date at the top of this Privacy Policy.

\r\n

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

\r\n

Contact Us

\r\n

If you have any questions about this Privacy Policy, You can contact us:

\r\n
    \r\n
  • By email: rynanjnsn@gmail.com
  • \r\n
\r\n \r\n
\r\n );\r\n\r\n}","import { parseJSON } from 'jquery';\r\nimport React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UserContext } from './authorization/UserProvider';\r\n\r\nexport const Profile = (props) => {\r\n const [formValues, setValues] = useState({\r\n username: '',\r\n email: '',\r\n });\r\n\r\n const [errors, setErrors] = useState({\r\n username: '',\r\n email: '',\r\n apiresponse: ''\r\n });\r\n\r\n const { user, checkLogin } = useContext(UserContext);\r\n\r\n const handleInputChange = (e) => {\r\n setErrors({ ...errors, apiresponse: '' });\r\n\r\n const value = e.target.value;\r\n\r\n if (e.target.name == 'username') {\r\n validateUsername(value);\r\n }\r\n if (e.target.name == 'email') {\r\n validateEmail(value);\r\n }\r\n\r\n setValues({ ...formValues, [e.target.name]: value });\r\n }\r\n\r\n const validateUsername = (value) => {\r\n if (value.length == 0) {\r\n setErrors({ ...errors, username: 'user name required!' });\r\n return false;\r\n }\r\n else {\r\n setErrors({ ...errors, username: '' });\r\n return true;\r\n }\r\n }\r\n\r\n const validateEmail = (value) => {\r\n if (value.length == 0) {\r\n setErrors({ ...errors, email: 'email required!' });\r\n return false;\r\n }\r\n else {\r\n setErrors({ ...errors, email: '' });\r\n return true;\r\n }\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n //first round validation\r\n let valid = validateUsername(formValues.username) &&\r\n validateEmail(formValues.email)\r\n\r\n if (valid) {\r\n //call to register\r\n EditUser();\r\n }\r\n }\r\n\r\n const getUser = async () => {\r\n\r\n const response = await fetch('api/authenticate/profile');\r\n\r\n const data = await response?.json();\r\n\r\n setValues({ username: data?.username, email: data?.email });\r\n }\r\n\r\n const EditUser = async () => {\r\n var profileModel = formValues;\r\n\r\n const postOptions = {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(profileModel)\r\n };\r\n\r\n const response = await fetch('api/authenticate/profile', postOptions);\r\n\r\n if (response.status == 200) {\r\n\r\n //const userInfo = {\r\n // username: formValues.username,\r\n // isLoggedIn: true\r\n //};\r\n //updateUser(userInfo);\r\n await checkLogin();\r\n props.history.push('/');\r\n }\r\n else {\r\n response.text().then(value => {\r\n //alert(parseJSON(value)?.message);\r\n let err = parseJSON(value)?.message;\r\n if (err == null) {\r\n err = 'Register Failed. Make sure of the following:'\r\n + '\\n-Username, Email address are required.'\r\n + '\\n-Username should only have alphanumeric characters and underscores.';\r\n }\r\n setErrors({ ...errors, apiresponse: err });\r\n }\r\n );\r\n }\r\n }\r\n\r\n const onDeleteProfile = async () => {\r\n const r = window.confirm(\"Are you sure you want to delete your profile?!\");\r\n if (r == false)\r\n return;\r\n\r\n const postOptions = {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' }\r\n };\r\n\r\n const response = await fetch('api/authenticate/', postOptions);\r\n\r\n if (response.status == 200) {\r\n props.history.push('/authorization/Logout');\r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (user == null || user.isLoggedIn == false) {\r\n props.history.push('/');\r\n return;\r\n }\r\n\r\n getUser();\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Profile

\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {errors.username}\r\n
\r\n
\r\n \r\n \r\n \r\n {errors.email}\r\n
\r\n
\r\n
\r\n \r\n Cancel\r\n
\r\n
\r\n
\r\n {errors.apiresponse}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}","import React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UserContext } from './UserProvider';\r\n\r\nexport const UserManager = (props) => {\r\n const [role, setRole] = useState('');\r\n const [roles, setRoles] = useState({});\r\n const [users, setUsers] = useState({});\r\n\r\n const { user } = useContext(UserContext);\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.value;\r\n\r\n setRole(value);\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n if (role != '')\r\n CreateRole();\r\n\r\n }\r\n\r\n const CreateRole = async () => {\r\n var roleModel = { Name: role };\r\n\r\n const postOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(roleModel)\r\n };\r\n\r\n const response = await fetch('api/authenticate/role', postOptions);\r\n\r\n if (response.status == 200) {\r\n alert(\"success\");\r\n GetRoles();\r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n }\r\n }\r\n\r\n const GetRoles = async () => {\r\n const response = await fetch('api/authenticate/roles');\r\n\r\n if (response.status == 200) {\r\n const roles = await response?.json();\r\n setRoles(roles);\r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n }\r\n }\r\n\r\n const GetUsers = async () => {\r\n const response = await fetch('api/authenticate/usersdata');\r\n\r\n if (response.status == 200) {\r\n const users = await response?.json();\r\n \r\n setUsers(users);\r\n }\r\n else {\r\n response.text().then(text => alert(text));\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n GetRoles();\r\n GetUsers();\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n Users (count: {users?.length})\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {Object.values(users).map((_user) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
UserRole#Ratings#Crappers
{_user.userName}{_user.role}{_user.numRatings}{_user.numCrappersCreated}
\r\n
\r\n
\r\n
\r\n
Roles
\r\n
\r\n
\r\n {Object.values(roles).map((_role) =>\r\n
{_role.name}
\r\n )}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Cancel\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","import React, { useEffect, useContext, useState } from 'react';\r\nimport { UserContext } from './authorization/UserProvider';\r\nimport { Poochievement } from './Poochievement';\r\n\r\nexport const Poochievements = (props) => {\r\n const { user } = useContext(UserContext);\r\n const [pooChievements, setPoochievements] = useState({})\r\n\r\n useEffect(() => {\r\n getPoochievements();\r\n }, []);\r\n\r\n const getPoochievements = async (/*args*/) => {\r\n const response = await fetch('api/poochievements');\r\n\r\n if (response.status == 200) {\r\n const data = await response?.json();\r\n setPoochievements(data);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {Object.values(pooChievements).map((pooChievement) =>\r\n
\r\n \r\n
\r\n )}\r\n
\r\n );\r\n}","import React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { Link, useLocation, Redirect } from 'react-router-dom';\r\nimport { UserContext } from './UserProvider';\r\n\r\nexport const GoogleResponse = (props) => {\r\n //alert('asdf');\r\n const querystr = new URLSearchParams(useLocation().search);\r\n\r\n const { user, checkLogin } = useContext(UserContext);\r\n\r\n const [signingIn, setSigningIn] = useState(false);\r\n\r\n useEffect(() => {\r\n //alert(querystr);\r\n googleLogin();\r\n\r\n }, []);\r\n\r\n const googleLogin = async () => {\r\n setSigningIn(true);\r\n const postOptions = {\r\n method: 'GET',\r\n };\r\n\r\n const response = await fetch('identity/signin-google?' + querystr, postOptions);\r\n\r\n if (response.status == 200) {\r\n const response2 = await fetch('api/authenticate/externalresponse', postOptions);\r\n\r\n }\r\n else {\r\n alert('Google Login Failed');\r\n }\r\n\r\n checkLogin();\r\n\r\n setSigningIn(false);\r\n props.history.push('/');\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {signingIn &&\r\n
\r\n Checking Login\r\n
\r\n ...\r\n
\r\n
\r\n }\r\n
\r\n );\r\n}","import React, { Component, useEffect, useState, useContext } from 'react';\r\nimport { Link, useLocation, Redirect } from 'react-router-dom';\r\nimport { UserContext } from './UserProvider';\r\n\r\nexport const AppleResponse = (props) => {\r\n //alert('asdf');\r\n //const querystr = new URLSearchParams(useLocation().search);\r\n\r\n const { user, checkLogin } = useContext(UserContext);\r\n\r\n const [signingIn, setSigningIn] = useState(false);\r\n\r\n useEffect(() => {\r\n //alert(querystr);\r\n appleLogin();\r\n\r\n }, []);\r\n\r\n const appleLogin = async () => {\r\n setSigningIn(true);\r\n const postOptions = {\r\n method: 'GET',\r\n };\r\n\r\n //const response = await fetch('api/authenticate/googleresponse', postOptions);\r\n //const response = await fetch('identity/signin-apple', postOptions);\r\n\r\n //if (response.status == 200) {\r\n const response2 = await fetch('api/authenticate/externalresponse', postOptions);\r\n\r\n //}\r\n //else {\r\n //alert('Apple Login Failed');\r\n //}\r\n\r\n checkLogin();\r\n\r\n setSigningIn(false);\r\n props.history.push('/');\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {signingIn &&\r\n
\r\n Checking Login\r\n
\r\n ...\r\n
\r\n
\r\n }\r\n
\r\n );\r\n}","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { OnlineStatusProvider } from './components/OnlineStatusProvider';\r\nimport { Layout } from './components/Layout';\r\nimport { ReportBug } from './components/ReportBug';\r\nimport { Register } from './components/authorization/Register';\r\nimport { Logout } from './components/authorization/Logout';\r\nimport { UserProvider } from './components/authorization/UserProvider';\r\nimport { ForgotPassword } from './components/authorization/ForgotPassword';\r\nimport { ResetPassword } from './components/authorization/ResetPassword';\r\nimport { Home } from './components/Home';\r\nimport { Privacy } from './components/Privacy';\r\nimport { Profile } from './components/Profile';\r\nimport { UserManager } from './components/authorization/UserManager';\r\nimport './custom.css';\r\nimport { SoundProvider } from './components/SoundProvider';\r\nimport { ServiceWorkerProvider } from './components/ServiceWorkerProvider';\r\nimport { Poochievements } from './components/Poochievements';\r\nimport { PoochievementNotification } from './components/PoochievementNotification';\r\nimport { GoogleResponse } from './components/authorization/GoogleResponse';\r\nimport { AppleResponse } from './components/authorization/AppleResponse';\r\nimport { NotificationProvider } from './components/NotificationProvider';\r\n\r\nconst App = () => {\r\n const displayName = App.name;\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\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n window.location.hostname === 'local.test' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n //const swUrl = `./service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n else if (process.env.NODE_ENV === 'development' && 'serviceWorker' in navigator) {\r\n window.addEventListener('load', () => {\r\n //const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n const swUrl = `./service-worker-dev.js`;\r\n\r\n //if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n //} else {\r\n // Is not local host. Just register service worker\r\n //registerValidSW(swUrl);\r\n //}\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport 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// Uncomment the line above that imports the registerServiceWorker function\r\n// and the line below to register the generated service worker.\r\n// By default create-react-app includes a service worker to improve the\r\n// performance of the application by caching static assets. This service\r\n// worker can interfere with the Identity UI, so it is\r\n// disabled by default when Identity is being used.\r\n//\r\nregisterServiceWorker();\r\n\r\n"],"sourceRoot":""}