Compare commits

...

3 Commits

Author SHA1 Message Date
Senad Uka
d4bd965365 Upstream sync 2018-06-01 10:26:45 +02:00
GotPPay
bf3f372ab4 password fix, overlay dialog fix 2018-05-31 19:08:48 +02:00
Senad Uka
182cde9fbb Upstream sync 2018-05-31 18:24:49 +02:00
8 changed files with 1362 additions and 606 deletions

812
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -33,8 +33,8 @@ const isFunction = (functionToCheck) => {
}; };
const requireAuth = (nextState, replace, next) => { const requireAuth = (nextState, replace, next) => {
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) if (nextState.location.pathname === '/login' || nextState.location.pathname === '/sign-up' || nextState.location.pathname.toLowerCase() === '/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)))) { || (!isFunction(replace) && (replace.location.pathname === '/login' || replace.location.pathname === '/sign-up' || nextState.location.pathname.toLowerCase() === '/selfRegister' || (replace.location.pathname.indexOf('/ride') > -1 && replace.params.ride_uuid !== undefined && replace.params.user_uuid !== undefined)))) {
next(); next();
} }

View File

@@ -1,5 +1,6 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import FlatButton from 'material-ui/FlatButton'; import FlatButton from 'material-ui/FlatButton';
import MaterialDialog from 'material-ui/Dialog';
import Dialog from './draggable-dialog'; import Dialog from './draggable-dialog';
import './draggable-dialog/css/index.css'; import './draggable-dialog/css/index.css';
@@ -45,30 +46,49 @@ export class ValidationErrorsInfoDialog extends React.Component {
/>, />,
]; ];
const dialogContent = (
this.props.errorMessages.map(errorMessage => {
const oneValidationMessage = (<span><a>{errorMessage.message}</a><br /></span>);
const oneValidationMessageWithTab = (<span><li style={{ marginLeft: 2 + "em" }}>{errorMessage.message}</li></span>);
if (errorMessage.field_name === "password-tab") {
return oneValidationMessageWithTab;
} else {
return oneValidationMessage;
}
})
)
const draggableDialog =
(<Dialog
title={this.props.title ? this.props.title : 'Error'}
isDraggable={true}
buttons={actions}
hasCloseIcon={false}
modal={this.props.modal ? this.props.modal : false}
height={defaultDialogHeight + this.props.errorMessages.length * dialogHeightPerLine}>
{dialogContent}
</Dialog>
)
const normalDialog =
(<MaterialDialog
open={this.state.open}
title={this.props.title ? this.props.title : 'Error'}
onBackdropClick={()=>{console.log("Backdrop")}}
actions={actions}>
{dialogContent}
</MaterialDialog>
)
return ( return (
<div className="container"> <div className="container">
{ {this.state.open && this.props.draggable && draggableDialog }
this.state.open && {this.state.open && !this.props.draggable && normalDialog}
<Dialog
title={this.props.title ? this.props.title : 'Error'}
isDraggable={this.props.draggable ? this.props.draggable : false}
buttons={actions}
hasCloseIcon={false}
modal={this.props.modal ? this.props.modal : false}
height={defaultDialogHeight + this.props.errorMessages.length * dialogHeightPerLine}
>
{this.props.errorMessages.map(errorMessage => {
const oneValidationMessage = (<span><a>{errorMessage.message}</a><br /></span>);
const oneValidationMessageWithTab = (<span><li style={{ marginLeft: 2 + "em" }}>{errorMessage.message}</li></span>);
if (errorMessage.field_name === "password-tab") {
return oneValidationMessageWithTab;
} else {
return oneValidationMessage;
}
})}
</Dialog>
}
</div> </div>
); );
} }

View File

@@ -664,22 +664,7 @@ class VerticalNonLinear extends React.Component {
})); }));
const eligibility = { const eligibility = {
"provider": { "raw_provider": self.state.destination.raw,
"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,
"name": {
"first": self.state.user.first,
"last": self.state.user.last
},
"demographic_info": {
"date_of_birth": self.state.user.birthdate,
"gender": self.state.user.gender
}
},
"user": { "user": {
"name": `${self.state.user.first} ${self.state.user.last}`, "name": `${self.state.user.first} ${self.state.user.last}`,
"first": self.state.user.first, "first": self.state.user.first,
@@ -694,13 +679,12 @@ class VerticalNonLinear extends React.Component {
}, },
}; };
if(self.state.user.phonenumber && self.state.user.phonenumber.length > 0) { if (self.state.user.phonenumber && self.state.user.phonenumber.length > 0) {
eligibility.user.phonenumber = eligibility.user.phonenumber.replace('(','').replace(')','').replace('-','').replace(' ','').trim() eligibility.user.phonenumber = eligibility.user.phonenumber.replace('(', '').replace(')', '').replace('-', '').replace(' ', '').trim()
} }
Instance.getRawConn().post('/v1/nemt/eligibility', eligibility).then(function (res) { Instance.getRawConn().post('/v1/nemt/eligibility', eligibility).then(function (res) {
res.data.agreedTerms = true; self.setState(Object.assign(self.state, { stepIndex: stepIndex + 1, message: '', open: false }));
self.setState(Object.assign(self.state, { stepIndex: stepIndex + 1, user: res.data, message: '', open: false }));
}).catch(error => { }).catch(error => {
self.setState(Object.assign(self.state, { self.setState(Object.assign(self.state, {
@@ -727,6 +711,12 @@ class VerticalNonLinear extends React.Component {
break; break;
case 2: case 2:
self.handleTouchTap(); self.handleTouchTap();
self.setState(Object.assign(self.state, {
message: 'Adding Visit',
open: true,
}));
const visit = { const visit = {
"user": { "user": {
"name": `${self.state.user.first} ${self.state.user.last}`, "name": `${self.state.user.first} ${self.state.user.last}`,
@@ -746,29 +736,34 @@ class VerticalNonLinear extends React.Component {
"raw_provider": self.state.destination.raw "raw_provider": self.state.destination.raw
}; };
if(self.state.user.phonenumber && self.state.user.phonenumber.length > 0) { if (self.state.user.phonenumber && self.state.user.phonenumber.length > 0) {
visit.user.phonenumber = visit.user.phonenumber.replace('(','').replace(')','').replace('-','').replace(' ','').trim() visit.user.phonenumber = visit.user.phonenumber.replace('(', '').replace(')', '').replace('-', '').replace(' ', '').trim()
} }
Instance.getRawConn().post('/v1/nemt/visits/', visit).then(function (res) { Instance.getRawConn().post('/v1/nemt/visits/', visit).then(function (res) {
self.setState(Object.assign(self.state, {
message: '',
open: false,
}));
const returnMessage = [ const returnMessage = [
{ {
message: `Member: ${res.data.user.name} (${res.data.user.member})` message: `Member: ${visit.user.name} (${visit.user.member})`
}, },
{ {
message: `Gender: ${res.data.user.gender}` message: `Gender: ${visit.user.gender}`
}, },
{ {
message: `Birth date: ${visit.user.type}` message: `Birth date: ${visit.user.type}`
}, },
{ {
message: `Member Type: ${res.data.user.birthdate}` message: `Member Type: ${visit.user.birthdate}`
}, },
{ {
message: `Provider: ${res.data.provider.name}` message: `Provider: ${visit.raw_provider.providerName}`
}, },
{ {
message: `Date: ${res.data.visit_datetime}` message: `Date: ${visit.visit_datetime}`
}] }]
self.setState(Object.assign(self.state, { self.setState(Object.assign(self.state, {
@@ -1281,7 +1276,7 @@ class VerticalNonLinear extends React.Component {
<div className="box-body padding-xs"> <div className="box-body padding-xs">
<div style={{ maxWidth: 380, margin: 'auto' }}> <div style={{ maxWidth: 380, margin: 'auto' }}>
<ValidationErrorsInfoDialog open={this.state.showValidationErrors} errorMessages={this.state.validationErrors} onDismiss={this.handleValidationErrosDialogDismiss.bind(this)} /> <ValidationErrorsInfoDialog open={this.state.showValidationErrors} draggable={true} errorMessages={this.state.validationErrors} onDismiss={this.handleValidationErrosDialogDismiss.bind(this)} />
<Stepper <Stepper
activeStep={this.state.stepIndex} activeStep={this.state.stepIndex}
linear={false} linear={false}

View File

@@ -830,7 +830,7 @@ class VerticalNonLinear extends React.Component {
<div className="box-body padding-xs"> <div className="box-body padding-xs">
<div style={{ maxWidth: 380, margin: 'auto' }}> <div style={{ maxWidth: 380, margin: 'auto' }}>
<ValidationErrorsInfoDialog open={this.state.showValidationErrors} errorMessages={this.state.validationErrors} onDismiss={this.handleValidationErrosDialogDismiss.bind(this)} /> <ValidationErrorsInfoDialog open={this.state.showValidationErrors} draggable={true} errorMessages={this.state.validationErrors} onDismiss={this.handleValidationErrosDialogDismiss.bind(this)} />
<Stepper <Stepper
activeStep={this.state.stepIndex} activeStep={this.state.stepIndex}

View File

@@ -108,7 +108,8 @@ class DatatableComponent extends React.Component {
}, },
columnDefs: [ columnDefs: [
{ targets: [-1, -3], className: 'dt-body-right mdl-data-table__cell--non-numeric' } { targets: [-1, -3], className: 'dt-body-right mdl-data-table__cell--non-numeric' }
] ],
order: [[0, 'desc']]
}); });
state.decorateButtons(); state.decorateButtons();
state.decorateSelect(); state.decorateSelect();

View File

@@ -61,15 +61,28 @@ class SignUp extends React.Component {
componentDidMount = () => { } componentDidMount = () => { }
getFormattedPhoneNumber(){
if(this.state.phone_number && this.state.phone_number.length > 0) {
return this.state.phone_number.replace('+1','').replace('(','').replace(')','').replace('-','').replace(' ','').trim()
}
return '';
}
isPhoneNumberFormatValid() {
let formattedNumber = this.getFormattedPhoneNumber();
return !isNaN(formattedNumber) && (formattedNumber.toString().length === 10);
}
buttonValidated = () => { buttonValidated = () => {
let validated = true; let validated = true;
if (!this.state.provider_name || this.state.provider_name === null || this.state.provider_name === "") validated = false; if (!this.state.provider_name || this.state.provider_name === null || this.state.provider_name === "") validated = false;
if (!this.state.provider_npi || this.state.provider_npi === null || this.state.provider_npi === "") validated = false; if (!this.state.provider_npi || this.state.provider_npi === null || this.state.provider_npi === "") validated = false;
if (!this.state.email || this.state.email === null || this.state.email === "") validated = false; if (!this.state.email || this.state.email === null || this.state.email === "") validated = false;
if (!this.state.phone_number || this.state.phone_number === null || this.state.phone_number === "") validated = false; if (!this.state.phone_number || this.state.phone_number === null || this.state.phone_number === "" || !this.isPhoneNumberFormatValid()) validated = false;
if (!this.state.first || this.state.first === null || this.state.first === "") validated = false; if (!this.state.first || this.state.first === null || this.state.first === "") validated = false;
if (!this.state.last || this.state.last === null || this.state.last === "") validated = false; if (!this.state.last || this.state.last === null || this.state.last === "") validated = false;
if (!this.state.password_validated || !this.state.pass || this.state.pass === null || this.state.pass === "") validated = false; if (!this.state.pass || this.state.pass === null || this.state.pass === "") validated = false;
if (!this.state.passConfirmation || this.state.passConfirmation === null || this.state.passConfirmation === "") validated = false;
if (!this.state.agreedTerms) validated = false; if (!this.state.agreedTerms) validated = false;
this.setState(Object.assign(this.state, { validated: validated })); this.setState(Object.assign(this.state, { validated: validated }));
} }
@@ -106,12 +119,10 @@ class SignUp extends React.Component {
handlePass = (event) => { handlePass = (event) => {
this.setState(Object.assign(this.state, { pass: btoa(event.target.value) })); this.setState(Object.assign(this.state, { pass: btoa(event.target.value) }));
this.setState(Object.assign(this.state, { password_validated: this.state.pass === this.state.passConfirmation }));
}; };
handleConfirmationPass = (event) => { handleConfirmationPass = (event) => {
this.setState(Object.assign(this.state, { passConfirmation: btoa(event.target.value) })); this.setState(Object.assign(this.state, { passConfirmation: btoa(event.target.value) }));
this.setState(Object.assign(this.state, { password_validated: this.state.pass === this.state.passConfirmation }));
}; };
handleChecked = (event, checked) => { handleChecked = (event, checked) => {
@@ -121,6 +132,17 @@ class SignUp extends React.Component {
clickEvent = (event) => { clickEvent = (event) => {
event.preventDefault(); event.preventDefault();
if (this.state.passConfirmation !== this.state.pass){
this.setState(Object.assign(this.state, {
showValidationErrors: true,
validationErrors: [{message:'Confirmed password does not match password'}]
}));
return;
}
const state = this; const state = this;
let user = { let user = {
@@ -141,16 +163,20 @@ class SignUp extends React.Component {
localStorage.removeItem('loggedUser'); localStorage.removeItem('loggedUser');
location.href = '/#/login'; location.href = '/#/login';
}).catch(function (err) { }).catch(function (err) {
if (err.response.status === 422) { switch(err.response.status){
//Unprocessable Entity (validation failed) case 422:
state.setState(Object.assign(state.state, { //Unprocessable Entity (validation failed)
showValidationErrors: true, state.setState(Object.assign(state.state, {
validationErrors: err.response.data.data showValidationErrors: true,
})); validationErrors: err.response.data.data
} else { }));
alert('Error to log in: ' + err.message); break;
default:
state.setState(Object.assign(state.state, {
showValidationErrors: true,
validationErrors: [{message:"Error processing your request"}]
}));
} }
console.error(err);
}); });
} }