Compare commits
1 Commits
make-error
...
font-loadi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
830313d9e3 |
@@ -57,9 +57,8 @@
|
|||||||
"react": "^15.5.4",
|
"react": "^15.5.4",
|
||||||
"react-cookie": "^2.1.2",
|
"react-cookie": "^2.1.2",
|
||||||
"react-data-components": "^1.1.1",
|
"react-data-components": "^1.1.1",
|
||||||
"react-dialog": "^1.0.2",
|
|
||||||
"react-dom": "^15.5.4",
|
"react-dom": "^15.5.4",
|
||||||
"react-draggable": "^2.2.6",
|
"react-draggable": "^3.0.5",
|
||||||
"react-geosuggest": "^2.5.0",
|
"react-geosuggest": "^2.5.0",
|
||||||
"react-geosuggest-sw": "^1.4.13",
|
"react-geosuggest-sw": "^1.4.13",
|
||||||
"react-google-maps": "^7.2.0",
|
"react-google-maps": "^7.2.0",
|
||||||
@@ -68,10 +67,8 @@
|
|||||||
"react-imgix": "^7.1.1",
|
"react-imgix": "^7.1.1",
|
||||||
"react-jquery-datatables": "^0.7.1",
|
"react-jquery-datatables": "^0.7.1",
|
||||||
"react-materialui-notifications": "^0.5.1",
|
"react-materialui-notifications": "^0.5.1",
|
||||||
"react-onclickoutside": "^5.10.0",
|
|
||||||
"react-places-autocomplete": "^5.4.2",
|
"react-places-autocomplete": "^5.4.2",
|
||||||
"react-redux": "^5.0.5",
|
"react-redux": "^5.0.5",
|
||||||
"react-resizable": "^1.7.1",
|
|
||||||
"react-router": "^3.0.4",
|
"react-router": "^3.0.4",
|
||||||
"react-router-redux": "^4.0.8",
|
"react-router-redux": "^4.0.8",
|
||||||
"react-tap-event-plugin": "^2.0.1",
|
"react-tap-event-plugin": "^2.0.1",
|
||||||
|
|||||||
@@ -29,8 +29,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.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' || (replace.location.pathname.indexOf('/ride') > -1 && replace.params.ride_uuid !== undefined && replace.params.user_uuid !== undefined)))) {
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,7 +65,6 @@ const rootRoute = {
|
|||||||
require('./routes/lockScreen'),
|
require('./routes/lockScreen'),
|
||||||
require('./routes/login'),
|
require('./routes/login'),
|
||||||
require('./routes/signUp'),
|
require('./routes/signUp'),
|
||||||
require('./routes/selfRegister'),
|
|
||||||
require('./routes/fullscreen'),
|
require('./routes/fullscreen'),
|
||||||
require('./routes/ride'),
|
require('./routes/ride'),
|
||||||
require('./routes/ready'),
|
require('./routes/ready'),
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
import React, { Component } from 'react';
|
|
||||||
import FlatButton from 'material-ui/FlatButton';
|
|
||||||
import Dialog from './draggable-dialog';
|
|
||||||
|
|
||||||
import './draggable-dialog/css/index.css';
|
|
||||||
|
|
||||||
const defaultDialogHeight = 100; //px
|
|
||||||
const dialogHeightPerLine = 25; //px
|
|
||||||
|
|
||||||
export class ValidationErrorsInfoDialog extends React.Component {
|
|
||||||
|
|
||||||
state = {
|
|
||||||
open: this.props.open,
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillReceiveProps(newProps){
|
|
||||||
this.setState({open: newProps.open});
|
|
||||||
}
|
|
||||||
|
|
||||||
handleOpen = () => {
|
|
||||||
this.setState({ open: true });
|
|
||||||
};
|
|
||||||
|
|
||||||
handleClose = () => {
|
|
||||||
this.setState({ open: false });
|
|
||||||
this.props.onDismiss();
|
|
||||||
};
|
|
||||||
|
|
||||||
render() {
|
|
||||||
|
|
||||||
const actions = [
|
|
||||||
<FlatButton
|
|
||||||
label="Dismiss"
|
|
||||||
primary={true}
|
|
||||||
onClick={this.handleClose}
|
|
||||||
/>,
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="container">
|
|
||||||
{
|
|
||||||
this.state.open &&
|
|
||||||
<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 => {
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<a>{errorMessage.message}</a>
|
|
||||||
<br/>
|
|
||||||
</div>
|
|
||||||
);})
|
|
||||||
}
|
|
||||||
</Dialog>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = ValidationErrorsInfoDialog;
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import PropTypes from "prop-types";
|
|
||||||
|
|
||||||
class DialogBody extends React.Component {
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div className="ui-dialog-content" style={{ "overflowY": "auto" }}>
|
|
||||||
{this.props.children}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DialogBody.propTypes = {
|
|
||||||
children: PropTypes.oneOfType([PropTypes.array, PropTypes.object])
|
|
||||||
};
|
|
||||||
|
|
||||||
export default DialogBody;
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import PropTypes from "prop-types";
|
|
||||||
import cs from "classnames";
|
|
||||||
|
|
||||||
const DialogFooter = (props) => {
|
|
||||||
const buttons = props.buttons;
|
|
||||||
if (!buttons || buttons.length == 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const dialogButtons = buttons.map(function (button, index) {
|
|
||||||
if (React.isValidElement(button)) {
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
const { text, onClick, className } = button;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<button
|
|
||||||
key={`button-${index}`}
|
|
||||||
type="button"
|
|
||||||
className={cs("button", className)}
|
|
||||||
onClick={onClick}>
|
|
||||||
{text}
|
|
||||||
</button>
|
|
||||||
);
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="ui-dialog-buttonpane">
|
|
||||||
<div className="ui-dialog-buttonset">
|
|
||||||
{dialogButtons}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
DialogFooter.propTypes = {
|
|
||||||
buttons: PropTypes.array,
|
|
||||||
onClose: PropTypes.func.isRequired
|
|
||||||
};
|
|
||||||
|
|
||||||
export default DialogFooter;
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import PropTypes from "prop-types";
|
|
||||||
|
|
||||||
const DialogTitle = ({ title, hasCloseIcon, onClose, allowMinimize, isMinimized, onMinimize, allowMaximize, isMaximized, onMaximize, onRestore }) => {
|
|
||||||
let closeIcon;
|
|
||||||
if (hasCloseIcon !== false) {
|
|
||||||
closeIcon = (
|
|
||||||
<i className="icon icon-close" onClick={onClose}></i>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let minimizeIcon;
|
|
||||||
if (allowMinimize) {
|
|
||||||
if (isMinimized) {
|
|
||||||
minimizeIcon = (
|
|
||||||
<i className="icon icon-restore" onClick={onRestore}></i>
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
minimizeIcon = (
|
|
||||||
<i className="icon icon-minimize" onClick={onMinimize}></i>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let maximizeIcon;
|
|
||||||
if (allowMaximize) {
|
|
||||||
if (isMaximized) {
|
|
||||||
maximizeIcon = (
|
|
||||||
<i className="icon icon-restore" onClick={onRestore}></i>
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
maximizeIcon = (
|
|
||||||
<i className="icon icon-maximize" onClick={onMaximize}></i>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<header className="ui-dialog-titlebar">
|
|
||||||
<div className="title">
|
|
||||||
{title}
|
|
||||||
</div>
|
|
||||||
<div className="action-items">
|
|
||||||
{minimizeIcon}
|
|
||||||
{maximizeIcon}
|
|
||||||
{closeIcon}
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
DialogTitle.propTypes = {
|
|
||||||
hasCloseIcon: PropTypes.bool,
|
|
||||||
allowMinimize: PropTypes.bool,
|
|
||||||
allowMaximize: PropTypes.bool,
|
|
||||||
isMinimized: PropTypes.bool,
|
|
||||||
isMaximized: PropTypes.bool,
|
|
||||||
title: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
|
|
||||||
onClose: PropTypes.func.isRequired,
|
|
||||||
onMinimize: PropTypes.func,
|
|
||||||
onMaximize: PropTypes.func,
|
|
||||||
onRestore: PropTypes.func
|
|
||||||
};
|
|
||||||
|
|
||||||
export default DialogTitle;
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 403 B |
Binary file not shown.
|
Before Width: | Height: | Size: 310 B |
Binary file not shown.
|
Before Width: | Height: | Size: 156 B |
Binary file not shown.
|
Before Width: | Height: | Size: 300 B |
@@ -1,167 +0,0 @@
|
|||||||
body {
|
|
||||||
width: 100%;
|
|
||||||
min-height: 700px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
cursor: pointer;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog-overlay {
|
|
||||||
background: #aaaaaa;
|
|
||||||
opacity: .3;
|
|
||||||
filter: Alpha(Opacity=30);
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
z-index: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog {
|
|
||||||
position: fixed;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
outline: 0 none;
|
|
||||||
padding: 0 !important;;
|
|
||||||
z-index: 101;
|
|
||||||
background-color: white;
|
|
||||||
border: 1px solid #f6f6f6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog.maximized{
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100% !important;
|
|
||||||
height: 100% !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog.minimized{
|
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog .ui-dialog-titlebar {
|
|
||||||
position: relative;
|
|
||||||
font-size: 1em;
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 0.5em;
|
|
||||||
height: 35px;
|
|
||||||
/*border-bottom: 1px solid #f6f6f6;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog.react-draggable .ui-dialog-titlebar{
|
|
||||||
cursor: move;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog.react-draggable .ui-dialog-content{
|
|
||||||
cursor: move;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog.react-draggable .ui-dialog-buttonpane {
|
|
||||||
cursor: move;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.ui-dialog .ui-dialog-titlebar .action-items {
|
|
||||||
float: right;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog .ui-dialog-titlebar .title {
|
|
||||||
float: left;
|
|
||||||
margin-right: .5em;
|
|
||||||
font-family: "Roboto", "Helvetica", "Arial", sans-serif;
|
|
||||||
font-size: 1.3125em;
|
|
||||||
font-weight: 500;
|
|
||||||
line-height: 0.2em;
|
|
||||||
padding : 24px 0px 0px 19px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
margin: 5px;
|
|
||||||
cursor: pointer;
|
|
||||||
background-size: cover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon.icon-close {
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background-image: url("./img/close.png");
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon.icon-minimize {
|
|
||||||
background-image: url("./img/minimize.png");
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon.icon-maximize {
|
|
||||||
background-image: url("./img/maximize.png");
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon.icon-restore {
|
|
||||||
background-image: url("./img/restore.png");
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog .ui-dialog-content {
|
|
||||||
background: none repeat scroll 0 0 transparent;
|
|
||||||
border: 0 none;
|
|
||||||
overflow: auto;
|
|
||||||
position: relative;
|
|
||||||
font-size: 1rem;
|
|
||||||
font-weight: 400;
|
|
||||||
font-family: "Roboto", "Helvetica", "Arial", sans-serif;
|
|
||||||
line-height: 1.5em;
|
|
||||||
color:rgba(0, 0, 0, 0.54);
|
|
||||||
padding : 24px 24px 24px 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog .ui-dialog-buttonpane {
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
bottom: 0;
|
|
||||||
text-align: right;
|
|
||||||
border-width: 1px 0 0 0;
|
|
||||||
/*border-top: 1px solid #f6f6f6;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{
|
|
||||||
padding: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog .ui-dialog-buttonpane button {
|
|
||||||
margin: 0 .5em 0 .5em;
|
|
||||||
cursor: pointer;
|
|
||||||
background-color: #f6f6f6;
|
|
||||||
padding: 0.5em 1em;
|
|
||||||
outline: none;
|
|
||||||
border: 1px solid #CCCCCC;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog .ui-dialog-buttonpane button:hover{
|
|
||||||
background-color: #CCCCCC;
|
|
||||||
border: 1px solid #BBBBBB;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ui-dialog .react-resizable-handle {
|
|
||||||
position: absolute;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+');
|
|
||||||
background-position: bottom right;
|
|
||||||
padding: 0 3px 3px 0;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-origin: content-box;
|
|
||||||
box-sizing: border-box;
|
|
||||||
cursor: se-resize;
|
|
||||||
}
|
|
||||||
@@ -1,171 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import PropTypes from "prop-types";
|
|
||||||
import cs from "classnames";
|
|
||||||
import Draggable from "react-draggable";
|
|
||||||
import { Resizable } from "react-resizable";
|
|
||||||
import DialogTitle from "./DialogTitle";
|
|
||||||
import DialogBody from "./DialogBody";
|
|
||||||
import DialogFooter from "./DialogFooter";
|
|
||||||
import EventStack from "active-event-stack";
|
|
||||||
|
|
||||||
class Dialog extends React.Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
|
|
||||||
this.state = {
|
|
||||||
height: props.height,
|
|
||||||
width: props.width,
|
|
||||||
isMinimized: false,
|
|
||||||
isMaximized: false
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillMount() {
|
|
||||||
/**
|
|
||||||
* This is done in the componentWillMount instead of the componentDidMount
|
|
||||||
* because this way, a modal that is a child of another will have register
|
|
||||||
* for events after its parent
|
|
||||||
*/
|
|
||||||
this.eventToken = EventStack.addListenable([
|
|
||||||
["keydown", this.handleGlobalKeydown]
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillUnmount = () => {
|
|
||||||
EventStack.removeListenable(this.eventToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
handleGlobalKeydown = (e) => {
|
|
||||||
if (this.props.closeOnEscape && e.keyCode == 27) {
|
|
||||||
e.stopPropagation();
|
|
||||||
this.onClose();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
onClose = () => {
|
|
||||||
if (this.props.onClose) {
|
|
||||||
this.props.onClose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onMinimize = () => {
|
|
||||||
this.setState({ isMinimized: true, isMaximized: false });
|
|
||||||
}
|
|
||||||
|
|
||||||
onMaximize = () => {
|
|
||||||
this.setState({ isMinimized: false, isMaximized: true });
|
|
||||||
}
|
|
||||||
|
|
||||||
onRestore = () => {
|
|
||||||
this.setState({ isMinimized: false, isMaximized: false });
|
|
||||||
}
|
|
||||||
|
|
||||||
onResize = (event, { element, size }) => {
|
|
||||||
this.setState({ width: size.width, height: size.height });
|
|
||||||
}
|
|
||||||
|
|
||||||
getDialogTitle = () => {
|
|
||||||
return (
|
|
||||||
<DialogTitle
|
|
||||||
title={this.props.title}
|
|
||||||
hasCloseIcon={this.props.hasCloseIcon}
|
|
||||||
allowMinimize={this.props.allowMinimize}
|
|
||||||
allowMaximize={this.props.allowMaximize}
|
|
||||||
isMinimized={this.state.isMinimized}
|
|
||||||
isMaximized={this.state.isMaximized}
|
|
||||||
onMinimize={this.onMinimize}
|
|
||||||
onMaximize={this.onMaximize}
|
|
||||||
onRestore={this.onRestore}
|
|
||||||
onClose={this.onClose}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const { height, width, isMinimized, isMaximized } = this.state;
|
|
||||||
const { modal, isDraggable, isResizable, buttons, children, position } = this.props;
|
|
||||||
const { x = -width / 2, y = -height / 2 } = position;
|
|
||||||
|
|
||||||
let dialog = (
|
|
||||||
<div style={{ height: height, width, transform: `translate(${x}px, ${y}px)` }} className={cs("ui-dialog", { "minimized": isMinimized, "maximized": isMaximized })}>
|
|
||||||
{this.getDialogTitle()}
|
|
||||||
{
|
|
||||||
!isMinimized && <DialogBody>{children}</DialogBody>
|
|
||||||
}
|
|
||||||
{
|
|
||||||
!isMinimized && <DialogFooter buttons={buttons} onClose={this.onClose}></DialogFooter>
|
|
||||||
}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!isMinimized && !isMaximized && isResizable) {
|
|
||||||
dialog = (
|
|
||||||
<Resizable className="box" height={height} width={width} onResize={this.onResize}>
|
|
||||||
{dialog}
|
|
||||||
</Resizable>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isMinimized && !isMaximized && isDraggable !== false) {
|
|
||||||
dialog = (
|
|
||||||
<Draggable handle=".ui-dialog" bounds="body" defaultPosition={{ x, y }}>
|
|
||||||
{dialog}
|
|
||||||
</Draggable>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
className={cs("ui-dialog-container", { "": modal })}>
|
|
||||||
{dialog}
|
|
||||||
{modal && <div className="ui-dialog-overlay"></div>}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Dialog.propTypes = {
|
|
||||||
height: PropTypes.number,
|
|
||||||
width: PropTypes.number,
|
|
||||||
modal: PropTypes.bool,
|
|
||||||
position: PropTypes.shape({
|
|
||||||
x: PropTypes.number,
|
|
||||||
y: PropTypes.number
|
|
||||||
}),
|
|
||||||
hasCloseIcon: PropTypes.bool,
|
|
||||||
allowMinimize: PropTypes.bool,
|
|
||||||
allowMaximize: PropTypes.bool,
|
|
||||||
isResizable: PropTypes.bool,
|
|
||||||
title: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
|
|
||||||
closeOnEscape: PropTypes.bool,
|
|
||||||
onClose: PropTypes.func,
|
|
||||||
children: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.element]).isRequired,
|
|
||||||
buttons: PropTypes.oneOfType([
|
|
||||||
PropTypes.arrayOf(PropTypes.shape({
|
|
||||||
text: PropTypes.string,
|
|
||||||
onClick: PropTypes.func
|
|
||||||
})),
|
|
||||||
PropTypes.arrayOf(PropTypes.element)
|
|
||||||
])
|
|
||||||
};
|
|
||||||
|
|
||||||
Dialog.defaultProps = {
|
|
||||||
height: 200,
|
|
||||||
width: 600,
|
|
||||||
modal: false,
|
|
||||||
closeOnEscape: true,
|
|
||||||
isDraggable: false,
|
|
||||||
isResizable: false,
|
|
||||||
title: '',
|
|
||||||
hasCloseIcon: true,
|
|
||||||
allowMinimize: false,
|
|
||||||
allowMaximize: false,
|
|
||||||
onClose: null,
|
|
||||||
buttons: null,
|
|
||||||
position: { x: -250, y: -150 }
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Dialog;
|
|
||||||
@@ -7,7 +7,6 @@ import {
|
|||||||
loggedUser,
|
loggedUser,
|
||||||
planScheduler,
|
planScheduler,
|
||||||
providerScheduler,
|
providerScheduler,
|
||||||
visitReporter,
|
|
||||||
} from 'utils/authorization';
|
} from 'utils/authorization';
|
||||||
|
|
||||||
class SidebarContent extends React.Component {
|
class SidebarContent extends React.Component {
|
||||||
@@ -67,6 +66,7 @@ class SidebarContent extends React.Component {
|
|||||||
$subUl.stop().slideToggle(slideTime);
|
$subUl.stop().slideToggle(slideTime);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// HighlightActiveItems
|
// HighlightActiveItems
|
||||||
const $links = $nav.find('a');
|
const $links = $nav.find('a');
|
||||||
const currentLocation = hashHistory.getCurrentLocation();
|
const currentLocation = hashHistory.getCurrentLocation();
|
||||||
@@ -101,61 +101,50 @@ class SidebarContent extends React.Component {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<ul className="nav" ref={(c) => { this.nav = c; }}>
|
<ul className="nav" ref={(c) => { this.nav = c; }}>
|
||||||
{loggedUser.anyOf(visitReporter) &&
|
<li>
|
||||||
<li><FlatButton className="prepend-icon" href={"#/app/form/visit/" + this.state.user.useruuid}><span>Create Visit</span></FlatButton></li>
|
<FlatButton href="#/app/form"><i className="nav-icon material-icons cyan-text text-lighter-4">directions_car</i><span className="nav-text">Rides</span></FlatButton>
|
||||||
}
|
<ul>
|
||||||
{!loggedUser.anyOf(visitReporter) &&
|
<li><FlatButton className="prepend-icon" href={"#/app/form/steppers/" + this.state.user.useruuid}><span>Book Rides</span></FlatButton></li>
|
||||||
<li>
|
<li><FlatButton className="prepend-icon" href="#/app/table/rides"><span>Manage Rides</span></FlatButton></li>
|
||||||
<FlatButton href="#/app/form"><i className="nav-icon material-icons cyan-text text-lighter-4">directions_car</i><span className="nav-text">Rides</span></FlatButton>
|
</ul>
|
||||||
<ul>
|
</li>
|
||||||
<li><FlatButton className="prepend-icon" href={"#/app/form/steppers/" + this.state.user.useruuid}><span>Book Rides</span></FlatButton></li>
|
<li>
|
||||||
<li><FlatButton className="prepend-icon" href="#/app/table/rides"><span>Manage Rides</span></FlatButton></li>
|
<FlatButton href="#/app/chart"><i className="nav-icon material-icons">people_outline</i><span className="nav-text">Members</span></FlatButton>
|
||||||
</ul>
|
<ul>
|
||||||
</li>
|
<li><FlatButton className="prepend-icon" href="#/app/page/eligibility"><span>Verify Eligibility</span></FlatButton></li>
|
||||||
}
|
<li><FlatButton className="prepend-icon" href="#/app/table/members"><span>Manage Members</span></FlatButton></li>
|
||||||
{!loggedUser.anyOf(visitReporter) &&
|
</ul>
|
||||||
<li>
|
</li>
|
||||||
<FlatButton href="#/app/chart"><i className="nav-icon material-icons">people_outline</i><span className="nav-text">Members</span></FlatButton>
|
|
||||||
<ul>
|
|
||||||
<li><FlatButton className="prepend-icon" href="#/app/page/eligibility"><span>Verify Eligibility</span></FlatButton></li>
|
|
||||||
<li><FlatButton className="prepend-icon" href="#/app/table/members"><span>Manage Members</span></FlatButton></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
{!loggedUser.anyOf(visitReporter) &&
|
|
||||||
<li>
|
|
||||||
<FlatButton href="#/app/chart"><i className="nav-icon material-icons">schedule</i><span className="nav-text">Visits</span></FlatButton>
|
|
||||||
<ul>
|
|
||||||
<li><FlatButton className="prepend-icon" href={"#/app/form/visit/" + this.state.user.useruuid}><span>Create Visit</span></FlatButton></li>
|
|
||||||
<li> <FlatButton className="prepend-icon" href="#/app/table/visits"><span className="nav-text">Manage Visits</span></FlatButton></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
|
|
||||||
{!loggedUser.anyOf(visitReporter) &&
|
<li>
|
||||||
<li>
|
<FlatButton href="#/app/table/visits"><i className="nav-icon material-icons">schedule</i><span className="nav-text">Visits</span></FlatButton>
|
||||||
<FlatButton href="#/app/chart"><i className="nav-icon material-icons">settings</i><span className="nav-text">Manage</span></FlatButton>
|
</li>
|
||||||
<ul>
|
{/* <li>
|
||||||
{!loggedUser.anyOf(planScheduler, providerScheduler) &&
|
<FlatButton href="#/app/table/message"><i className="nav-icon material-icons">mail_outline</i><span className="nav-text">Message Center</span></FlatButton>
|
||||||
<li>
|
</li> */}
|
||||||
<FlatButton href="#/app/table/authorizedusers"><i className="nav-icon material-icons">people</i><span className="nav-text">Authorized Users</span></FlatButton>
|
|
||||||
</li>
|
<li>
|
||||||
}
|
<FlatButton href="#/app/chart"><i className="nav-icon material-icons">settings</i><span className="nav-text">Manage</span></FlatButton>
|
||||||
|
<ul>
|
||||||
|
{!loggedUser.anyOf(planScheduler, providerScheduler) &&
|
||||||
<li>
|
<li>
|
||||||
<FlatButton href="#/app/table/organizations"><i className="nav-icon material-icons">assignment</i><span className="nav-text">Organizations</span></FlatButton>
|
<FlatButton href="#/app/table/authorizedusers"><i className="nav-icon material-icons">people</i><span className="nav-text">Authorized Users</span></FlatButton>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
}
|
||||||
<FlatButton href="#/app/table/provider"><i className="nav-icon material-icons">local_hospital</i><span className="nav-text">Participating Providers</span></FlatButton>
|
<li>
|
||||||
</li>
|
<FlatButton href="#/app/table/organizations"><i className="nav-icon material-icons">assignment</i><span className="nav-text">Organizations</span></FlatButton>
|
||||||
<li>
|
</li>
|
||||||
<FlatButton href={"#/app/authorizedusers/" + this.state.user.useruuid}><i className="nav-icon material-icons">account_circle</i><span className="nav-text">Profile</span></FlatButton>
|
<li>
|
||||||
</li>
|
<FlatButton href="#/app/table/provider"><i className="nav-icon material-icons">local_hospital</i><span className="nav-text">Participating Providers</span></FlatButton>
|
||||||
{/* <li>
|
</li>
|
||||||
<FlatButton href="#/app/dashboard"><i className="nav-icon material-icons">equalizer</i><span className="nav-text">Reports</span></FlatButton>
|
<li>
|
||||||
</li> */}
|
<FlatButton href={"#/app/authorizedusers/" + this.state.user.useruuid}><i className="nav-icon material-icons">account_circle</i><span className="nav-text">Profile</span></FlatButton>
|
||||||
</ul>
|
</li>
|
||||||
</li>
|
{/* <li>
|
||||||
}
|
<FlatButton href="#/app/dashboard"><i className="nav-icon material-icons">equalizer</i><span className="nav-text">Reports</span></FlatButton>
|
||||||
|
</li> */}
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li className="nav-divider" />
|
<li className="nav-divider" />
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -115,7 +115,6 @@ export class NEMTLocation extends React.Component {
|
|||||||
long: 0
|
long: 0
|
||||||
},
|
},
|
||||||
providers: [],
|
providers: [],
|
||||||
locations: [],
|
|
||||||
currentSelection: {
|
currentSelection: {
|
||||||
id: 0,
|
id: 0,
|
||||||
name: "",
|
name: "",
|
||||||
@@ -126,7 +125,6 @@ export class NEMTLocation extends React.Component {
|
|||||||
saved: false,
|
saved: false,
|
||||||
},
|
},
|
||||||
inputValue: "",
|
inputValue: "",
|
||||||
locationValue: "",
|
|
||||||
addLocation: false,
|
addLocation: false,
|
||||||
searchAddresses: [],
|
searchAddresses: [],
|
||||||
addLocationText: '',
|
addLocationText: '',
|
||||||
@@ -145,12 +143,6 @@ export class NEMTLocation extends React.Component {
|
|||||||
id: '',
|
id: '',
|
||||||
name: '',
|
name: '',
|
||||||
address: '',
|
address: '',
|
||||||
},
|
|
||||||
centerLocation: {
|
|
||||||
lat: 0,
|
|
||||||
long: 0,
|
|
||||||
name: '',
|
|
||||||
address: '',
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,8 +164,6 @@ export class NEMTLocation extends React.Component {
|
|||||||
this.updateLocation = this.updateLocation.bind(this);
|
this.updateLocation = this.updateLocation.bind(this);
|
||||||
this.handleGetClosestPlace = this.handleGetClosestPlace.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);
|
// this.updateLocation().then(console.log);
|
||||||
|
|
||||||
|
|
||||||
@@ -194,71 +184,50 @@ export class NEMTLocation extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
geoSuccess = (position) => {
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lat === 0 || long === 0) {
|
const geo = GeolocationService.GetCoordinates();
|
||||||
lat = 41.886406;
|
// self.updateLocation().then(p => {
|
||||||
long = -87.624225;
|
let lat = geo.lat;
|
||||||
}
|
let long = geo.long;
|
||||||
|
|
||||||
this.locateNearby(lat, long)
|
this.locateNearby(lat, long)
|
||||||
}
|
}
|
||||||
|
|
||||||
locateNearby = (lat, long) => {
|
locateNearby = (lat, long) => {
|
||||||
|
|
||||||
if (lat === 0 || long === 0) {
|
if (lat === 0 || long === 0) {
|
||||||
lat = 41.886406;
|
lat = 41.886406;
|
||||||
long = -87.624225;
|
long = -87.624225;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.state.locationType === 'provider') {
|
if (this.state.locationType === 'provider') {
|
||||||
let url = `/v1/nemt/provider?lat=${lat}&long=${long}&limit=50&sortby=distance`
|
Instance.getRawConn().get(`/v1/nemt/provider/participating?sort=distance&lat=${lat}&long=${long}`).then(res => {
|
||||||
Instance.getRawConn().get(url).then(res => {
|
|
||||||
let nearByPlaces = [];
|
let nearByPlaces = [];
|
||||||
if (res.data.resultStatus === 'SUCCESS') {
|
let providers = res.data.map(p => {
|
||||||
let providers = res.data.providers.map(p => {
|
const streetNumber = p.address.street_address_1.split(' ')[0]
|
||||||
const streetNumber = p.streetName_1.split(' ')[0]
|
let clickResult = {
|
||||||
let clickResult = {
|
id: p.muk_id,
|
||||||
id: p.mukId,
|
address: `${p.address.street_address_1}, ${p.address.city}, ${p.address.state} (${p.address.zipcode})`,
|
||||||
muk_id: p.mukId,
|
lat: p.address.lat,
|
||||||
address: `${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)})`,
|
lng: p.address.long,
|
||||||
lat: parseFloat(p.latitude),
|
name: p.name,
|
||||||
lng: parseFloat(p.longitude),
|
type: "provider",
|
||||||
name: p.providerName,
|
raw: p,
|
||||||
type: 'provider',
|
street_number: streetNumber,
|
||||||
raw: p,
|
street: p.address.street_address_1.replace(streetNumber, '').trim(),
|
||||||
street_number: streetNumber,
|
city: p.address.city,
|
||||||
street: p.streetName_1.replace(streetNumber, '').trim(),
|
state: p.address.state,
|
||||||
city: p.cityName,
|
zipcode: p.address.zipcode.substring(0, 5),
|
||||||
state: p.state,
|
country: p.address.country,
|
||||||
zipcode: p.zipCode.substr(0, 5),
|
saved: false,
|
||||||
country: p.country,
|
}
|
||||||
saved: false,
|
clickResult.address = `${clickResult.street_number} ${clickResult.street}, ${clickResult.city}`
|
||||||
}
|
|
||||||
|
|
||||||
if (p.fivePartKeyGroups.length > 0) {
|
var listItem = (<ListItem primaryText={p.name} secondaryText={clickResult.address} key={p.muk_id} rightIcon={<MapsLocalHospital />} onClick={(event) => this.handlePlaceChanged(clickResult)} />)
|
||||||
clickResult.npi = p.fivePartKeyGroups[0].providerNum;
|
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;
|
||||||
|
});
|
||||||
|
|
||||||
var listItem = (<ListItem primaryText={p.providerName} secondaryText={clickResult.address} key={p.mukId} rightIcon={<MapsLocalHospital />} onClick={(event) => this.handlePlaceChanged(clickResult)} />)
|
this.setState(Object.assign(this.state, { nearbyPlaces: nearByPlaces, providers: providers }));
|
||||||
nearByPlaces.push(listItem);
|
|
||||||
p.providerText = `${p.providerName} - ${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)}) (${p.phoneNumber})`
|
|
||||||
p.muk_id = p.mukId
|
|
||||||
|
|
||||||
return p;
|
|
||||||
});
|
|
||||||
|
|
||||||
this.setState(Object.assign(this.state, { nearbyPlaces: nearByPlaces, providers: providers }));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var pyrmont = new google.maps.LatLng(lat, long);
|
var pyrmont = new google.maps.LatLng(lat, long);
|
||||||
@@ -492,7 +461,7 @@ export class NEMTLocation extends React.Component {
|
|||||||
|
|
||||||
this.setState(Object.assign(this.state, { open: true }));
|
this.setState(Object.assign(this.state, { open: true }));
|
||||||
if (this.state.user.useruuid === '' || this.state.user.useruuid !== this.props.data.user.useruuid) {
|
if (this.state.user.useruuid === '' || this.state.user.useruuid !== this.props.data.user.useruuid) {
|
||||||
if (this.props.data.user && this.props.data.user.useruuid !== undefined && this.props.data.user !== null && this.props.data.user.useruuid !== '') {
|
if (this.props.data.user && this.props.data.user !== null && this.props.data.user.useruuid !== '') {
|
||||||
let url = `/v1/nemt/users/member/` + this.props.data.user.useruuid
|
let url = `/v1/nemt/users/member/` + this.props.data.user.useruuid
|
||||||
Instance.getRawConn().get(url).then(res => {
|
Instance.getRawConn().get(url).then(res => {
|
||||||
let user = res.data;
|
let user = res.data;
|
||||||
@@ -524,103 +493,28 @@ export class NEMTLocation extends React.Component {
|
|||||||
this.locateNearby(41.886406, -87.624225);
|
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) {
|
updateTextSearch(searchText, dtSource, params) {
|
||||||
let self = this;
|
let self = this;
|
||||||
self.setState(Object.assign(self.state, { inputValue: searchText }));
|
self.setState(Object.assign(self.state, { inputValue: searchText }));
|
||||||
if (searchText.length >= 3) {
|
if (searchText.length >= 3) {
|
||||||
let lat = 0;
|
let lat = self.state.geolocation.lat;
|
||||||
let long = 0;
|
let long = self.state.geolocation.long;
|
||||||
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) {
|
if (lat === 0 || long === 0) {
|
||||||
lat = 41.886406;
|
lat = 41.886406;
|
||||||
long = -87.624225;
|
long = -87.624225;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.state.locationType === 'provider') {
|
if (self.state.locationType === 'provider') {
|
||||||
let url = `/v1/nemt/provider?lat=${lat}&long=${long}&limit=50&name=${searchText}&sortby=distance`
|
//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`
|
||||||
Instance.getRawConn().get(encodeURI(url)).then(res => {
|
Instance.getRawConn().get(encodeURI(url)).then(res => {
|
||||||
if (res.data.resultStatus === 'SUCCESS') {
|
if (res.data.length > 0) {
|
||||||
let providers = res.data.providers.map(p => {
|
let places = res.data.map(p => {
|
||||||
const streetNumber = p.streetName_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})`
|
||||||
p.providerText = `${p.providerName} - ${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)}) (${p.phoneNumber})`
|
p.saved = false
|
||||||
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;
|
return p;
|
||||||
});
|
})
|
||||||
this.setState(Object.assign(this.state, { providers: providers }));
|
self.setState(Object.assign(self.state, { providers: places }));
|
||||||
dtSource = self.state.providers;
|
dtSource = self.state.providers;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -658,59 +552,42 @@ export class NEMTLocation extends React.Component {
|
|||||||
this.setState(Object.assign(this.state, { addLocationTextValue: providerSearch }));
|
this.setState(Object.assign(this.state, { addLocationTextValue: providerSearch }));
|
||||||
if (providerSearch.length >= 3) {
|
if (providerSearch.length >= 3) {
|
||||||
|
|
||||||
|
const geo = GeolocationService.GetCoordinates();
|
||||||
let lat = 0;
|
let lat = geo.lat;
|
||||||
let long = 0;
|
let long = geo.long;
|
||||||
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) {
|
if (lat === 0 || long === 0) {
|
||||||
lat = 41.886406;
|
lat = 41.886406;
|
||||||
long = -87.624225;
|
long = -87.624225;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.state.locationType === 'provider') {
|
if (this.state.locationType === 'provider') {
|
||||||
let url = `/v1/nemt/provider?lat=${lat}&long=${long}&limit=50&name=${providerSearch}&sortby=distance`
|
let url = `/v1/nemt/provider/participating?lat=${lat}&long=${long}&query=${providerSearch}&sortby=distance`
|
||||||
Instance.getRawConn().get(encodeURI(url)).then(res => {
|
Instance.getRawConn().get(encodeURI(url)).then(res => {
|
||||||
if (res.data.resultStatus === 'SUCCESS') {
|
let places = res.data.map(p => {
|
||||||
let providers = res.data.providers.map(p => {
|
const streetNumber = p.address.street_address_1.split(' ')[0]
|
||||||
const streetNumber = p.streetName_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})`
|
||||||
p.providerText = `${p.providerName} - ${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)}) (${p.phoneNumber})`
|
let clickResult = {
|
||||||
p.muk_id = p.mukId
|
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}`
|
||||||
|
|
||||||
let clickResult = {
|
var listItem = (<ListItem value={p.muk_id} primaryText={p.name} secondaryText={clickResult.address} key={p.muk_id} rightIcon={<MapsLocalHospital />} onClick={(event) => this.handleSaveAddress(clickResult, this)} />)
|
||||||
id: p.mukId,
|
return listItem;
|
||||||
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) {
|
this.setState(Object.assign(this.state, { searchAddresses: places }));
|
||||||
clickResult.npi = p.fivePartKeyGroups[0].providerNum;
|
|
||||||
}
|
|
||||||
|
|
||||||
var listItem = (<ListItem primaryText={p.providerName} secondaryText={clickResult.address} key={p.mukId} value={p.mukId} rightIcon={<MapsLocalHospital />} onClick={(event) => this.handleSaveAddress(clickResult)} />)
|
|
||||||
return listItem;
|
|
||||||
});
|
|
||||||
this.setState(Object.assign(this.state, { searchAddresses: providers }));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var location = new google.maps.LatLng(lat, long);
|
var location = new google.maps.LatLng(lat, long);
|
||||||
@@ -837,68 +714,6 @@ 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) => {
|
handleAutocomplete = (provider) => {
|
||||||
const sendInfo = (clickResult) => {
|
const sendInfo = (clickResult) => {
|
||||||
this.setState(Object.assign(this.state, { currentSelection: clickResult }));
|
this.setState(Object.assign(this.state, { currentSelection: clickResult }));
|
||||||
@@ -918,32 +733,24 @@ export class NEMTLocation extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.state.locationType === "provider") {
|
if (this.state.locationType === "provider") {
|
||||||
const p = provider;
|
const streetNumber = provider.address.street_address_1.split(' ')[0]
|
||||||
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 = {
|
let clickResult = {
|
||||||
id: p.mukId,
|
id: provider.muk_id,
|
||||||
muk_id: p.mukId,
|
address: `${provider.address.street_address_1}, ${provider.address.city}, ${provider.address.state} (${provider.address.zipcode})`,
|
||||||
address: `${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)})`,
|
lat: provider.address.lat,
|
||||||
lat: parseFloat(p.latitude),
|
lng: provider.address.long,
|
||||||
lng: parseFloat(p.longitude),
|
name: provider.name,
|
||||||
name: p.providerName,
|
type: "provider",
|
||||||
type: 'provider',
|
raw: provider,
|
||||||
raw: p,
|
|
||||||
street_number: streetNumber,
|
street_number: streetNumber,
|
||||||
street: p.streetName_1.replace(streetNumber, '').trim(),
|
street: provider.address.street_address_1.replace(streetNumber, '').trim(),
|
||||||
city: p.cityName,
|
city: provider.address.city,
|
||||||
state: p.state,
|
state: provider.address.state,
|
||||||
zipcode: p.zipCode.substr(0, 5),
|
zipcode: provider.address.zipcode.substring(0, 5),
|
||||||
country: p.country,
|
country: provider.address.country,
|
||||||
saved: false,
|
saved: false,
|
||||||
}
|
}
|
||||||
|
clickResult.address = `${clickResult.street_number} ${clickResult.street}, ${clickResult.city}`
|
||||||
if (p.fivePartKeyGroups.length > 0) {
|
|
||||||
clickResult.npi = p.fivePartKeyGroups[0].providerNum;
|
|
||||||
}
|
|
||||||
|
|
||||||
sendInfo(clickResult);
|
sendInfo(clickResult);
|
||||||
} else {
|
} else {
|
||||||
@@ -1033,51 +840,42 @@ export class NEMTLocation extends React.Component {
|
|||||||
|
|
||||||
handleCurrentLocation(e) {
|
handleCurrentLocation(e) {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
const geo = GeolocationService.GetCoordinates();
|
||||||
let lat = 0;
|
// self.updateLocation().then(p => {
|
||||||
let long = 0;
|
let lat = geo.lat;
|
||||||
if (this.state.centerLocation.lat !== 0 && this.state.centerLocation.long !== 0) {
|
let long = geo.long;
|
||||||
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) {
|
if (lat === 0 || long === 0) {
|
||||||
lat = 41.886406;
|
lat = 41.886406;
|
||||||
long = -87.624225;
|
long = -87.624225;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.state.locationType === 'provider') {
|
if (self.state.locationType === 'provider') {
|
||||||
let url = `/v1/nemt/provider?lat=${lat}&long=${long}&limit=50&sortby=distance`
|
Instance.getRawConn().get(`/v1/nemt/provider/participating?sort=distance&lat=${lat}&long=${long}`).then(res => {
|
||||||
Instance.getRawConn().get(url).then(res => {
|
|
||||||
let listItem = (<ListItem primaryText="No location found" key="-1" leftIcon={<MapsNearMe />} onClick={self.handleCurrentLocation} />)
|
let listItem = (<ListItem primaryText="No location found" key="-1" leftIcon={<MapsNearMe />} onClick={self.handleCurrentLocation} />)
|
||||||
if (res.data.resultStatus === 'SUCCESS') {
|
if (res.data.length > 0) {
|
||||||
const p = res.data.providers[0];
|
const result = res.data[0];
|
||||||
const streetNumber = p.streetName_1.split(' ')[0]
|
const streetNumber = result.address.street_address_1.split(' ')[0]
|
||||||
let clickResult = {
|
let clickResult = {
|
||||||
id: p.mukId,
|
id: result.muk_id,
|
||||||
address: `${p.streetName_1}, ${p.cityName}, ${p.state} (${p.zipCode.substr(0, 5)})`,
|
address: `${result.address.street_address_1}, ${result.address.city}, ${result.address.state} (${result.address.zipcode})`,
|
||||||
lat: parseFloat(p.latitude),
|
lat: result.address.lat,
|
||||||
lng: parseFloat(p.longitude),
|
lng: result.address.long,
|
||||||
name: p.providerName,
|
name: result.name,
|
||||||
type: 'provider',
|
type: "provider",
|
||||||
raw: p,
|
raw: result,
|
||||||
street_number: streetNumber,
|
street_number: streetNumber,
|
||||||
street: p.streetName_1.replace(streetNumber, '').trim(),
|
street: result.address.street_address_1.replace(streetNumber, '').trim(),
|
||||||
city: p.cityName,
|
city: result.address.city,
|
||||||
state: p.state,
|
state: result.address.state,
|
||||||
zipcode: p.zipCode.substr(0, 5),
|
zipcode: result.address.zipcode.substring(0, 5),
|
||||||
country: p.country,
|
country: result.address.country,
|
||||||
saved: false,
|
saved: false,
|
||||||
}
|
}
|
||||||
if (p.fivePartKeyGroups.length > 0) {
|
clickResult.address = `${clickResult.street_number} ${clickResult.street}, ${clickResult.city}`
|
||||||
clickResult.npi = p.fivePartKeyGroups[0].providerNum;
|
|
||||||
}
|
|
||||||
self.handlePlaceChanged(clickResult)
|
self.handlePlaceChanged(clickResult)
|
||||||
|
//listItem = (<ListItem primaryText={clickResult.name} secondaryText={clickResult.address} key={clickResult.muk_id} leftIcon={<MapsNearMe />} onClick={(event) => self.handlePlaceChanged(clickResult)} />)
|
||||||
}
|
}
|
||||||
|
//self.setState(Object.assign(self.state, { currentLocation: listItem }));
|
||||||
}).catch(console.error);
|
}).catch(console.error);
|
||||||
} else {
|
} else {
|
||||||
var location = new google.maps.LatLng(lat, long);
|
var location = new google.maps.LatLng(lat, long);
|
||||||
@@ -1338,7 +1136,6 @@ export class NEMTLocation extends React.Component {
|
|||||||
|
|
||||||
let listItem = (
|
let listItem = (
|
||||||
<div className="" id="container">
|
<div className="" id="container">
|
||||||
<AutoComplete dataSourceConfig={datasourceConfig} dataSource={this.state.locations} filter={this.filterResults} maxSearchResults={5} onUpdateInput={this.updateLocationValue} fullWidth={true} floatingLabelText="Center Location" onNewRequest={this.handleAutoCompleteLocation} searchText={this.state.locationValue} />
|
|
||||||
{autosuggest}
|
{autosuggest}
|
||||||
<List>
|
<List>
|
||||||
{this.state.currentLocation}
|
{this.state.currentLocation}
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ module.exports = {
|
|||||||
require('./routes/components'),
|
require('./routes/components'),
|
||||||
require('./routes/layouts'),
|
require('./routes/layouts'),
|
||||||
require('./routes/steppers'),
|
require('./routes/steppers'),
|
||||||
require('./routes/visitRide'),
|
|
||||||
require('./routes/visit'),
|
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,18 +30,68 @@ import Close from 'material-ui/svg-icons/navigation/close'
|
|||||||
import CommunicationCall from 'material-ui/svg-icons/communication/call'
|
import CommunicationCall from 'material-ui/svg-icons/communication/call'
|
||||||
import Message from 'material-ui/svg-icons/communication/message'
|
import Message from 'material-ui/svg-icons/communication/message'
|
||||||
import Instance from '../../../../../../../components/Connection';
|
import Instance from '../../../../../../../components/Connection';
|
||||||
import ValidationErrorsInfoDialog from '../../../../../../../components/Shared/ValidationErrorsInfoDialog';
|
|
||||||
import Checkbox from 'material-ui/Checkbox';
|
import Checkbox from 'material-ui/Checkbox';
|
||||||
import Popover from 'material-ui/Popover';
|
import Popover from 'material-ui/Popover';
|
||||||
|
|
||||||
const ADDRESS_TYPE_HOME = "home";
|
|
||||||
|
|
||||||
let DateTimeFormat;
|
let DateTimeFormat;
|
||||||
const roundingTime = 1000 * 60 * 5; //5 minutes
|
|
||||||
|
|
||||||
|
|
||||||
DateTimeFormat = global.Intl.DateTimeFormat;
|
DateTimeFormat = global.Intl.DateTimeFormat;
|
||||||
|
|
||||||
|
export class ValidationErrorsInfoDialog extends React.Component {
|
||||||
|
|
||||||
|
state = {
|
||||||
|
open: this.props.open,
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillReceiveProps(newProps){
|
||||||
|
this.setState({open: newProps.open});
|
||||||
|
}
|
||||||
|
|
||||||
|
handleOpen = () => {
|
||||||
|
this.setState({ open: true });
|
||||||
|
};
|
||||||
|
|
||||||
|
handleClose = () => {
|
||||||
|
this.setState({ open: false });
|
||||||
|
this.props.onDismiss();
|
||||||
|
};
|
||||||
|
|
||||||
|
render() {
|
||||||
|
|
||||||
|
const actions = [
|
||||||
|
<FlatButton
|
||||||
|
label="Dismiss"
|
||||||
|
primary={true}
|
||||||
|
keyboardFocused={true}
|
||||||
|
onClick={this.handleClose}
|
||||||
|
/>,
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Dialog
|
||||||
|
title="Erors"
|
||||||
|
actions={actions}
|
||||||
|
modal={false}
|
||||||
|
open={this.state.open}
|
||||||
|
onRequestClose={this.handleClose}
|
||||||
|
overlayStyle={{backgroundColor: 'transparent'}}
|
||||||
|
>
|
||||||
|
{this.props.errorMessages.map(errorMessage => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<a>{errorMessage.message}</a>
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Dialog>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export class DialogExampleSimple extends React.Component {
|
export class DialogExampleSimple extends React.Component {
|
||||||
state = {
|
state = {
|
||||||
@@ -366,18 +416,16 @@ class VerticalNonLinear extends React.Component {
|
|||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
let dateNow = new Date();
|
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
stepIndex: 0,
|
stepIndex: 0,
|
||||||
rideTypeValue: 0,
|
rideTypeValue: 0,
|
||||||
providerID: 0,
|
providerID: 0,
|
||||||
providerName: '',
|
providerName: '',
|
||||||
visitDate: new Date(),
|
visitDate: new Date(),
|
||||||
visitTime: new Date(Math.round(dateNow.getTime() / roundingTime) * roundingTime),
|
visitTime: new Date(),
|
||||||
pickupLocation: null,
|
pickupLocation: null,
|
||||||
pickupTime: new Date(Math.round(dateNow.getTime() / roundingTime) * roundingTime),
|
pickupTime: new Date(),
|
||||||
pickupTimeReturn: new Date(Math.round(dateNow.getTime() / roundingTime) * roundingTime),
|
pickupTimeReturn: new Date(),
|
||||||
pickupTimeReturnDisplayMode: 'none',
|
pickupTimeReturnDisplayMode: 'none',
|
||||||
open: false,
|
open: false,
|
||||||
message: 'Booking Ride',
|
message: 'Booking Ride',
|
||||||
@@ -406,7 +454,7 @@ class VerticalNonLinear extends React.Component {
|
|||||||
return_time: new Date(),
|
return_time: new Date(),
|
||||||
pickupTimeHide: false,
|
pickupTimeHide: false,
|
||||||
showValidationErrors:false,
|
showValidationErrors:false,
|
||||||
validationErrors:[]
|
validationErrors:[],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -421,16 +469,6 @@ class VerticalNonLinear extends React.Component {
|
|||||||
if (user.useruuid !== loggedUser.useruuid) {
|
if (user.useruuid !== loggedUser.useruuid) {
|
||||||
Instance.getRawConn().get(`/v1/nemt/users/member/${user.useruuid}`)
|
Instance.getRawConn().get(`/v1/nemt/users/member/${user.useruuid}`)
|
||||||
.then(function (res) {
|
.then(function (res) {
|
||||||
let userHomeAddress = null;
|
|
||||||
res.data.addresses.forEach(address => {
|
|
||||||
if (address.address_type === ADDRESS_TYPE_HOME) {
|
|
||||||
userHomeAddress = address;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (userHomeAddress != null) {
|
|
||||||
userHomeAddress.name = "Home";
|
|
||||||
state.handlePickupChanged(userHomeAddress, state);
|
|
||||||
}
|
|
||||||
state.setState(Object.assign(state.state, { user: res.data, showUserSelection: true, userSelectionText: `${res.data.member} - ${res.data.name}` }));
|
state.setState(Object.assign(state.state, { user: res.data, showUserSelection: true, userSelectionText: `${res.data.member} - ${res.data.name}` }));
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
@@ -451,12 +489,10 @@ class VerticalNonLinear extends React.Component {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let date = new Date();
|
let visitTime = new Date(new Date().getTime() + (1 * 60 * 60 * 1000));
|
||||||
|
let visitDate = visitTime;
|
||||||
let visitTime = new Date(Math.round((date.getTime() + (1 * 60 * 60 * 1000)) / roundingTime) * roundingTime);
|
let pickupTime = new Date(visitTime.getTime() - (0.5 * 60 * 60 * 1000));
|
||||||
let visitDate = date;
|
let pickupTimeReturn = new Date(visitTime.getTime() - (0.5 * 60 * 60 * 1000));
|
||||||
let pickupTime = new Date(Math.round((visitTime.getTime() - (0.5 * 60 * 60 * 1000)) / roundingTime) * roundingTime);
|
|
||||||
let pickupTimeReturn = new Date(Math.round((visitTime.getTime() - (0.5 * 60 * 60 * 1000)) / roundingTime) * roundingTime);
|
|
||||||
|
|
||||||
this.setState(Object.assign(this.state, {
|
this.setState(Object.assign(this.state, {
|
||||||
visitDate: visitDate,
|
visitDate: visitDate,
|
||||||
@@ -487,8 +523,7 @@ class VerticalNonLinear extends React.Component {
|
|||||||
if (stepIndex === 3) {
|
if (stepIndex === 3) {
|
||||||
self.handleTouchTap();
|
self.handleTouchTap();
|
||||||
var requestRide = {
|
var requestRide = {
|
||||||
user_uuid: state.state.user ? state.state.user.useruuid : '',
|
user_uuid: state.state.user.useruuid,
|
||||||
user_consent: state.state.checked,
|
|
||||||
ride_type: "lyft",
|
ride_type: "lyft",
|
||||||
origin: state.state.origin,
|
origin: state.state.origin,
|
||||||
destination: state.state.destination,
|
destination: state.state.destination,
|
||||||
@@ -521,7 +556,7 @@ class VerticalNonLinear extends React.Component {
|
|||||||
self.handleRequestClose(self);
|
self.handleRequestClose(self);
|
||||||
window.location.href = '/#/app/page/map/' + res.data.ride_uuid;
|
window.location.href = '/#/app/page/map/' + res.data.ride_uuid;
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
if (error.response.status === 422) {
|
if (error.response.status === 422){
|
||||||
//Unprocessable Entity (validation failed)
|
//Unprocessable Entity (validation failed)
|
||||||
self.setState(Object.assign(self.state, {
|
self.setState(Object.assign(self.state, {
|
||||||
showValidationErrors:true,
|
showValidationErrors:true,
|
||||||
@@ -565,10 +600,10 @@ class VerticalNonLinear extends React.Component {
|
|||||||
|
|
||||||
handleDate(event, date, state) {
|
handleDate(event, date, state) {
|
||||||
let self = state
|
let self = state
|
||||||
let visitTime = new Date(Math.round((date.getTime() + (1 * 60 * 60 * 1000)) / roundingTime) * roundingTime);
|
let visitTime = new Date(date.getTime() + (1 * 60 * 60 * 1000));
|
||||||
let visitDate = date;
|
let visitDate = date;
|
||||||
let pickupTime = new Date(Math.round((visitTime.getTime() - (0.5 * 60 * 60 * 1000)) / roundingTime) * roundingTime);
|
let pickupTime = new Date(visitTime.getTime() - (0.5 * 60 * 60 * 1000));
|
||||||
let pickupTimeReturn = new Date(Math.round((visitTime.getTime() - (0.5 * 60 * 60 * 1000)) / roundingTime) * roundingTime);
|
let pickupTimeReturn = new Date(visitTime.getTime() - (0.5 * 60 * 60 * 1000));
|
||||||
|
|
||||||
self.setState(Object.assign(self.state, {
|
self.setState(Object.assign(self.state, {
|
||||||
visitDate: visitDate,
|
visitDate: visitDate,
|
||||||
@@ -769,7 +804,7 @@ class VerticalNonLinear extends React.Component {
|
|||||||
|
|
||||||
handlePickupChanged = (res, state) => {
|
handlePickupChanged = (res, state) => {
|
||||||
let origin = {
|
let origin = {
|
||||||
id: res.address_uuid ? res.address_uuid : res.id,
|
id: res.id,
|
||||||
name: res.name,
|
name: res.name,
|
||||||
lat: res.lat,
|
lat: res.lat,
|
||||||
lng: res.lng,
|
lng: res.lng,
|
||||||
@@ -815,9 +850,9 @@ class VerticalNonLinear extends React.Component {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handleValidationErrosDialogDismiss() {
|
handleValidationErrosDialogDismiss(){
|
||||||
this.setState(Object.assign(this.state, {
|
this.setState(Object.assign(this.state, {
|
||||||
showValidationErrors: false
|
showValidationErrors:false
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -859,18 +894,6 @@ class VerticalNonLinear extends React.Component {
|
|||||||
|
|
||||||
if (this.state.showUserSelection && this.state.users.length > 0) {
|
if (this.state.showUserSelection && this.state.users.length > 0) {
|
||||||
const handleAutocomplete = (u) => {
|
const handleAutocomplete = (u) => {
|
||||||
let userHomeAddress = null;
|
|
||||||
if (u.addresses && u.addresses.length > 0) {
|
|
||||||
u.addresses.forEach(address => {
|
|
||||||
if (address.address_type === ADDRESS_TYPE_HOME) {
|
|
||||||
userHomeAddress = address;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (userHomeAddress != null) {
|
|
||||||
userHomeAddress.name = "Home";
|
|
||||||
state.handlePickupChanged(userHomeAddress, state);
|
|
||||||
}
|
|
||||||
state.setState(Object.assign(state.state, { user: u, userSelectionText: u.userdata }));
|
state.setState(Object.assign(state.state, { user: u, userSelectionText: u.userdata }));
|
||||||
}
|
}
|
||||||
const datasourceConfig = { text: 'userdata', value: 'useruuid' }
|
const datasourceConfig = { text: 'userdata', value: 'useruuid' }
|
||||||
@@ -896,7 +919,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 title={'Errors'} open = {this.state.showValidationErrors} draggable={true} modal={false} errorMessages = {this.state.validationErrors} onDismiss={this.handleValidationErrosDialogDismiss.bind(this)}/>
|
<ValidationErrorsInfoDialog open = {this.state.showValidationErrors} errorMessages = {this.state.validationErrors} onDismiss={this.handleValidationErrosDialogDismiss.bind(this)}/>
|
||||||
|
|
||||||
<Stepper
|
<Stepper
|
||||||
activeStep={this.state.stepIndex}
|
activeStep={this.state.stepIndex}
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import QueueAnim from 'rc-queue-anim';
|
|
||||||
import VerticalNonLinear from './VerticalNonLinear';
|
|
||||||
const Stepper = (props) => {
|
|
||||||
return (
|
|
||||||
<div className="container-fluid with-maxwidth chapter">
|
|
||||||
<QueueAnim type="bottom" className="ui-animate">
|
|
||||||
<div key="1"><VerticalNonLinear params={props.params} /></div>
|
|
||||||
</QueueAnim>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = Stepper;
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,8 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
path: 'visit/:uuid',
|
|
||||||
getComponent(nextState, cb) {
|
|
||||||
require.ensure([], (require) => {
|
|
||||||
cb(null, require('./components/Steppers'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import QueueAnim from 'rc-queue-anim';
|
|
||||||
import VerticalNonLinear from './VerticalNonLinear';
|
|
||||||
const Stepper = (props) => {
|
|
||||||
return (
|
|
||||||
<div className="container-fluid with-maxwidth chapter">
|
|
||||||
<QueueAnim type="bottom" className="ui-animate">
|
|
||||||
<div key="1"><VerticalNonLinear params={props.params} /></div>
|
|
||||||
</QueueAnim>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = Stepper;
|
|
||||||
@@ -1,910 +0,0 @@
|
|||||||
import React, { Component } from 'react';
|
|
||||||
import {
|
|
||||||
Step,
|
|
||||||
Stepper,
|
|
||||||
StepButton,
|
|
||||||
StepContent,
|
|
||||||
} from 'material-ui/Stepper';
|
|
||||||
import RaisedButton from 'material-ui/RaisedButton';
|
|
||||||
import FlatButton from 'material-ui/FlatButton';
|
|
||||||
import QueueAnim from 'rc-queue-anim';
|
|
||||||
import { RadioButton, RadioButtonGroup } from 'material-ui/RadioButton';
|
|
||||||
import ActionFavorite from 'material-ui/svg-icons/action/favorite';
|
|
||||||
import ActionFavoriteBorder from 'material-ui/svg-icons/action/favorite-border';
|
|
||||||
import AutoComplete from 'material-ui/AutoComplete';
|
|
||||||
import SelectField from 'material-ui/SelectField';
|
|
||||||
import MenuItem from 'material-ui/MenuItem';
|
|
||||||
import { Tabs, Tab } from 'material-ui/Tabs';
|
|
||||||
// import Slider from 'material-ui/Slider';
|
|
||||||
import TimePicker from 'material-ui/TimePicker';
|
|
||||||
import DatePicker from 'material-ui/DatePicker';
|
|
||||||
import TextField from 'material-ui/TextField';
|
|
||||||
// import Toggle from 'material-ui/Toggle';
|
|
||||||
import Snackbar from 'material-ui/Snackbar';
|
|
||||||
import { NEMTLocation } from '../../../../../components/NEMTLocation';
|
|
||||||
import { request } from 'https';
|
|
||||||
import Divider from 'material-ui/Divider';
|
|
||||||
import Paper from 'material-ui/Paper';
|
|
||||||
import Dialog from 'material-ui/Dialog';
|
|
||||||
import Close from 'material-ui/svg-icons/navigation/close'
|
|
||||||
import CommunicationCall from 'material-ui/svg-icons/communication/call'
|
|
||||||
import Message from 'material-ui/svg-icons/communication/message'
|
|
||||||
import Instance from '../../../../../../../components/Connection';
|
|
||||||
import ValidationErrorsInfoDialog from '../../../../../../../components/Shared/ValidationErrorsInfoDialog';
|
|
||||||
import Checkbox from 'material-ui/Checkbox';
|
|
||||||
import Popover from 'material-ui/Popover';
|
|
||||||
|
|
||||||
let DateTimeFormat;
|
|
||||||
const roundingTime = 1000 * 60 * 5; //5 minutes
|
|
||||||
|
|
||||||
|
|
||||||
DateTimeFormat = global.Intl.DateTimeFormat;
|
|
||||||
|
|
||||||
|
|
||||||
class SignUp extends React.Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
|
|
||||||
this.props = props;
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillReceiveProps = (nextProps) => {
|
|
||||||
this.props = nextProps;
|
|
||||||
}
|
|
||||||
|
|
||||||
handleEmail = (event) => {
|
|
||||||
if (this.props.onUserChanged) {
|
|
||||||
const user = this.props.user;
|
|
||||||
user.email = event.target.value;
|
|
||||||
this.props.onUserChanged(user);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
handlePhone = (event) => {
|
|
||||||
let phone = event.target.value;
|
|
||||||
if (phone.indexOf("+1") < 0 && phone.length == 10) {
|
|
||||||
phone = "+1" + phone;
|
|
||||||
phone = phone.substring(0, 12);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.props.onUserChanged) {
|
|
||||||
const user = this.props.user;
|
|
||||||
user.phonenumber = event.target.value;
|
|
||||||
this.props.onUserChanged(user);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<form className="">
|
|
||||||
<fieldset>
|
|
||||||
{/* <div className="form-group"> */}
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="First Name"
|
|
||||||
value={this.props.user.first}
|
|
||||||
disabled={true}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="Last Name"
|
|
||||||
value={this.props.user.last}
|
|
||||||
disabled={true}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="Email"
|
|
||||||
type="email"
|
|
||||||
value={this.props.user.email}
|
|
||||||
onChange={this.handleEmail}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<SelectField
|
|
||||||
floatingLabelText="Gender"
|
|
||||||
value={this.props.user.gender}
|
|
||||||
disabled={true}
|
|
||||||
>
|
|
||||||
<MenuItem value={null} primaryText="" />
|
|
||||||
<MenuItem value={"M"} primaryText="Male" />
|
|
||||||
<MenuItem value={"F"} primaryText="Female" />
|
|
||||||
<MenuItem value={"U"} primaryText="Unknown" />
|
|
||||||
</SelectField>
|
|
||||||
|
|
||||||
<SelectField
|
|
||||||
style={{ maxWidth: 165 }}
|
|
||||||
floatingLabelText="Member Type"
|
|
||||||
value={"S"}
|
|
||||||
disabled={true}
|
|
||||||
>
|
|
||||||
<MenuItem value={null} primaryText="" />
|
|
||||||
<MenuItem value={"S"} primaryText="Subscriber" />
|
|
||||||
<MenuItem value={"D"} primaryText="Dependant" />
|
|
||||||
<MenuItem value={"U"} primaryText="Unknown" />
|
|
||||||
</SelectField>
|
|
||||||
|
|
||||||
|
|
||||||
<TextField
|
|
||||||
style={{ maxWidth: 165 }}
|
|
||||||
floatingLabelText="Member #"
|
|
||||||
value={this.props.user.member}
|
|
||||||
disabled={true}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<DatePicker width="115" hintText="Birth Date" container="inline" style={{ width: 115 }}
|
|
||||||
value={this.props.user.birthdate} disabled={true} />
|
|
||||||
|
|
||||||
<TextField
|
|
||||||
style={{ maxWidth: 115 }}
|
|
||||||
floatingLabelText="Mobile Phone"
|
|
||||||
type="telephone"
|
|
||||||
value={this.props.user.phonenumber}
|
|
||||||
onChange={this.handlePhone}
|
|
||||||
/>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class AdditionalPassengerSelect extends React.Component {
|
|
||||||
state = {
|
|
||||||
open: false,
|
|
||||||
additionalPassenger:
|
|
||||||
{
|
|
||||||
passengerType: '',
|
|
||||||
seatType: '',
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
handleOpen = () => {
|
|
||||||
this.setState({ open: true });
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
handlePassengerTypeChange = (e, i, v, state) => {
|
|
||||||
this.setState({ additionalPassenger: { passengerType: v } });
|
|
||||||
};
|
|
||||||
|
|
||||||
handleSeatTypeChange = (e, i, v, state) => {
|
|
||||||
this.setState({ additionalPassenger: { seatType: v } });
|
|
||||||
};
|
|
||||||
|
|
||||||
handleClose = () => {
|
|
||||||
this.setState({ open: false });
|
|
||||||
};
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const actions = [
|
|
||||||
<FlatButton
|
|
||||||
label="Add"
|
|
||||||
primary={true}
|
|
||||||
keyboardFocused={true}
|
|
||||||
onClick={this.handleClose}
|
|
||||||
/>,
|
|
||||||
<FlatButton
|
|
||||||
label="Cancel"
|
|
||||||
primary={false}
|
|
||||||
keyboardFocused={false}
|
|
||||||
onClick={this.handleClose}
|
|
||||||
/>,
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<RaisedButton style={{ fontSize: 5 }} label="+ Passenger" onClick={this.handleOpen} />
|
|
||||||
<Dialog
|
|
||||||
title="Add Passenger"
|
|
||||||
actions={actions}
|
|
||||||
modal={false}
|
|
||||||
open={this.state.open}
|
|
||||||
onRequestClose={this.handleClose}
|
|
||||||
>
|
|
||||||
<SelectField
|
|
||||||
floatingLabelText="Passenger Type"
|
|
||||||
value={this.state.additionalPassenger.passengerType}
|
|
||||||
onChange={(e, i, v) => this.handlePassengerTypeChange(e, i, v, this)}
|
|
||||||
autoWidth={true}
|
|
||||||
>
|
|
||||||
<MenuItem value={'Caregiver'} primaryText="Caregiver" />
|
|
||||||
<MenuItem value={'Companion'} primaryText="Companion" />
|
|
||||||
<MenuItem value={'Additional Patient'} primaryText="Additional Patient" />
|
|
||||||
</SelectField>
|
|
||||||
<SelectField
|
|
||||||
floatingLabelText="Seat Type"
|
|
||||||
value={this.state.additionalPassenger.seatType}
|
|
||||||
onChange={(e, i, v) => this.handleSeatTypeChange(e, i, v, this)}
|
|
||||||
autoWidth={true}
|
|
||||||
>
|
|
||||||
<MenuItem value={'Ambulatory'} primaryText="Ambulatory" />
|
|
||||||
<MenuItem value={'Stretcher'} primaryText="Stretcher" />
|
|
||||||
<MenuItem value={'Wheelchair'} primaryText="Wheelchair" />
|
|
||||||
</SelectField>
|
|
||||||
|
|
||||||
</Dialog>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const names = [
|
|
||||||
'Service Animal',
|
|
||||||
'Cane / Quad Cane',
|
|
||||||
'Electric Wheelchair',
|
|
||||||
'Oxygen Tank',
|
|
||||||
'Sign Language',
|
|
||||||
'White Cane',
|
|
||||||
'Leg Braces',
|
|
||||||
'Crutches',
|
|
||||||
'Manual Wheelchair',
|
|
||||||
'Prothesis',
|
|
||||||
'Walker',
|
|
||||||
];
|
|
||||||
|
|
||||||
export class MobilitySelect extends Component {
|
|
||||||
state = {
|
|
||||||
values: [],
|
|
||||||
};
|
|
||||||
|
|
||||||
handleChange = (event, index, values) => this.setState({ values });
|
|
||||||
|
|
||||||
menuItems(values) {
|
|
||||||
return names.map((name) => (
|
|
||||||
<MenuItem
|
|
||||||
key={name}
|
|
||||||
insetChildren={true}
|
|
||||||
checked={values && values.indexOf(name) > -1}
|
|
||||||
value={name}
|
|
||||||
primaryText={name}
|
|
||||||
autoWidth={false}
|
|
||||||
style={{ width: 215 }}
|
|
||||||
/>
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const { values } = this.state;
|
|
||||||
return (
|
|
||||||
<SelectField
|
|
||||||
autoWidth={false}
|
|
||||||
style={{ width: 215 }}
|
|
||||||
multiple={true}
|
|
||||||
value={values}
|
|
||||||
floatingLabelText="Mobility Aids"
|
|
||||||
label="Mobility Aids"
|
|
||||||
onChange={this.handleChange}
|
|
||||||
>
|
|
||||||
{this.menuItems(values)}
|
|
||||||
</SelectField>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const selectStyles = {
|
|
||||||
customWidth: {
|
|
||||||
width: 35,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
var tripType = 'To Visit';
|
|
||||||
var pickupTimeReturnDisplayMode = "none";
|
|
||||||
|
|
||||||
|
|
||||||
export class RideTypeSelect extends Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
this.props = props;
|
|
||||||
this.state = {
|
|
||||||
value: 'to_visit',
|
|
||||||
pickupTimeReturnDisplayMode: 'none',
|
|
||||||
pickupTimeHide: false,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
componentDidMount() {
|
|
||||||
this.setState(Object.assign(this.state, { value: this.props.value }));
|
|
||||||
}
|
|
||||||
|
|
||||||
handleChange(event, index, value, state) {
|
|
||||||
let self = state
|
|
||||||
tripType = value;
|
|
||||||
switch (tripType) {
|
|
||||||
|
|
||||||
case 'from_visit':
|
|
||||||
pickupTimeReturnDisplayMode = "none"
|
|
||||||
self.setState(Object.assign(self.state, { pickupTimeReturnDisplayMode: 'none', value: 'from_visit', pickupTimeHide: false }));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'from_visit_call':
|
|
||||||
pickupTimeReturnDisplayMode = "none"
|
|
||||||
self.setState(Object.assign(self.state, { pickupTimeReturnDisplayMode: 'none', value: 'from_visit_call', pickupTimeHide: true }));
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case 'to_visit':
|
|
||||||
pickupTimeReturnDisplayMode = "none"
|
|
||||||
self.setState(Object.assign(self.state, { pickupTimeReturnDisplayMode: 'none', value: 'to_visit', pickupTimeHide: false }));
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case 'roundtrip':
|
|
||||||
pickupTimeReturnDisplayMode = "block"
|
|
||||||
self.setState(Object.assign(self.state, { pickupTimeReturnDisplayMode: 'block', value: 'roundtrip', pickupTimeHide: false }));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'roundtrip_call':
|
|
||||||
pickupTimeReturnDisplayMode = "none";
|
|
||||||
self.setState(Object.assign(self.state, { pickupTimeReturnDisplayMode: 'none', value: 'roundtrip_call', pickupTimeHide: false }));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
self.setState(Object.assign(self.state, { pickupTimeReturnDisplayMode: 'block', value: 'roundtrip', pickupTimeHide: false }));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.props.handleChange) {
|
|
||||||
this.props.handleChange(event, index, { pickupTimeReturnDisplayMode: self.state.pickupTimeReturnDisplayMode, selectField: this.state.value, pickupTimeHide: this.state.pickupTimeHide });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div >
|
|
||||||
<SelectField
|
|
||||||
floatingLabelText="Trip Type"
|
|
||||||
value={this.state.value}
|
|
||||||
onChange={(e, i, v) => this.handleChange(e, i, v, this)}
|
|
||||||
autoWidth={false}
|
|
||||||
style={{ width: 230 }}
|
|
||||||
>
|
|
||||||
<MenuItem value={'to_visit'} primaryText="To Visit" />
|
|
||||||
<MenuItem value={'from_visit'} primaryText="From Visit" />
|
|
||||||
<MenuItem value={'from_visit_call'} primaryText="From Visit / Will Call" />
|
|
||||||
<MenuItem value={'roundtrip'} primaryText="Round Trip" />
|
|
||||||
<MenuItem value={'roundtrip_call'} primaryText="Round Trip / Will Call" />
|
|
||||||
</SelectField>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function disableWeekends(date) {
|
|
||||||
return date.getDay() === 0 || date.getDay() === 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
const styles = {
|
|
||||||
padding: '12px 18px',
|
|
||||||
marginBottom: 12,
|
|
||||||
fontWeight: 400,
|
|
||||||
maxWidth: 250,
|
|
||||||
radioButton: {
|
|
||||||
marginTop: 6
|
|
||||||
},
|
|
||||||
checkbox: {
|
|
||||||
marginTop: 16, fontWeight: 100, fontSize: 10
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
function handleActive(tab) {
|
|
||||||
console.log(`A tab with this route property ${tab.props.route} was activated.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const
|
|
||||||
dataConfig = { text: 'text', value: 'value' };
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A basic vertical non-linear implementation
|
|
||||||
*/
|
|
||||||
class VerticalNonLinear extends React.Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
|
|
||||||
let dateNow = new Date();
|
|
||||||
|
|
||||||
this.state = {
|
|
||||||
stepIndex: 0,
|
|
||||||
rideTypeValue: 0,
|
|
||||||
providerID: 0,
|
|
||||||
providerName: '',
|
|
||||||
visitDate: new Date(),
|
|
||||||
visitTime: new Date(Math.round(dateNow.getTime() / roundingTime) * roundingTime),
|
|
||||||
pickupLocation: null,
|
|
||||||
pickupTime: new Date(Math.round(dateNow.getTime() / roundingTime) * roundingTime),
|
|
||||||
pickupTimeReturn: new Date(Math.round(dateNow.getTime() / roundingTime) * roundingTime),
|
|
||||||
pickupTimeReturnDisplayMode: 'none',
|
|
||||||
open: false,
|
|
||||||
message: 'Booking Ride',
|
|
||||||
origin: {},
|
|
||||||
destination: {},
|
|
||||||
buttonPickupText: 'Member Address',
|
|
||||||
buttodDropOffText: 'Choose Drop-Off location',
|
|
||||||
buttonProviderText: 'Choose Provider',
|
|
||||||
user: null,
|
|
||||||
showUserSelection: true,
|
|
||||||
userSelectionText: '',
|
|
||||||
users: [],
|
|
||||||
visit_external_id: "",
|
|
||||||
notes: "",
|
|
||||||
pickupTimeReturnDisplayMode: "none",
|
|
||||||
eta: {
|
|
||||||
distance_miles: 0,
|
|
||||||
duration_seconds: 0,
|
|
||||||
formatted_time: 0,
|
|
||||||
showed: false,
|
|
||||||
},
|
|
||||||
trip_type: {
|
|
||||||
key: "to_visit",
|
|
||||||
value: ""
|
|
||||||
},
|
|
||||||
return_time: new Date(),
|
|
||||||
pickupTimeHide: false,
|
|
||||||
showValidationErrors: false,
|
|
||||||
validationErrors: [],
|
|
||||||
visit: {
|
|
||||||
visit_uuid: "",
|
|
||||||
visit_status: {
|
|
||||||
key: "",
|
|
||||||
value: ""
|
|
||||||
},
|
|
||||||
user: {
|
|
||||||
useruuid: "",
|
|
||||||
name: "",
|
|
||||||
first: "",
|
|
||||||
last: "",
|
|
||||||
gender: "",
|
|
||||||
member: "",
|
|
||||||
birthdate: new Date(),
|
|
||||||
email: "",
|
|
||||||
phonenumber: ""
|
|
||||||
},
|
|
||||||
visit_datetime: new Date(),
|
|
||||||
pickup_datetime: new Date(),
|
|
||||||
notes: "",
|
|
||||||
pickup_address_id: 33,
|
|
||||||
pickup: {
|
|
||||||
id: ""
|
|
||||||
},
|
|
||||||
provider: {
|
|
||||||
provider_uuid: "",
|
|
||||||
internal_id: "",
|
|
||||||
muk_id: "",
|
|
||||||
name: "",
|
|
||||||
address: {
|
|
||||||
street_address_1: "",
|
|
||||||
city: "",
|
|
||||||
state: "",
|
|
||||||
zipcode: "",
|
|
||||||
country: "",
|
|
||||||
lat: 0,
|
|
||||||
long: 0,
|
|
||||||
phone_number: ""
|
|
||||||
},
|
|
||||||
organization: {
|
|
||||||
id: "",
|
|
||||||
type: {
|
|
||||||
name: "",
|
|
||||||
key: ""
|
|
||||||
},
|
|
||||||
name: "",
|
|
||||||
main: false,
|
|
||||||
active: false,
|
|
||||||
blocked: false,
|
|
||||||
suspended: false,
|
|
||||||
contacts: [],
|
|
||||||
addresses: []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
trip_type: {
|
|
||||||
key: "",
|
|
||||||
value: ""
|
|
||||||
},
|
|
||||||
visit_external_id: ""
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
this.handleUser = this.handleUser.bind(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
componentDidMount() {
|
|
||||||
let self = this;
|
|
||||||
let visit = {
|
|
||||||
uuid: this.props.params.uuid
|
|
||||||
}
|
|
||||||
|
|
||||||
Instance.getRawConn().get(`/v1/nemt/visits/${visit.uuid}`)
|
|
||||||
.then(function (res) {
|
|
||||||
const visit = res.data;
|
|
||||||
visit.user.birthdate = new Date(visit.user.birthdate);
|
|
||||||
visit.visit_datetime = new Date(visit.visit_datetime);
|
|
||||||
self.setState(Object.assign(self.state, { visit: visit }));
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
if (err.response.status !== 422) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//for snackbar
|
|
||||||
handleTouchTap() {
|
|
||||||
this.setState(Object.assign(this.state, {
|
|
||||||
open: true,
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
handleRequestClose(state) {
|
|
||||||
let self = state;
|
|
||||||
self.setState(Object.assign(self.state, {
|
|
||||||
open: false,
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
handleNext(state) {
|
|
||||||
let self = state;
|
|
||||||
const { stepIndex } = self.state;
|
|
||||||
if (stepIndex < 4) {
|
|
||||||
self.setState(Object.assign(self.state, { stepIndex: stepIndex + 1 }));
|
|
||||||
if (stepIndex === 3) {
|
|
||||||
self.handleTouchTap();
|
|
||||||
|
|
||||||
const visitRide = {
|
|
||||||
visit: self.state.visit,
|
|
||||||
trip_type: self.state.trip_type,
|
|
||||||
pickup_time: self.state.pickupTime,
|
|
||||||
return_time: self.state.return_time,
|
|
||||||
notes: self.state.notes,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (self.diffMinutes(self.state.pickupTime, new Date()) > 10) {
|
|
||||||
visitRide.scheduled_pickup_range = {
|
|
||||||
range_ms: null,
|
|
||||||
timestamp_ms: new Date(self.state.pickupTime).getTime()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Instance.getRawConn().post(`/v1/nemt/visits/${self.state.visit.visit_uuid}/ride`, visitRide).then(function (res) {
|
|
||||||
window.location.href = '/#/app/page/map/' + res.data.ride_uuid;
|
|
||||||
}).catch(error => {
|
|
||||||
if (error.response.status === 422) {
|
|
||||||
self.setState(Object.assign(self.state, {
|
|
||||||
showValidationErrors: true,
|
|
||||||
validationErrors: error.response.data.data
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
diffMinutes(dt2, dt1) {
|
|
||||||
var diff = (dt2.getTime() - dt1.getTime()) / 1000;
|
|
||||||
diff /= 60;
|
|
||||||
return Math.abs(Math.round(diff));
|
|
||||||
}
|
|
||||||
|
|
||||||
handlePrev(state) {
|
|
||||||
let self = state;
|
|
||||||
const { stepIndex } = self.state;
|
|
||||||
if (stepIndex > 0) {
|
|
||||||
self.setState(Object.assign(self.state, { stepIndex: stepIndex - 1 }));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
handleChange(value, state) {
|
|
||||||
let self = state
|
|
||||||
self.setState(Object.assign(self.state, {
|
|
||||||
rideTypeValue: parseInt(value.target.defaultValue)
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
handleDate(event, date, state) {
|
|
||||||
let self = state
|
|
||||||
let visitTime = new Date(Math.round((date.getTime() + (1 * 60 * 60 * 1000)) / roundingTime) * roundingTime);
|
|
||||||
let visitDate = date;
|
|
||||||
let pickupTime = new Date(Math.round((visitTime.getTime() - (0.5 * 60 * 60 * 1000)) / roundingTime) * roundingTime);
|
|
||||||
let pickupTimeReturn = new Date(Math.round((visitTime.getTime() - (0.5 * 60 * 60 * 1000)) / roundingTime) * roundingTime);
|
|
||||||
|
|
||||||
self.setState(Object.assign(self.state, {
|
|
||||||
visitDate: visitDate,
|
|
||||||
visitTime: visitTime,
|
|
||||||
pickupTime: pickupTime,
|
|
||||||
pickupTimeReturn: pickupTimeReturn,
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
handleTime(value, date, state) {
|
|
||||||
let self = state;
|
|
||||||
self.setState(Object.assign(self.state, {
|
|
||||||
visitDate: date,
|
|
||||||
visitTime: date,
|
|
||||||
pickupTime: new Date(date.getTime() - (0.5 * 60 * 60 * 1000)),
|
|
||||||
pickupTimeReturn: new Date(date.getTime() - (0.5 * 60 * 60 * 1000)),
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
handlePickupTime(value, date, state) {
|
|
||||||
let self = state;
|
|
||||||
console.log('Pickup Time', date);
|
|
||||||
self.setState(Object.assign(self.state, {
|
|
||||||
pickupTime: date,
|
|
||||||
pickupTimeReturn: date
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
handlePickupTimeReturn(value, date, state) {
|
|
||||||
let self = state;
|
|
||||||
self.setState(Object.assign(self.state, {
|
|
||||||
return_time: date,
|
|
||||||
pickupTimeReturn: date,
|
|
||||||
pickupTimeReturnDisplayMode: 'block'
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
handlePickup(value) {
|
|
||||||
console.log(value);
|
|
||||||
this.setState(Object.assign(this.state, {
|
|
||||||
pickupLocation: value.text
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
handleNotes(e, value, state) {
|
|
||||||
let self = state
|
|
||||||
self.setState(Object.assign(self.state, {
|
|
||||||
notes: value
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
handleChangeVisitType(event, index, value, state) {
|
|
||||||
let self = state;
|
|
||||||
|
|
||||||
let trip_type = {
|
|
||||||
key: value.selectField,
|
|
||||||
}
|
|
||||||
|
|
||||||
self.setState(Object.assign(self.state, { pickupTimeReturnDisplayMode: value.pickupTimeReturnDisplayMode, trip_type: trip_type, pickupTimeHide: value.pickupTimeHide }));
|
|
||||||
}
|
|
||||||
|
|
||||||
renderStepActions(step, state) {
|
|
||||||
let self = state;
|
|
||||||
return (
|
|
||||||
<div style={{ margin: '12px 0' }}>
|
|
||||||
{step !== 2 && (
|
|
||||||
<RaisedButton
|
|
||||||
label="Next"
|
|
||||||
disableTouchRipple
|
|
||||||
disableFocusRipple
|
|
||||||
primary
|
|
||||||
onTouchTap={() => self.handleNext(self)}
|
|
||||||
style={{ marginRight: 12 }}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{step === 2 && (
|
|
||||||
<RaisedButton
|
|
||||||
label="Confirm"
|
|
||||||
disableTouchRipple
|
|
||||||
disableFocusRipple
|
|
||||||
primary
|
|
||||||
onTouchTap={() => self.handleNext(self)}
|
|
||||||
style={{ marginRight: 12 }}
|
|
||||||
href=""
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{step > 0 && (
|
|
||||||
<FlatButton
|
|
||||||
label="Back"
|
|
||||||
disableTouchRipple
|
|
||||||
disableFocusRipple
|
|
||||||
onTouchTap={() => self.handlePrev(self)}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
handleValidationErrosDialogDismiss() {
|
|
||||||
this.setState(Object.assign(this.state, {
|
|
||||||
showValidationErrors: false
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
handleUser(user) {
|
|
||||||
const visit = this.state.visit;
|
|
||||||
visit.user = user;
|
|
||||||
this.setState(Object.assign(this.state, { visit: visit }));
|
|
||||||
|
|
||||||
console.log(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const state = this;
|
|
||||||
let userSelection;
|
|
||||||
|
|
||||||
let pickupTimeSelector;
|
|
||||||
if (this.state.pickupTimeReturnDisplayMode !== 'none') {
|
|
||||||
pickupTimeSelector = (
|
|
||||||
<TimePicker
|
|
||||||
autoWidth={false}
|
|
||||||
style={{ width: 80, display: pickupTimeReturnDisplayMode }}
|
|
||||||
format="ampm"
|
|
||||||
underlineShow={true}
|
|
||||||
hintText="Choose Return Time"
|
|
||||||
floatingLabelText="Return Time"
|
|
||||||
value={this.state.pickupTimeReturn}
|
|
||||||
onChange={(e, d) => this.handlePickupTimeReturn(e, d, this)}
|
|
||||||
minutesStep={5}
|
|
||||||
/>)
|
|
||||||
}
|
|
||||||
|
|
||||||
let pickupTime = (<TimePicker
|
|
||||||
autoWidth={false}
|
|
||||||
style={{ width: 80 }}
|
|
||||||
format="ampm"
|
|
||||||
underlineShow={true}
|
|
||||||
hintText="Choose Pickup Time"
|
|
||||||
floatingLabelText="Pickup Time"
|
|
||||||
value={this.state.pickupTime}
|
|
||||||
onChange={(e, d) => this.handlePickupTime(e, d, this)}
|
|
||||||
minutesStep={5}
|
|
||||||
/>);
|
|
||||||
if (this.state.pickupTimeHide) pickupTime = null;
|
|
||||||
|
|
||||||
if (this.state.showUserSelection && this.state.users.length > 0) {
|
|
||||||
const handleAutocomplete = (u) => {
|
|
||||||
let userHomeAddress = null;
|
|
||||||
u.addresses.forEach(address => {
|
|
||||||
if (address.address_type === ADDRESS_TYPE_HOME) {
|
|
||||||
userHomeAddress = address;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (userHomeAddress != null) {
|
|
||||||
userHomeAddress.name = "Home";
|
|
||||||
state.handlePickupChanged(userHomeAddress, state);
|
|
||||||
}
|
|
||||||
state.setState(Object.assign(state.state, { user: u, userSelectionText: u.userdata }));
|
|
||||||
}
|
|
||||||
const datasourceConfig = { text: 'userdata', value: 'useruuid' }
|
|
||||||
userSelection = (
|
|
||||||
<div>
|
|
||||||
<AutoComplete style={{ fontSize: '10' }} dataSourceConfig={datasourceConfig} dataSource={this.state.users} floatingLabelText="Choose Member" filter={(searchText, key) => (key.toLowerCase().indexOf(searchText.toLowerCase()) !== -1)} maxSearchResults={5} onNewRequest={handleAutocomplete} searchText={this.state.userSelectionText} />
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
} else if (this.state.showUserSelection && this.state.users.length === 0) {
|
|
||||||
userSelection = (<div style={{ fontSize: '10' }} >
|
|
||||||
<strong>Loading...</strong>
|
|
||||||
</div>);
|
|
||||||
} else {
|
|
||||||
userSelection = (<div >
|
|
||||||
<strong>{this.state.user.member}</strong> - {this.state.user.name}
|
|
||||||
</div>);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<article className="article padding-sm-v">
|
|
||||||
<h2 className="article-title" style={{ paddingTop: 10, margin: 0 }} >Book Ride from Visit</h2>
|
|
||||||
<div className="box box-default">
|
|
||||||
<div className="box-body padding-xs">
|
|
||||||
|
|
||||||
<div style={{ maxWidth: 380, margin: 'auto' }}>
|
|
||||||
<ValidationErrorsInfoDialog open={this.state.showValidationErrors} errorMessages={this.state.validationErrors} onDismiss={this.handleValidationErrosDialogDismiss.bind(this)} />
|
|
||||||
|
|
||||||
<Stepper
|
|
||||||
activeStep={this.state.stepIndex}
|
|
||||||
linear={false}
|
|
||||||
orientation="vertical"
|
|
||||||
>
|
|
||||||
<Step>
|
|
||||||
<StepButton onClick={() => this.setState({ stepIndex: 0 })}>
|
|
||||||
Member
|
|
||||||
</StepButton>
|
|
||||||
<StepContent>
|
|
||||||
<form role="form">
|
|
||||||
<SignUp user={this.state.visit.user} onUserChanged={this.handleUser} />
|
|
||||||
</form>
|
|
||||||
{this.renderStepActions(0, this)}
|
|
||||||
</StepContent>
|
|
||||||
</Step>
|
|
||||||
|
|
||||||
<Step>
|
|
||||||
<StepButton onClick={() => this.setState({ stepIndex: 1 })}>
|
|
||||||
Provider
|
|
||||||
</StepButton>
|
|
||||||
<StepContent>
|
|
||||||
<form role="form">
|
|
||||||
{this.state.visit.provider.name}<br />
|
|
||||||
{this.state.visit.provider.address.street_address_1}<br />
|
|
||||||
{this.state.visit.provider.address.city}, {this.state.visit.provider.address.state} ({this.state.visit.provider.address.zipcode.substr(0, 5)})
|
|
||||||
</form>
|
|
||||||
{this.renderStepActions(1, this)}
|
|
||||||
</StepContent>
|
|
||||||
</Step>
|
|
||||||
|
|
||||||
|
|
||||||
<Step>
|
|
||||||
<StepButton onClick={() => this.setState({ stepIndex: 2 })}>
|
|
||||||
Visit Details
|
|
||||||
</StepButton>
|
|
||||||
<StepContent>
|
|
||||||
<form role="form">
|
|
||||||
<div className="form-group">
|
|
||||||
<DatePicker formatDate={new DateTimeFormat('en-US', {
|
|
||||||
weekday: 'short',
|
|
||||||
day: 'numeric',
|
|
||||||
month: 'long',
|
|
||||||
year: 'numeric',
|
|
||||||
}).format} style={{ maxWidth: 80 }} hintText="Visit Date" floatingLabelText="Date" container="inline" onChange={(e, d) => this.handleDate(e, d, this)} shouldDisableDate={disableWeekends} value={this.state.visit.visit_datetime} disabled={true} />
|
|
||||||
<TimePicker
|
|
||||||
style={{ maxWidth: 80 }}
|
|
||||||
format="ampm"
|
|
||||||
hintText="Visit Time"
|
|
||||||
floatingLabelText="Time"
|
|
||||||
value={this.state.visit.visit_datetime}
|
|
||||||
onChange={(e, d) => this.handleTime(e, d, this)}
|
|
||||||
minutesStep={5} disabled={true}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="divider" />
|
|
||||||
<div className="form-group">
|
|
||||||
<TextField hintText="Visit External ID" disabled="true" floatingLabelText="External ID" onChange={(e, v) => this.handleExternalID(e, v, this)} value={this.state.visit.visit_external_id} disable={true} />
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
|
|
||||||
{/* <TabsSection /> */}
|
|
||||||
{this.renderStepActions(1, this)}
|
|
||||||
</StepContent>
|
|
||||||
</Step>
|
|
||||||
|
|
||||||
<Step>
|
|
||||||
<StepButton onClick={() => this.setState({ stepIndex: 3 })}>
|
|
||||||
Trip Details
|
|
||||||
</StepButton>
|
|
||||||
<StepContent>
|
|
||||||
<form>
|
|
||||||
<RideTypeSelect handleChange={(e, i, v) => this.handleChangeVisitType(e, i, v, this)} value={this.state.trip_type.key} />
|
|
||||||
{pickupTime}
|
|
||||||
{pickupTimeSelector}
|
|
||||||
<MobilitySelect />
|
|
||||||
<AdditionalPassengerSelect />
|
|
||||||
<TextField
|
|
||||||
underlineShow={true}
|
|
||||||
hintText="Notes for Driver"
|
|
||||||
floatingLabelText="Notes for Driver"
|
|
||||||
onChange={(e, v) => this.handleNotes(e, v, this)}
|
|
||||||
value={this.state.notes} multiLine={true}
|
|
||||||
maxlength={250}
|
|
||||||
rows={1}
|
|
||||||
/>
|
|
||||||
</form>
|
|
||||||
{this.renderStepActions(2, this)}
|
|
||||||
</StepContent>
|
|
||||||
</Step>
|
|
||||||
</Stepper>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style={{ maxWidth: 380, margin: 'auto' }}>
|
|
||||||
<div className="divider divider-xl" />
|
|
||||||
<div className="callout callout-info">
|
|
||||||
<p>Complete steps <strong>1 - 4</strong> to schedule your ride!</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<Snackbar
|
|
||||||
style={{ fontSize: '7' }}
|
|
||||||
open={this.state.open}
|
|
||||||
message={this.state.message}
|
|
||||||
// message="Booking Ride"
|
|
||||||
autoHideDuration={50000}
|
|
||||||
onRequestClose={() => this.handleRequestClose(this)}
|
|
||||||
/>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default VerticalNonLinear;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
path: 'visitride/:uuid',
|
|
||||||
getComponent(nextState, cb) {
|
|
||||||
require.ensure([], (require) => {
|
|
||||||
cb(null, require('./components/Steppers'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -14,7 +14,6 @@ import RaisedButton from 'material-ui/RaisedButton';
|
|||||||
import SelectField from 'material-ui/SelectField';
|
import SelectField from 'material-ui/SelectField';
|
||||||
import Checkbox from 'material-ui/Checkbox';
|
import Checkbox from 'material-ui/Checkbox';
|
||||||
import Instance from '../../../../../../../components/Connection';
|
import Instance from '../../../../../../../components/Connection';
|
||||||
import ValidationErrorsInfoDialog from '../../../../../../../components/Shared/ValidationErrorsInfoDialog';
|
|
||||||
|
|
||||||
class SignUp extends React.Component {
|
class SignUp extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -35,9 +34,7 @@ class SignUp extends React.Component {
|
|||||||
gender: null,
|
gender: null,
|
||||||
agreedTerms: false,
|
agreedTerms: false,
|
||||||
validated: false,
|
validated: false,
|
||||||
memberType:"S",
|
memberType:"S"
|
||||||
showValidationErrors: false,
|
|
||||||
validationErrors:[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount = () => {
|
componentDidMount = () => {
|
||||||
@@ -61,10 +58,7 @@ class SignUp extends React.Component {
|
|||||||
"member": this.state.member,
|
"member": this.state.member,
|
||||||
"email": this.state.email,
|
"email": this.state.email,
|
||||||
"phonenumber": this.state.phonenumber,
|
"phonenumber": this.state.phonenumber,
|
||||||
"birthdate": this.state.birthdate.toISOString(),
|
"birthdate": this.state.birthdate.toISOString()
|
||||||
"consent" : this.state.agreedTerms,
|
|
||||||
"type": this.state.memberType
|
|
||||||
|
|
||||||
// "eligibility": {
|
// "eligibility": {
|
||||||
// "tracking_id": "1234567",
|
// "tracking_id": "1234567",
|
||||||
// "payer": {
|
// "payer": {
|
||||||
@@ -105,14 +99,9 @@ class SignUp extends React.Component {
|
|||||||
// alert('NO benefits found for this member');
|
// alert('NO benefits found for this member');
|
||||||
// }
|
// }
|
||||||
}).catch(function (err) {
|
}).catch(function (err) {
|
||||||
if (err.response.status === 422){
|
console.log('Error to get eligibility: ', err);
|
||||||
//Unprocessable Entity (validation failed)
|
alert('NO benefits found for this member');
|
||||||
state.setState(Object.assign(state.state, {showValidationErrors:true, validationErrors:err.response.data.data}))
|
this.handleRequestClose();
|
||||||
}else{
|
|
||||||
console.log('Error to get eligibility: ', err);
|
|
||||||
alert('NO benefits found for this member');
|
|
||||||
this.handleRequestClose();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,15 +173,10 @@ class SignUp extends React.Component {
|
|||||||
this.setState(Object.assign(this.state, { validated: validated }));
|
this.setState(Object.assign(this.state, { validated: validated }));
|
||||||
}
|
}
|
||||||
|
|
||||||
handleValidationErrosDialogDismiss(){
|
|
||||||
this.setState(Object.assign(this.state, {showValidationErrors:false}));
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<form className="">
|
<form className="">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<ValidationErrorsInfoDialog open = {this.state.showValidationErrors} errorMessages = {this.state.validationErrors} draggable={false} modal={true} onDismiss={this.handleValidationErrosDialogDismiss.bind(this)}/>
|
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<TextField
|
<TextField
|
||||||
floatingLabelText="First Name"
|
floatingLabelText="First Name"
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ import FloatingActionButton from 'material-ui/FloatingActionButton';
|
|||||||
import ContentAdd from 'material-ui/svg-icons/content/add';
|
import ContentAdd from 'material-ui/svg-icons/content/add';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { Card, CardActions, CardHeader, CardMedia, CardTitle, CardText } from 'material-ui/Card';
|
import { Card, CardActions, CardHeader, CardMedia, CardTitle, CardText } from 'material-ui/Card';
|
||||||
|
import Draggable, { DraggableCore } from 'react-draggable'; // Both at the same time
|
||||||
import Imgix from 'react-imgix'
|
import Imgix from 'react-imgix'
|
||||||
import Paper from 'material-ui/Paper';
|
import Paper from 'material-ui/Paper';
|
||||||
|
|
||||||
|
|||||||
@@ -40,11 +40,9 @@ const getDTList = function (member) {
|
|||||||
member.forEach((r, i) => {
|
member.forEach((r, i) => {
|
||||||
list.push(
|
list.push(
|
||||||
<tr key={r.useruuid}>
|
<tr key={r.useruuid}>
|
||||||
<td></td>
|
<td><a href={"/#/app/member/" + r.useruuid}>{r.name}</a></td>
|
||||||
<td><a>{r.name}</a></td>
|
|
||||||
<td>
|
<td>
|
||||||
<div>
|
<div>
|
||||||
<a href={"/#/app/member/" + r.useruuid}> Details </a> |
|
|
||||||
<ContactList data={{
|
<ContactList data={{
|
||||||
driverMobile: r.mobile,
|
driverMobile: r.mobile,
|
||||||
memberMobile: r.mobile,
|
memberMobile: r.mobile,
|
||||||
@@ -282,7 +280,6 @@ class DatatableComponent extends React.Component {
|
|||||||
<Table ref={(c) => this.example = c} className='display' cellSpacing='0' width='100%'>
|
<Table ref={(c) => this.example = c} className='display' cellSpacing='0' width='100%'>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th> </th>
|
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Action</th>
|
<th>Action</th>
|
||||||
<th>Subscriber ID</th>
|
<th>Subscriber ID</th>
|
||||||
|
|||||||
@@ -38,22 +38,18 @@ const getDTList = function (member) {
|
|||||||
let list = [];
|
let list = [];
|
||||||
|
|
||||||
member.forEach((r, i) => {
|
member.forEach((r, i) => {
|
||||||
let bookRide = '';
|
|
||||||
if (r.trip_type.key === 'no_trip') {
|
|
||||||
bookRide = (<a href={`/#/app/form/visitride/${r.visit_uuid}`}>Book Ride</a>)
|
|
||||||
}
|
|
||||||
|
|
||||||
list.push(
|
list.push(
|
||||||
<tr key={r.visit_uuid}>
|
<tr key={r.visit_uuid}>
|
||||||
<td>{moment(r.visit_datetime).format('MM/DD/YYYY - h:mm a')}</td>
|
<td>{moment(r.visit_datetime).format('MM/DD/YYYY - h:mm a')}</td>
|
||||||
<td><a href={""}>{r.provider.name}</a></td>
|
<td><a href={""}>{r.provider.name}</a></td>
|
||||||
<td><a href={"/#/app/member/" + r.user.useruuid}>{r.user.name}</a></td>
|
<td><a href={"/#/app/member/" + r.user.useruuid}>{r.user.name}</a></td>
|
||||||
<td>{bookRide}</td>
|
|
||||||
<td><RoadTripLink rides={r.rides} isOpened={false} currentRide={null} visit={r} onRideClick={handleRide} /></td>
|
<td><RoadTripLink rides={r.rides} isOpened={false} currentRide={null} visit={r} onRideClick={handleRide} /></td>
|
||||||
<td><a href={"/#/app/member/" + r.user.useruuid}>{r.user.member}</a></td>
|
<td><a href={"/#/app/member/" + r.user.useruuid}>{r.user.member}</a></td>
|
||||||
<td>{r.provider.provider_uuid}</td>
|
{/* <td>{r.visit_status.value}</td> */}
|
||||||
|
<td>{r.provider.id}</td>
|
||||||
<td>{r.visit_uuid}</td>
|
<td>{r.visit_uuid}</td>
|
||||||
<td>{r.visit_external_id}</td>
|
<td>{r.visit_external_id}</td>
|
||||||
|
|
||||||
<td> <a href={""}>{r.created_user.name} </a></td>
|
<td> <a href={""}>{r.created_user.name} </a></td>
|
||||||
<td>{moment(r.created).format('MM/DD/YYYY - h:mm a')}</td>
|
<td>{moment(r.created).format('MM/DD/YYYY - h:mm a')}</td>
|
||||||
<td>{moment(r.updated).format('MM/DD/YYYY - h:mm a')}</td>
|
<td>{moment(r.updated).format('MM/DD/YYYY - h:mm a')}</td>
|
||||||
@@ -236,10 +232,11 @@ class DatatableComponent extends React.Component {
|
|||||||
<th>Visit Time</th>
|
<th>Visit Time</th>
|
||||||
<th>Provider</th>
|
<th>Provider</th>
|
||||||
<th>Member </th>
|
<th>Member </th>
|
||||||
<th>Ride</th>
|
|
||||||
<th>Rides </th>
|
<th>Rides </th>
|
||||||
<th>Subscriber ID</th>
|
<th>Subscriber ID</th>
|
||||||
|
{/* <th>Status</th> */}
|
||||||
<th>Provider ID</th>
|
<th>Provider ID</th>
|
||||||
|
|
||||||
<th>Visit ID</th>
|
<th>Visit ID</th>
|
||||||
<th>External ID</th>
|
<th>External ID</th>
|
||||||
<th>Scheduler</th>
|
<th>Scheduler</th>
|
||||||
|
|||||||
@@ -1,283 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import { browserHistory, Redirect } from 'react-router';
|
|
||||||
import APPCONFIG from 'constants/Config';
|
|
||||||
import TextField from 'material-ui/TextField';
|
|
||||||
import QueueAnim from 'rc-queue-anim';
|
|
||||||
|
|
||||||
import AutoComplete from 'material-ui/AutoComplete';
|
|
||||||
import MenuItem from 'material-ui/MenuItem';
|
|
||||||
import SelectField from 'material-ui/SelectField';
|
|
||||||
import { Tabs, Tab } from 'material-ui/Tabs';
|
|
||||||
import Slider from 'material-ui/Slider';
|
|
||||||
import TimePicker from 'material-ui/TimePicker';
|
|
||||||
import DatePicker from 'material-ui/DatePicker';
|
|
||||||
import RaisedButton from 'material-ui/RaisedButton';
|
|
||||||
|
|
||||||
import Toggle from 'material-ui/Toggle';
|
|
||||||
import Snackbar from 'material-ui/Snackbar';
|
|
||||||
import Instance from '../../../components/Connection';
|
|
||||||
|
|
||||||
class SignUp extends React.Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
this.props = props;
|
|
||||||
|
|
||||||
this.state = {
|
|
||||||
"provider_name": "",
|
|
||||||
"provider_npi": "",
|
|
||||||
"name": "",
|
|
||||||
"first": "",
|
|
||||||
"last": "",
|
|
||||||
"gender": "",
|
|
||||||
"member": "",
|
|
||||||
"email": "",
|
|
||||||
"phone_number": "",
|
|
||||||
"pass": "",
|
|
||||||
"birthdate": new Date(),
|
|
||||||
"validated": false,
|
|
||||||
"password_validated": false,
|
|
||||||
"passConfirmation": "",
|
|
||||||
"organizationType": { name: "", key: "provider", desc: "" },
|
|
||||||
showValidationErrors: false,
|
|
||||||
validationErrors: []
|
|
||||||
}
|
|
||||||
|
|
||||||
this.buttonValidated = this.buttonValidated.bind(this);
|
|
||||||
this.handleFirst = this.handleFirst.bind(this);
|
|
||||||
this.handleLast = this.handleLast.bind(this);
|
|
||||||
this.handleEmail = this.handleEmail.bind(this);
|
|
||||||
this.handlePhone = this.handlePhone.bind(this);
|
|
||||||
this.handlePass = this.handlePass.bind(this);
|
|
||||||
this.handleConfirmationPass = this.handleConfirmationPass.bind(this);
|
|
||||||
this.handleProviderName = this.handleProviderName.bind(this);
|
|
||||||
this.handleProviderNPI = this.handleProviderNPI.bind(this);
|
|
||||||
this.clickEvent = this.clickEvent.bind(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
componentDidMount = () => { }
|
|
||||||
|
|
||||||
buttonValidated = () => {
|
|
||||||
let validated = true;
|
|
||||||
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.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.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.password_validated || !this.state.pass || this.state.pass === null || this.state.pass === "") validated = false;
|
|
||||||
|
|
||||||
this.setState(Object.assign(this.state, { validated: validated }));
|
|
||||||
}
|
|
||||||
|
|
||||||
handleProviderName = (event) => {
|
|
||||||
this.setState(Object.assign(this.state, { provider_name: event.target.value }));
|
|
||||||
};
|
|
||||||
|
|
||||||
handleProviderNPI = (event) => {
|
|
||||||
this.setState(Object.assign(this.state, { provider_npi: event.target.value }));
|
|
||||||
};
|
|
||||||
|
|
||||||
handleFirst = (event) => {
|
|
||||||
this.setState(Object.assign(this.state, { first: event.target.value }));
|
|
||||||
};
|
|
||||||
|
|
||||||
handleLast = (event) => {
|
|
||||||
this.setState(Object.assign(this.state, { last: event.target.value }));
|
|
||||||
};
|
|
||||||
|
|
||||||
handleEmail = (event) => {
|
|
||||||
this.setState(Object.assign(this.state, { email: event.target.value }));
|
|
||||||
};
|
|
||||||
|
|
||||||
handlePhone = (event) => {
|
|
||||||
let phone = event.target.value;
|
|
||||||
if (phone.indexOf("+1") < 0 && phone.length == 10) {
|
|
||||||
phone = "+1" + phone;
|
|
||||||
phone = phone.substring(0, 12);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setState(Object.assign(this.state, { phone_number: phone }));
|
|
||||||
};
|
|
||||||
|
|
||||||
handlePass = (event) => {
|
|
||||||
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) => {
|
|
||||||
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 }));
|
|
||||||
};
|
|
||||||
|
|
||||||
clickEvent = (event) => {
|
|
||||||
event.preventDefault();
|
|
||||||
const state = this;
|
|
||||||
|
|
||||||
let user = {
|
|
||||||
"provider":
|
|
||||||
{
|
|
||||||
"org_name": this.state.provider_name,
|
|
||||||
"internal_id": this.state.provider_npi
|
|
||||||
},
|
|
||||||
"name": this.state.first + ' ' + this.state.last,
|
|
||||||
"first": this.state.first,
|
|
||||||
"last": this.state.last,
|
|
||||||
"email": this.state.email,
|
|
||||||
"phonenumber": this.state.phone_number,
|
|
||||||
"pass": this.state.pass,
|
|
||||||
};
|
|
||||||
|
|
||||||
Instance.setToken(null).post('/v1/selfregister/', user).then(function (res) {
|
|
||||||
localStorage.removeItem('loggedUser');
|
|
||||||
location.href = '/#/login';
|
|
||||||
}).catch(function (err) {
|
|
||||||
if (err.response.status === 422) {
|
|
||||||
//Unprocessable Entity (validation failed)
|
|
||||||
state.setState(Object.assign(state.state, {
|
|
||||||
showValidationErrors: true,
|
|
||||||
validationErrors: err.response.data.data
|
|
||||||
}));
|
|
||||||
} else {
|
|
||||||
alert('Error to log in: ' + err.message);
|
|
||||||
}
|
|
||||||
console.error(err);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
handleDismiss() {
|
|
||||||
this.setState(Object.assign(this.state, { showErrorMessage: false }));
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
let validationErrors = null;
|
|
||||||
if (this.state.showValidationErrors) {
|
|
||||||
validationErrors = (
|
|
||||||
<ul>
|
|
||||||
{this.state.validationErrors.map(errorMessage => {
|
|
||||||
const oneValidationMessage = (<li>{errorMessage.message}</li>);
|
|
||||||
const oneValidationMessageWithTab = (<span><li style={{ marginLeft: 2 + "em" }}>{errorMessage.message}</li></span>);
|
|
||||||
|
|
||||||
if (errorMessage.field_name === "password-tab") {
|
|
||||||
return oneValidationMessageWithTab;
|
|
||||||
} else {
|
|
||||||
return oneValidationMessage;
|
|
||||||
}
|
|
||||||
})}
|
|
||||||
</ul>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="body-inner">
|
|
||||||
|
|
||||||
<div className="card bg-white">
|
|
||||||
<div className="card-content">
|
|
||||||
<section className="logo text-center">
|
|
||||||
<h1><a href="#/">CHMHub®</a></h1>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<form className="form-horizontal">
|
|
||||||
<fieldset>
|
|
||||||
<div className="form-group">
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="Provider Organization Name"
|
|
||||||
fullWidth
|
|
||||||
onChange={this.handleProviderName}
|
|
||||||
onBlur={this.buttonValidated}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="form-group">
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="Provider NPI"
|
|
||||||
type="number"
|
|
||||||
onChange={this.handleProviderNPI}
|
|
||||||
onBlur={this.buttonValidated}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="form-group">
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="First Name"
|
|
||||||
fullWidth
|
|
||||||
onChange={this.handleFirst}
|
|
||||||
onBlur={this.buttonValidated}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="form-group">
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="Last Name"
|
|
||||||
fullWidth
|
|
||||||
onChange={this.handleLast}
|
|
||||||
onBlur={this.buttonValidated}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="form-group">
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="Your Work Email"
|
|
||||||
type="email"
|
|
||||||
fullWidth
|
|
||||||
onChange={this.handleEmail}
|
|
||||||
onBlur={this.buttonValidated}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="form-group">
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="Your Mobile Phone"
|
|
||||||
type="telephone"
|
|
||||||
onChange={this.handlePhone}
|
|
||||||
onBlur={this.buttonValidated}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="form-group">
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="Choose Password"
|
|
||||||
type="password"
|
|
||||||
onChange={this.handlePass}
|
|
||||||
onBlur={this.buttonValidated}
|
|
||||||
/>
|
|
||||||
<TextField
|
|
||||||
floatingLabelText="Verify Password"
|
|
||||||
type="password"
|
|
||||||
onChange={this.handleConfirmationPass}
|
|
||||||
onBlur={this.buttonValidated}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="divider" />
|
|
||||||
<div className="form-group">
|
|
||||||
<p className="text-small">By clicking on sign up, you agree to <a href="javascript:;"><i>terms</i></a> and <a href="javascript:;"><i>privacy policy</i></a></p>
|
|
||||||
</div>
|
|
||||||
<div className="divider" />
|
|
||||||
<div className="form-group">
|
|
||||||
{validationErrors}
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div className="card-action no-border text-right">
|
|
||||||
<a href="#/login" className="color-gray-light">Login</a>
|
|
||||||
<RaisedButton
|
|
||||||
label="Sign up"
|
|
||||||
primary={true}
|
|
||||||
onClick={this.clickEvent}
|
|
||||||
disabled={!this.state.validated}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const Page = () => (
|
|
||||||
<div className="page-login">
|
|
||||||
<div className="main-body">
|
|
||||||
<QueueAnim type="bottom" className="ui-animate">
|
|
||||||
<div key="1">
|
|
||||||
<SignUp />
|
|
||||||
</div>
|
|
||||||
</QueueAnim>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
|
|
||||||
module.exports = Page;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
path: 'selfRegister',
|
|
||||||
getComponent(nextState, cb) {
|
|
||||||
require.ensure([], (require) => {
|
|
||||||
cb(null, require('./components/SignUp'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -47,9 +47,7 @@ class SignUp extends React.Component {
|
|||||||
"role": { name: "", key: "SP", desc: "" },
|
"role": { name: "", key: "SP", desc: "" },
|
||||||
"profiles": [],
|
"profiles": [],
|
||||||
"types": [],
|
"types": [],
|
||||||
"organizations": [],
|
"organizations": []
|
||||||
showValidationErrors : false,
|
|
||||||
validationErrors: []
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.buttonValidated = this.buttonValidated.bind(this);
|
this.buttonValidated = this.buttonValidated.bind(this);
|
||||||
@@ -228,42 +226,12 @@ 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){
|
alert('Error to log in: ' + err.message);
|
||||||
//Unprocessable Entity (validation failed)
|
|
||||||
state.setState(Object.assign(state.state, {
|
|
||||||
showValidationErrors:true,
|
|
||||||
validationErrors:err.response.data.data
|
|
||||||
}));
|
|
||||||
}else{
|
|
||||||
alert('Error to log in: ' + err.message);
|
|
||||||
}
|
|
||||||
console.error(err);
|
console.error(err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
handleDismiss(){
|
|
||||||
this.setState(Object.assign(this.state, { showErrorMessage: false }));
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let validationErrors = null;
|
|
||||||
if (this.state.showValidationErrors){
|
|
||||||
validationErrors = (
|
|
||||||
<ul>
|
|
||||||
{this.state.validationErrors.map(errorMessage=>{
|
|
||||||
const oneValidationMessage = (<li>{errorMessage.message}</li>);
|
|
||||||
const oneValidationMessageWithTab = (<span><li style={{marginLeft:2 + "em"}}>{errorMessage.message}</li></span>);
|
|
||||||
|
|
||||||
if (errorMessage.field_name === "password-tab"){
|
|
||||||
return oneValidationMessageWithTab;
|
|
||||||
} else{
|
|
||||||
return oneValidationMessage;
|
|
||||||
}
|
|
||||||
})}
|
|
||||||
</ul>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="body-inner">
|
<div className="body-inner">
|
||||||
|
|
||||||
@@ -366,10 +334,6 @@ class SignUp extends React.Component {
|
|||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<p className="text-small">By clicking on sign up, you agree to <a href="javascript:;"><i>terms</i></a> and <a href="javascript:;"><i>privacy policy</i></a></p>
|
<p className="text-small">By clicking on sign up, you agree to <a href="javascript:;"><i>terms</i></a> and <a href="javascript:;"><i>privacy policy</i></a></p>
|
||||||
</div>
|
</div>
|
||||||
<div className="divider" />
|
|
||||||
<div className="form-group">
|
|
||||||
{validationErrors}
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,6 +14,5 @@ export { default as providerScheduler } from './profiles/providerScheduler';
|
|||||||
export { default as superAdmin } from './profiles/superAdmin';
|
export { default as superAdmin } from './profiles/superAdmin';
|
||||||
export { default as support } from './profiles/support';
|
export { default as support } from './profiles/support';
|
||||||
export { default as techsupportAdmin } from './profiles/techsupportAdmin';
|
export { default as techsupportAdmin } from './profiles/techsupportAdmin';
|
||||||
export { default as visitReporter } from './profiles/visitReporter';
|
|
||||||
|
|
||||||
export default authorization;
|
export default authorization;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const normalizeRoles = (profiles) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (roleKeys.length === 1) {
|
if (roleKeys.length === 1) {
|
||||||
return profiles[roleKeys[0]].roles;
|
return profiles[roleKeys[0]].authorize;
|
||||||
}
|
}
|
||||||
|
|
||||||
const roles = profiles.reduce((result, profile) => {
|
const roles = profiles.reduce((result, profile) => {
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
import authorization from '../authorization';
|
|
||||||
|
|
||||||
const visitReporter = authorization({
|
|
||||||
VIRPT: ['provider'],
|
|
||||||
});
|
|
||||||
|
|
||||||
export default visitReporter;
|
|
||||||
Reference in New Issue
Block a user