{"version":3,"sources":["components/PageHeader.js","util/Helper.js","components/ListItem.js","components/ImageGrid.js","components/ListItemDetails.js","components/ListingModal.js","components/MapContainer.js","components/FilterPopover.js","components/Listings.js","components/BookmarkUnit.js","App.js","serviceWorker.js","index.js"],"names":["PageHeader","props","headerRef","useRef","id","className","ref","href","src","logo","alt","formatPhoneNumber","phoneNumber","match","replace","isPlural","number","ListItem","onMouseOver","console","log","class","onClick","evt","preventDefault","itemSelect","listing","locationGroupTitle","listingAddress","title","unitTypeTitle","rent","leaseTypeTitle","bedroomCount","icon","faPhone","contactPhone","description","Button","ImageGrid","useState","isOpen","setIsOpen","index","setIndex","images","photos","closeLightbox","fadeProperties","defaultIndex","Slideshow","map","each","key","style","display","margin","width","event","photo","ListItemDetails","detailedData","setDetailedData","setPhotos","useEffect","a","axios","post","process","query","listingId","data","listingById","getHousing","imagesList","val","i","imageUrl","height","photoId","sizes","o","img","Image","decode","_","sortBy","locationGrouptitle","listingCity","contactName","contactEmail","faEnvelope","amenities","length","roommateAttributes","securityDeposit","leaseEndDate","moment","format","utilities","ListingModal","handleHide","setShowModal","Modal","show","showModal","onHide","container","aria-labelledby","Header","closeButton","Title","selectedListing","Body","Footer","to","marginRight","MapContainer","detectMobile","useMobileDetect","mapStyles","isMobile","minHeight","maxHeight","googleMapsApiKey","mapContainerStyle","zoom","center","lat","lng","listings","position","latitude","longitude","FilterGroups","group","groupLabel","filterHousing","filters","groupContent","leftGroupContent","rightGroupContent","forEach","item","Math","ceil","Checkbox","value","label","checked","onChange","target","FormGroup","controlId","ControlLabel","capitalize","CreateCheckboxes","FilterPopover","Popover","placement","anchorReference","onSubmit","Tabs","defaultActiveKey","Tab","eventKey","FormControl","type","placeholder","Feedback","componentClass","unitTypes","numOfRooms","locationGroups","formatDate","parseDate","availableDate","inputProps","onDayChange","day","distanceFromCampus","Radio","name","distanceType","setDistanceType","leaseTermTypes","disabled","dynamicAmenities","dynamicUtilities","roommates","dynamicRoommateAttributes","bsStyle","resetFilters","document","body","click","Listings","setDynamicAmenities","setDynamicUtilities","setDynamicRoommateAttributes","setUnitTypes","setNumOfRooms","setLeaseTermTypes","setLocationGroups","markers","setMarkers","setAmenities","setUtilities","setRoommates","setSelectedListing","isMapView","setIsMapView","filteredMarkers","filterBy","filterFor","filter","setFilters","delayedQuery","useCallback","debounce","q","v","popoverBottom","Object","keys","e","addDynamicVar","variable","dynamicVar","dynamicObj","camelCase","push","allAmenities","allUtilities","allRoommates","allUnitTypes","allNumOfRooms","allLocationGroups","allLeaseTypes","dynamicAmenitiesVars","dynamicUtilitiesVars","dynamicRoommateAttributesVars","Set","sort","reverse","amenity","indexOf","utility","roommate","Array","isArray","entries","x","parseFloat","parseInt","dateAvailable","isBefore","filterVar","includes","doFiltering","faInfoCircle","OverlayTrigger","trigger","overlay","current","containerPadding","rootClose","role","containerElement","mapElement","Col","md","aria-expanded","backgroundColor","Row","lg","data-side","params","ImageSrc","printArray","dataArray","faArrowLeft","listingZipCode","Grid","marginLeft","App","path","component","BookmarkUnit","exact","render","Boolean","window","location","hostname","ReactDOM","StrictMode","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","error","message"],"mappings":"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","file":"static/js/main.a98b2dea.chunk.js","sourcesContent":["import React, {useRef} from 'react';\r\nimport logo from 'mnsu-webapp-core/images/mnsu-logo.png'\r\n\r\n\r\nconst PageHeader = (props) => {\r\n let headerRef = useRef(null);\r\n\r\n return(\r\n
\r\n
\r\n \"Minnesota\r\n \"Minnesota \r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nexport default PageHeader;","import moment from 'moment';\r\n\r\nexport const formatPhoneNumber = (phoneNumber) => {\r\n var cleaned = ('' + phoneNumber).replace(/\\D/g, '');\r\n var match = cleaned.match(/^(\\d{3})(\\d{3})(\\d{4})$/);\r\n if (match) {\r\n return '(' + match[1] + ') ' + match[2] + '-' + match[3];\r\n }\r\n return null;\r\n};\r\n\r\nexport const isPlural = (number) => {\r\n return number > 1 ? 's':'';\r\n}\r\n\r\nexport const milesToKm = (miles) => {\r\n return miles*1.60934;\r\n}\r\n\r\nexport const kmToMiles = (km) => {\r\n return km*0.621371;\r\n}\r\n\r\n\r\nexport const doFiltering = (filteredMarkers, filters, dynamicAmenities, dynamicUtilities, dynamicRoommateAttributes, distanceType) => {\r\n Object.entries(filters)\r\n .filter(([key, value]) => value !== '')\r\n .forEach(([key, val]) => {\r\n if (key === 'unitTypeTitle') {\r\n filteredMarkers = filteredMarkers.filter(\r\n (x) => x.unitTypeTitle === val\r\n );\r\n } else if (key === 'rent') {\r\n filteredMarkers = filteredMarkers.filter(\r\n (x) => parseFloat(x.rent) <= parseFloat(val)\r\n );\r\n } else if (key === 'bedroomCount') {\r\n filteredMarkers = filteredMarkers.filter(\r\n (x) => parseInt(x.bedroomCount) === parseInt(val)\r\n );\r\n } else if (key === 'availableDate') {\r\n filteredMarkers = filteredMarkers.filter((x) =>\r\n moment(x.dateAvailable).isBefore(\r\n moment(val, 'MM/DD/YYYY').format('YYYY-MM-DD'),\r\n 'day'\r\n )\r\n );\r\n } else if (key === 'leaseTypeTitle') {\r\n filteredMarkers = filteredMarkers.filter(\r\n (x) => x.leaseTypeTitle === val\r\n ); \r\n } else if (key === 'locationGroupTitle') {\r\n filteredMarkers = filteredMarkers.filter(\r\n (x) => x.locationGroupTitle === val\r\n );\r\n } else if (key === 'distanceFromCampus') {\r\n if (distanceType === 'mile') {\r\n filteredMarkers = filteredMarkers.filter((x) => x.distanceFromCampus <= val);\r\n } else {\r\n filteredMarkers = filteredMarkers.filter((x) => x.distanceFromCampus <= kmToMiles(val));\r\n }\r\n } else {\r\n dynamicAmenities.forEach((filterVar) => {\r\n if (key === filterVar['key'] && val) {\r\n filteredMarkers = filteredMarkers.filter((x) => \r\n x.amenities.includes(filterVar['value'])\r\n );\r\n }\r\n });\r\n dynamicUtilities.forEach((filterVar) => {\r\n if (key === filterVar['key'] && val) {\r\n filteredMarkers = filteredMarkers.filter((x) => \r\n x.utilities.includes(filterVar['value'])\r\n );\r\n }\r\n });\r\n dynamicRoommateAttributes.forEach((filterVar) => {\r\n if (key === filterVar['key'] && val) {\r\n filteredMarkers = filteredMarkers.filter((x) => \r\n x.roommateAttributes.includes(filterVar['value'])\r\n );\r\n }\r\n });\r\n } \r\n });\r\n return filteredMarkers;\r\n}\r\n\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPhone } from '@fortawesome/free-solid-svg-icons';\r\nimport { formatPhoneNumber, isPlural } from '../util/Helper';\r\nimport { Button } from 'react-bootstrap';\r\n\r\nconst ListItem = (props) => {\r\n const ImageSrc = () => {\r\n if (props.listing.photos && props.listing.photos.length) {\r\n return ({props.listing.photos[0].title});\r\n } else {\r\n return ({props.title);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
{\r\n evt.preventDefault();\r\n props.itemSelect(props.listing);\r\n }}>{(props.listing.locationGroupTitle) ? props.listing.locationGroupTitle : props.listing.listingAddress}
\r\n {/*
\r\n
\r\n \r\n
\r\n
*/}{console.log('locationGrouptitle', props.listing.locationGroupTitle)}\r\n
\r\n

{props.title}

\r\n \r\n {/*

\r\n {\r\n evt.preventDefault();\r\n props.itemSelect(props.listing);\r\n }}\r\n aria-label=\"{props.title}\"\r\n >\r\n {props.title}\r\n\r\n \r\n

*/}\r\n
\r\n

\r\n {props.listing.unitTypeTitle}
${props.listing.rent}
\r\n {props.listing.leaseTypeTitle} lease
{props.listing.bedroomCount}{' '}\r\n bedroom{isPlural(props.listing.bedroomCount)}
{formatPhoneNumber(props.listing.contactPhone)}\r\n

\r\n
\r\n {

{props.description}

}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default ListItem;\r\n","import React, { useState } from \"react\";\r\nimport Gallery from \"react-photo-gallery\";\r\nimport { Fade } from \"react-slideshow-image\";\r\nimport \"react-slideshow-image/dist/styles.css\";\r\n\r\nconst ImageGrid = (props) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [index, setIndex] = useState(0);\r\n const images = props.photos;\r\n const openLightbox = ((event, { photo, index }) => {\r\n setIsOpen(true);\r\n setIndex(index);\r\n });\r\n const closeLightbox = () => {\r\n setIsOpen(false);\r\n };\r\n\r\n const fadeProperties = {\r\n defaultIndex: index\r\n };\r\n\r\n const Slideshow = () => {\r\n return (\r\n
\r\n \r\n {images.map((each, index) => (\r\n
\r\n {each.title}\r\n
\r\n

{each.title}

\r\n
\r\n
\r\n ))}\r\n
\r\n
\r\n );\r\n };\r\n \r\n return (\r\n
\r\n {!(isOpen) ? : }\r\n
\r\n );\r\n}\r\n\r\nexport default ImageGrid;","import React, { useEffect, useState } from 'react';\r\nimport axios from 'axios';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPhone, faEnvelope } from '@fortawesome/free-solid-svg-icons';\r\nimport { formatPhoneNumber, isPlural } from '../util/Helper';\r\nimport { Grid, Row, Col } from 'react-bootstrap';\r\nimport ImageGrid from './ImageGrid';\r\nimport _ from 'lodash';\r\nimport moment from 'moment';\r\n\r\nconst ListItemDetails = (props) => {\r\n const [detailedData, setDetailedData] = useState([]);\r\n const [photos,setPhotos] = useState([]);\r\n useEffect(() => {\r\n const getHousing = async () => {\r\n const { data } = await axios.post(\r\n process.env.REACT_APP_API_GRAPHQL,\r\n {\r\n query: `\r\n {listingById (listingId:\"${props.listingId}\")\r\n {\r\n listingId,\r\n title, \r\n description, \r\n securityDeposit,\r\n rent,\r\n unitTypeTitle,\r\n listingAddress,\r\n listingCity,\r\n listingZipCode,\r\n roomsForRent,\r\n bedroomCount,\r\n dateAvailable,\r\n lengthOfLease,\r\n leaseEndDate,\r\n leaseTypeTitle,\r\n contactName,\r\n contactEmail,\r\n contactPhone,\r\n utilities,\r\n amenities,\r\n roommateAttributes,\r\n locationGroupTitle,\r\n photos {title, imageUrl}\r\n }\r\n }`,\r\n }\r\n );\r\n setDetailedData(data.data.listingById);\r\n };\r\n getHousing();\r\n }, [props.listingId]);\r\n\r\n useEffect(() => {\r\n if(detailedData.photos) {\r\n let imagesList = detailedData.photos.map((val,i)=>{\r\n\r\n return({\r\n src: process.env.REACT_APP_IMAGE_BASE + val.imageUrl,\r\n width: 100,\r\n height: 100,\r\n title: val.title,\r\n alt: val.title,\r\n key: val.photoId,\r\n id: val.photoId,\r\n sizes: '(min-width: 480px) 50vw, (min-width: 1024px) 33.3vw, 100vw',\r\n });\r\n });\r\n imagesList.map(o => {\r\n return (async () => {\r\n const img = new Image();\r\n img.src = o.src;\r\n await img.decode();\r\n o.width = img.width;\r\n o.height = img.height;\r\n return(o);\r\n })();\r\n });\r\n imagesList = _.sortBy(imagesList, 'sortorder' );\r\n setPhotos(imagesList);\r\n }\r\n }, [detailedData.photos]); \r\n\r\n const ImageSrc = () => { \r\n if (photos && photos.length) {\r\n return (); \r\n } else {\r\n /*return ({props.title); */\r\n return <>\r\n }\r\n }\r\n\r\n const printArray = (dataArray) => {\r\n if (dataArray) {\r\n return dataArray.map((item, index) => (\r\n

\r\n {item}\r\n

\r\n ));\r\n }\r\n };\r\n\r\n return (
\r\n
\r\n {/**/}\r\n

{(detailedData.locationGrouptitle) ? <>{detailedData.locationGroupTitle}
: ''} {detailedData.listingAddress}, {detailedData.listingCity}

\r\n

\r\n {' '}\r\n {detailedData.unitTypeTitle} | ${detailedData.rent} |{' '}\r\n {detailedData.leaseTypeTitle\r\n ? detailedData.leaseTypeTitle + ' lease | '\r\n : ''}\r\n {detailedData.bedroomCount} bedroom{isPlural(detailedData.bedroomCount)}\r\n

\r\n

{detailedData.title}

\r\n {/*
\r\n \r\n {' '}\r\n {formatPhoneNumber(detailedData.contactPhone)}\r\n \r\n
*/}\r\n

Contact

\r\n
\r\n {detailedData.contactName}{' '}
\r\n {' '}\r\n {formatPhoneNumber(detailedData.contactPhone)}{' '}
\r\n \r\n {detailedData.contactEmail}\r\n \r\n
\r\n

Details

\r\n {

{detailedData.description}

}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Amenities

\r\n {(detailedData.amenities && detailedData.amenities.length > 0) ?
    {detailedData.amenities.map((val) => {return
  • {val}
  • })}
:

No amenities listed

} \r\n
\r\n
\r\n
\r\n
\r\n

About the other residents

\r\n {(detailedData.roommateAttributes && detailedData.roommateAttributes.length > 0) ?
    {detailedData.roommateAttributes.map((val) => {return
  • {val}
  • })}
:

No additional information listed

}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Rental information

\r\n
\r\n {(detailedData.securityDeposit) ? <>
Security deposit
${detailedData.securityDeposit}
: ''}\r\n {(detailedData.rent) ? <>
Rent
${detailedData.rent}
: ''}\r\n {(detailedData.leaseTypeTitle) ? <>
Lease type
{detailedData.leaseTypeTitle}
: ''}\r\n {(detailedData.leaseEndDate) ? <>
Lease end date
{(moment(detailedData.leaseEndDate).format('MM/DD/YYYY') === '01/01/0001') ? 'Flexible' : moment(detailedData.leaseEndDate).format('MM/DD/YYYY')}
: ''}\r\n {(detailedData.unitTypeTitle) ? <>
Unit type
{detailedData.unitTypeTitle}
: ''}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Utilities included in rent

\r\n {(detailedData.utilities && detailedData.utilities.length > 0) ?
    {detailedData.utilities.map((val) => {return
  • {val}
  • })}
:

No utilities listed

} \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n );\r\n};\r\n\r\nexport default ListItemDetails;\r\n","import React from 'react';\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport ListItemDetails from './ListItemDetails';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst ListingModal = (props) => {\r\n const handleHide = () => {\r\n props.setShowModal(false);\r\n };\r\n return (\r\n \r\n \r\n \r\n {console.log('selectedListing', props.selectedListing)}\r\n {(props.selectedListing.locationGroupTitle) ? props.selectedListing.locationGroupTitle : props.selectedListing.listingAddress}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Open as a link\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ListingModal;","import React from 'react';\r\nimport { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';\r\nimport useMobileDetect from 'use-mobile-detect-hook';\r\n\r\nconst MapContainer = (props) => {\r\n const detectMobile = useMobileDetect();\r\n\r\n const mapStyles = {\r\n height: detectMobile.isMobile() ? '50vh' : '90vh',\r\n width: '100%',\r\n minHeight: '100%',\r\n maxHeight: 'none',\r\n };\r\n\r\n const defaultCenter = {\r\n lat: 44.1513,\r\n lng: -94.0005,\r\n };\r\n\r\n return (\r\n \r\n \r\n {props.listings.map((val) => {\r\n return (\r\n {\r\n props.itemSelect(val);\r\n }}\r\n icon= 'houseIcon.png'\r\n key= {val.listingId}\r\n position={{ lat: val.latitude, lng: val.longitude }}\r\n title={val.listingAddress}\r\n />\r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MapContainer;","import React from 'react';\r\nimport {\r\n Button,\r\n Tabs,\r\n Tab,\r\n Popover,\r\n Checkbox,\r\n FormGroup,\r\n ControlLabel,\r\n FormControl,\r\n Radio\r\n} from 'react-bootstrap';\r\nimport DayPickerInput from 'react-day-picker/DayPickerInput';\r\nimport moment from 'moment';\r\nimport 'react-day-picker/lib/style.css';\r\nimport { formatDate, parseDate } from 'react-day-picker/moment';\r\nimport _ from 'lodash';\r\n\r\nconst CreateCheckboxes = (group, groupLabel, filterHousing, filters) => {\r\n let groupContent = '';\r\n let leftGroupContent = '';\r\n let rightGroupContent = '';\r\n group.forEach((item, key) => {\r\n if (key < Math.ceil(group.length / 2)) {\r\n groupContent = (\r\n {\r\n filterHousing(evt.target.checked, item['key']);\r\n }}\r\n key={item['key']}\r\n >\r\n {item['value']}\r\n \r\n );\r\n leftGroupContent = [leftGroupContent, groupContent];\r\n } else {\r\n groupContent = (\r\n {\r\n filterHousing(evt.target.checked, item['key']);\r\n }}\r\n key={item['key']}\r\n >\r\n {item['value']}\r\n \r\n );\r\n rightGroupContent = [rightGroupContent, groupContent];\r\n }\r\n });\r\n return (\r\n \r\n {_.capitalize(groupLabel)}\r\n
\r\n
\r\n {leftGroupContent}\r\n
\r\n
\r\n {rightGroupContent}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst FilterGroups = (props) => {\r\n if (props.group.length) {\r\n return CreateCheckboxes(\r\n props.group,\r\n props.groupLabel,\r\n props.filterHousing,\r\n props.filters\r\n );\r\n } else {\r\n return '';\r\n }\r\n};\r\n\r\nconst FilterPopover = (props) => {\r\n return (\r\n \r\n {\r\n evt.preventDefault();\r\n }}\r\n >\r\n \r\n \r\n \r\n Maximum rent\r\n {\r\n props.filterHousing(evt.target.value, 'rent');\r\n }}\r\n />\r\n \r\n {/*Validation is based on string length.*/}\r\n \r\n \r\n Housing type\r\n {\r\n props.filterHousing(evt.target.value, 'unitTypeTitle');\r\n }}\r\n >\r\n \r\n {props.unitTypes.map((item) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n Number of rooms\r\n {\r\n props.filterHousing(evt.target.value, 'bedroomCount');\r\n }}\r\n >\r\n \r\n {props.numOfRooms.map((item) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n Property Name\r\n {\r\n props.filterHousing(evt.target.value, 'locationGroupTitle');\r\n }}\r\n >\r\n \r\n {props.locationGroups.map((item) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n Desired Move in Date\r\n
\r\n \r\n props.filterHousing(\r\n moment(day).format('MM/DD/YYYY'),\r\n 'availableDate'\r\n )\r\n }\r\n />\r\n \r\n
\r\n
\r\n \r\n \r\n Distance\r\n {\r\n props.filterHousing(evt.target.value, 'distanceFromCampus');\r\n }}\r\n />\r\n \r\n \r\n Distance in: \r\n
\r\n
\r\n {\r\n props.setDistanceType('mile');\r\n }}\r\n key='miles'\r\n >\r\n Miles\r\n \r\n
\r\n
\r\n {\r\n props.setDistanceType('km');\r\n }}\r\n key='km'\r\n >\r\n Kilometers\r\n \r\n
\r\n
\r\n
\r\n\r\n {/*Validation is based on string length.*/}\r\n
\r\n \r\n Lease type\r\n {\r\n props.filterHousing(evt.target.value, 'leaseTypeTitle');\r\n }}\r\n >\r\n \r\n {props.leaseTermTypes.map((item) => (\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 evt.preventDefault();\r\n props.resetFilters();\r\n }}\r\n >\r\n Clear filters\r\n {' '}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default FilterPopover;\r\n","import React, { useEffect, useState, useCallback, useRef } from 'react';\r\nimport ListItem from './ListItem';\r\nimport ListingModal from './ListingModal';\r\nimport {\r\n Row,\r\n Col,\r\n Button,\r\n ButtonGroup,\r\n OverlayTrigger,\r\n} from 'react-bootstrap';\r\nimport axios from 'axios';\r\nimport MapContainer from './MapContainer';\r\nimport FilterPopover from './FilterPopover';\r\nimport _ from 'lodash';\r\nimport 'react-day-picker/lib/style.css';\r\nimport { doFiltering } from '../util/Helper';\r\nimport 'moment/locale/it';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons';\r\n\r\nconst Listings = (props) => {\r\n // Getter and setter for user state\r\n const [dynamicAmenities, setDynamicAmenities] = useState([]);\r\n const [dynamicUtilities, setDynamicUtilities] = useState([]);\r\n const [dynamicRoommateAttributes, setDynamicRoommateAttributes] = useState([]);\r\n const [unitTypes, setUnitTypes] = useState([]);\r\n const [numOfRooms, setNumOfRooms] = useState([]);\r\n const [leaseTermTypes, setLeaseTermTypes] = useState([]);\r\n const [locationGroups, setLocationGroups] = useState([]);\r\n const [markers, setMarkers] = useState([]);\r\n const [amenities, setAmenities] = useState([]);\r\n const [utilities, setUtilities] = useState([]);\r\n const [roommates, setRoommates] = useState([]);\r\n const [showModal, setShowModal] = useState(false);\r\n const [selectedListing, setSelectedListing] = useState({});\r\n const [isMapView, setIsMapView] = useState(true);\r\n const [distanceType, setDistanceType] = useState('mile');\r\n\r\n let filteredMarkers = '';\r\n\r\n const filterHousing = (filterBy, filterFor) => {\r\n const filter = { ...props.filters };\r\n filter[filterFor] = filterBy;\r\n props.setFilters(filter);\r\n };\r\n\r\n const resetFilters = () => {\r\n const filter = { ...props.filters };\r\n Object.keys(filter).map(e => filter[e] = '');\r\n props.setFilters(filter);\r\n }\r\n const delayedQuery = useCallback(\r\n _.debounce((q, v) => filterHousing(q, v), 700),\r\n []\r\n );\r\n\r\n const popoverBottom = (\r\n \r\n );\r\n\r\n const itemSelect = (listing) => {\r\n setSelectedListing(listing);\r\n setShowModal(true);\r\n };\r\n\r\n const ref = useRef(null);\r\n\r\n const addDynamicVar = (variable, dynamicVar) => {\r\n let dynamicObj = {\r\n 'key': _.camelCase(variable),\r\n 'value' : variable\r\n }\r\n dynamicVar.push(dynamicObj);\r\n }\r\n\r\n useEffect(() => {\r\n const getHousing = async () => {\r\n let allAmenities = [];\r\n let allUtilities = [];\r\n let allRoommates = [];\r\n let allUnitTypes = [];\r\n let allNumOfRooms = [];\r\n let allLocationGroups = [];\r\n let allLeaseTypes = [];\r\n let dynamicAmenitiesVars = [];\r\n let dynamicUtilitiesVars = [];\r\n let dynamicRoommateAttributesVars = [];\r\n const { data } = await axios.post(\r\n process.env.REACT_APP_API_GRAPHQL,\r\n {\r\n query: `\r\n {listings \r\n {\r\n listingId,\r\n title, \r\n rent,\r\n roomsForRent,\r\n bedroomCount,\r\n dateAvailable,\r\n unitTypeTitle,\r\n leaseTypeTitle,\r\n listingAddress,\r\n latitude,\r\n longitude,\r\n roommateAttributes,\r\n amenities,\r\n utilities,\r\n contactPhone,\r\n distanceFromCampus,\r\n locationGroupTitle,\r\n photos {title, imageUrl}\r\n }\r\n }`,\r\n }\r\n );\r\n setMarkers(data.data.listings);\r\n\r\n allUnitTypes = [...new Set(data.data.listings.map(item => item.unitTypeTitle))].sort();\r\n allNumOfRooms = [...new Set(data.data.listings.map(item => item.bedroomCount))].sort();\r\n allLocationGroups = [...new Set(data.data.listings.filter(item => item.locationGroupTitle !== null).map(item => item.locationGroupTitle))].sort();\r\n allLeaseTypes = [...new Set(data.data.listings.map(item => item.leaseTypeTitle))].sort().reverse();\r\n \r\n data.data.listings.forEach((listing) => {\r\n if (listing.amenities) {\r\n listing.amenities.forEach((amenity) => {\r\n if (allAmenities.indexOf(amenity) === -1 ) { \r\n allAmenities.push(amenity); \r\n addDynamicVar(amenity, dynamicAmenitiesVars); \r\n }\r\n });\r\n }\r\n if (listing.utilities) {\r\n listing.utilities.forEach((utility) => {\r\n if (allUtilities.indexOf(utility) === -1 ) { \r\n allUtilities.push(utility); \r\n addDynamicVar(utility, dynamicUtilitiesVars); \r\n }\r\n });\r\n }\r\n if (listing.roommateAttributes) {\r\n listing.roommateAttributes.forEach((roommate) => {\r\n if (allRoommates.indexOf(roommate) === -1 ) { \r\n allRoommates.push(roommate); \r\n addDynamicVar(roommate, dynamicRoommateAttributesVars); \r\n }\r\n });\r\n }\r\n\r\n setAmenities(allAmenities);\r\n setUtilities(allUtilities);\r\n setRoommates(allRoommates);\r\n setDynamicAmenities(dynamicAmenitiesVars);\r\n setDynamicUtilities(dynamicUtilitiesVars);\r\n setDynamicRoommateAttributes(dynamicRoommateAttributesVars);\r\n setNumOfRooms(allNumOfRooms);\r\n setUnitTypes(allUnitTypes);\r\n setLocationGroups(allLocationGroups);\r\n setLeaseTermTypes(allLeaseTypes);\r\n });\r\n };\r\n\r\n getHousing();\r\n }, []);\r\n\r\n filteredMarkers = markers;\r\n\r\n if (Array.isArray(markers) && props.filters) {\r\n filteredMarkers = doFiltering(filteredMarkers, props.filters, dynamicAmenities, dynamicUtilities, dynamicRoommateAttributes, distanceType);\r\n }\r\n\r\n return Array.isArray(filteredMarkers) ? ( \r\n <>\r\n \r\n {isMapView && (\r\n
\r\n
\r\n
\r\n }\r\n mapElement={
}\r\n />\r\n \r\n
\r\n )}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n

Number of Units Available: {filteredMarkers.length}

\r\n
\r\n
\r\n \r\n {filteredMarkers.map((val, 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
Loading...
\r\n );\r\n};\r\n\r\nexport default Listings;\r\n","import React, { useEffect, useState } from 'react';\r\nimport axios from 'axios';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {\r\n faPhone,\r\n faEnvelope,\r\n faArrowLeft,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { formatPhoneNumber, isPlural } from '../util/Helper';\r\nimport { Link } from 'react-router-dom';\r\nimport {\r\n Grid,\r\n Row,\r\n Col,\r\n} from 'react-bootstrap';\r\nimport ImageGrid from './ImageGrid';\r\nimport _ from 'lodash';\r\nimport moment from 'moment';\r\n\r\nconst ListingModal = (props) => {\r\n const [detailedData, setDetailedData] = useState([]);\r\n const [photos,setPhotos] = useState([]);\r\n useEffect(() => {\r\n const getHousing = async () => {\r\n const { data } = await axios.post(\r\n process.env.REACT_APP_API_GRAPHQL,\r\n {\r\n query: `\r\n {listingById (listingId:\"${props.match.params.id}\")\r\n {\r\n listingId,\r\n title, \r\n description, \r\n securityDeposit,\r\n rent,\r\n unitTypeTitle,\r\n listingAddress,\r\n listingCity,\r\n listingZipCode,\r\n roomsForRent,\r\n bedroomCount,\r\n dateAvailable,\r\n lengthOfLease,\r\n leaseTypeTitle,\r\n leaseEndDate,\r\n contactName,\r\n contactEmail,\r\n contactPhone,\r\n utilities,\r\n amenities,\r\n roommateAttributes,\r\n locationGroupTitle,\r\n photos {title, imageUrl}\r\n }\r\n }`,\r\n }\r\n );\r\n setDetailedData(data.data.listingById);\r\n };\r\n\r\n getHousing();\r\n }, [props.match.params.id]);\r\n\r\n useEffect(() => {\r\n if(detailedData.photos) {\r\n let imagesList = detailedData.photos.map((val,i)=>{\r\n\r\n return({\r\n src: process.env.REACT_APP_IMAGE_BASE + val.imageUrl,\r\n width: 100,\r\n height: 100,\r\n title: val.title,\r\n alt: val.title,\r\n key: val.photoId,\r\n id: val.photoId,\r\n sizes: '(min-width: 480px) 50vw, (min-width: 1024px) 33.3vw, 100vw',\r\n });\r\n });\r\n imagesList.map(o => {\r\n return (async () => {\r\n const img = new Image();\r\n img.src = o.src;\r\n await img.decode();\r\n o.width = img.width;\r\n o.height = img.height;\r\n return(o);\r\n })();\r\n });\r\n imagesList = _.sortBy(imagesList, 'sortorder' );\r\n setPhotos(imagesList);\r\n }\r\n}, [detailedData.photos]); \r\n\r\nconst ImageSrc = () => { \r\n if (photos && photos.length) {\r\n return (); \r\n } else {\r\n return ({props.title); \r\n }\r\n}\r\n const printArray = (dataArray) => {\r\n if (dataArray) {\r\n return dataArray.map((item, index) => (\r\n

\r\n {item}\r\n

\r\n ));\r\n }\r\n };\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n

{detailedData.listingAddress}, {detailedData.listingCity} {detailedData.listingZipCode} {detailedData.locationGroupTitle ?
{detailedData.locationGroupTitle}
: ''}

\r\n

\r\n {' '}\r\n {detailedData.unitTypeTitle} | ${detailedData.rent} |{' '}\r\n {detailedData.leaseTypeTitle\r\n ? detailedData.leaseTypeTitle + ' lease | '\r\n : ''}\r\n {detailedData.bedroomCount} bedroom{isPlural(detailedData.bedroomCount)}\r\n

\r\n

\r\n \r\n {' '}\r\n {formatPhoneNumber(detailedData.contactPhone)}\r\n \r\n

\r\n {

{detailedData.description}

}\r\n \r\n \r\n \r\n \r\n
\r\n {printArray(detailedData.amenities)}\r\n
\r\n \r\n \r\n \r\n
\r\n {printArray(detailedData.roommateAttributes)}\r\n
\r\n \r\n \r\n \r\n
\r\n

\r\n Security deposit: ${detailedData.securityDeposit}\r\n

\r\n

\r\n Monthly rent: ${detailedData.rent}\r\n

\r\n

\r\n Lease type: {detailedData.leaseTypeTitle}\r\n

\r\n

\r\n Lease end date: {(moment(detailedData.leaseEndDate).format('MM/DD/YYYY') === '01/01/0001') ? 'Flexible' : moment(detailedData.leaseEndDate).format('MM/DD/YYYY')}\r\n

\r\n

\r\n Unit type: {detailedData.unitTypeTitle}\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n {printArray(detailedData.utilities)}\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n {' '}\r\n {detailedData.contactName}\r\n {' '}\r\n \r\n {' '}\r\n {formatPhoneNumber(detailedData.contactPhone)}\r\n {' '}\r\n \r\n {detailedData.contactEmail}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\nexport default ListingModal;\r\n","import React, { useState } from 'react';\r\nimport PageHeader from './components/PageHeader';\r\nimport PageFooter from './components/PageFooter';\r\nimport Listings from './components/Listings';\r\nimport BookmarkUnit from './components/BookmarkUnit';\r\nimport './App.css';\r\nimport {\r\n HashRouter as Router,\r\n Route\r\n} from 'react-router-dom';\r\n\r\n\r\nexport default function App(props) {\r\n const [filters, setFilters] = useState([]);\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","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport 'mnsu-webapp-core/styles/main.min.css'\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}