diff --git a/src/client.js b/src/client.js index c093ba0..7487e93 100644 --- a/src/client.js +++ b/src/client.js @@ -29,8 +29,8 @@ const isFunction = (functionToCheck) => { }; const requireAuth = (nextState, replace, next) => { - if (nextState.location.pathname === '/login' || nextState.location.pathname === '/sign-up' || (nextState.location.pathname.indexOf('/ride') > -1 && nextState.params.ride_uuid !== undefined && nextState.params.user_uuid !== undefined) - || (!isFunction(replace) && (replace.location.pathname === '/login' || replace.location.pathname === '/sign-up' || (replace.location.pathname.indexOf('/ride') > -1 && replace.params.ride_uuid !== undefined && replace.params.user_uuid !== undefined)))) { + if (nextState.location.pathname === '/login' || nextState.location.pathname === '/sign-up' || nextState.location.pathname === '/selfRegister' || (nextState.location.pathname.indexOf('/ride') > -1 && nextState.params.ride_uuid !== undefined && nextState.params.user_uuid !== undefined) + || (!isFunction(replace) && (replace.location.pathname === '/login' || replace.location.pathname === '/sign-up' || nextState.location.pathname === '/selfRegister' || (replace.location.pathname.indexOf('/ride') > -1 && replace.params.ride_uuid !== undefined && replace.params.user_uuid !== undefined)))) { next(); } diff --git a/src/components/Sidenav/SidenavContent.js b/src/components/Sidenav/SidenavContent.js index f017ccb..5a4becf 100644 --- a/src/components/Sidenav/SidenavContent.js +++ b/src/components/Sidenav/SidenavContent.js @@ -101,10 +101,10 @@ class SidebarContent extends React.Component { return ( diff --git a/src/routes/app/components/NEMTLocation.js b/src/routes/app/components/NEMTLocation.js index 0adb952..b2120f3 100644 --- a/src/routes/app/components/NEMTLocation.js +++ b/src/routes/app/components/NEMTLocation.js @@ -115,6 +115,7 @@ export class NEMTLocation extends React.Component { long: 0 }, providers: [], + locations: [], currentSelection: { id: 0, name: "", @@ -125,6 +126,7 @@ export class NEMTLocation extends React.Component { saved: false, }, inputValue: "", + locationValue: "", addLocation: false, searchAddresses: [], addLocationText: '', @@ -143,6 +145,12 @@ export class NEMTLocation extends React.Component { id: '', name: '', address: '', + }, + centerLocation: { + lat: 0, + long: 0, + name: '', + address: '', } } @@ -164,6 +172,8 @@ export class NEMTLocation extends React.Component { this.updateLocation = this.updateLocation.bind(this); this.handleGetClosestPlace = this.handleGetClosestPlace.bind(this); + this.updateLocationValue = this.updateLocationValue.bind(this); + this.handleAutoCompleteLocation = this.handleAutoCompleteLocation.bind(this); // this.updateLocation().then(console.log); @@ -184,52 +194,71 @@ export class NEMTLocation extends React.Component { } geoSuccess = (position) => { + let lat = 0; + let long = 0; + if (this.state.centerLocation.lat !== 0 && this.state.centerLocation.long !== 0) { + lat = this.state.centerLocation.lat; + long = this.state.centerLocation.long; + } else { + const geo = GeolocationService.GetCoordinates(); + lat = geo.lat; + long = geo.long; + } - const geo = GeolocationService.GetCoordinates(); - // self.updateLocation().then(p => { - let lat = geo.lat; - let long = geo.long; + if (lat === 0 || long === 0) { + lat = 41.886406; + long = -87.624225; + } this.locateNearby(lat, long) } locateNearby = (lat, long) => { + if (lat === 0 || long === 0) { lat = 41.886406; long = -87.624225; } + if (this.state.locationType === 'provider') { - Instance.getRawConn().get(`/v1/nemt/provider/participating?sort=distance&lat=${lat}&long=${long}`).then(res => { + let url = `/v1/nemt/provider?lat=${lat}&long=${long}&limit=50&sortby=distance` + Instance.getRawConn().get(url).then(res => { let nearByPlaces = []; - let providers = res.data.map(p => { - if (p.address.street_address_1) { - const streetNumber = p.address.street_address_1.split(' ')[0] + if (res.data.resultStatus === 'SUCCESS') { + let providers = res.data.providers.map(p => { + const streetNumber = p.streetName_1.split(' ')[0] let clickResult = { - id: p.muk_id, - address: `${p.address.street_address_1}, ${p.address.city}, ${p.address.state} (${p.address.zipcode})`, - lat: p.address.lat, - lng: p.address.long, - name: p.name, - type: "provider", + id: p.mukId, + muk_id: p.mukId, + address: `${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)})`, + lat: parseFloat(p.latitude), + lng: parseFloat(p.longitude), + name: p.providerName, + type: 'provider', raw: p, street_number: streetNumber, - street: p.address.street_address_1.replace(streetNumber, '').trim(), - city: p.address.city, - state: p.address.state, - zipcode: p.address.zipcode.substring(0, 5), - country: p.address.country, + street: p.streetName_1.replace(streetNumber, '').trim(), + city: p.cityName, + state: p.state, + zipcode: p.zipCode.substr(0, 5), + country: p.country, saved: false, } - clickResult.address = `${clickResult.street_number} ${clickResult.street}, ${clickResult.city}` - var listItem = (} onClick={(event) => this.handlePlaceChanged(clickResult)} />) + if (p.fivePartKeyGroups.length > 0) { + clickResult.npi = p.fivePartKeyGroups[0].providerNum; + } + + var listItem = (} onClick={(event) => this.handlePlaceChanged(clickResult)} />) nearByPlaces.push(listItem); - p.providerText = `${p.name} - ${p.address.street_address_1}, ${p.address.city}, ${p.address.state} (${p.address.zipcode}) (${p.address.phone_number})` - } - return p; - }); + p.providerText = `${p.providerName} - ${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)}) (${p.phoneNumber})` + p.muk_id = p.mukId - this.setState(Object.assign(this.state, { nearbyPlaces: nearByPlaces, providers: providers })); + return p; + }); + + this.setState(Object.assign(this.state, { nearbyPlaces: nearByPlaces, providers: providers })); + } }); } else { var pyrmont = new google.maps.LatLng(lat, long); @@ -495,28 +524,103 @@ export class NEMTLocation extends React.Component { this.locateNearby(41.886406, -87.624225); } + updateLocationValue(searchText, dtSource, params) { + let self = this; + self.setState(Object.assign(self.state, { locationValue: searchText })); + + if (searchText.length >= 3) { + let lat = 0; + let long = 0; + if (this.state.centerLocation.lat !== 0 && this.state.centerLocation.long !== 0) { + lat = this.state.centerLocation.lat; + long = this.state.centerLocation.long; + } else { + const geo = GeolocationService.GetCoordinates(); + lat = geo.lat; + long = geo.long; + } + + if (lat === 0 || long === 0) { + lat = 41.886406; + long = -87.624225; + } + + var location = new google.maps.LatLng(lat, long); + var request = { + location: location, + radius: '500', + input: searchText, + componentRestrictions: { country: 'us' }, + }; + const callback = (results, status) => { + if (status == google.maps.places.PlacesServiceStatus.OK) { + var googlePlaces = results.map(place => { + place.providerText = place.description; + place.muk_id = place.id; + place.saved = false; + return place; + }); + self.setState(Object.assign(self.state, { locations: googlePlaces })); + } + } + service.getPlacePredictions(request, callback); + } + } + updateTextSearch(searchText, dtSource, params) { let self = this; self.setState(Object.assign(self.state, { inputValue: searchText })); if (searchText.length >= 3) { - let lat = self.state.geolocation.lat; - let long = self.state.geolocation.long; + let lat = 0; + let long = 0; + if (this.state.centerLocation.lat !== 0 && this.state.centerLocation.long !== 0) { + lat = this.state.centerLocation.lat; + long = this.state.centerLocation.long; + } else { + const geo = GeolocationService.GetCoordinates(); + lat = geo.lat; + long = geo.long; + } + if (lat === 0 || long === 0) { lat = 41.886406; long = -87.624225; } if (self.state.locationType === 'provider') { - //let url = `/v1/nemt/provider?lat=${lat}&long=${long}&limit=20&name=${searchText}&sortby=distance` - let url = `/v1/nemt/provider/participating?lat=${lat}&long=${long}&query=${searchText}&sortby=distance` + let url = `/v1/nemt/provider?lat=${lat}&long=${long}&limit=50&name=${searchText}&sortby=distance` Instance.getRawConn().get(encodeURI(url)).then(res => { - if (res.data.length > 0) { - let places = res.data.map(p => { - p.providerText = `${p.name} - ${p.address.street_address_1}, ${p.address.city}, ${p.address.state} (${p.address.zipcode}) (${p.address.phone_number})` - p.saved = false + if (res.data.resultStatus === 'SUCCESS') { + let providers = res.data.providers.map(p => { + const streetNumber = p.streetName_1.split(' ')[0] + p.providerText = `${p.providerName} - ${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)}) (${p.phoneNumber})` + p.muk_id = p.mukId + + let clickResult = { + id: p.mukId, + muk_id: p.mukId, + address: `${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)})`, + lat: parseFloat(p.latitude), + lng: parseFloat(p.longitude), + name: p.providerName, + type: 'provider', + raw: p, + street_number: streetNumber, + street: p.streetName_1.replace(streetNumber, '').trim(), + city: p.cityName, + state: p.state, + zipcode: p.zipCode.substr(0, 5), + country: p.country, + saved: false, + } + + if (p.fivePartKeyGroups.length > 0) { + clickResult.npi = p.fivePartKeyGroups[0].providerNum; + } + return p; - }) - self.setState(Object.assign(self.state, { providers: places })); + }); + this.setState(Object.assign(this.state, { providers: providers })); dtSource = self.state.providers; } }); @@ -554,42 +658,59 @@ export class NEMTLocation extends React.Component { this.setState(Object.assign(this.state, { addLocationTextValue: providerSearch })); if (providerSearch.length >= 3) { - const geo = GeolocationService.GetCoordinates(); - let lat = geo.lat; - let long = geo.long; + + let lat = 0; + let long = 0; + if (this.state.centerLocation.lat !== 0 && this.state.centerLocation.long !== 0) { + lat = this.state.centerLocation.lat; + long = this.state.centerLocation.long; + } else { + const geo = GeolocationService.GetCoordinates(); + lat = geo.lat; + long = geo.long; + } + if (lat === 0 || long === 0) { lat = 41.886406; long = -87.624225; } + if (this.state.locationType === 'provider') { - let url = `/v1/nemt/provider/participating?lat=${lat}&long=${long}&query=${providerSearch}&sortby=distance` + let url = `/v1/nemt/provider?lat=${lat}&long=${long}&limit=50&name=${providerSearch}&sortby=distance` Instance.getRawConn().get(encodeURI(url)).then(res => { - let places = res.data.map(p => { - const streetNumber = p.address.street_address_1.split(' ')[0] - p.providerText = `${p.name} - ${p.address.street_address_1}, ${p.address.city}, ${p.address.state} (${p.address.zipcode}) (${p.address.phone_number})` - let clickResult = { - id: p.muk_id, - address: `${p.address.street_address_1}, ${p.address.city}, ${p.address.state} (${p.address.zipcode})`, - lat: p.address.lat, - lng: p.address.long, - name: p.name, - type: "provider", - raw: p, - street_number: streetNumber, - street: p.address.street_address_1.replace(streetNumber, '').trim(), - city: p.address.city, - state: p.address.state, - zipcode: p.address.zipcode.substring(0, 5), - country: p.address.country, - saved: false, - } - clickResult.address = `${clickResult.street_number} ${clickResult.street}, ${clickResult.city}` + if (res.data.resultStatus === 'SUCCESS') { + let providers = res.data.providers.map(p => { + const streetNumber = p.streetName_1.split(' ')[0] + p.providerText = `${p.providerName} - ${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)}) (${p.phoneNumber})` + p.muk_id = p.mukId - var listItem = (} onClick={(event) => this.handleSaveAddress(clickResult, this)} />) - return listItem; - }); + let clickResult = { + id: p.mukId, + muk_id: p.mukId, + address: `${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)})`, + lat: parseFloat(p.latitude), + lng: parseFloat(p.longitude), + name: p.providerName, + type: 'provider', + raw: p, + street_number: streetNumber, + street: p.streetName_1.replace(streetNumber, '').trim(), + city: p.cityName, + state: p.state, + zipcode: p.zipCode.substr(0, 5), + country: p.country, + saved: false, + } - this.setState(Object.assign(this.state, { searchAddresses: places })); + if (p.fivePartKeyGroups.length > 0) { + clickResult.npi = p.fivePartKeyGroups[0].providerNum; + } + + var listItem = (} onClick={(event) => this.handleSaveAddress(clickResult)} />) + return listItem; + }); + this.setState(Object.assign(this.state, { searchAddresses: providers })); + } }); } else { var location = new google.maps.LatLng(lat, long); @@ -716,6 +837,68 @@ export class NEMTLocation extends React.Component { } } + handleAutoCompleteLocation = (location) => { + const self = this; + placeService.getDetails(location, (result, status) => { + if (status == google.maps.places.PlacesServiceStatus.OK) { + let clickResult = { + id: result.place_id, + placeId: result.place_id, + address: result.formatted_address ? result.formatted_address : result.vicinity, + lat: result.geometry.location.lat(), + lng: result.geometry.location.lng(), + name: result.name, + type: "google", + raw: result, + street_number: '', + street: '', + city: '', + state: '', + zipcode: '', + country: '', + saved: false, + } + + result.address_components.forEach(a => { + a.types.forEach(c => { + switch (c) { + case "street_number": + clickResult.street_number = a.short_name; + break; + case "route": + clickResult.street = a.short_name; + break; + case "locality": + clickResult.city = a.short_name; + break; + case "administrative_area_level_1": + clickResult.state = a.short_name; + break; + case "country": + clickResult.country = a.short_name; + break; + case "postal_code": + clickResult.zipcode = a.short_name; + break; + } + }, this) + }, this); + clickResult.address = `${clickResult.street_number} ${clickResult.street}, ${clickResult.city}` + + + const centerLocation = { + lat: clickResult.lat, + long: clickResult.lng, + name: clickResult.name, + address: clickResult.address + } + + self.setState(Object.assign(self.state, { centerLocation: centerLocation })); + self.locateNearby(clickResult.lat, clickResult.lng); + } + }); + } + handleAutocomplete = (provider) => { const sendInfo = (clickResult) => { this.setState(Object.assign(this.state, { currentSelection: clickResult })); @@ -735,24 +918,32 @@ export class NEMTLocation extends React.Component { } if (this.state.locationType === "provider") { - const streetNumber = provider.address.street_address_1.split(' ')[0] + const p = provider; + const streetNumber = p.streetName_1.split(' ')[0] + p.providerText = `${p.providerName} - ${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)}) (${p.phoneNumber})` + p.muk_id = p.mukId + let clickResult = { - id: provider.muk_id, - address: `${provider.address.street_address_1}, ${provider.address.city}, ${provider.address.state} (${provider.address.zipcode})`, - lat: provider.address.lat, - lng: provider.address.long, - name: provider.name, - type: "provider", - raw: provider, + id: p.mukId, + muk_id: p.mukId, + address: `${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)})`, + lat: parseFloat(p.latitude), + lng: parseFloat(p.longitude), + name: p.providerName, + type: 'provider', + raw: p, street_number: streetNumber, - street: provider.address.street_address_1.replace(streetNumber, '').trim(), - city: provider.address.city, - state: provider.address.state, - zipcode: provider.address.zipcode.substring(0, 5), - country: provider.address.country, + street: p.streetName_1.replace(streetNumber, '').trim(), + city: p.cityName, + state: p.state, + zipcode: p.zipCode.substr(0, 5), + country: p.country, saved: false, } - clickResult.address = `${clickResult.street_number} ${clickResult.street}, ${clickResult.city}` + + if (p.fivePartKeyGroups.length > 0) { + clickResult.npi = p.fivePartKeyGroups[0].providerNum; + } sendInfo(clickResult); } else { @@ -842,42 +1033,51 @@ export class NEMTLocation extends React.Component { handleCurrentLocation(e) { const self = this; - const geo = GeolocationService.GetCoordinates(); - // self.updateLocation().then(p => { - let lat = geo.lat; - let long = geo.long; + + let lat = 0; + let long = 0; + if (this.state.centerLocation.lat !== 0 && this.state.centerLocation.long !== 0) { + lat = this.state.centerLocation.lat; + long = this.state.centerLocation.long; + } else { + const geo = GeolocationService.GetCoordinates(); + lat = geo.lat; + long = geo.long; + } + if (lat === 0 || long === 0) { lat = 41.886406; long = -87.624225; } if (self.state.locationType === 'provider') { - Instance.getRawConn().get(`/v1/nemt/provider/participating?sort=distance&lat=${lat}&long=${long}`).then(res => { + let url = `/v1/nemt/provider?lat=${lat}&long=${long}&limit=50&sortby=distance` + Instance.getRawConn().get(url).then(res => { let listItem = (} onClick={self.handleCurrentLocation} />) - if (res.data.length > 0) { - const result = res.data[0]; - const streetNumber = result.address.street_address_1.split(' ')[0] + if (res.data.resultStatus === 'SUCCESS') { + const p = res.data.providers[0]; + const streetNumber = p.streetName_1.split(' ')[0] let clickResult = { - id: result.muk_id, - address: `${result.address.street_address_1}, ${result.address.city}, ${result.address.state} (${result.address.zipcode})`, - lat: result.address.lat, - lng: result.address.long, - name: result.name, - type: "provider", - raw: result, + id: p.mukId, + address: `${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)})`, + lat: parseFloat(p.latitude), + lng: parseFloat(p.longitude), + name: p.providerName, + type: 'provider', + raw: p, street_number: streetNumber, - street: result.address.street_address_1.replace(streetNumber, '').trim(), - city: result.address.city, - state: result.address.state, - zipcode: result.address.zipcode.substring(0, 5), - country: result.address.country, + street: p.streetName_1.replace(streetNumber, '').trim(), + city: p.cityName, + state: p.state, + zipcode: p.zipCode.substr(0, 5), + country: p.country, saved: false, } - clickResult.address = `${clickResult.street_number} ${clickResult.street}, ${clickResult.city}` + if (p.fivePartKeyGroups.length > 0) { + clickResult.npi = p.fivePartKeyGroups[0].providerNum; + } self.handlePlaceChanged(clickResult) - //listItem = (} onClick={(event) => self.handlePlaceChanged(clickResult)} />) } - //self.setState(Object.assign(self.state, { currentLocation: listItem })); }).catch(console.error); } else { var location = new google.maps.LatLng(lat, long); @@ -1138,6 +1338,7 @@ export class NEMTLocation extends React.Component { let listItem = (
+ {autosuggest} {this.state.currentLocation} @@ -1195,4 +1396,4 @@ export class NEMTLocation extends React.Component {
); } -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/routes/app/routes/forms/routes/visit/components/VerticalNonLinear.js b/src/routes/app/routes/forms/routes/visit/components/VerticalNonLinear.js index 81e75f0..938fd7b 100644 --- a/src/routes/app/routes/forms/routes/visit/components/VerticalNonLinear.js +++ b/src/routes/app/routes/forms/routes/visit/components/VerticalNonLinear.js @@ -156,14 +156,8 @@ class SignUp extends React.Component { }; handlePhone = (event) => { - let phone = event.target.value; - if (phone.indexOf("+1") < 0 && phone.length == 10) { - phone = "+1" + phone; - phone = phone.substring(0, 12); - } - const user = this.props.user; - user.phonenumber = phone; + user.phonenumber = event.target.value;; if (this.props.onUserChanged) { this.props.onUserChanged(user); } @@ -674,10 +668,14 @@ class VerticalNonLinear extends React.Component { let self = state; const { stepIndex } = self.state; - console.log('Step Index: ', stepIndex) + //console.log('Step Index: ', stepIndex) switch (stepIndex) { - case 0: + case 1: const eligibility = { + "provider": { + "provider_npi": self.state.destination.raw.fivePartKeyGroups[0].providerNum, + "provider_name": self.state.destination.raw.providerName + }, "subscriber": { "patient_type": self.state.user.type, "subscriber_id": self.state.user.member, @@ -688,10 +686,12 @@ class VerticalNonLinear extends React.Component { "demographic_info": { "date_of_birth": self.state.user.birthdate, "gender": self.state.user.gender - } + }, + "user": self.state.user, } }; + console.log(JSON.stringify(eligibility)); Instance.getRawConn().post('/v1/nemt/eligibility', eligibility).then(function (res) { self.setState(Object.assign(self.state, { stepIndex: stepIndex + 1, user: res.data })); }).catch(err => { @@ -1101,6 +1101,18 @@ class VerticalNonLinear extends React.Component { > this.setState({ stepIndex: 0 })}> + Provider + + +
+ this.handleProviderChanged(provider, this)} fontSize={12} locationType="provider" loadSuggestion={true} address={this.state.destination} /> + {/*
*/} + + {this.renderStepActions(1, this)} + + + + this.setState({ stepIndex: 1 })}> Member @@ -1113,21 +1125,6 @@ class VerticalNonLinear extends React.Component { {this.renderStepActions(0, this)} - - - this.setState({ stepIndex: 1 })}> - Provider - - -
- this.handleProviderChanged(provider, this)} fontSize={12} locationType="provider" loadSuggestion={true} address={this.state.destination} /> - {/*
*/} - - {this.renderStepActions(1, this)} - - - - this.setState({ stepIndex: 2 })}> Visit Details diff --git a/src/routes/selfRegister/components/SignUp.js b/src/routes/selfRegister/components/SignUp.js index 2820ed5..020c952 100644 --- a/src/routes/selfRegister/components/SignUp.js +++ b/src/routes/selfRegister/components/SignUp.js @@ -54,8 +54,7 @@ class SignUp extends React.Component { this.clickEvent = this.clickEvent.bind(this); } - componentDidMount = () => { - } + componentDidMount = () => { } buttonValidated = () => { let validated = true; @@ -128,7 +127,7 @@ class SignUp extends React.Component { "pass": this.state.pass, }; - Instance.getRawConn().post('/v1/selfregister/', user).then(function (res) { + Instance.setToken(null).post('/v1/selfregister/', user).then(function (res) { localStorage.removeItem('loggedUser'); location.href = '/#/login'; }).catch(function (err) { diff --git a/src/utils/authorization/normalizeRoles.js b/src/utils/authorization/normalizeRoles.js index 4071129..135a705 100644 --- a/src/utils/authorization/normalizeRoles.js +++ b/src/utils/authorization/normalizeRoles.js @@ -11,7 +11,7 @@ const normalizeRoles = (profiles) => { } if (roleKeys.length === 1) { - return profiles[roleKeys[0]].authorize; + return profiles[roleKeys[0]].roles; } const roles = profiles.reduce((result, profile) => {