{"version":3,"sources":["components/WhatsNextDisplay.module.scss","components/Offer.module.scss","components/AppButton.module.scss","components/SpeechBubble.module.scss","components/google_g.png","components/UserPreferenceEditForm.module.scss","services/ConfigService.js","services/AuthService.js","components/NavMenu.js","components/Layout.js","components/Home.js","components/AppButton.js","components/OfferDate.js","components/AuthorityToLeave.js","components/ReceiverInstructions.js","components/Address.js","components/Step.js","components/Stepper.js","components/StatusSummary.js","hooks/useConfig.js","components/WhatsNextDisplay.js","components/SpeechBubble.js","components/Offer.js","services/UtilService.js","components/PaymentResult.js","components/AdditionalServices.js","components/AdditionalOptions.js","components/ratemydelivery.js","components/trackmydelivery.js","components/ConfirmRedirect.js","components/ActivityLocation.js","components/Redirect.js","components/ShipmentListPage.js","components/LoggedInPage.js","components/LoggedOut.js","components/UserPreferenceEditForm.js","components/UserPreferencePage.js","components/SilentRefreshPage.js","App.js","services/NotificationService.js","registerServiceWorker.js","index.js","components/ReceiverInstructions.module.scss","components/ShipmentListPage.module.scss"],"names":["module","exports","ConfigService","__config","window","fetch","json","__idConfig","getConfig","config","identityConfig","AuthService","getAuthUrl","idConfig","authority","getRedirectUrl","redirect_uri","init","a","configService","getIdentityConfig","UserManager","userStore","WebStorageStateStore","store","localStorage","events","addUserLoaded","user","accessToken","access_token","setItem","id_token","setUserInfo","idToken","location","href","indexOf","navigateToScreen","addSilentRenewError","e","console","error","message","signinSilent","this","addAccessTokenExpired","__silentRefreshUnderway","log","removeUser","clearStaleState","signinRedirect","Promise","resolve","setTimeout","signinRedirectCallback","getAuthenticatedUser","confirm","loginCancelledMessage","getUser","parseJwt","token","base64","split","replace","JSON","parse","atob","authResult","data","setSessionInfo","setUser","pathname","toString","endsWith","sub","redirectUri","getItem","language","signinSilentCallback","createSigninRequest","logout","signoutRedirect","id_token_hint","signoutRedirectCallback","then","clear","process","REACT_APP_PUBLIC_URL","getToken","Log","logger","level","DEBUG","__initTask","__instance","authService","UnauthenticatedNavMenu","props","className","NavItem","registerUrl","onClick","onLoginClick","AuthenticatedNavMenu","history","useHistory","toggleNavbar","push","onLogoutClick","NavMenu","checkLoginState","i","setState","hideLogin","collapsed","state","login","manageUrl","getInstance","authorityUrl","redirectUrl","preferenceUrl","Navbar","light","Container","NavbarToggler","style","visibility","NavbarBrand","alt","src","busy","Collapse","isOpen","navbar","Component","displayName","name","Layout","children","Home","componentDidMount","Jumbotron","AppButton","styles","btn","function","ajaxInProgress","iconName","highlight","aria-hidden","header","actionText","footer","OfferDate","Fragment","Date","start_time","toLocaleDateString","undefined","weekday","day","month","onWay","dateOnly","toLocaleTimeString","hour","minute","end_time","AuthorityToLeave","offer","status","shipment","atl_permitted","type","defaultChecked","atl_provided","updateShipment","target","checked","whiteSpace","termsAndConditions","authorityToLeaveUrl","atl_requested","readonly","atlInstruction","ref","myRef","offers","length","startAtl","confirmAtl","Card","CardBody","Input","placeholder","value","onChange","giveAtl","ReceiverInstructions","useState","instructions","setInstructions","receiverInstructions","cardCloseX","onClose","input","saveInstructions","Address","label","address","line1","line2","line3","line4","atlInstructions","Step","getStyles","bind","activeColor","completeColor","defaultColor","circleFontColor","activeTitleColor","completeTitleColor","defaultTitleColor","size","circleFontSize","titleFontSize","circleTop","titleTop","width","completeOpacity","activeOpacity","defaultOpacity","completeTitleOpacity","activeTitleOpacity","defaultTitleOpacity","barStyle","defaultBarColor","completeBarColor","defaultBorderStyle","completeBorderStyle","activeBorderStyle","lineMarginOffset","step","display","position","circle","height","margin","backgroundColor","borderRadius","textAlign","padding","fontSize","color","opacity","border","activeCircle","completedCircle","index","lineHeight","title","marginTop","fontWeight","activeTitle","completedTitle","leftBar","top","borderTopStyle","borderTopWidth","borderTopColor","left","right","marginRight","rightBar","marginLeft","completedBar","icon","active","completed","first","isLast","Object","assign","defaultProps","borderStyle","root","minHeight","stepper","Stepper","activeStep","steps","disabledSteps","map","key","includes","StatusSummary","stepIndex","updateView","step4","useConfig","setConfig","useEffect","response","ok","Error","statusText","catch","WhatsNextDisplay","onPickedUp","whatsNext","onOFD","enabled","id","SpeechBubble","onTap","anchor","click","tapText","tapUrl","bubble","isProposed","content","text","tapIcon","stopPropagation","Header","startsWith","OfferStatusArea","reviewUrl","googleLogo","invite_review","isOnWayIncorrectDay","isOnWayCorrectDay","OfferShipmentDetails","from","to","connote","ContactButton","commercialRestrictions","contactPhoneNumber","ContactPhoneButton","Offer","handleAction","newStatus","seloffer","postData","params","jobid","setOffer","current","scrollIntoView","behavior","setGlobalBusy","instruction","clearGlobalBusy","savingReceiverInstructions","enableReceiverInstructions","showAdditionalServices","allow_redirect","additionalServices","maps","availableUntilToShipmentStatus","addSvcs","some","svc","matchingMap","find","m","until","available_until","states","s","paid_by","receiverInstructions_onClick","match","notFound","loggedin","shipmentStates","offerStates","qs","queryString","search","React","createRef","userTask","configTask","loadOffer","newOffer","url","headers","Headers","append","method","mode","cache","credentials","redirect","referrer","body","stringify","alert","currentDate","setHours","offerDate","getTime","rate_my_delivery","marginBottom","ss","os","getActionArea","allowReceiverInstructions","startRedirect","isTrackable","withRouter","UtilService","n","digits","negative","multiplicator","Math","pow","parseFloat","toFixed","round","PaymentResult","redirectPrice","RedirectionServices","reduce","sum","service","priceInclGST","additionalServicePrice","AdditionalServices","justpaid","totalPrice","roundMoneyTo","loaded","Id","Addr","address_type","description","suburb","pcode","depot","code","Address1","Address2","Name","Contact","Mobile","Email","Instruction","authenticatedUser","offerTask","getResult","loadResult","paymentSessionId","sessionResult","paymentResult","fmeError","services","redirectionServices","acceptTerms","getPaymentMessage","rc","as","selected","disabled","float","visibleAdditionalServices","filter","loadServices","startPayment","isRedirect","paymentDetails","paymentPageUrl","changeAdditionalService","selectedCode","toggleTCs","total","additionalServicesUrl","hasAvailableSelection","colSpan","contactUsUrl","contactUsText","AdditionalOptions","RateMyDelivery","handleChangeAnswer","val","prevState","currentR","comment","handleClick","currentX","initialX","xOffset","handleTouchStart","clientX","handleTouchMove","centerOffset","preventDefault","handleTouchEnd","touches","dragactive","min","maxX","max","minX","lensstyle","transform","starContainer","clientWidth","lensLeft","selectedStar","scale","stars","star","center","offsetLeft","factor","abs","classList","remove","add","selChange","xoffset","selRating","rating","questionnaire","questionnaireCode","completedTime","toISOString","answer","currentQ","question","qText","currentQIndex","buttonActionText","buttonFooterText","buttonHeaderText","submitting","handleLoadOrResize","handleSubmit","handleResize","clearTimeout","lensElement","document","getElementById","getElementsByClassName","lensRect","getBoundingClientRect","clientLeft","selStar","lensInitLeft","firstChild","starRect","starIconRect","hadj","vadj","addEventListener","q","questions","updateToQuestion","totalQs","firstQ","firstR","readyState","prevProps","query","URLSearchParams","has","get","newI","newQ","newR","nextQ","result","setTate","rated","onTouchMove","onMouseMove","onTouchEnd","onMouseUp","FormGroup","dangerouslySetInnerHTML","__html","onTouchStart","onMouseDown","Label","for","starCount","starColor","emptyStarColor","renderStarIcon","FliwayTruckIcon","backgroundImage","alignItems","justifyContent","TrackMyDelivery","lat","lng","iconCenter","loading","trackingAvailable","zoom","maxZoom","updatePosition","apiIsLoaded","positionUpdateJob","defaultZoom","mapDefaultZoom","mapMaxZoom","setInterval","trackingFrequencySeconds","clearInterval","positionData","loc","trackingData","latLng","LatLng","panTo","api","closeButton","createElement","innerHTML","onclick","controls","ControlPosition","LEFT_TOP","view","bootstrapURLKeys","client","options","yesIWantToUseGoogleMapApiInternals","onGoogleApiLoaded","layerTypes","ConfirmRedirect","costs","paid","isReceiverPrice","onBack","ActivityLocation","selectAddress","selectedAddr","suggestions","onActivityLocationChanged","activityLocation","getAddressSuggestionDetails","detail","addressTypes","o","getAddressSuggestions","signal","reject","suggestion","results","setAddressType","newAddressType","newActivityLocation","searchAddresses","newVal","lastAddressSearch","defaultAddressType","reason","Phone","textField","dataItemKey","valueMap","sug","readOnly","Redirect","RedirectPrice","rp","validateAndCalculatePrice","toAddress","errorDetail","ShipmentListItem","setIcon","setStatusText","listItem","shipmentStatusIcon","shipmentStatusText","goods","_","g","qty","ShipmentList","shipmentList","setShipmentList","sortedShipmentList","sortBy","issued_on","ShipmentListPage","jobs","setJobs","jobResp","populateJobs","LoggedInPage","profile","values","new","prefsResponse","prefs","LoggedOut","signInAsync","UserPreferenceEditForm","onSubmit","preferences","generalUrl","userAndPrivacyUrl","UserPreferencePage","preferencesUpdated","newPreferences","problem","showAlert","historyUnavailable","alertColor","alertMessage","alertVisible","onDismiss","identity","email","phone","mobile","newPrefs","flexWrap","closable","SilentRefreshPage","App","__busyCount","expired","tries","path","component","render","exact","NotificationService","registration","firebase","apps","app","delete","initializeApp","firebaseConfig","messaging","useServiceWorker","requestPermission","onMessage","payload","notification","showNotification","isLocalhost","Boolean","hostname","registerValidSW","swUrl","isFirebase","registrationConfig","onUpdate","waitingServiceWorker","waiting","event","reload","postMessage","scope","navigator","serviceWorker","register","update","notificationServiceWorker","installing","notificationService","err","waiting3","onupdatefound","installingWorker","onstatechange","controller","checkValidServiceWorker","ready","unregister","baseUrl","getElementsByTagName","getAttribute","rootElement","ReactDOM","basename","URL","origin","firebaseSwUrl","registerServiceWorker"],"mappings":"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","file":"static/js/main.94a01eae.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"title\":\"WhatsNextDisplay_title__1JFCU\",\"icon\":\"WhatsNextDisplay_icon__2N-6U\",\"whatsNext\":\"WhatsNextDisplay_whatsNext__15Fec\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"actionArea\":\"Offer_actionArea__Ci-uV\",\"ContactPhoneButton\":\"Offer_ContactPhoneButton__3-6dd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"btn\":\"AppButton_btn__1TL98\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"bubble\":\"SpeechBubble_bubble__19OHm\"};","module.exports = \"data:image/png;base64,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\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"card\":\"UserPreferenceEditForm_card__1ywj2 card\",\"cardHeader\":\"UserPreferenceEditForm_cardHeader__3QuEf\",\"header\":\"UserPreferenceEditForm_header__lMP7w\",\"linkText\":\"UserPreferenceEditForm_linkText__zcY_n\",\"highlight\":\"UserPreferenceEditForm_highlight__gmg0l\",\"sectionContent\":\"UserPreferenceEditForm_sectionContent__2bKY-\",\"addressTypeP\":\"UserPreferenceEditForm_addressTypeP__vGW8V\"};","export default class ConfigService {\r\n static __config = null; \r\n static __idConfig = null;\r\n\r\n static async getConfig(){\r\n if(ConfigService.__config == null){\r\n ConfigService.__config = (await window.fetch(\"api/configuration/default\")).json();\r\n } \r\n return ConfigService.__config;\r\n }\r\n\r\n static async getIdentityConfig() {\r\n if (ConfigService.__idConfig == null) {\r\n var config = await ConfigService.getConfig();\r\n // override properties from server (i.e. appropriate appsettings)\r\n ConfigService.__idConfig = config.identityConfig;\r\n }\r\n return ConfigService.__idConfig;\r\n }\r\n}","import configService from \"./ConfigService\";\r\nimport { UserManager, WebStorageStateStore, Log } from \"oidc-client\";\r\n\r\nexport default class AuthService {\r\n UserManager;\r\n accessToken;\r\n idConfig;\r\n\r\n static __instance = null;\r\n static __silentRefreshUnderway = false;\r\n \r\n constructor() {\r\n // oidc-client logging\r\n Log.logger = console;\r\n Log.level = Log.DEBUG;\r\n }\r\n\r\n getAuthUrl = () =>{\r\n return this.idConfig.authority;\r\n }\r\n\r\n getRedirectUrl = () => {\r\n return this.idConfig.redirect_uri;\r\n }\r\n init = async () => {\r\n this.idConfig = await configService.getIdentityConfig();\r\n //console.log('initing usermanager with id config!', this.idConfig);\r\n this.UserManager = new UserManager({\r\n ...this.idConfig,\r\n userStore: new WebStorageStateStore({ store: window.localStorage })\r\n });\r\n\r\n this.UserManager.events.addUserLoaded(user => {\r\n this.accessToken = user.access_token;\r\n localStorage.setItem(\"access_token\", user.access_token);\r\n localStorage.setItem(\"id_token\", user.id_token);\r\n this.setUserInfo({\r\n accessToken: this.accessToken,\r\n idToken: user.id_token\r\n }); \r\n if (window.location.href.indexOf(\"signin-oidc\") !== -1) {\r\n this.navigateToScreen();\r\n }\r\n });\r\n this.UserManager.events.addSilentRenewError(async (e) => {\r\n console.error(\"silent renew error\", e.message);\r\n // this.UserManager.removeUser();\r\n // this.UserManager.clearStaleState();\r\n // retry\r\n await this.signinSilent();\r\n });\r\n\r\n this.UserManager.events.addAccessTokenExpired(async () => {\r\n if(AuthService.__silentRefreshUnderway === false) {\r\n AuthService.__silentRefreshUnderway = true;\r\n // this probably means app has been closed for a while and renew hasn't happened(?)\r\n console.log(\"token expired, trying to refresh\");\r\n try {\r\n await this.signinSilent();\r\n //console.log('signInSilentResult', signInSilentResult);\r\n AuthService.__silentRefreshUnderway = false;\r\n }\r\n catch(err) {\r\n console.error('token refresh failed!', err);\r\n await this.UserManager.removeUser();\r\n await this.UserManager.clearStaleState();\r\n await this.signinRedirect();\r\n }\r\n }\r\n });\r\n await new Promise(resolve => setTimeout(resolve, 1000));\r\n }\r\n\r\n static async getInstance() {\r\n //console.log('getting instance');\r\n // if there's one initing, await it\r\n if(window.__initTask)\r\n await window.__initTask;\r\n if (!window.__instance) {\r\n var authService = new AuthService();\r\n window.__initTask = authService.init();\r\n await window.__initTask;\r\n //await authService.getUser();\r\n window.__instance = authService;\r\n }\r\n return window.__instance;\r\n }\r\n\r\n signinRedirectCallback = async () => {\r\n try {\r\n var user = await this.UserManager.signinRedirectCallback();\r\n console.log('signed in.', user);\r\n return user; \r\n }\r\n catch(error) {\r\n console.error('signinRedirectCallback failed', error);\r\n await this.UserManager.signinRedirect();\r\n }\r\n };\r\n\r\n //Call this to get an authenticated user (and prompt for login\\register if not already)\r\n getAuthenticatedUser = async(confirm) => {\r\n const loginCancelledMessage = 'Login cancelled. You must login (or register) to do this.';\r\n try { \r\n const user = await this.UserManager.getUser();\r\n if(user === null)\r\n // only prompt for confirmation if confirm flag passed in = true\r\n if(confirm && confirm === true) \r\n if(window.confirm('You need to be logged in to do this. Would you like to login now?')){\r\n this.UserManager.signinRedirect();\r\n return new Promise(resolve => setTimeout(resolve, 2000));\r\n }\r\n else\r\n throw loginCancelledMessage;\r\n else{\r\n this.UserManager.signinRedirect();\r\n return new Promise(resolve => setTimeout(resolve, 2000));\r\n }\r\n return user;\r\n }\r\n catch(error){\r\n if(error === loginCancelledMessage)\r\n throw error;\r\n else {\r\n console.error('Assuming not logged in: ', error);\r\n this.UserManager.signinRedirect();\r\n return new Promise(resolve => setTimeout(resolve, 2000));\r\n }\r\n }\r\n }\r\n\r\n getUser = async () => {\r\n try {\r\n const user = await this.UserManager.getUser();\r\n return user;\r\n }\r\n catch(error){\r\n console.log('Assuming not logged in: ', error);\r\n return null; \r\n }\r\n };\r\n\r\n parseJwt = token => {\r\n const base64Url = token.split(\".\")[1];\r\n const base64 = base64Url.replace(\"-\", \"+\").replace(\"_\", \"/\");\r\n return JSON.parse(window.atob(base64));\r\n };\r\n\r\n setUserInfo = authResult => {\r\n const data = this.parseJwt(this.accessToken);\r\n\r\n this.setSessionInfo(authResult);\r\n this.setUser(data);\r\n };\r\n\r\n signinRedirect = () => { \r\n if(!window.location.pathname.toString().endsWith(\"loggedout\"))\r\n localStorage.setItem(\"redirectUri\", window.location.pathname);\r\n this.UserManager.signinRedirect({});\r\n };\r\n\r\n setUser = data => {\r\n localStorage.setItem(\"userId\", data.sub);\r\n };\r\n\r\n navigateToScreen = () => { \r\n const redirectUri = !!localStorage.getItem(\"redirectUri\")\r\n ? localStorage.getItem(\"redirectUri\")\r\n : \"/en/dashboard\";\r\n console.log('navigating to screen', redirectUri);\r\n const language = \"/\" + redirectUri.split(\"/\")[1];\r\n\r\n window.location.replace(language + \"/dashboard\");\r\n };\r\n\r\n setSessionInfo(authResult) {\r\n localStorage.setItem(\"access_token\", authResult.accessToken);\r\n localStorage.setItem(\"id_token\", authResult.idToken);\r\n }\r\n\r\n signinSilent = () => {\r\n return this.UserManager.signinSilent();\r\n };\r\n signinSilentCallback = () => {\r\n return this.UserManager.signinSilentCallback();\r\n };\r\n\r\n createSigninRequest = () => {\r\n return this.UserManager.createSigninRequest();\r\n };\r\n\r\n logout = async () => {\r\n await this.UserManager.removeUser();\r\n // also clear redirectUri => probably not valid any more!\r\n localStorage.setItem(\"redirectUri\", null);\r\n await this.UserManager.signoutRedirect({\r\n id_token_hint: localStorage.getItem(\"id_token\")\r\n });\r\n this.UserManager.clearStaleState();\r\n };\r\n\r\n signoutRedirectCallback = () => {\r\n this.UserManager.signoutRedirectCallback().then(() => {\r\n localStorage.clear();\r\n window.location.replace(process.env.REACT_APP_PUBLIC_URL);\r\n });\r\n this.UserManager.clearStaleState();\r\n };\r\n\r\n getToken = () => {\r\n return localStorage.getItem(\"access_token\");\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { useHistory } from 'react-router';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem } from 'reactstrap';\r\nimport './NavMenu.css';\r\nimport AuthService from \"../services/AuthService\";\r\n\r\nfunction UnauthenticatedNavMenu(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction AuthenticatedNavMenu(props) {\r\n const history = useHistory();\r\n return (\r\n \r\n );\r\n}\r\n\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name; \r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n collapsed: true,\r\n hideLogin: false,\r\n registerUrl: \"/identity/Account/Register\",\r\n manageUrl: \"/identity/Manage\"\r\n }; \r\n this.i = 0;\r\n }\r\n\r\n async componentDidMount() {\r\n this.authService = await AuthService.getInstance();\r\n var authorityUrl = this.authService.getAuthUrl();\r\n var redirectUrl = this.authService.getRedirectUrl(); \r\n\r\n this.setState({\r\n registerUrl: `${authorityUrl}/Account/Register?returnUrl=${redirectUrl}?new=true`,\r\n manageUrl: `${authorityUrl}/Manage`,\r\n preferenceUrl: `/Preferences`\r\n });\r\n\r\n await this.checkLoginState();\r\n }\r\n\r\n checkLoginState = async () => { \r\n var user = await this.authService.getUser();\r\n console.log('checking login state', this.i, user == null);\r\n if(this.i++ < 20){\r\n setTimeout(this.checkLoginState, this.i * 80 + 1); \r\n }\r\n this.setState({\r\n hideLogin: user !== null,\r\n });\r\n }\r\n\r\n toggleNavbar = () => {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n login = async () => {\r\n console.log('sign in redirect', this.authService);\r\n await this.authService.signinRedirect();\r\n }\r\n\r\n logout = async () => {\r\n await this.authService.logout();\r\n }\r\n\r\n render() { \r\n return (\r\n
\r\n \r\n \r\n {}\r\n \r\n \r\n \"\"\r\n {this.props.busy &&
}\r\n
\r\n \r\n {\r\n !this.state.hideLogin &&\r\n \r\n }\r\n {\r\n this.state.hideLogin && \r\n \r\n }\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n \r\n {this.props.children}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Jumbotron } from 'reactstrap';\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n\r\n componentDidMount = () => {\r\n\r\n }\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n \"\"/\r\n
\r\n

Welcome to the Fliway Home Delivery App.
What would you like to do?

\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport styles from './AppButton.module.scss';\r\n\r\nexport default function AppButton(props) {\r\n return (\r\n
{if(!props.ajaxInProgress) props.onClick()}}>\r\n {props.ajaxInProgress ?
:\r\n
\r\n \r\n
}\r\n
\r\n
{props.header}
\r\n
{props.actionText}
\r\n
{props.footer}
\r\n
\r\n
\r\n ); \r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class OfferDate extends Component {\r\n static displayName = OfferDate.name;\r\n\r\n constructor(props) {\r\n super(props); \r\n }\r\n\r\n render() {\r\n //console.log(this.props);\r\n return (\r\n \r\n {new Date(this.props.start_time).toLocaleDateString(undefined, {weekday: 'short', day: '2-digit', month: 'short'})}
\r\n { (!this.props.onWay && !this.props.dateOnly) &&\r\n {new Date(this.props.start_time).toLocaleTimeString(undefined, {hour: 'numeric', minute:'2-digit'})} to \r\n {new Date(this.props.end_time).toLocaleTimeString(undefined, {hour: 'numeric', minute:'2-digit'})}\r\n }\r\n { (this.props.onWay) === true &&\r\n We're on our way\r\n }\r\n
);\r\n }\r\n}","import React from 'react';\r\nimport { Collapse, Input, Card, CardBody } from 'reactstrap';\r\nimport AppButton from './AppButton';\r\nimport { OfferDate } from './OfferDate';\r\n\r\nexport default function AuthorityToLeave(props) {\r\n if((props.offer.status === \"Offer1\" || props.offer.status === \"Accepted\" || props.offer.status === \"Declined\") &&\r\n (props.shipment.status !== \"Cancelled\" && props.shipment.status !== \"Rejected\" && props.shipment.atl_permitted === true)) {\r\n // Email from glen - redirect (checkbox) always allows overriding this\r\n if(props.type === \"checkbox\") {\r\n return(\r\n
\r\n props.updateShipment({atl_provided: e.target.checked ? \"Receiver\" : \"No\" })} />\r\n \r\n
\r\n );\r\n }\r\n\r\n if(props.shipment.atl_requested === true || props.shipment.atl_provided === \"Receiver\") {\r\n return (\r\n
\r\n Fliway have been authorised to leave the delivery at the premises in accordance with the ATL  \r\n Terms & Conditions\r\n
\r\n );\r\n }\r\n \r\n if((!(props.shipment.atl_requested === true || props.shipment.atl_provided === \"Receiver\") && \r\n props.shipment.status !== \"Delivered\" && props.shipment.status.indexOf(\"POD\") < 0) &&\r\n !props.readonly){\r\n return (\r\n \r\n {!props.shipment.atlInstruction &&
\r\n
\r\n If no one is
home on\r\n {props.offer.offers.length >= 1 && \r\n (\r\n
\r\n
)\r\n }
\r\n
\r\n \r\n { props.shipment.atl_provided === \"Customer\" ?\r\n :\r\n \r\n }\r\n
}\r\n \r\n \r\n
props.updateShipment({confirmAtl: null})}>×
\r\n \r\n props.updateShipment({atlInstruction: e.target.value})} />\r\n \r\n {props.shipment.atl_provided !== \"Customer\" &&\r\n
\r\n Authority to leave is given in accordance with the
\r\n Terms & Conditions\r\n
}\r\n
\r\n
\r\n
\r\n {props.shipment.atl_provided === \"Customer\" && \r\n
\r\n Fliway have been authorised to leave the delivery at the premises in accordance with the ATL  \r\n Terms & Conditions\r\n
\r\n } \r\n
\r\n );\r\n } \r\n } \r\n\r\n // default is empty\r\n return null;\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Collapse, Input, Card, CardBody } from 'reactstrap';\r\nimport AppButton from './AppButton';\r\nimport styles from './ReceiverInstructions.module.scss';\r\n\r\nexport default function ReceiverInstructions(props) {\r\n\r\n const [instructions, setInstructions] = useState(\"\");\r\n\r\n return (\r\n \r\n \r\n
props.onClose()}>×
\r\n \r\n setInstructions(e.target.value)}\r\n />\r\n props.saveInstructions(instructions) }\r\n />\r\n \r\n
\r\n
\r\n );\r\n};","import React, { Component } from 'react';\r\n\r\nexport class Address extends Component {\r\n static displayName = Address.name;\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n
{this.props.address.line1}
\r\n
{this.props.address.line2}
\r\n
{this.props.address.line3}
\r\n
{this.props.address.line4}
\r\n
{this.props.atlInstructions}
\r\n
{this.props.receiverInstructions}
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { PropTypes } from 'prop-types';\r\n\r\nexport default class Step extends Component {\r\n constructor() {\r\n super();\r\n this.getStyles = this.getStyles.bind(this);\r\n }\r\n\r\n getStyles() {\r\n const {\r\n activeColor, completeColor, defaultColor, circleFontColor,\r\n activeTitleColor, completeTitleColor, defaultTitleColor,\r\n size, circleFontSize, titleFontSize,\r\n circleTop, titleTop, width, completeOpacity, activeOpacity, defaultOpacity,\r\n completeTitleOpacity, activeTitleOpacity, defaultTitleOpacity, barStyle, defaultBarColor,\r\n completeBarColor, defaultBorderStyle, completeBorderStyle, activeBorderStyle, lineMarginOffset\r\n } = this.props;\r\n\r\n return {\r\n step: {\r\n width: `${width}%`,\r\n display: 'table-cell',\r\n position: 'relative'\r\n },\r\n circle: {\r\n width: size,\r\n height: size,\r\n margin: '0 auto',\r\n backgroundColor: defaultColor,\r\n borderRadius: '50%',\r\n textAlign: 'center',\r\n padding: 1,\r\n fontSize: circleFontSize,\r\n color: circleFontColor,\r\n display: 'block',\r\n opacity: defaultOpacity,\r\n border: defaultBorderStyle ? defaultBorderStyle : ''\r\n },\r\n activeCircle: {\r\n backgroundColor: activeColor,\r\n opacity: activeOpacity,\r\n border: activeBorderStyle ? activeBorderStyle : defaultBorderStyle\r\n },\r\n completedCircle: {\r\n width: size,\r\n height: size,\r\n backgroundColor: completeColor,\r\n opacity: completeOpacity,\r\n border: completeBorderStyle ? completeBorderStyle : defaultBorderStyle,\r\n },\r\n index: {\r\n lineHeight: `${size + circleFontSize / 4}px`,\r\n color: circleFontColor\r\n },\r\n title: {\r\n marginTop: titleTop,\r\n fontSize: titleFontSize,\r\n fontWeight: '300',\r\n textAlign: 'center',\r\n display: 'block',\r\n color: defaultTitleColor,\r\n opacity: defaultTitleOpacity,\r\n },\r\n activeTitle: {\r\n color: activeTitleColor,\r\n opacity: activeTitleOpacity,\r\n },\r\n completedTitle: {\r\n color: completeTitleColor,\r\n opacity: completeTitleOpacity,\r\n },\r\n leftBar: {\r\n position: 'absolute',\r\n top: circleTop + size / 2 - 3,\r\n height: 4,\r\n borderTopStyle: barStyle,\r\n borderTopWidth: 6,\r\n borderTopColor: defaultBarColor,\r\n left: 0,\r\n right: '50%',\r\n marginRight: size / 2 + lineMarginOffset,\r\n opacity: defaultOpacity,\r\n },\r\n rightBar: {\r\n position: 'absolute',\r\n top: circleTop + size / 2 - 3,\r\n height: 4,\r\n borderTopStyle: barStyle,\r\n borderTopWidth: 6,\r\n borderTopColor: defaultBarColor,\r\n right: 0,\r\n left: '50%',\r\n marginLeft: size / 2 + lineMarginOffset,\r\n opacity: defaultOpacity,\r\n },\r\n completedBar: {\r\n borderTopStyle: barStyle,\r\n borderTopWidth: 6,\r\n borderTopColor: completeBarColor,\r\n opacity: completeOpacity,\r\n },\r\n };\r\n }\r\n\r\n render() {\r\n const { title, icon, index, active, completed, first, isLast, href, onClick } = this.props;\r\n\r\n const styles = this.getStyles();\r\n const titleStyle = Object.assign(\r\n styles.title,\r\n completed ? styles.completedTitle : {},\r\n active ? styles.activeTitle : {},\r\n );\r\n\r\n return (\r\n
\r\n
\r\n
{title}
\r\n
\r\n );\r\n }\r\n}\r\n\r\nStep.defaultProps = {\r\n activeColor: '#5096FF',\r\n completeColor: '#5096FF',\r\n defaultColor: '#E0E0E0',\r\n activeTitleColor: '#000',\r\n completeTitleColor: '#000',\r\n defaultTitleColor: '#757575',\r\n circleFontColor: '#FFF',\r\n size: 32,\r\n circleFontSize: 16,\r\n titleFontSize: 16,\r\n circleTop: 24,\r\n titleTop: 8,\r\n defaultBarColor: '#E0E0E0',\r\n barStyle: 'solid',\r\n borderStyle: 'solid',\r\n lineMarginOffset: 4\r\n};\r\n\r\nStep.propTypes = {\r\n width: PropTypes.number.isRequired,\r\n activeColor: PropTypes.string,\r\n completeColor: PropTypes.string,\r\n defaultColor: PropTypes.string,\r\n activeTitleColor: PropTypes.string,\r\n completeTitleColor: PropTypes.string,\r\n defaultTitleColor: PropTypes.string,\r\n circleFontColor: PropTypes.string,\r\n size: PropTypes.number,\r\n circleFontSize: PropTypes.number,\r\n titleFontSize: PropTypes.number,\r\n circleTop: PropTypes.number,\r\n titleTop: PropTypes.number,\r\n title: PropTypes.node,\r\n index: PropTypes.number,\r\n active: PropTypes.bool,\r\n completed: PropTypes.bool,\r\n first: PropTypes.bool,\r\n isLast: PropTypes.bool,\r\n completeOpacity: PropTypes.string,\r\n activeOpacity: PropTypes.string,\r\n defaultOpacity: PropTypes.string,\r\n completeTitleOpacity: PropTypes.string,\r\n activeTitleOpacity: PropTypes.string,\r\n defaultTitleOpacity: PropTypes.string,\r\n barStyle: PropTypes.string,\r\n defaultBarColor: PropTypes.string,\r\n completeBarColor: PropTypes.string,\r\n defaultBorderColor: PropTypes.string,\r\n completeBorderColor: PropTypes.string,\r\n activeBorderColor: PropTypes.string,\r\n defaultBorderStyle: PropTypes.string,\r\n completeBorderStyle: PropTypes.string,\r\n activeBorderStyle: PropTypes.string,\r\n lineMarginOffset: PropTypes.number\r\n};","import React from 'react';\r\nimport { PropTypes } from 'prop-types';\r\n\r\nimport Step from './Step';\r\n\r\nconst styles = {\r\n root: {\r\n width: '100%',\r\n minHeight: 0,\r\n padding: 0,\r\n },\r\n stepper: {\r\n display: 'table',\r\n width: '100%',\r\n margin: '0 auto',\r\n },\r\n};\r\n\r\nfunction Stepper({\r\n activeStep, steps, disabledSteps,\r\n activeColor, completeColor, defaultColor, circleFontColor,\r\n activeTitleColor, completeTitleColor, defaultTitleColor,\r\n size, circleFontSize, titleFontSize,\r\n circleTop, titleTop, completeOpacity, activeOpacity, defaultOpacity,\r\n completeTitleOpacity, activeTitleOpacity, defaultTitleOpacity, barStyle,\r\n defaultBorderStyle, completeBorderStyle, activeBorderStyle, defaultBarColor, completeBarColor, lineMarginOffset\r\n}) {\r\n return (\r\n
\r\n
\r\n {steps.map((step, index) => (\r\n \r\n ))}\r\n
\r\n
\r\n );\r\n}\r\n\r\nStepper.defaultProps = {\r\n activeStep: 0,\r\n};\r\n\r\nStepper.propTypes = {\r\n activeStep: PropTypes.number,\r\n steps: PropTypes.array,\r\n activeColor: PropTypes.string,\r\n completeColor: PropTypes.string,\r\n defaultColor: PropTypes.string,\r\n activeTitleColor: PropTypes.string,\r\n completeTitleColor: PropTypes.string,\r\n defaultTitleColor: PropTypes.string,\r\n circleFontColor: PropTypes.string,\r\n size: PropTypes.number,\r\n circleFontSize: PropTypes.number,\r\n titleFontSize: PropTypes.number,\r\n circleTop: PropTypes.number,\r\n titleTop: PropTypes.number,\r\n defaultOpacity: PropTypes.string,\r\n completeOpacity: PropTypes.string,\r\n activeOpacity: PropTypes.string,\r\n defaultTitleOpacity: PropTypes.string,\r\n completeTitleOpacity: PropTypes.string,\r\n activeTitleOpacity: PropTypes.string,\r\n barStyle: PropTypes.string,\r\n defaultBarColor: PropTypes.string,\r\n completeBarColor: PropTypes.string,\r\n defaultBorderStyle: PropTypes.string,\r\n completeBorderStyle: PropTypes.string,\r\n activeBorderStyle: PropTypes.string,\r\n lineMarginOffset: PropTypes.number\r\n};\r\n\r\nexport default Stepper;","import React, { Component } from 'react';\r\nimport './StatusSummary.scss';\r\nimport Stepper from './Stepper';\r\n\r\nexport class StatusSummary extends Component {\r\n static displayName = StatusSummary.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.steps = [];\r\n this.stepIndex = 0;\r\n\r\n this.updateView = () => {\r\n var status = this.props.shipment.status;\r\n this.stepIndex = 0;\r\n //console.log(\"Updating view based on status...\", status);\r\n var step4 = { title: Delivered
to you
, icon: 'icon-timeline-delivered' };\r\n if(status === \"Cancelled\" || status === \"Ordered\")\r\n this.stepIndex = 0;\r\n if(status === \"PickedUp\")\r\n this.stepIndex = 1; \r\n if(status === \"OFD\" || status === \"OFDOffSchedule\")\r\n this.stepIndex = 2; \r\n if(status === \"PartialPOD\" || status === \"DriverNear\")\r\n this.stepIndex = 3; \r\n if(status === \"Delivered\" || status === \"ManualPOD\")\r\n this.stepIndex = 4;\r\n if(status === \"Rejected\") {\r\n step4 = { title: Returned, icon: 'icon-timeline-cross' };\r\n this.stepIndex = 4;\r\n }\r\n \r\n this.steps = [\r\n { title: Picked
up
, icon: 'icon-timeline-pickup' },\r\n { title: On the
way
, icon: 'icon-timeline-ofd' },\r\n { title: Close to
home
, icon: 'icon-timeline-near' },\r\n step4\r\n ];\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.updateView();\r\n }\r\n\r\n render() {\r\n this.updateView();\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}","import React, { useState, useEffect } from 'react';\r\n\r\nfunction useConfig(props) {\r\n\r\n const [config, setConfig] = useState(null);\r\n\r\n useEffect(() => {\r\n fetch('api/configuration/default', {\r\n }).then(response => {\r\n if (response.ok)\r\n return response.json();\r\n throw new Error(response.statusText);\r\n }).then(data => {\r\n setConfig(data);\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n }, []);\r\n\r\n return config;\r\n}\r\n\r\nexport { useConfig };","import React from 'react';\r\nimport ConfigService from '../services/ConfigService';\r\nimport { useConfig } from '../hooks/useConfig';\r\nimport styles from './WhatsNextDisplay.module.scss';\r\n\r\nfunction WhatsNextDisplay(props) {\r\n\r\n let config = useConfig();\r\n\r\n var status = props.shipment.status;\r\n var onPickedUp = config?.whatsNext?.onPickedUp;\r\n var onOFD = config?.whatsNext?.onOFD;\r\n\r\n var message = null;\r\n\r\n if (onPickedUp?.enabled === \"True\" && status === \"PickedUp\") {\r\n message = onPickedUp.message;\r\n } else if (onOFD?.enabled === \"True\" && (status === \"OFD\" || status === \"OFDOffSchedule\")) {\r\n message = onOFD.message;\r\n }\r\n\r\n return message ? (\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {message}\r\n \r\n
\r\n
\r\n ) : null;\r\n}\r\n\r\nexport { WhatsNextDisplay };","import React, { Component } from 'react';\r\nimport styles from './SpeechBubble.module.scss'\r\n\r\nexport class SpeechBubble extends Component {\r\n static displayName = SpeechBubble.name;\r\n\r\n onTap = (e) => {\r\n this.anchor.click(); \r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n {this.props.content ? \r\n this.props.content :\r\n this.props.children ? this.props.children : {this.props.text}\r\n }\r\n {this.props.tapText && this.props.tapUrl &&\r\n <>\r\n
{this.props.tapIcon && <>}\r\n this.anchor = a} target=\"_blank\" onClick={e => e.stopPropagation()} href={this.props.tapUrl}>{this.props.tapText}\r\n }\r\n
\r\n \r\n
\r\n );\r\n }\r\n}","import React, { Component, useState } from 'react';\r\nimport { Collapse, Input, Card, CardBody } from 'reactstrap';\r\nimport { withRouter } from 'react-router';\r\nimport AppButton from './AppButton';\r\nimport AuthorityToLeave from './AuthorityToLeave';\r\nimport ReceiverInstructions from './ReceiverInstructions';\r\nimport { Address } from './Address';\r\nimport { StatusSummary } from './StatusSummary';\r\nimport { WhatsNextDisplay } from './WhatsNextDisplay';\r\nimport './Offer.scss';\r\nimport { OfferDate } from './OfferDate';\r\nimport { SpeechBubble } from './SpeechBubble';\r\nimport { useConfig } from '../hooks/useConfig';\r\nimport queryString from 'query-string'\r\nimport AuthService from \"../services/AuthService\";\r\nimport ConfigService from \"../services/ConfigService\";\r\nimport googleLogo from './google_g.png';\r\nimport styles from './Offer.module.scss';\r\n\r\nfunction Header(props) {\r\n\r\n var getHeaderText = (offer, shipment) => {\r\n //console.log(\"headertext:\", offer.status, shipment.status);\r\n if (shipment.status === \"Cancelled\")\r\n return \"CONTACT SENDER\";\r\n\r\n if (shipment.status === \"Rejected\")\r\n return \"RETURNED\";\r\n\r\n if (shipment.status === \"Delivered\" || shipment.status === \"ManualPOD\")\r\n return \"DELIVERED\";\r\n\r\n if (shipment.status === \"OFD\" || shipment.status === \"OFDOffSchedule\")\r\n return \"ON THE WAY\";\r\n\r\n if (shipment.status === \"DriverNear\")\r\n return \"CLOSE TO HOME\";\r\n\r\n if (offer.status === \"Ordered\")\r\n return \"Ordered\";\r\n\r\n if (offer.status === \"ConfirmChange\")\r\n return \"THINGS HAVE CHANGED\";\r\n\r\n if (offer.status === \"Rebook\")\r\n return \"REBOOK A TIME\";\r\n\r\n if (shipment.status === \"PartialPOD\")\r\n return \"ALMOST THERE\";\r\n\r\n if (offer.status.startsWith(\"Offer\"))\r\n return \"BOOK A TIME\";\r\n if (offer.status === \"Declined\" || offer.status === \"Contact\" || offer.status === \"Change\")\r\n return \"LET'S TALK\";\r\n if (offer.status === \"Accepted\")\r\n return \"BOOKED\";\r\n\r\n return \"DETAILS\";\r\n }\r\n\r\n return
My Delivery: {getHeaderText(props.offer, props.shipment)}
;\r\n}\r\n\r\nfunction OfferStatusArea(props) {\r\n\r\n let config = useConfig();\r\n\r\n if (props.shipment.status === \"Cancelled\")\r\n return ;\r\n\r\n if (props.shipment.status === \"Rejected\")\r\n return ;\r\n\r\n if (props.shipment.status === \"ManualPOD\")\r\n return null;\r\n\r\n console.log(\"Invite review?\", props.config?.reviewUrl, props.offer)\r\n if (props.shipment.status === \"Delivered\")\r\n if (props.offer.status !== \"Rated\")\r\n return null;\r\n else\r\n return \r\n Thank you for your feedback\r\n ;\r\n\r\n if (props.shipment.status === \"OFD\" || props.shipment.status === \"OFDOffSchedule\" || props.shipment.status === \"DriverNear\") {\r\n\r\n var offer = (props.offer.offers.length > 0 && props.offer.offers[0]) || null;\r\n\r\n if (props.isOnWayIncorrectDay(offer, props.shipment))\r\n return ;\r\n\r\n if (props.isOnWayCorrectDay(offer, props.shipment))\r\n return \r\n On its way for delivery
\r\n \r\n )} />;\r\n }\r\n\r\n if (props.offer.status === \"ConfirmChange\" && props.offer.offers.length > 0)\r\n return \r\n Your agreed delivery date
\r\n \r\n } />;\r\n\r\n if (props.offer.status === \"Ordered\")\r\n return ;\r\n\r\n if (props.offer.status === 'Expired')\r\n return SORRY PREVIOUS OFFERS HAVE EXPIRED
\r\n We'll be in touch shortly with options for your delivery} />;\r\n\r\n if (props.offer.status === \"Rebook\" || props.offer.status === \"ClearedOffer\")\r\n return SORRY SOMETHING HAS GONE WRONG
\r\n We'll be in touch shortly with options for your delivery} />;\r\n\r\n if (props.shipment.status === \"PartialPOD\")\r\n return ;\r\n\r\n if (props.offer.status.startsWith(\"Offer\"))\r\n return null;\r\n\r\n if (props.offer.status === \"Accepted\")\r\n return \r\n Your agreed delivery date
\r\n \r\n } />;\r\n\r\n if (props.offer.status === \"Declined\")\r\n return TIME DOESN'T SUIT
\r\n We will be in touch with a delivery date} />;\r\n\r\n //default:\r\n return ;\r\n}\r\n\r\nfunction OfferShipmentDetails(props) {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {props.shipment.connote}\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst ContactButton = (props) => {\r\n\r\n const config = useConfig();\r\n\r\n if (props.commercialRestrictions) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nclass Offer extends Component {\r\n static displayName = Offer.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n const { match: { params } } = props;\r\n this.state = {\r\n notFound: false,\r\n shipment: {\r\n connote: \"\",\r\n status: \"\",\r\n from: {},\r\n to: {},\r\n atl_permitted: false,\r\n atl_provided: \"No\"\r\n },\r\n offer: {\r\n status: \"\",\r\n offers: [{}]\r\n },\r\n loggedin: false,\r\n location: {},\r\n shipmentStates: [\r\n { label: \"Ordered\" }, { label: \"PickedUp\" },\r\n { label: \"OFD\" }, { label: \"OFDOffSchedule\" }, { label: \"DriverNear\" }, { label: \"Delivered\" },\r\n { label: \"PartialPOD\" }, { label: \"ManualPOD\" }, { label: \"Rejected\" }, { label: \"Cancelled\" }\r\n ],\r\n offerStates: [\r\n { label: \"Offer1\" }, { label: \"Declined\" }, { label: \"Accepted\" }, { label: \"Contact\" },\r\n { label: \"Offer2\" }, { label: \"Change\" }, { label: \"Rebook\" }, { label: \"Expired\" }, { label: \"Ordered\" }\r\n ],\r\n enableReceiverInstructions: false,\r\n params: params || { jobid: null },\r\n qs: queryString.parse(this.props.location.search),\r\n config: {\r\n termsAndConditions: {\r\n // default but will be overriden by config\r\n authorityToLeaveUrl: \"http://www.fliway.com/media/5413/fliway-termsandconditions-dec17.pdf\"\r\n }\r\n },\r\n busy: true,\r\n savingReceiverInstructions: false\r\n };\r\n\r\n this.myRef = React.createRef();\r\n }\r\n\r\n async componentDidMount() {\r\n let userTask = this.getUser();\r\n let configTask = ConfigService.getConfig();\r\n await this.loadOffer();\r\n let user = await userTask;\r\n let config = await configTask;\r\n if (user) {\r\n this.setState({ loggedin: true });\r\n }\r\n console.log('config!', config);\r\n this.setState({ config: { ...this.state.config, ...config } });\r\n }\r\n\r\n getUser = async () => {\r\n if (!this.authService)\r\n this.authService = await AuthService.getInstance();\r\n return await this.authService.getUser();\r\n }\r\n\r\n async loadOffer() {\r\n let offer;\r\n if (this.state.params.jobid === \"testing\")\r\n offer = {\r\n shipment: {\r\n connote: \"TESTING\",\r\n status: 0,\r\n from: { line1: \"Somewhere\" },\r\n to: {},\r\n atl_permitted: true,\r\n atl_requested: false,\r\n atl_provided: \"No\",\r\n status: \"Delivered\",\r\n rate_my_delivery: true\r\n \r\n },\r\n offer: {\r\n offers: [{ start_time: new Date() }],\r\n status: \"Rated\",\r\n invite_review: true\r\n }\r\n };\r\n else\r\n offer = await (await window.fetch('api/offer/' + this.state.params.jobid)).json();\r\n this.setOffer(offer);\r\n this.setState({ busy: false });\r\n return offer;\r\n }\r\n\r\n setOffer(newOffer) {\r\n console.log('offer details', newOffer);\r\n if (newOffer.location) {\r\n this.setState({ location: newOffer.location });\r\n }\r\n if (newOffer.shipment) {\r\n this.setState({ shipment: newOffer.shipment });\r\n // var newStatus = newOffer.shipment.shipment.status;\r\n // // if new status is drivernear, but it's not trackable - treat like OFD off schedule (?)\r\n // //if(newStatus === \"DriverNear\" && !this.isTrackable(newStatus, newOffer.location))\r\n // // newStatus = \"OFDOffSchedule\";\r\n // this.setState({shipment: {...shipment, status: newStatus}});\r\n }\r\n if (newOffer.offer) {\r\n this.setState({ offer: newOffer.offer });\r\n }\r\n else if (newOffer.status === 404) {\r\n this.setState({\r\n notFound: true\r\n });\r\n }\r\n }\r\n\r\n handleAction = async (newStatus, seloffer) => {\r\n //console.log('Attempting to set status on offer...', this.state.offer.offers[0], newStatus);\r\n seloffer = seloffer || this.state.offer.offers[0];\r\n seloffer.status = newStatus;\r\n const offer = await this.postData(`api/offer/${this.state.params.jobid}`, seloffer);\r\n this.setOffer(offer);\r\n }\r\n\r\n startAtl = async () => {\r\n try {\r\n let user = \"Anon\";\r\n if (this.state.shipment.atl_provided != \"Customer\") {\r\n user = await this.authService.getAuthenticatedUser(true);\r\n }\r\n if (user) {\r\n // now set the state to confirm Atl (with instruction if needed) \r\n this.setState({ shipment: { ...this.state.shipment, confirmAtl: true } });\r\n this.myRef.current.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }\r\n catch (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n\r\n giveAtl = async () => {\r\n let user;\r\n try {\r\n if (this.state.shipment.atl_provided != \"Customer\") {\r\n //check if we're logged in\r\n user = await this.authService.getAuthenticatedUser(true);\r\n }\r\n }\r\n catch (err) {\r\n console.error('Please login (or register) to do this.');\r\n return;\r\n }\r\n this.props.setGlobalBusy();\r\n var offer = await this.postData(`api/offer/${this.state.params.jobid}/atl` + (!user ? \"/instruction\" : \"\"),\r\n { instruction: this.state.shipment.atlInstruction }, user?.access_token);\r\n console.log('got offer back from atl endpoint', offer);\r\n // atl button should accept first offer too (but only if status is an offer)\r\n if (this.state.offer.status.startsWith(\"Offer\"))\r\n await this.handleAction(\"Accepted\", this.state.offer.offers[0]);\r\n else\r\n this.setOffer(offer);\r\n this.props.clearGlobalBusy();\r\n }\r\n\r\n saveInstructions = async (instructions) => {\r\n\r\n this.setState({ savingReceiverInstructions: true });\r\n\r\n var offer = await this.postData(\r\n `api/offer/${this.state.params.jobid}/receiverInstructions`,\r\n {\r\n instructions: instructions\r\n }\r\n );\r\n\r\n console.log('got offer back from receiver instructions endpoint', offer);\r\n\r\n this.setOffer(offer);\r\n\r\n this.setState({ enableReceiverInstructions: this.state.shipment.receiverInstructions === null });\r\n\r\n this.setState({ savingReceiverInstructions: false });\r\n };\r\n\r\n postData(url = '', data = {}, idToken = null) {\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n if (idToken)\r\n headers.append('Authorization', `Bearer ${idToken}`);\r\n\r\n return fetch(url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n headers: headers,\r\n redirect: 'follow',\r\n referrer: 'no-referrer',\r\n body: JSON.stringify(data),\r\n })\r\n .then(response => {\r\n if (!response.ok) {\r\n if (response.status == \"409\") {\r\n alert(\"Sorry this is out of date; Tap to refresh.\");\r\n return this.loadOffer();\r\n }\r\n else {\r\n alert(\"Error: \" + response.status);\r\n return this.state.offer;\r\n }\r\n }\r\n return response.json();\r\n });\r\n }\r\n\r\n \r\n\r\n isTrackable(shipment, location) {\r\n //console.log('checking trackability', shipment.status, location);\r\n if (!shipment.status || !location || shipment.status !== \"DriverNear\")\r\n return false;\r\n if (location.message && location.message !== \"GPS Stale\") {\r\n //console.log(`not trackable because: ${location.message}`);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n isOnWayCorrectDay(offer, shipment) {\r\n var currentDate = new Date();\r\n currentDate.setHours(0, 0, 0, 0);\r\n var offerDate = new Date(offer.start_time);\r\n offerDate.setHours(0, 0, 0, 0);\r\n // Driver near has to be on the same day, OFD just has to be before or on the same day\r\n if ((shipment.status === \"DriverNear\" && currentDate.getTime() === offerDate.getTime())\r\n || (shipment.status === \"OFD\" && currentDate.getTime() <= offerDate.getTime()))\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n isOnWayIncorrectDay(offer, shipment) {\r\n\r\n if (shipment.status === \"OFDOffSchedule\" || offer === null)\r\n return true;\r\n\r\n var currentDate = new Date();\r\n currentDate.setHours(0, 0, 0, 0);\r\n var offerDate = new Date(offer.start_time);\r\n offerDate.setHours(0, 0, 0, 0);\r\n // OFD incorrect day\r\n if (shipment.status === \"OFD\" && currentDate.getTime() > offerDate.getTime())\r\n return true;\r\n\r\n // driver near but incorrect day\r\n if (shipment.status === \"DriverNear\" && (currentDate.getTime() !== offerDate.getTime()))\r\n return true\r\n return false;\r\n }\r\n\r\n getActionArea() {\r\n if (this.state.shipment.status === \"Cancelled\")\r\n return null;\r\n\r\n if (this.state.shipment.status === \"Rejected\")\r\n return null;\r\n\r\n if (this.state.shipment.status === \"ManualPOD\")\r\n return null;\r\n\r\n if (this.state.shipment.status === \"Delivered\")\r\n if (this.state.offer.status === \"Rated\" || this.state.shipment.rate_my_delivery !== true)\r\n return null\r\n else\r\n return { this.props.history.push('../../r/' + this.state.params.jobid) }} />;\r\n\r\n if (this.state.shipment.status === \"OFD\" || this.state.shipment.status === \"OFDOffSchedule\" || this.state.shipment.status === \"DriverNear\") {\r\n var offer = (this.state.offer.offers.length > 0 && this.state.offer.offers[0]) || null;\r\n\r\n if (this.isOnWayIncorrectDay(offer, this.state.shipment.status, this.state.offer.status))\r\n return null;\r\n\r\n if (this.isOnWayCorrectDay(offer, this.state.shipment.status, this.state.offer.status))\r\n return null;\r\n }\r\n\r\n if (this.state.offer.status === \"Ordered\")\r\n return null;\r\n\r\n if (this.state.offer.status === 'Expired')\r\n return null;\r\n\r\n if (this.state.offer.status === \"Rebook\" || this.state.offer.status === \"ClearedOffer\")\r\n return null;\r\n\r\n if (this.state.shipment.status === \"PartialPOD\")\r\n return null;\r\n\r\n if (this.state.offer.status.startsWith(\"Offer\"))\r\n return \r\n {this.state.offer.offers.map((value, index) => {\r\n return
\r\n
1 ? \" small\" : \"\")}>\r\n \r\n
\r\n \r\n 1 ? \"small\" : \"\")} iconName=\"icon-button-tick\" actionText=\"Accept\" header=\"Tap here to\" highlight\r\n onClick={() => this.handleAction(\"Accepted\", value)} ajaxInProgress={this.props.busy}\r\n footer={this.state.offer.offers.length <= 1 ? your proposed
delivery date
: this delivery date} />\r\n
;\r\n })}\r\n
;\r\n\r\n if (this.state.offer.status === \"Accepted\")\r\n return null;\r\n\r\n if (this.state.offer.status === \"Declined\")\r\n return null;\r\n\r\n //default:\r\n return null;\r\n }\r\n\r\n // check if any additional services\r\n showAdditionalServices = () => {\r\n if (this.state.offer.status === \"ConfirmChange\")\r\n return false;\r\n\r\n // if this is true we will be showing the additional options button so don't want the addtional service button\r\n if ((this.state.offer.status === \"Offer1\" || this.state.offer.status === \"Ordered\" || this.state.offer.status === 'Expired') &&\r\n (this.state.shipment.status !== 'OFD' && this.state.shipment.status !== 'OFDOffSchedule') &&\r\n ((this.state.shipment.allow_redirect === true) || (this.state.shipment.additionalServices && this.state.shipment.additionalServices.length > 0)))\r\n return false;\r\n\r\n let map = this.state.config?.maps?.availableUntilToShipmentStatus;\r\n let addSvcs = this.state.shipment.additionalServices;\r\n console.log('checking additional services', map, addSvcs);\r\n if (addSvcs?.length > 0 && map?.length > 0 && this.state.offer.status !== \"Offer2\") {\r\n // check if any additional services are selectable\r\n return addSvcs.some((svc) => {\r\n\r\n // and the shipment is in a state which allows selecting of this additional service\r\n let matchingMap = map.find(m => m.until === svc.available_until);\r\n console.log('matching map for service', svc, matchingMap);\r\n if (matchingMap?.states.some(s => s === this.state.shipment.status) || svc.paid_by === 'S' || svc.paid_by === 'R')\r\n return true;\r\n\r\n });\r\n }\r\n return false;\r\n };\r\n\r\n async startRedirect() {\r\n //check if we're logged in\r\n try {\r\n await this.authService.getAuthenticatedUser(true);\r\n this.props.history.push('../../rd/' + this.state.params.jobid)\r\n }\r\n catch (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n\r\n receiverInstructions_onClick = () => {\r\n this.setState({ enableReceiverInstructions: !this.state.enableReceiverInstructions });\r\n };\r\n\r\n render() {\r\n return (\r\n this.state.notFound === true ?\r\n
\r\n
My Delivery: NOT FOUND
\r\n
Shipment Not Found
\r\n
:\r\n
\r\n {\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n { this.setState({ shipment: { ...this.state.shipment, atl_requested: !this.state.shipment.atl_requested } }); }}>\r\n \r\n
\r\n
\r\n }\r\n
\r\n {this.state.busy &&
Loading...
}\r\n {!this.state.busy &&\r\n
\r\n \r\n {(this.state.offer.offers.length <= 1 || this.state.offer.status !== 'Offer2') &&\r\n \r\n }\r\n
\r\n
\r\n {this.getActionArea()}\r\n
\r\n this.setState({ shipment: { ...this.state.shipment, ...e } })}\r\n busy={this.props.busy} giveAtl={this.giveAtl}>\r\n \r\n
\r\n
\r\n {(this.state.shipment.status === \"Ordered\" || this.state.shipment.status === \"PickedUp\") &&\r\n \r\n {this.state.shipment.allowReceiverInstructions && (this.state.shipment.receiverInstructions === null) &&\r\n \r\n \r\n }\r\n {this.state.enableReceiverInstructions &&\r\n this.setState({ enableReceiverInstructions: false })}\r\n saveInstructions={this.saveInstructions}\r\n />\r\n }\r\n {(this.state.offer.status.startsWith(\"Offer\") && this.state.offer.offers.length <= 1 || this.state.offer.status === \"ConfirmChange\") &&\r\n this.handleAction(this.state.offer.status === \"Offer2\" ? \"Contact\" : \"Declined\")}\r\n actionText=\"Time not suitable?\" footer=\"Tap for new date and time\" />\r\n }\r\n {(this.state.offer.status === \"ConfirmChange\" && this.state.shipment.allow_redirect === true) &&\r\n this.startRedirect()}\r\n actionText=\"Change Delivery Address\" footer=\"Deliver elsewhere. Additional charges may apply\" />}\r\n {((this.state.offer.status === \"Offer1\" || this.state.offer.status === \"Ordered\" || this.state.offer.status === 'Expired') && (this.state.shipment.allow_redirect === true ||\r\n (this.state.shipment.additionalServices && this.state.shipment.additionalServices.length > 0))) &&\r\n { this.props.history.push('../../ao/' + this.state.params.jobid) }}\r\n actionText=\"Additional Options\" footer=\"Change delivery address, other services\" />\r\n }\r\n {this.state.offer.status === \"Accepted\" && this?.state?.shipment?.commercialRestrictions !== true &&\r\n \r\n this.setState({ offer: { ...this.state.offer, status: \"ConfirmChange\" } })} footer=\"Tap for new date and time\" />\r\n \r\n }\r\n {(this.state.offer.status.startsWith(\"Offer\") || this.state.offer.status === \"Accepted\") &&\r\n this.handleAction(\"Contact\")} busy={this.props.busy} commercialRestrictions={this.state?.shipment?.commercialRestrictions\r\n } />\r\n }\r\n }\r\n {this.showAdditionalServices() &&\r\n { this.props.history.push('../../as/' + this.state.params.jobid) }}\r\n actionText=\"Additional Services\" footer=\"Tap for additional services\" />}\r\n {(this.isTrackable(this.state.shipment, this.state.location)) &&\r\n { this.props.history.push('../../t/' + this.state.params.jobid) }} />\r\n }\r\n {(this.state.loggedin === true && this.state.offer.status !== \"ConfirmChange\") &&\r\n { this.props.history.push('../../shipments') }} footer=\"Return to my jobs\" />\r\n }\r\n {(this.state.offer.status === \"ConfirmChange\") &&\r\n this.setState({ offer: { ...this.state.offer, status: \"Accepted\" } })} footer=\"Return to offer\" />\r\n }\r\n
\r\n
\r\n \r\n
}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(Offer);\r\n","export default class UtilService {\r\n static roundMoneyTo(n, digits) {\r\n var negative = false;\r\n if (digits === undefined) {\r\n digits = 0;\r\n }\r\n if( n < 0) {\r\n negative = true;\r\n n = n * -1;\r\n }\r\n var multiplicator = Math.pow(10, digits);\r\n n = parseFloat((n * multiplicator).toFixed(11));\r\n n = (Math.round(n) / multiplicator).toFixed(digits);\r\n if( negative ) { \r\n n = (n * -1).toFixed(digits);\r\n }\r\n return n;\r\n }\r\n}","import React, { Component } from 'react';\r\nimport AppButton from './AppButton';\r\nimport { Address } from './Address'\r\nimport { SpeechBubble } from './SpeechBubble'\r\nimport queryString from 'query-string'\r\nimport AuthService from \"../services/AuthService\";\r\nimport UtilService from \"../services/UtilService\";\r\n\r\nexport class PaymentResult extends Component {\r\n static displayName = PaymentResult.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n const { match: { params, search } } = this.props;\r\n this.state = {\r\n loaded: false,\r\n notFound: false,\r\n to: { \r\n Address: {\r\n Id: 0, \r\n Addr: null,\r\n address_type: {description: \"\", value: \"\"},\r\n suburb: { name: \"\", pcode: \"\", depot: { code:\"\", name:\"\"} }, \r\n Address1: \"\", \r\n Address2: \"\",\r\n Name: \"\"\r\n },\r\n Contact: {\r\n Name: \"\",\r\n Mobile : \"\",\r\n Email: \"\"\r\n }, \r\n Instruction: \"\"\r\n },\r\n shipment: {\r\n connote: \"\",\r\n status: 0,\r\n from: {},\r\n to: {}\r\n },\r\n offer: {\r\n offers: [{}] \r\n },\r\n AdditionalServices: [],\r\n token: (params || {jobid: null}).jobid,\r\n params: params || {jobid: null},\r\n busy: true,\r\n authenticatedUser: null,\r\n RedirectionServices: []\r\n };\r\n }\r\n\r\n async componentDidMount() { \r\n const qs = queryString.parse(this.props.location.search); \r\n var offerTask = this.loadOffer();\r\n var getResult = this.loadResult(qs.s);\r\n await offerTask;\r\n await getResult;\r\n\r\n this.authService = await AuthService.getInstance();\r\n }\r\n\r\n async loadResult(paymentSessionId){\r\n // if there's a session id load the payment request - the paid items are the ones that had a price provided it was successful\r\n // else get the list of possible additional services for this offer\r\n if(paymentSessionId != null) {\r\n var sessionResult = await (await window.fetch(`api/offer/${this.state.params.jobid}/paymentdetail/${paymentSessionId}`)).json(); \r\n console.log('sessionResult', sessionResult);\r\n this.setState({paymentResult: sessionResult.paymentResult});\r\n if(sessionResult.fmeError) \r\n this.setState({fmeError: sessionResult.fmeError});\r\n // when there is only a single element it is returned as a single object not array - something to do with Json to XML and back\r\n var services = (sessionResult.services && sessionResult.services.length) ? sessionResult.services : [];\r\n var redirectionServices = (sessionResult.redirectionServices && sessionResult.redirectionServices.length) ? sessionResult.redirectionServices : [];\r\n this.setState({AdditionalServices: services || [], RedirectionServices: redirectionServices, acceptTerms: true});\r\n }\r\n }\r\n\r\n async loadOffer() {\r\n let offer = await (await window.fetch('api/offer/' + this.state.params.jobid)).json();\r\n this.setOffer(offer);\r\n this.setState({busy: false});\r\n return offer;\r\n }\r\n\r\n redirectPrice = () => {\r\n return this.state.RedirectionServices.reduce && this.state.RedirectionServices.reduce((sum, service) => sum + parseFloat(service.priceInclGST),0.0);\r\n }\r\n\r\n additionalServicePrice = () => {\r\n return this.state.AdditionalServices.reduce && this.state.AdditionalServices.reduce((sum, service) => sum + (service.justpaid === true ? parseFloat(service.priceInclGST)||0 : 0.0),0.0);\r\n }\r\n\r\n totalPrice = () => {\r\n return `$${UtilService.roundMoneyTo((this.additionalServicePrice() + this.redirectPrice()), 2)}`;\r\n }\r\n\r\n setOffer(newOffer) {\r\n //console.log('offer details', newOffer);\r\n if (newOffer.location){\r\n this.setState({location: newOffer.location});\r\n }\r\n if (newOffer.shipment){\r\n this.setState({shipment: newOffer.shipment});\r\n }\r\n if (newOffer.offer){\r\n this.setState({offer: newOffer.offer});\r\n }\r\n else if (newOffer.status === 404) {\r\n this.setState({\r\n notFound: true\r\n });\r\n }\r\n }\r\n\r\n postData(url = '', data = {}, idToken = null) {\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n if(idToken)\r\n headers.append('Authorization', `Bearer ${idToken}`);\r\n\r\n return fetch(url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n headers: headers,\r\n redirect: 'follow',\r\n referrer: 'no-referrer',\r\n body: JSON.stringify(data),\r\n })\r\n .then(response => {\r\n if(!response.ok) {\r\n if(response.status == \"409\"){\r\n alert(\"Sorry this is out of date; Tap to refresh.\");\r\n return this.loadOffer();\r\n }\r\n if(response.status == \"401\"){\r\n alert(\"Please login or register to do this.\");\r\n return null;\r\n }\r\n else{\r\n alert(\"Error: \" + response.statusText);\r\n }\r\n }\r\n return response.json();\r\n });\r\n }\r\n\r\n getPaymentMessage() {\r\n if(this.state.paymentResult === \"approved\"){ \r\n if(this.state.fmeError) {\r\n return UNEXPECTED ERROR
\r\n Sorry there was an error processing your change of address.
Please contact us.
} />;\r\n }\r\n else if(this.totalPrice() === \"$0.00\") {\r\n if(this.state.AdditionalServices && this.state.AdditionalServices.length > 0) {\r\n return CHANGE CONFIRMED
\r\n Thanks, we've added your additional services} />; \r\n } \r\n return CHANGE CONFIRMED
\r\n Thanks, we've got your new delivery address} />;\r\n }\r\n else{\r\n return PAYMENT SUCCESSFUL
\r\n Thank you for your payment} />;\r\n }\r\n }\r\n else if(this.state.paymentResult != null && this.state.paymentResult !== \"approved\")\r\n return PAYMENT FAILED
\r\n Sorry something went wrong with your payment. Please try again.} />;\r\n else\r\n return
;\r\n }\r\n\r\n render() {\r\n return (\r\n this.state.notFound === true ?\r\n
\r\n
My Delivery: NOT FOUND
\r\n
Shipment Not Found
\r\n
:\r\n
\r\n
My Delivery: {this.totalPrice() === \"$0.00\" ? \"CONFIRMED\" : \"PAYMENT\"}
\r\n {this.state.busy &&
Loading...
}\r\n {!this.state.busy &&\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.getPaymentMessage()}\r\n {(this.state.RedirectionServices && this.state.RedirectionServices.length > 0 && this.redirectPrice() >0) && \r\n
\r\n
Change Address Costs
\r\n \r\n \r\n {this.state.RedirectionServices.map((rc) => \r\n \r\n \r\n \r\n )}\r\n \r\n
{rc.description}{(rc.priceInclGST && '$' + UtilService.roundMoneyTo(parseFloat(rc.priceInclGST||0), 2))}
\r\n
}\r\n {(this.state.AdditionalServices && this.state.AdditionalServices.length > 0) && \r\n
\r\n
Additional Services
\r\n \r\n \r\n {this.state.AdditionalServices.map((as) => \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
{as.description}{((as.justpaid) && ('$' + UtilService.roundMoneyTo(parseFloat(as.priceInclGST||0),2)))}
\r\n
}\r\n
\r\n {(this.redirectPrice() > 0 || (this.state.AdditionalServices && this.state.AdditionalServices.length > 0)) &&\r\n
Total Price (incl. GST)
{this.totalPrice()} 
}\r\n
\r\n
\r\n
\r\n { this.props.history.push('/shipments') }} footer=\"Return to your jobs\"/>\r\n
\r\n
\r\n
\r\n
}\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport AppButton from './AppButton';\r\nimport { Address } from './Address'\r\nimport queryString from 'query-string'\r\nimport AuthService from \"../services/AuthService\";\r\nimport './AdditionalServices.scss';\r\nimport ConfigService from \"../services/ConfigService\";\r\nimport UtilService from \"../services/UtilService\";\r\n\r\nexport class AdditionalServices extends Component {\r\n static displayName = AdditionalServices.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n const { match: { params, search } } = this.props;\r\n this.state = {\r\n notFound: false,\r\n shipment: {\r\n connote: \"\",\r\n status: 0,\r\n from: {},\r\n to: {},\r\n additionalServices: []\r\n },\r\n offer: {\r\n offers: [{}]\r\n },\r\n config: {\r\n termsAndConditions: {\r\n // default but will be overriden by config\r\n additionalServicesUrl: \"http://www.fliway.com/media/5413/fliway-termsandconditions-dec17.pdf\"\r\n }\r\n }, \r\n acceptTerms: false,\r\n params: params || {jobid: null},\r\n busy: true\r\n };\r\n }\r\n\r\n async componentDidMount() { \r\n const qs = queryString.parse(this.props.location.search); \r\n var offerTask = this.loadOffer(); \r\n let configTask = ConfigService.getConfig();\r\n await offerTask; \r\n let config = await configTask;\r\n this.setState({loaded: true, config: {...this.state.config, ...config}}); \r\n this.loadServices(qs.s);\r\n this.authService = await AuthService.getInstance();\r\n }\r\n\r\n visibleAdditionalServices = () => {\r\n let map = this.state.config?.maps?.availableUntilToShipmentStatus; \r\n return this.state.shipment?.additionalServices?.filter(svc => {\r\n if(svc.selected && svc.paid_by)\r\n return true;\r\n else if(svc.selected === false){\r\n // and the shipment is in a state which allows selecting of this additional service\r\n let matchingMap = map.find(m=>m.until===svc.available_until);\r\n console.log('matching map for service',svc, matchingMap);\r\n if(matchingMap?.states.some(s=>s===this.state.shipment.status))\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n loadServices = () => {\r\n let services = this.visibleAdditionalServices();\r\n this.setState({shipment: {...this.state.shipment, additionalServices: services, acceptTerms: true}});\r\n }\r\n\r\n async loadOffer() {\r\n let offer;\r\n if(this.state.params.jobid === \"testing\") \r\n offer = {shipment: {\r\n connote: \"TESTING\",\r\n from: { line1: \"Fliway Internal Billing\" },\r\n to: { line1: \"Quentin Bennett\", line2: \"77 Westney Road\", line3: \"Mangere\"}\r\n },\r\n offer: {\r\n offers: [{start_time: new Date()}],\r\n }\r\n }; \r\n else\r\n offer = await (await window.fetch('api/offer/' + this.state.params.jobid)).json();\r\n this.setOffer(offer);\r\n this.setState({busy: false});\r\n return offer;\r\n }\r\n\r\n startPayment = async () => { \r\n // check if we're logged in\r\n let user;\r\n try{\r\n user = await this.authService.getAuthenticatedUser(true);\r\n }\r\n catch(err) {\r\n console.error('Please login (or register) to do this.');\r\n return;\r\n }\r\n\r\n // at least one service must be selected that's not already paid\r\n if(this.state.shipment.additionalServices.reduce((sum, service) => sum + (service.selected === true && !service.justpaid && !service.paid_by ? 1 : 0),0) <= 0){\r\n alert(\"Please select at least one service\");\r\n return;\r\n }\r\n \r\n if(this.state.acceptTerms !== true){\r\n alert(\"Please accept T&Cs before paying\");\r\n return;\r\n }\r\n const paymentDetails = await this.postData('api/offer/' + this.state.params.jobid + '/startpayment', {shipment: this.state.shipment, isRedirect: false}, user.access_token);\r\n if(paymentDetails) {\r\n console.log('payment page details', paymentDetails);\r\n window.location.href = paymentDetails.paymentPageUrl;\r\n }\r\n }\r\n\r\n changeAdditionalService = (selectedCode) => {\r\n this.setState({\r\n // Don't mutate state\r\n shipment: {...this.state.shipment, additionalServices: this.state.shipment.additionalServices.map(as => ({\r\n ...as,\r\n // Toggle the one that's been clicked \r\n selected: (as.code === selectedCode) ? !as.selected : as.selected\r\n }))} \r\n });\r\n }\r\n\r\n toggleTCs = () => {\r\n this.setState({\r\n acceptTerms: !this.state.acceptTerms\r\n });\r\n }\r\n\r\n totalPrice = () => { \r\n var total = this.state.shipment.additionalServices.reduce((sum, service) => sum + (service.selected === true && !service.justpaid && !service.paid_by ? parseFloat(service.priceInclGST)||0 : 0.0),0.0);\r\n return `$${UtilService.roundMoneyTo(total, 2)}`; \r\n }\r\n\r\n setOffer(newOffer) {\r\n //console.log('offer details', newOffer);\r\n if (newOffer.location){\r\n this.setState({location: newOffer.location});\r\n }\r\n if (newOffer.shipment){\r\n this.setState({shipment: newOffer.shipment});\r\n }\r\n if (newOffer.offer){\r\n this.setState({offer: newOffer.offer});\r\n }\r\n else if (newOffer.status === 404) {\r\n this.setState({\r\n notFound: true\r\n });\r\n }\r\n }\r\n\r\n postData(url = '', data = {}, idToken = null) {\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n if(idToken)\r\n headers.append('Authorization', `Bearer ${idToken}`);\r\n\r\n return fetch(url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n headers: headers,\r\n redirect: 'follow',\r\n referrer: 'no-referrer',\r\n body: JSON.stringify(data),\r\n })\r\n .then(response => {\r\n if(!response.ok) {\r\n if(response.status == \"409\"){\r\n alert(\"Sorry this is out of date; Tap to refresh.\");\r\n return this.loadOffer();\r\n }\r\n if(response.status == \"401\"){\r\n alert(\"Please login or register to do this.\");\r\n return null;\r\n }\r\n else{\r\n alert(\"Error: \" + response.statusText);\r\n }\r\n }\r\n return response.json();\r\n });\r\n }\r\n\r\n render() {\r\n\r\n var hasAvailableSelection = this.state.shipment.additionalServices.some((as) => !as.justpaid && !as.paid_by);\r\n\r\n return (\r\n this.state.notFound === true ?\r\n
\r\n
My Delivery: NOT FOUND
\r\n
Shipment Not Found
\r\n
:\r\n
\r\n
My Delivery: ADDITIONAL SERVICES
\r\n {this.state.busy &&
Loading...
}\r\n {!this.state.busy &&\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Additional Services
\r\n \r\n \r\n {this.state.shipment.additionalServices.map((as) => \r\n \r\n \r\n \r\n \r\n )}\r\n {hasAvailableSelection &&\r\n \r\n \r\n \r\n \r\n }\r\n \r\n
this.changeAdditionalService(as.code)}/>{as.description}{(as.priceInclGST !== null && !as.paid_by && !as.justpaid) && '$' + UtilService.roundMoneyTo(parseFloat(as.priceInclGST||0.0), 2)}
this.toggleTCs()} />\r\n Acceptance of Additional Services Terms & Conditions\r\n \r\n
\r\n
\r\n
\r\n
Total Price (incl. GST)
{this.totalPrice()} 
\r\n
\r\n
\r\n
\r\n {hasAvailableSelection && \r\n {this.totalPrice() !== \"$0.00\" ?\r\n :\r\n }\r\n }\r\n { this.props.history.push(`../../${(this.state.offer.status ===\"Accepted\" || this.state.offer.status ===\"Contact\" || this.state.shipment.status === 'OFD' || this.state.shipment.status === 'OFDOffSchedule' || this.state.shipment.status === 'Delivered') ? 'o': 'ao'}/` + this.state.params.jobid) }} footer=\"Return to options\"/>\r\n
\r\n
\r\n
\r\n
}\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport AppButton from './AppButton';\r\nimport { Address } from './Address'\r\nimport AuthService from \"../services/AuthService\";\r\nimport './AdditionalOptions.scss';\r\n\r\nexport class AdditionalOptions extends Component {\r\n static displayName = AdditionalOptions.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n const { match: { params } } = this.props;\r\n this.state = {\r\n notFound: false,\r\n shipment: {\r\n connote: \"\",\r\n from: {},\r\n to: {}\r\n },\r\n offer: {\r\n offers: [{}] \r\n },\r\n params: params || {jobid: null},\r\n busy: true\r\n };\r\n }\r\n\r\n async componentDidMount() { \r\n this.authService = await AuthService.getInstance(); \r\n await this.loadOffer();\r\n await this.loadServices(); \r\n }\r\n\r\n loadServices = async () => {\r\n //console.log('Loading Services...');\r\n var services = this.state.shipment.additionalServices;\r\n //console.log('Additional services', services, services.length);\r\n this.setState({shipment: {...this.state.shipment, additionalServices: services}}); \r\n }\r\n\r\n async loadOffer() {\r\n let offer;\r\n if(this.state.params.jobid === \"testing\") \r\n offer = {shipment: {\r\n connote: \"TESTING\",\r\n status: \"DriverNear\",\r\n from: { line1: \"Fliway Internal Billing\" },\r\n to: { line1: \"Quentin Bennett\", line2: \"77 Westney Road\", line3: \"Mangere\"}\r\n },\r\n offer: {\r\n offers: [{start_time: new Date()}],\r\n status: \"Accepted\" \r\n }\r\n }; \r\n else\r\n offer = await (await window.fetch('api/offer/' + this.state.params.jobid)).json();\r\n this.setOffer(offer);\r\n this.setState({busy: false});\r\n return offer;\r\n }\r\n\r\n setOffer(newOffer) {\r\n //console.log('offer details', newOffer);\r\n if (newOffer.location){\r\n this.setState({location: newOffer.location});\r\n }\r\n if (newOffer.shipment){\r\n this.setState({shipment: newOffer.shipment});\r\n }\r\n if (newOffer.offer){\r\n this.setState({offer: newOffer.offer});\r\n }\r\n else if (newOffer.status === 404) {\r\n this.setState({\r\n notFound: true\r\n });\r\n }\r\n }\r\n\r\n postData(url = '', data = {}, accessToken = null) {\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n if(accessToken)\r\n headers.append('Authorization', `Bearer ${accessToken}`);\r\n\r\n return fetch(url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n headers: headers,\r\n redirect: 'follow',\r\n referrer: 'no-referrer',\r\n body: JSON.stringify(data),\r\n })\r\n .then(response => {\r\n if(!response.ok) {\r\n if(response.status == \"409\"){\r\n alert(\"Sorry this is out of date; Tap to refresh.\");\r\n return this.loadOffer();\r\n }\r\n if(response.status == \"401\"){\r\n alert(\"Please login or register to do this.\");\r\n return null;\r\n }\r\n else{\r\n alert(\"Error: \" + response.statusText);\r\n }\r\n }\r\n return response.json();\r\n });\r\n }\r\n\r\n async startRedirect() {\r\n //check if we're logged in\r\n try{\r\n var user = await this.authService.getAuthenticatedUser(true);\r\n if(user)\r\n this.props.history.push('../../rd/' + this.state.params.jobid)\r\n } \r\n catch(err) {\r\n console.error(err);\r\n return;\r\n } \r\n }\r\n\r\n render() {\r\n return (\r\n this.state.notFound === true ?\r\n
\r\n
My Delivery: NOT FOUND
\r\n
Shipment Not Found
\r\n
:\r\n
\r\n
My Delivery: ADDITIONAL OPTIONS
\r\n {this.state.busy &&
Loading...
}\r\n {!this.state.busy &&\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {this.state.shipment.connote}\r\n
\r\n
\r\n
\r\n
\r\n { this.state.shipment.allow_redirect === true &&\r\n this.startRedirect()} \r\n actionText=\"Change Delivery Address\" footer=\"Deliver elsewhere. Additional charges may apply\"/>}\r\n { (this.state.shipment.additionalServices && this.state.shipment.additionalServices.length > 0) && \r\n { this.props.history.push('../../as/' + this.state.params.jobid) }} \r\n actionText=\"Additional Services\" footer=\"Tap for additional services\"/>}\r\n { this.props.history.push('../../o/' + this.state.params.jobid) }} footer=\"Return to details\"/>\r\n
\r\n
\r\n
}\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { FormGroup, Label, Input } from 'reactstrap';\r\nimport AppButton from './AppButton';\r\nimport StarRatingComponent from 'react-star-rating-component';\r\nimport './ratemydelivery.scss';\r\nimport { SpeechBubble } from './SpeechBubble'\r\n\r\nexport class RateMyDelivery extends Component {\r\n static displayName = RateMyDelivery.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n const { match: { params } } = this.props;\r\n this.dragactive = false;\r\n this.currentX = 0;\r\n this.initialX = 0;\r\n this.xOffset = 0;\r\n this.state = {\r\n shipment: {\r\n connote: \"\"\r\n },\r\n questionnaire: {},\r\n response: {token: params.jobid, questionnaireCode: \"HD\", completedTime: (new Date()).toISOString(), answer: []},\r\n currentQ: {question: \"How likely are you to recommend
Fliway to a friend\"},\r\n currentR: {qText: \"\", rating: 7, comment: \"\"},\r\n currentQIndex: 0,\r\n comment: \"\",\r\n busy: true, \r\n lensstyle: {},\r\n params: params || {jobid: null},\r\n buttonActionText: null,\r\n buttonFooterText: null,\r\n buttonHeaderText: null,\r\n submitting: false\r\n };\r\n\r\n this.handleTouchStart = this.handleTouchStart.bind(this);\r\n this.handleTouchMove = this.handleTouchMove.bind(this);\r\n this.handleTouchEnd = this.handleTouchEnd.bind(this); \r\n this.handleClick = this.handleClick.bind(this); \r\n this.handleLoadOrResize = this.handleLoadOrResize.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.handleChangeAnswer = this.handleChangeAnswer.bind(this); \r\n }\r\n\r\n handleChangeAnswer = (e) => {\r\n let val = e.target.value;\r\n this.setState(prevState => ({currentR: {...prevState.currentR, comment: val}}));\r\n }\r\n\r\n handleClick = (e) => {\r\n //console.log('click/touch', e, e.clientX);\r\n this.currentX = 0; this.initialX = 0; this.xOffset = 0;\r\n this.handleTouchStart({clientX: 0});\r\n this.handleTouchMove({clientX: this.centerOffset + e.clientX, preventDefault: () => {}});\r\n this.handleTouchEnd();\r\n }\r\n\r\n handleLoadOrResize() {\r\n if(this.handleResize)\r\n clearTimeout(this.handleResize);\r\n this.handleResize = setTimeout( () => {\r\n //console.log('handleLoadOrResize');\r\n if(this.state.busy === true)\r\n return;\r\n if(!this.lensElement){\r\n this.lensElement = document.getElementById(\"lens\");\r\n this.starContainer = document.getElementById(\"starContainer\"); \r\n this.stars = document.getElementsByClassName(\"star\");\r\n }\r\n //this.starContainer.style.width = \"auto\";\r\n //this.starContainer.style.width = \"100%\";\r\n this.lensRect = this.lensElement.getBoundingClientRect();\r\n this.minX = -this.lensRect.width/2.0 + this.stars[0].clientLeft + 10;\r\n this.maxX = this.minX + this.starContainer.clientWidth - 20;\r\n this.currentX = 0; this.initialX = 0; this.xOffset = 0;\r\n this.centerOffset = -this.starContainer.offsetLeft - this.lensElement.clientWidth / 2.0;\r\n var selStar = this.stars[this.state.currentR.rating - 1];\r\n var lensInitLeft = this.centerOffset + (selStar.offsetLeft + (selStar.clientWidth / 2.0)) ;\r\n //console.log(`Init minX=${this.minX}, maxX=${this.maxX}, currentX=${this.currentX}, lensInitLeft=${lensInitLeft}`); \r\n this.handleTouchStart({clientX: 0});\r\n // correct alignmnts\r\n for(var i = 0; i < this.stars.length; i++) {\r\n var star = this.stars[i];\r\n var icon = star.firstChild;\r\n icon.style.left = null;\r\n icon.style.top = null;\r\n // now correct the icon horizontal alignment (Argh!) \r\n var starRect = star.getBoundingClientRect(); \r\n var starIconRect = icon.getBoundingClientRect(); \r\n var hadj = `${((1.0*(starRect.left) + starRect.width/2.0) - (1.0*(starIconRect.left) + starIconRect.width/2.0))}px`;\r\n icon.style.left = hadj; \r\n var vadj = `${((((1.0*(starRect.top) + starRect.height/2.0) - (1.0*(starIconRect.top) + starIconRect.height/2.0))) / Math.max(starRect.height,starIconRect.height) * 6)}vmin`;\r\n icon.style.top = vadj;\r\n }\r\n this.handleTouchMove({clientX: lensInitLeft, preventDefault: () => {}});\r\n this.handleTouchEnd();\r\n this.handleResize = null;\r\n }, 100);\r\n }\r\n\r\n handleTouchStart = (e) => { \r\n if (e.type === \"touchstart\") {\r\n this.initialX = e.touches[0].clientX - this.xOffset;\r\n } else {\r\n this.initialX = e.clientX - this.xOffset;\r\n }\r\n this.dragactive = true;\r\n }\r\n\r\n handleTouchMove = (e) => {\r\n const maxScale = 1.7, minScale = 0.5;\r\n if(this.dragactive){ \r\n e.preventDefault(); \r\n if (e.type === \"touchmove\") {\r\n this.currentX = e.touches[0].clientX - this.initialX;\r\n } else {\r\n this.currentX = e.clientX - this.initialX;\r\n }\r\n //console.log(`touch move currentX=${this.currentX}`);\r\n this.currentX = Math.min(this.maxX, Math.max(this.minX,this.currentX));\r\n this.xOffset = this.currentX;\r\n this.setState({lensstyle: {transform: `translate3d(${this.currentX}px, 0, 0`}}); \r\n var width = this.starContainer.clientWidth;\r\n var lensLeft = this.xOffset;\r\n //console.log(`start stars (width=${width}, contLeft=${containerLeft}, currentX=${lensLeft})`);\r\n // Set zoom on the stars\r\n var selectedStar = { i: 0, scale: 0};\r\n for(var i = 0; i < this.stars.length; i++) {\r\n var star = this.stars[i];\r\n var center = this.centerOffset + star.offsetLeft + (star.clientWidth / 2.0);\r\n var factor = Math.abs(2.5 * Math.log(Math.abs(0.2 * (lensLeft - center) / width)));\r\n var scale = Math.min(Math.max(factor * 0.1, minScale), maxScale);\r\n //console.log(`star ${i} (center=${center}, factor=${factor} scale=${scale})`); \r\n star.style.transform = `scale(${scale})`;\r\n star.classList.remove(\"selected\");\r\n if(scale > selectedStar.scale)\r\n selectedStar = { i: i, scale: scale };\r\n }\r\n this.stars[selectedStar.i].classList.add('selected');\r\n } \r\n }\r\n\r\n handleTouchEnd = (e) => {\r\n // calculate the closest star then do a move to set it to that exactly\r\n var selChange = 10000;\r\n var xoffset = this.xOffset;\r\n //console.log(`xoffset=${xoffset}`);\r\n var selRating = 0;\r\n for(var i = 0; i < this.stars.length; i++) {\r\n var star = this.stars[i];\r\n var center = this.centerOffset + star.offsetLeft + (star.clientWidth / 2.0);\r\n //console.log(`star ${i} center=${center}, selChange=${selChange}`);\r\n if(Math.abs(center - xoffset) < Math.abs(selChange)){\r\n selChange = center - xoffset;\r\n selRating = i + 1;\r\n }\r\n }\r\n this.setState(prevState => ({currentR: {...prevState.currentR, rating: selRating}}));\r\n \r\n // Apply correction to move to exact star location \r\n var e = {clientX: (this.initialX + xoffset + selChange - 2), preventDefault: () => {}};\r\n //console.log(`dummy touchmove`, e);\r\n this.handleTouchMove(e);\r\n\r\n this.initialX = this.currentX;\r\n this.dragactive = false;\r\n }\r\n\r\n async componentDidMount() { \r\n window.addEventListener('load', this.handleLoadOrResize);\r\n window.addEventListener('resize', this.handleLoadOrResize); \r\n const { match: { params } } = this.props;\r\n if(params.jobid == \"testing\") {\r\n let q = { questions: [{ question: \"Test Q 1\" }, { question: \"Test Q 2\"}]}; \r\n await this.setState({\r\n shipment: {\r\n connote: \"TESTING\"\r\n },\r\n busy: false,\r\n questionnaire: q\r\n });\r\n console.log(this.state);\r\n this.updateToQuestion(1);\r\n this.handleLoadOrResize();\r\n return;\r\n }\r\n var questionnaire = (await (await window.fetch('api/questionnaire/' + params.jobid)));\r\n \r\n if(questionnaire.status == \"409\"){\r\n alert(\"Sorry you cannot currently rate this. Tap to refresh\");\r\n return this.props.history.push(`../../o/${params.jobid}`);\r\n }\r\n else if(questionnaire.status == \"205\"){\r\n alert(\"Sorry you have already rated this. Tap to refresh\");\r\n return this.props.history.push(`../../o/${params.jobid}`);\r\n }\r\n else if(!questionnaire.ok){\r\n alert(\"Error: \" + questionnaire.statusText);\r\n }\r\n \r\n questionnaire = await questionnaire.json();\r\n console.log('questionnaire found', questionnaire);\r\n // set the questionaire and currentQ\r\n if (questionnaire.shipment){\r\n this.setState({questionnaire: questionnaire.questionnaire, shipment: questionnaire.shipment});\r\n var totalQs = this.state.questionnaire.questions.length;\r\n let pathname = this.props.location.pathname;\r\n this.updateToQuestion(1);\r\n this.props.history.push({\r\n pathname: pathname,\r\n search: `q=1&t=${totalQs}`\r\n });\r\n let firstQ = this.state.questionnaire.questions[0];\r\n let firstR = {qText: firstQ.question, rating: 7, comment: \"\"};\r\n this.setState({currentQ: firstQ, currentR: firstR});\r\n }\r\n else if (questionnaire.status === 404) {\r\n this.setState({\r\n shipment: { connote: \"SHIPMENT NOT FOUND\" }\r\n });\r\n } \r\n this.setState({busy: false});\r\n if(document.readyState === 'complete')\r\n this.handleLoadOrResize();\r\n }\r\n componentDidUpdate(prevProps) {\r\n const query = new URLSearchParams(this.props.history.location.search); \r\n //console.log('query', this.props.history.location.search, prevProps.history.location.search, query.get(\"q\"));\r\n if(query.has(\"q\") && query.get(\"q\") !== \"rated\" && this.state.currentQIndex !== query.get(\"q\")-1) {\r\n this.state.questionnaire.questions[this.state.currentQIndex] = this.state.currentQ;\r\n this.state.response.answer[this.state.currentQIndex] = this.state.currentR;\r\n let newI = query.get(\"q\")-1;\r\n this.updateToQuestion(newI+1);\r\n let newQ = this.state.questionnaire.questions[newI];\r\n let newR = this.state.response.answer[newI] || {qText: newQ.question, rating: 7, comment: \"\"};\r\n this.setState({currentQIndex: newI, currentQ: newQ, currentR: newR});\r\n this.handleLoadOrResize();\r\n }\r\n }\r\n\r\n updateToQuestion(nextQ) {\r\n let totalQs = this.state.questionnaire.questions.length;\r\n if(nextQ < totalQs) {\r\n this.setState({buttonHeaderText: \r\n {`(Question ${nextQ} of ${totalQs})`},\r\n buttonActionText: \"Next\", buttonFooterText: \"\"});\r\n }\r\n else{\r\n this.setState({buttonHeaderText: \"\", buttonActionText: \"Submit Rating\", buttonFooterText: \"Thank you for your feedback\"});\r\n }\r\n }\r\n \r\n async handleSubmit() {\r\n this.state.questionnaire.questions[this.state.currentQIndex] = this.state.currentQ;\r\n this.state.response.answer[this.state.currentQIndex] = this.state.currentR;\r\n var nextQ = this.state.currentQIndex+1;\r\n let totalQs = this.state.questionnaire.questions.length;\r\n this.updateToQuestion(nextQ+1);\r\n //console.log(`currentQIndex=${this.state.currentQIndex}, nextQ=${nextQ}, totalQs=${totalQs}`);\r\n let pathname = this.props.location.pathname;\r\n if(nextQ < totalQs){\r\n let newQ = this.state.questionnaire.questions[nextQ];\r\n let newR = this.state.response.answer[nextQ] || {qText: newQ.question, rating: 7, comment: \"\"};\r\n this.setState({currentQIndex: nextQ, currentQ: newQ, currentR: newR});\r\n this.props.history.push({\r\n pathname: pathname,\r\n search: `q=${nextQ+1}&t=${totalQs}`\r\n });\r\n this.handleLoadOrResize();\r\n }\r\n else {\r\n if (this.state.submitting) {\r\n return;\r\n }\r\n this.state.response.completedTime = (new Date()).toISOString();\r\n this.setState({ submitting: true });\r\n const result = await this.postData('api/questionnaire/' + this.state.params.jobid, this.state.response);\r\n if(!result.ok){\r\n alert(\"Error: \" + result.statusText);\r\n this.setTate({ submitting: false });\r\n }\r\n return this.props.history.push(`../../o/${this.state.params.jobid}`);\r\n }\r\n }\r\n\r\n postData(url = '', data = {}) {\r\n return fetch(url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n redirect: 'follow',\r\n referrer: 'no-referrer',\r\n body: JSON.stringify(data),\r\n })\r\n .then(response => {\r\n if(!response.ok) {\r\n if(response.status == \"409\"){\r\n alert(\"Sorry this is out of date; Tap to refresh.\");\r\n return this.loadOffer();\r\n }\r\n else{\r\n alert(\"Error: \" + response.statusText);\r\n }\r\n }\r\n return response;\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
RATE MY DELIVERY
\r\n {this.state.busy === true &&
Loading...
}\r\n {this.state.rated === true &&
Thank you for your rating...
}\r\n {(this.state.busy !== true && this.state.rated !== true ) &&\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {this.state.shipment.connote}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n } />\r\n
\r\n
\r\n
\r\n
1
\r\n
2
\r\n
3
\r\n
4
\r\n
5
\r\n
6
\r\n
7
\r\n
8
\r\n
9
\r\n
10
\r\n
\r\n
\r\n
\r\n 1 = Not at all likely\r\n 10 = Extremely likely\r\n
\r\n
\r\n \r\n \r\n {\r\n return (\r\n \r\n );}}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n
}\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Layout } from './Layout';\r\nimport AppButton from './AppButton';\r\nimport GoogleMapReact from 'google-map-react';\r\nimport configService from \"../services/ConfigService\";\r\nimport { SpeechBubble } from './SpeechBubble'\r\nimport './trackmydelivery.scss';\r\n\r\nconst FliwayTruckIcon = ({ text }) => (\r\n
\r\n {text}\r\n
\r\n );\r\n\r\nexport class TrackMyDelivery extends Component {\r\n static displayName = TrackMyDelivery.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n const { match: { params } } = this.props;\r\n this.state = {\r\n center: {\r\n lat: -36.877249,\r\n lng: 174.749546\r\n },\r\n iconCenter: {\r\n lat: -36.877249,\r\n lng: 174.749546\r\n },\r\n loading: true,\r\n trackingAvailable: false,\r\n zoom: 15,\r\n maxZoom: 15,\r\n params: params || {jobid: null}\r\n }; \r\n this.updatePosition = this.updatePosition.bind(this);\r\n this.apiIsLoaded = this.apiIsLoaded.bind(this);\r\n this.positionUpdateJob = null;\r\n }\r\n async componentDidMount() { \r\n await this.updatePosition();\r\n let config = await configService.getConfig();\r\n var defaultZoom = 1*(config.mapDefaultZoom || 15);\r\n var maxZoom = 1*(config.mapMaxZoom || 15);\r\n this.setState({loading: false, zoom: defaultZoom, maxZoom: maxZoom});\r\n //console.log(\"setting tracking frequency\", (config.trackingFrequencySeconds || 10)*1000);\r\n this.positionUpdateJob = setInterval(() => {this.updatePosition();}, (config.trackingFrequencySeconds || 10)*1000); \r\n }\r\n\r\n componentWillUnmount(){\r\n clearInterval(this.positionUpdateJob);\r\n }\r\n\r\n async updatePosition() {\r\n let positionData; \r\n \r\n if(this.state.params.jobid === \"testing\") {\r\n positionData = {location: { loc: {}}};\r\n positionData.location.loc[\"@lat\"] = -36.849709;\r\n positionData.location.loc[\"@lon\"] = 174.755880;\r\n }\r\n else {\r\n let trackingData = (await (await window.fetch('api/offer/' + this.state.params.jobid)));\r\n\r\n if(trackingData.status == \"409\"){\r\n alert(\"Sorry you cannot currently track this. Tap to refresh\");\r\n return this.props.history.push(`../../o/${this.state.params.jobid}`);\r\n }\r\n else if(!trackingData.ok){\r\n alert(\"Error: \" + trackingData.statusText);\r\n return;\r\n }\r\n\r\n positionData = await trackingData.json();\r\n console.log(\"positionData\", positionData);\r\n if(positionData.shipment.status && positionData.shipment.status !== \"DriverNear\"){\r\n return this.props.history.push(`../../o/${this.state.params.jobid}`);\r\n }\r\n else if(positionData.location.message && positionData.location.message !== \"\") {\r\n //console.log(`tracking unavilable because: ${positionData.location.message}`);\r\n this.setState({trackingAvailable: false});\r\n return;\r\n }\r\n } \r\n let lat = positionData.location.loc['@lat'];\r\n let lng = positionData.location.loc['@lon'];\r\n this.setState({trackingAvailable: true, iconCenter: {lat: lat, lng: lng}});\r\n //console.log('updating maps', this.map, this.maps, lat, lng);\r\n if(this.map && this.maps){ \r\n const latLng = new this.maps.LatLng(lat, lng);\r\n //console.log('panning to', latLng);\r\n this.map.panTo(latLng);\r\n }\r\n }\r\n\r\n async apiIsLoaded(api) {\r\n //console.log('google maps api loaded!', api); \r\n this.map = api.map;\r\n this.maps = api.maps; \r\n const latLng = new this.maps.LatLng(this.state.iconCenter.lat, this.state.iconCenter.lng);\r\n this.map.panTo(latLng); \r\n\r\n let closeButton = document.createElement('div');\r\n closeButton.title = 'Click to stop tracking';\r\n closeButton.innerHTML = '×';\r\n closeButton.className = 'closeX';\r\n let props = this.props; \r\n let state = this.state;\r\n closeButton.onclick = function () {\r\n props.history.push('../../o/' + state.params.jobid);\r\n };\r\n this.map.controls[this.maps.ControlPosition.LEFT_TOP].push(closeButton);\r\n }\r\n\r\n render() {\r\n let view; \r\n if(this.state.loading === true)\r\n view =
Loading...
;\r\n else if(this.state.trackingAvailable === false)\r\n view = \r\n
Tracking: UNAVAILABLE
\r\n \r\n { this.props.history.push('../../o/' + this.state.params.jobid) }} footer=\"Tap to return to details\"/>\r\n
;\r\n else\r\n view = \r\n \r\n \r\n ;\r\n\r\n return (\r\n
\r\n {view}\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport AppButton from './AppButton';\r\nimport './ConfirmRedirect.scss';\r\nimport UtilService from \"../services/UtilService\";\r\nimport AuthorityToLeave from './AuthorityToLeave';\r\n\r\nexport default function ConfirmRedirect(props) {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
{props.to.Address.Name}
\r\n
{props.to.Address.Address1}
\r\n
{props.to.Address.Address2}
\r\n
{props.to.Address.suburb.name}
\r\n
{props.to.Instruction}
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
{props.to.Contact.Name}
\r\n
{props.to.Contact.Mobile}
\r\n
{props.to.Contact.Email}
\r\n
\r\n
\r\n {(props.costs && props.costs.length > 0 && props.redirectPrice() > 0) && \r\n \r\n
\r\n
\r\n
Redirection Costs
\r\n \r\n \r\n {props.costs.map((as) => \r\n \r\n \r\n \r\n )}\r\n \r\n
{as.description}{(as.priceInclGST && `$${UtilService.roundMoneyTo(parseFloat(as.priceInclGST), 2)}`)}
\r\n
\r\n }\r\n {(props.services && props.services.length > 0) && \r\n \r\n
\r\n
\r\n
Additional Services
\r\n \r\n \r\n {props.services.map((as) => \r\n \r\n \r\n \r\n \r\n )} \r\n \r\n
props.changeAdditionalService(as.code)}/>{as.description}{props.isReceiverPrice(as) && (`$${UtilService.roundMoneyTo(parseFloat(as.priceInclGST), 2)}`)}
\r\n
\r\n }\r\n \r\n \r\n \r\n \r\n \r\n
props.toggleTCs()}/>\r\n Acceptance of Terms & Conditions\r\n \r\n
\r\n {props.totalPrice() !== \"$0.00\" &&\r\n
\r\n
Total Price (incl. GST)
{props.totalPrice()} 
\r\n
}\r\n
\r\n
\r\n
\r\n {props.totalPrice() !== \"$0.00\" ?\r\n :\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n ); \r\n}\r\n","import React, { Component } from 'react';\r\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\r\nimport AuthService from \"../services/AuthService\";\r\n\r\nexport default class ActivityLocation extends Component {\r\n static displayName = ActivityLocation.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n suggestions: [],\r\n addressTypes: {defaultAddressType:null, addressTypes:[{description: \"\", value: null}]},\r\n authenticatedUser: null\r\n };\r\n\r\n this.lastAddressSearch = null;\r\n }\r\n\r\n getUser = async () => {\r\n return await this.authService.getAuthenticatedUser(true);\r\n }\r\n\r\n async componentDidMount() {\r\n console.log('ActivityLocation mounted', this.props);\r\n this.authService = await AuthService.getInstance();\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authorization', `Bearer ${(await this.getUser()).access_token}`);\r\n\r\n window.fetch('api/Address/AddressTypes', {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(response => {\r\n if (response.status === 200)\r\n return response.json();\r\n else \r\n {\r\n console.error(\"Error getting address types\", response);\r\n alert(\"Error getting address types\");\r\n return [];\r\n }\r\n })\r\n .then(data => {\r\n this.setState({\r\n addressTypes: data\r\n });\r\n // have to retriev preferences after address types has completed otherwise error\r\n window.fetch('api/UserPreferences/MyPreferences', {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(response => {\r\n console.log(response);\r\n if (response.status === 200)\r\n return response.json().catch(function(reason) {\r\n alert(reason);\r\n });\r\n else {\r\n this.setState({\r\n loaded: true\r\n })\r\n return Promise.reject(\"Not found\");\r\n }\r\n })\r\n .then(data => {\r\n this.setState({loaded: true});\r\n // only override with preferences if not already set\r\n if(this.props.activityLocation.Address.Address1 === \"\" && data.address){\r\n if(data.address.Address.Address1 == null)\r\n data.address.Address.Address1 = this.props.activityLocation.Address.Address1;\r\n if(data.address.Address.Address2 == null)\r\n data.address.Address.Address2 = this.props.activityLocation.Address.Address2; \r\n // only override Name with preferences if it's blank\r\n if(this.props.activityLocation.Address.Name) \r\n data.address.Address.Name = this.props.activityLocation.Address.Name;\r\n if(data.address.Address.Name == null)\r\n data.address.Address.Name = this.props.activityLocation.Address.Name;\r\n if(data.address.Address.suburb.name == null)\r\n data.address.Address.suburb.name = this.props.activityLocation.Address.suburb.name;\r\n if(data.address.Address.suburb.pcode == null)\r\n data.address.Address.suburb.pcode = this.props.activityLocation.Address.suburb.pcode;\r\n if(data.address.Address.suburb.depot.name == null)\r\n data.address.Address.suburb.depot.name = this.props.activityLocation.Address.suburb.depot.name;\r\n if(data.address.Contact.Name == null)\r\n data.address.Contact.Name = this.props.activityLocation.Contact.Name;\r\n if(data.address.Contact.Mobile == null)\r\n data.address.Contact.Mobile = this.props.activityLocation.Contact.Mobile;\r\n if(data.address.Contact.Phone == null)\r\n data.address.Contact.Phone = this.props.activityLocation.Contact.Phone;\r\n if(data.address.Contact.Email == null)\r\n data.address.Contact.Email = this.props.activityLocation.Contact.Email;\r\n if(data.address.Instruction == null)\r\n data.address.Instruction = this.props.activityLocation.Instruction;\r\n //console.log('data.address, activitylocation', data.address, this.props.activityLocation);\r\n // set default new delivery address to my current default\r\n this.props.onActivityLocationChanged({...this.props.activityLocation, ...data.address});\r\n } \r\n })\r\n .catch(error => {\r\n console.log('Preferences not found for activity location', error);\r\n });\r\n })\r\n .catch(error => {\r\n alert('Error getting address types', error);\r\n });\r\n }\r\n\r\n selectAddress = async (selectedAddr) => {\r\n this.setState({suggestions: []});\r\n this.props.onActivityLocationChanged({...this.props.activityLocation, Address: {...this.props.activityLocation.Address, Address1: selectedAddr.Addr, Id: selectedAddr.Id}});\r\n var detail = await this.getAddressSuggestionDetails(selectedAddr);\r\n console.log('selected detail', detail);\r\n if(!detail || !detail.suburb){ \r\n alert('Sorry something is wrong with that address, please try another one or contact us');\r\n this.props.onActivityLocationChanged({...this.props.activityLocation, Address: {...this.props.activityLocation.Address, Address1: \"\", Id: 0}});\r\n }\r\n else{\r\n console.log(\"Setting to detail\", detail); \r\n var address_type = this.state.addressTypes.addressTypes.find(o=>{return o.value === detail.address_type.value});\r\n this.props.onActivityLocationChanged({...this.props.activityLocation, \r\n Address: {...detail, \r\n address_type: address_type || this.props.activityLocation.Address.address_type, \r\n Name: detail.Name || this.props.activityLocation.Address.Name,\r\n Address2: detail.Address2 || this.props.activityLocation.Address.Address2,\r\n Instruction: detail.Instruction || this.props.activityLocation.Instruction}}); \r\n }\r\n }\r\n\r\n getAddressSuggestions = async (query, signal) => {\r\n //console.log('query:' + query);\r\n\r\n return this.authService.getUser()\r\n .then(user => {\r\n\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authorization', `Bearer ${user.access_token}`);\r\n\r\n return window.fetch(`api/Address/Search?query=${query}`,\r\n {\r\n method: 'GET',\r\n headers: headers,\r\n signal, signal\r\n })\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json();\r\n }\r\n return Promise.reject();\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n\r\n });\r\n }\r\n\r\n getAddressSuggestionDetails = async (suggestion) => {\r\n var user = await this.authService.getUser();\r\n\r\n if (user) {\r\n\r\n var results = null;\r\n\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authorization', `Bearer ${user.access_token}`);\r\n\r\n await window.fetch(`api/Address/Details`,\r\n {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(suggestion)\r\n })\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json();\r\n }\r\n return Promise.reject();\r\n }).then(data => {\r\n results = data;\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n return results;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n setAddressType = (newAddressType) => { \r\n var newActivityLocation = {...this.props.activityLocation, \r\n Address: {...this.props.activityLocation.Address, address_type: newAddressType || this.props.activityLocation.Address.address_type}};\r\n console.log('newAddressType', newAddressType);\r\n console.log('newActivityLocation', newActivityLocation);\r\n this.props.onActivityLocationChanged(newActivityLocation); \r\n }\r\n \r\n searchAddresses = async (e) => { \r\n var newVal = !e.target.value || e.target.value == null ? \"\" : (e.target.value || \"\");\r\n if(newVal.length <= 4){ \r\n this.setState({suggestions: []});\r\n }\r\n\r\n this.props.onActivityLocationChanged({...this.props.activityLocation, \r\n Address: {\r\n ...this.props.activityLocation.Address, \r\n Id: 0, \r\n Address1: newVal, Addr: newVal, \r\n suburb: { name: \"\", pcode: \"\", depot: { code:\"\", name:\"\"} }\r\n }\r\n }); \r\n if(newVal.length > 4) {\r\n if(this.lastAddressSearch)\r\n clearTimeout(this.lastAddressSearch);\r\n\r\n let search = this.getAddressSuggestions;\r\n this.lastAddressSearch = setTimeout(async () => {\r\n // now get the suggestions \r\n var suggestions = await search(newVal);\r\n if(suggestions && suggestions.length) {\r\n this.setState({suggestions: suggestions});\r\n }\r\n }, 200);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
New Delivery Address
\r\n
\r\n
\r\n \r\n this.props.onActivityLocationChanged({ ...this.props.activityLocation, Address: { ...this.props.activityLocation.Address, Name: e.target.value } } )} />\r\n
\r\n
\r\n \r\n
\r\n { this.setAddressType(e.target.value)}\r\n data={this.state.addressTypes.addressTypes} textField=\"description\" dataItemKey=\"value\" valueMap={value => value && value.value}\r\n style={{ width: '100%' }}\r\n />}\r\n
\r\n
\r\n
\r\n \r\n \r\n {(this.state.suggestions && this.state.suggestions.length > 0) &&\r\n
\r\n {this.state.suggestions.map((sug) =>
{ this.selectAddress(sug) }}>{sug.Addr}
)}\r\n
}\r\n
\r\n
\r\n \r\n this.props.onActivityLocationChanged({ ...this.props.activityLocation, Address: { ...this.props.activityLocation.Address, Address2: e.target.value } })} />\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n this.props.onActivityLocationChanged({ ...this.props.activityLocation, Instruction: e.target.value })} />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport {withRouter} from 'react-router';\r\nimport AppButton from './AppButton';\r\nimport { Address } from './Address'\r\nimport AuthService from \"../services/AuthService\";\r\nimport ConfirmRedirect from './ConfirmRedirect';\r\nimport ActivityLocation from './ActivityLocation';\r\nimport './Redirect.scss';\r\nimport ConfigService from \"../services/ConfigService\";\r\nimport UtilService from \"../services/UtilService\";\r\nimport AuthorityToLeave from './AuthorityToLeave';\r\n\r\nclass Redirect extends Component {\r\n static displayName = Redirect.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n const { match: { params, search } } = props;\r\n \r\n this.state = {\r\n loaded: false,\r\n notFound: false,\r\n to: { \r\n Address: {\r\n Id: 0, \r\n Addr: null,\r\n address_type: \"RES\",\r\n suburb: { name: \"\", pcode: \"\", depot: { code:\"\", name:\"\"} }, \r\n Address1: \"\", \r\n Address2: \"\",\r\n Name: \"\"\r\n },\r\n Contact: {\r\n Name: \"\",\r\n Mobile : \"\",\r\n Email: \"\"\r\n }, \r\n Instruction: \"\"\r\n },\r\n shipment: {\r\n connote: \"\",\r\n status: 0,\r\n from: {},\r\n to: {},\r\n additionalServices: []\r\n },\r\n offer: {\r\n offers: [{}] \r\n },\r\n config: {\r\n termsAndConditions: {\r\n // default but will be overriden by config\r\n authorityToLeaveUrl: \"http://www.fliway.com/media/5413/fliway-termsandconditions-dec17.pdf\",\r\n additionalServicesUrl: \"http://www.fliway.com/media/5413/fliway-termsandconditions-dec17.pdf\"\r\n }\r\n },\r\n acceptTerms: false,\r\n token: (params || {jobid: null}).jobid,\r\n params: params || {jobid: null},\r\n authenticatedUser: null,\r\n RedirectPrice: {redirectionServices: []}\r\n };\r\n } \r\n \r\n loadServices = async () => {\r\n var services = this.state.shipment.additionalServices; \r\n console.log('Additional services', services);\r\n this.setState({shipment: {...this.state.shipment, additionalServices: services}});\r\n }\r\n\r\n redirectPrice = () => {\r\n return this.state.RedirectPrice.redirectionServices.reduce((sum, rp) => sum + parseFloat(rp.priceInclGST||\"0.0\"),0.0);\r\n }\r\n\r\n isReceiverPrice = (as) => {\r\n return (as.priceInclGST >= 0 && !as.paid_by && !as.justpaid);\r\n }\r\n\r\n additionalServicePrice = () => {\r\n return this.state.shipment.additionalServices.reduce((sum, as) => sum + ((this.isReceiverPrice(as) && as.selected === true) ? parseFloat(as.priceInclGST||\"0.0\") : 0.0),0.0);\r\n }\r\n\r\n totalPrice = () => {\r\n return `$${UtilService.roundMoneyTo((this.additionalServicePrice() + this.redirectPrice()), 2)}`;\r\n }\r\n\r\n setAddressType = (newAddressType) => {\r\n console.log('newAddressType', newAddressType);\r\n this.setState({to: {...this.state.to, Address:{...this.state.to.Address, address_type: newAddressType.value}}}); \r\n }\r\n\r\n async componentDidMount() { \r\n let configTask = ConfigService.getConfig();\r\n await this.loadOffer();\r\n await this.loadServices();\r\n let config = await configTask;\r\n this.setState({loaded: true, config: {...this.state.config, ...config}}); \r\n }\r\n\r\n async loadOffer() {\r\n let offer = await (await window.fetch('api/offer/' + this.state.params.jobid)).json();\r\n this.setOffer(offer);\r\n return offer;\r\n }\r\n\r\n setOffer(newOffer) {\r\n //console.log('offer details', newOffer);\r\n if (newOffer.location){\r\n this.setState({location: newOffer.location});\r\n }\r\n if (newOffer.shipment){\r\n this.setState({shipment: newOffer.shipment});\r\n // also need to set to name from existing\r\n console.log('newOffer.shipment.to.line1', newOffer.shipment.to.line1);\r\n if(newOffer.shipment.to.line1)\r\n this.setState({to: {...this.state.to, Address: {...this.state.to.Address, Name: newOffer.shipment.to.line1}}});\r\n }\r\n if (newOffer.offer){\r\n this.setState({offer: newOffer.offer});\r\n }\r\n else if (newOffer.status === 404) {\r\n this.setState({\r\n notFound: true\r\n });\r\n }\r\n }\r\n\r\n changeAdditionalService = (selectedCode) => {\r\n this.setState({\r\n // Don't mutate state\r\n shipment: {...this.state.shipment, additionalServices: this.state.shipment.additionalServices.map(as => ({\r\n ...as,\r\n // Toggle the one that's been clicked \r\n selected: (as.code === selectedCode) ? !as.selected : as.selected\r\n }))} \r\n });\r\n }\r\n\r\n toggleTCs = () => {\r\n this.setState({\r\n acceptTerms: !this.state.acceptTerms\r\n });\r\n }\r\n\r\n getUser = async () => {\r\n if(!this.authService)\r\n this.authService = await AuthService.getInstance();\r\n return await this.authService.getUser();\r\n }\r\n\r\n validateAndCalculatePrice = async () => {\r\n //console.log('this.state', this.state);\r\n this.props.setGlobalBusy();\r\n // need to ensure we have a valid address and name, mobile, email\r\n if(!this.state.to.Address || this.state.to.Address.Id == 0 || !this.state.to.Contact \r\n || !this.state.to.Contact.Name || this.state.to.Contact.Name.length < 2\r\n || !this.state.to.Contact.Mobile || this.state.to.Contact.Mobile.length < 2 \r\n || !this.state.to.Contact.Email || this.state.to.Contact.Email.length < 2\r\n || !this.state.to.Address.Name || this.state.to.Address.Name.length < 2){\r\n alert('Please ensure you have entered a valid address and contact details.');\r\n this.props.clearGlobalBusy();\r\n return;\r\n }\r\n\r\n var user = await this.getUser();\r\n\r\n if(user){\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authorization', `Bearer ${user.access_token}`);\r\n //first get price, and assuming nothing goes wrong move to confirmation state\r\n var response = await window.fetch(`api/offer/${this.state.params.jobid}/redirectprice`,\r\n {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify({ token: this.state.params.jobid, toAddress: this.state.to.Address})\r\n });\r\n if(!response.ok) {\r\n if(response.status == \"409\"){\r\n alert(\"Sorry this is out of date; Tap to refresh.\");\r\n return this.loadOffer();\r\n }\r\n else{\r\n alert(\"Error: \" + await response.text());\r\n this.props.clearGlobalBusy();\r\n return;\r\n }\r\n }\r\n try {\r\n const result = await response.json();\r\n console.log('Got redirection price object!', result);\r\n // set redirect price and also update current shipment with the current additional services pricing\r\n this.setState({RedirectPrice: result, shipment: {...this.state.shipment, additionalServices: result.additionalServices}}); \r\n }\r\n catch(err) {\r\n alert('Error getting price... leaving as default');\r\n }\r\n }\r\n else {\r\n alert('Failed to calculate price... leaving as default');\r\n }\r\n this.props.clearGlobalBusy();\r\n this.setState({confirm: true});\r\n }\r\n\r\n startPayment = async() => { \r\n this.props.setGlobalBusy();\r\n //check if we're logged in\r\n let user;\r\n try{\r\n user = await this.getUser();\r\n }\r\n catch(err) {\r\n alert('Please login (or register) to do this.');\r\n this.props.clearGlobalBusy();\r\n return;\r\n }\r\n \r\n if(this.state.acceptTerms !== true){\r\n alert(\"Please confirm you have read and accept our T&Cs\");\r\n this.props.clearGlobalBusy();\r\n return;\r\n }\r\n try{\r\n const paymentDetails = await this.postData('api/offer/' + this.state.params.jobid + '/startpayment', \r\n {to: this.state.to, shipment: this.state.shipment, isRedirect: true}, user.access_token);\r\n if(paymentDetails && paymentDetails.paymentPageUrl) {\r\n console.log('payment page details', paymentDetails);\r\n this.props.clearGlobalBusy();\r\n window.location.href = paymentDetails.paymentPageUrl;\r\n }\r\n }\r\n finally {\r\n this.props.clearGlobalBusy();\r\n }\r\n }\r\n\r\n postData(url = '', data = {}, accessToken = null) {\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n if(accessToken)\r\n headers.append('Authorization', `Bearer ${accessToken}`);\r\n\r\n return fetch(url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n headers: headers,\r\n redirect: 'follow',\r\n referrer: 'no-referrer',\r\n body: JSON.stringify(data),\r\n })\r\n .then(async response => {\r\n console.log('response', response);\r\n if(!response.ok) {\r\n if(response.status == \"409\"){\r\n alert(\"Sorry this is out of date; Tap to refresh.\");\r\n return this.loadOffer();\r\n }\r\n if(response.status == \"401\"){\r\n alert(\"Please login or register to do this.\");\r\n return null;\r\n }\r\n else{\r\n var errorDetail = await response.json();\r\n console.error('Error', errorDetail)\r\n alert(\"Sorry; Error starting payment\");\r\n return null;\r\n }\r\n }\r\n return response.json();\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n this.state.notFound === true ?\r\n
\r\n
My Delivery: NOT FOUND
\r\n
Shipment Not Found
\r\n
:\r\n
\r\n
My Delivery: CHANGE DELIVERY ADDRESS
\r\n {!this.state.loaded &&
Loading...
}\r\n {this.state.loaded &&\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {this.state.shipment.connote}\r\n
\r\n
\r\n
\r\n {!this.state.confirm &&\r\n
\r\n this.setState({to: {...this.state.to, ...e}})} />\r\n this.setState({shipment: {...this.state.shipment, ...e}})} config={this.state.config}>\r\n
\r\n
New Delivery Contact
\r\n
\r\n
\r\n \r\n this.setState({to: {...this.state.to, Contact: {...this.state.to.Contact, Name: e.target.value}}})} />\r\n
\r\n
\r\n \r\n this.setState({to: {...this.state.to, Contact: {...this.state.to.Contact, Mobile: e.target.value}}})} />\r\n
\r\n
\r\n \r\n this.setState({to: {...this.state.to, Contact: {...this.state.to.Contact, Email: e.target.value}}})} />\r\n
\r\n
\r\n
\r\n
\r\n \r\n { this.props.history.push('../../ao/' + this.state.params.jobid) }} footer=\"Return to options\"/>\r\n
\r\n
\r\n
}\r\n {this.state.confirm === true && \r\n this.changeAdditionalService(id)} isReceiverPrice={(as) => this.isReceiverPrice(as)}\r\n offer={this.state.offer}\r\n costs={this.state.RedirectPrice.redirectionServices} services={this.state.shipment.additionalServices} to={this.state.to} \r\n shipment={this.state.shipment} redirectPrice={this.redirectPrice} totalPrice={this.totalPrice} config={this.state.config}\r\n startPayment={this.startPayment} onBack={() => {this.setState({confirm: false});}}>\r\n }\r\n
\r\n
}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(Redirect);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport AuthService from \"../services/AuthService\";\r\nimport _ from 'lodash';\r\nimport styles from './ShipmentListPage.module.scss';\r\n\r\nfunction ShipmentListItem(props) {\r\n\r\n const [icon, setIcon] = useState(\"\");\r\n const [statusText, setStatusText] = useState(\"\");\r\n\r\n let history = useHistory();\r\n\r\n useEffect(() => {\r\n var status = props.shipment.shipment.status;\r\n\r\n if (status === 'Cancelled' || status === 'Ordered') {\r\n setStatusText(Ordered);\r\n setIcon(\"icon-timeline-pickup\");\r\n }\r\n\r\n if (status === 'PickedUp') {\r\n setStatusText(Picked
up
);\r\n setIcon(\"icon-timeline-pickup\");\r\n }\r\n\r\n if (status === \"OFD\" || status === \"OFDOffSchedule\") {\r\n setStatusText(On the way);\r\n setIcon(\"icon-timeline-ofd\");\r\n }\r\n \r\n if (status === \"PartialPOD\" || status === \"DriverNear\") {\r\n setStatusText(Close to home);\r\n setIcon(\"icon-timeline-near\");\r\n }\r\n \r\n if (status === \"Delivered\" || status === \"ManualPOD\") {\r\n setStatusText(Delivered);\r\n setIcon(\"icon-timeline-delivered\");\r\n }\r\n \r\n if (status === \"Rejected\") {\r\n setStatusText(Returned);\r\n setIcon(\"icon-timeline-cross\");\r\n }\r\n\r\n }, [props.shipment.shipment.status]);\r\n\r\n const onClick = () => {\r\n history.push(`/o/${props.shipment.token}`);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{statusText}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
From: {props.shipment.data.from.line1}
\r\n
Ref: {props.shipment.data.connote}
\r\n
\r\n {\r\n props.shipment.data.goods &&\r\n _.map(props.shipment.data.goods, g =>
{g.type} x{g.qty}
)\r\n }\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nfunction ShipmentList(props) {\r\n\r\n const [shipmentList, setShipmentList] = useState([]);\r\n\r\n useEffect(() => {\r\n var sortedShipmentList = null;\r\n\r\n if (props.shipmentList) {\r\n sortedShipmentList = _.sortBy(props.shipmentList, [s => s.data.issued_on, s => s.data.connote]);\r\n }\r\n\r\n setShipmentList(sortedShipmentList);\r\n }, [props.shipmentList]);\r\n\r\n \r\n\r\n return (\r\n
\r\n {\r\n shipmentList.map(s => )\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default function ShipmentListPage(props) {\r\n\r\n const [jobs, setJobs] = useState([]);\r\n let history = useHistory();\r\n\r\n useEffect(() => { \r\n var populateJobs = async () => { \r\n var authService = await AuthService.getInstance();\r\n //console.log('authSerice', authService);\r\n var user = await authService.getAuthenticatedUser(false);\r\n //console.log('user', user);\r\n if(user === null) {\r\n console.log('user is null so empty jobs!');\r\n setJobs([]);\r\n }\r\n else {\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authorization', `Bearer ${user.access_token}`);\r\n var jobResp = await window.fetch('api/shipment/MyShipments', {method: 'GET', headers: headers});\r\n if(jobResp.status === 200) {\r\n setJobs(await jobResp.json());\r\n }\r\n else if(jobResp.status === 400) {\r\n alert(\"Please complete your preferences\");\r\n history.push('/Preferences');\r\n }\r\n else if(jobResp.status === 401) {\r\n console.log('401 error logged, but ignore because silent refresh.');\r\n }\r\n else {\r\n console.error('failed to get jobs ' + jobResp.status);\r\n alert('Failed to get jobs for unknown reason');\r\n }\r\n }\r\n };\r\n populateJobs();\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n My Deliveries
\r\n Tap one for more details\r\n
\r\n \r\n
\r\n );\r\n}","import React from 'react';\r\nimport { Redirect, useHistory, withRouter } from 'react-router';\r\nimport queryString from 'query-string';\r\nimport AuthService from \"../services/AuthService\";\r\n\r\nexport class LoggedInPage extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n loaded: false,\r\n authenticatedUser: null,\r\n profile: null,\r\n error: null\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n console.log('processing logged in...');\r\n const values = queryString.parse(this.props.location.search);\r\n this.authService = await AuthService.getInstance();\r\n //console.log(\"values!\", values);\r\n if (values.new) {\r\n console.log('new so signin redirect?');\r\n await this.authService.signinRedirect();\r\n this.setState({loaded: true, error: values.error, new: true});\r\n return;\r\n }\r\n if(values.error){\r\n console.log('error so signin redirect?');\r\n this.setState({loaded: true, error: values.error});\r\n return;\r\n }\r\n\r\n if (values.state && !values.error) {\r\n var user = await this.authService.signinRedirectCallback();\r\n if(user === null) {\r\n this.setState({loaded: true, error: \"Sorry looks like you're logged in but not...?\"});\r\n return;\r\n }\r\n this.setState({\r\n authenticatedUser: user\r\n });\r\n console.log('get my preferences with logged in user', user);\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authorization', `Bearer ${user.access_token}`);\r\n\r\n var prefsResponse = await window.fetch('api/UserPreferences/MyPreferences', {method: 'GET', headers: headers});\r\n if(prefsResponse.status === 200) {\r\n var prefs = await prefsResponse.json();\r\n this.setState({\r\n loaded: true,\r\n profile: prefs\r\n });\r\n }\r\n else {\r\n this.setState({loaded: true, profile: null});\r\n return;\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n if(this.state.error) { \r\n // if a redirect uri is currently stored - assume we can trust it TODO: may be security issue\r\n // const redirectUri = !!localStorage.getItem(\"redirectUri\") ? localStorage.getItem(\"redirectUri\") : null;\r\n // if(redirectUri && redirectUri != null){\r\n // console.log('redirectUri from logged in page', redirectUri);\r\n // this.props.history.push(redirectUri);\r\n // return null;\r\n // }\r\n // else\r\n return 'Error logging in. ' + this.state.error; \r\n }\r\n\r\n if (!this.state.loaded)\r\n return \"Loading...\";\r\n\r\n if (!this.state.profile && !this.state.new) {\r\n return ();\r\n }\r\n\r\n if (this.state.authenticatedUser || this.state.error) {\r\n return ();\r\n }\r\n\r\n return \"Loading...\";\r\n }\r\n}\r\n\r\nexport default withRouter(LoggedInPage);","import React from 'react';\r\nimport AuthService from '../services/AuthService';\r\n\r\nexport default function LoggedOut(props) {\r\n const signInAsync = async (e) => {\r\n var authService = await AuthService.getInstance();\r\n try {\r\n await authService.signinRedirect();\r\n }\r\n catch(err){\r\n console.error('Error logging in', err);\r\n alert('Error logging in');\r\n }\r\n }\r\n\r\n return (\r\n
\r\n Thanks, you are now logged out. Please close this window or \r\n click here to log back in.\r\n
\r\n );\r\n}","import React from 'react';\r\nimport ActivityLocation from './ActivityLocation';\r\nimport styles from './UserPreferenceEditForm.module.scss';\r\nimport AppButton from './AppButton';\r\nimport _ from 'lodash';\r\nimport { useHistory } from 'react-router';\r\n\r\nexport default function UserPreferenceEditForm(props) { \r\n const history = useHistory();\r\n return (\r\n
\r\n
\r\n
My Contact Details
\r\n
\r\n
\r\n \r\n props.onChange({address: {...props.preferences.address, Contact: {...props.preferences.address.Contact, Name: e.target.value}}})} />\r\n
\r\n
\r\n \r\n props.onChange({address: {...props.preferences.address, Contact: {...props.preferences.address.Contact, Phone: e.target.value}}})} />\r\n
\r\n
\r\n \r\n props.onChange({address: {...props.preferences.address, Contact: {...props.preferences.address.Contact, Mobile: e.target.value}}})} />\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n props.onChange({address: {...props.preferences.address, ...e}})} />\r\n
\r\n
\r\n
\r\n
Terms
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n { history.push('../shipments') }} footer=\"Return to my jobs\"/>\r\n
\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Notification, NotificationGroup } from '@progress/kendo-react-notification';\r\nimport AuthService from \"../services/AuthService\";\r\nimport UserPreferenceEditForm from './UserPreferenceEditForm';\r\nimport {withRouter} from 'react-router';\r\nimport ConfigService from \"../services/ConfigService\";\r\nimport styles from './UserPreferencePage.module.scss';\r\n\r\nclass UserPreferencePage extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n loaded: false,\r\n preferences: { \r\n id: 0, \r\n identity: \"\",\r\n email: \"\",\r\n name: \"\",\r\n phone: \"\",\r\n mobile: \"\",\r\n address: { \r\n Address: {\r\n Id: 0, \r\n Addr: null,\r\n address_type: {description: \"\", value: \"\"},\r\n suburb: { name: \"\", pcode: \"\", depot: { code:\"\", name:\"\"} }, \r\n Address1: \"\", \r\n Address2: \"\",\r\n Name: \"\"\r\n },\r\n Contact: { Name: \"\", Mobile : \"\", Email: \"\", Phone: \"\" }, \r\n Instruction: \"\"\r\n }\r\n },\r\n config: {\r\n termsAndConditions: {\r\n // default but will be overriden by config\r\n generalUrl: \"http://www.fliway.com/media/5413/fliway-termsandconditions-dec17.pdf?GenDefault\",\r\n userAndPrivacyUrl: \"http://www.fliway.com/media/5413/fliway-termsandconditions-dec17.pdf?UsrDefault\"\r\n }\r\n }\r\n };\r\n }\r\n\r\n getUser = async () => {\r\n if(!this.authService)\r\n this.authService = await AuthService.getInstance();\r\n return await this.authService.getAuthenticatedUser(true);\r\n }\r\n\r\n async componentDidMount() { \r\n this.setState({\r\n alertColor: \"info\",\r\n alertMessage: \"\",\r\n alertVisible: false\r\n });\r\n\r\n let configTask = ConfigService.getConfig();\r\n var user = await this.getUser();\r\n if(user === null)\r\n return;\r\n if (user && user.profile) {\r\n console.log('user.profile.email', user.profile.email);\r\n //email should always come from profile\r\n this.setState({\r\n preferences: {...this.state.preferences, email: user.profile.email || this.state.preferences.email, address: {...this.state.preferences.address, Contact: {...this.state.preferences.address.Contact, Email: user.profile.email}}}\r\n });\r\n }\r\n let config = await configTask;\r\n this.setState({config: {...this.state.config, ...config}});\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authorization', `Bearer ${user.access_token}`);\r\n\r\n window.fetch('api/UserPreferences/MyPreferences', {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(async response => {\r\n console.log(response);\r\n if (response.status === 200)\r\n return response.json().catch(function(reason) {\r\n alert('Error parsing your preferences', reason);\r\n });\r\n else {\r\n var user = await this.getUser();\r\n console.log('Setting prefs from user', user.profile);\r\n if (user && user.profile) {\r\n this.setState({\r\n loaded: true,\r\n preferences: {\r\n ...this.state.preferences,\r\n identity: user.profile.sub || this.state.preferences.identity,\r\n email: user.profile.email || this.state.preferences.email,\r\n address: {...this.state.preferences.address, Contact: {...this.state.preferences.address.Contact, Email: user.profile.email}}\r\n }\r\n });\r\n } \r\n return Promise.reject(\"Not found\");\r\n }\r\n })\r\n .then(data => {\r\n //console.log('preferences', this.state.preferences);\r\n //console.log('data', data);\r\n var newPrefs = {...this.state.preferences, ...data, address: {...this.state.preferences.address}};\r\n //console.log('new prefs', newPrefs);\r\n this.setState({\r\n loaded: true,\r\n preferences: newPrefs\r\n });\r\n })\r\n .catch(error => {\r\n if(error != \"Not found\"){\r\n console.error('Error retrieving your preferences', error);\r\n alert('Error retrieving your preferences', error);\r\n }\r\n });\r\n }\r\n\r\n preferencesUpdated = (newPreferences) => {\r\n this.setState({preferences: newPreferences});\r\n }\r\n\r\n handleSubmit = async () => {\r\n this.props.setGlobalBusy();\r\n var user = await this.getUser();\r\n\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authorization', `Bearer ${user.access_token}`);\r\n console.log('posting', this.state.preferences);\r\n window.fetch('api/UserPreferences/MyPreferences', {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(this.state.preferences)\r\n })\r\n .then(async response => {\r\n if (response.status === 200) {\r\n return response.json();\r\n }\r\n else if(response.status == 500) {\r\n var problem = await response.json();\r\n console.log('Problem from server', problem);\r\n if(problem.detail)\r\n alert(problem.detail);\r\n }\r\n else {\r\n console.log('Error in response: ', response);\r\n this.props.clearGlobalBusy();\r\n }\r\n })\r\n .then(data => {\r\n var preferences = this.state.preferences;\r\n preferences.id = data.id;\r\n this.setState({\r\n preferences: preferences\r\n });\r\n\r\n this.showAlert(\"success\", \"Saved\");\r\n this.props.clearGlobalBusy();\r\n if(data.historyUnavailable !== true)\r\n this.props.history.push(\"/shipments\");\r\n })\r\n .catch(error => {\r\n console.log('error, clearing global busy', error);\r\n this.props.clearGlobalBusy();\r\n });\r\n }\r\n\r\n showAlert = (color, message) => {\r\n this.setState({\r\n alertColor: color,\r\n alertMessage: message,\r\n alertVisible: true\r\n })\r\n }\r\n\r\n onDismiss = () => {\r\n this.setState({\r\n alertMessage: \"\",\r\n alertVisible: \"\",\r\n alertColor: \"info\"\r\n });\r\n } \r\n\r\n render() {\r\n\r\n if (!this.state.loaded)\r\n return null;\r\n\r\n return (\r\n
\r\n
\r\n \r\n {\r\n this.state.alertVisible &&\r\n this.setState({ alertVisible: false })}\r\n >\r\n {this.state.alertMessage}\r\n \r\n }\r\n \r\n
\r\n {\r\n (async () => await this.getUser()) &&\r\n this.preferencesUpdated(e)}\r\n />\r\n }\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(UserPreferencePage);","import React, { useEffect } from 'react';\r\nimport AuthService from '../services/AuthService';\r\n\r\nexport default function SilentRefreshPage(props) {\r\n\r\n useEffect(() => {\r\n async function signInAsync() {\r\n var authService = await AuthService.getInstance();\r\n authService.signinSilentCallback()\r\n .catch(error => {\r\n alert('Error in silent refresh', error);\r\n });\r\n }\r\n signInAsync();\r\n });\r\n\r\n return null;\r\n}","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './components/Home';\r\nimport Offer from './components/Offer';\r\nimport { PaymentResult } from './components/PaymentResult';\r\nimport { AdditionalServices } from './components/AdditionalServices';\r\nimport { AdditionalOptions } from './components/AdditionalOptions';\r\nimport { RateMyDelivery } from './components/ratemydelivery';\r\nimport { TrackMyDelivery } from './components/trackmydelivery';\r\nimport Redirect from './components/Redirect';\r\nimport ShipmentListPage from './components/ShipmentListPage';\r\nimport LoggedInPage from './components/LoggedInPage';\r\nimport LoggedOut from './components/LoggedOut';\r\nimport UserPreferencePage from './components/UserPreferencePage';\r\nimport SilentRefreshPage from './components/SilentRefreshPage';\r\nimport './custom.scss';\r\nimport AuthService from './services/AuthService';\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n static __busyCount = 0;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loaded: false,\r\n busy: false\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n if(window.location.href.indexOf('/silentrefresh') < 0) {\r\n var authService = await AuthService.getInstance();\r\n var user = await authService.getUser(); \r\n // if we have a user, check if user has a valid token that has not expired\r\n if((user && user.expired)) {\r\n //console.log('User found but token has expired');\r\n var tries = 1;\r\n while(tries++ < 10 && user.expired === true) {\r\n // wait for it to (hopefully refresh)\r\n //console.log('awaiting user refresh....')\r\n await new Promise(resolve => setTimeout(resolve, tries * 200));\r\n user = await authService.getUser();\r\n console.log('current user state', user); \r\n }\r\n }\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n //console.log('ending app componentDidMount, setting loaded');\r\n }\r\n this.setState({loaded: true});\r\n }\r\n\r\n setGlobalBusy = () => {\r\n App.__busyCount++;\r\n this.setState({busy: true});\r\n };\r\n\r\n clearGlobalBusy = () => {\r\n App.__busyCount--;\r\n console.log('checking global busy', App.__busyCount);\r\n if(App.__busyCount <= 0) {\r\n App.__busyCount = 0;\r\n console.log('clearing global busy');\r\n this.setState({busy: false});\r\n }\r\n }\r\n\r\n render () {\r\n // NOTE: No routes can contain /api/, /identity/ or /identityadmin/ - these are excluded from the service worker\r\n return (\r\n this.state.loaded === true ? \r\n \r\n \r\n \r\n \r\n {\r\n var shouldRenderLayout =\r\n location.pathname.indexOf('/t/') === -1 &&\r\n location.pathname.indexOf('/silentrefresh') === -1;\r\n return shouldRenderLayout ? \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n : null \r\n }} />\r\n :\r\n
\r\n
\r\n \"\"/\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import configService from \"./ConfigService\";\r\nimport firebase from \"firebase/app\";\r\nimport 'firebase/messaging'\r\n\r\nexport default class NotificationService {\r\n static async init(registration) { \r\n var config = await configService.getConfig();\r\n if (!firebase.apps.length) {\r\n //console.log('Initing Firebase 1...', firebaseConfig);\r\n firebase.initializeApp(config.firebaseConfig); \r\n }\r\n else {\r\n firebase.app().delete().then(function() {\r\n //console.log('Initing Firebase 1...', firebaseConfig);\r\n firebase.initializeApp(config.firebaseConfig);\r\n });\r\n }\r\n //console.log('Firebase initialized!');\r\n\r\n try {\r\n const messaging = firebase.messaging();\r\n messaging.useServiceWorker(registration);\r\n //console.log('Firebase set to use service worker!', registration);\r\n await messaging.requestPermission();\r\n var token = await messaging.getToken();\r\n console.log(\"FCM Token:\", token);\r\n // TODO: register token with server for messaging... (need to tie to offer token)\r\n var res = await NotificationService.postData('api/subscribe/' + token);\r\n //console.log('setting up onMessage handler');\r\n messaging.onMessage(payload => {\r\n //console.log('Notification payload!', payload);\r\n const title = payload.notification.title; \r\n const options = {\r\n body: payload.notification.body,\r\n icon: payload.notification.icon,\r\n data: {url: payload.data.url}\r\n }; \r\n return registration.showNotification(title, options);\r\n }); \r\n }\r\n catch(error) \r\n {\r\n if (error.code === \"messaging/permission-blocked\") {\r\n console.log(\"Please Unblock Notification Request Manually\");\r\n } else {\r\n console.log(\"Error Occurred\", error);\r\n }\r\n }\r\n }\r\n\r\n static async postData(url = '', data = {}) {\r\n return fetch(url, {\r\n method: 'POST',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n redirect: 'follow',\r\n referrer: 'no-referrer',\r\n body: JSON.stringify(data),\r\n });\r\n }\r\n\r\n static async sendMessage(){\r\n \r\n }\r\n}","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nimport notificationService from \"./services/NotificationService\";\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (/*process.env.NODE_ENV === 'production' &&*/ 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n console.log('BAILING on service worker registration because publicUrl.origin !== window.location.origin...');\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n const firebaseSwUrl = `${process.env.PUBLIC_URL}/firebase-messaging-sw.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n //console.log('checkValidServiceWorker...');\r\n // we don't really want notifications running on silentrefresh page\r\n if(window.location.href.indexOf('/silentrefresh') < 0)\r\n checkValidServiceWorker(firebaseSwUrl, true);\r\n checkValidServiceWorker(swUrl); \r\n } else {\r\n //console.log('registerValidSW direct...');\r\n // Is not local host. Just register service worker\r\n // we don't really want notifications running on silentrefresh page\r\n if(window.location.href.indexOf('/silentrefresh') < 0)\r\n registerValidSW(firebaseSwUrl, true);\r\n registerValidSW(swUrl); \r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl, isFirebase) {\r\n const registrationConfig = {\r\n onUpdate: registration => {\r\n const waitingServiceWorker = registration.waiting;\r\n \r\n if (waitingServiceWorker) {\r\n waitingServiceWorker.addEventListener(\"statechange\", event => {\r\n if (event.target.state === \"activated\") {\r\n //console.log('Reloading for new version! (2)');\r\n window.location.reload(true);\r\n }\r\n });\r\n //console.log('SW 2: skip waiting!');\r\n waitingServiceWorker.postMessage({ type: \"SKIP_WAITING\" });\r\n }\r\n }\r\n };\r\n if(isFirebase)\r\n registrationConfig.scope = './firebase-scope';\r\n navigator.serviceWorker\r\n .register(swUrl, registrationConfig)\r\n .then(async registration => {\r\n await registration.update();\r\n if(isFirebase === true){ \r\n window.notificationServiceWorker = registration.installing || registration.waiting || registration.active;\r\n\r\n //console.log('Initing Notification service...', registration);\r\n notificationService.init(registration).then(() => {\r\n console.log('Notification service initialised!'); \r\n }).catch((err) =>{\r\n console.log('Notification service initialisation failed!', err);\r\n });\r\n }\r\n\r\n const waiting3 = registration.waiting; \r\n if (waiting3) {\r\n waiting3.addEventListener(\"statechange\", event => {\r\n if (event.target.state === \"activated\") {\r\n //console.log('Reloading for new version! (3)');\r\n window.location.reload(true);\r\n }\r\n });\r\n //console.log('SW 3: skip waiting!');\r\n waiting3.postMessage({ type: \"SKIP_WAITING\" });\r\n }\r\n\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n //console.log('SW 1: skip waiting!');\r\n installingWorker.postMessage({ type: \"SKIP_WAITING\" });\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n //registration.showNotification(\"New Version Available\", {body: \"Please restart\\\\refresh to view new app version\"});\r\n //console.log('Reloading for new version! (1)');\r\n window.location.reload(true);\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n } \r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl, isFirebase) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, isFirebase);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'react-app-polyfill/ie11';\r\n//import \"core-js/stable\";\r\nimport \"core-js/features/string/starts-with\";\r\nimport \"core-js/features/string/repeat\";\r\nimport \"core-js/features/string/virtual/repeat\";\r\nimport \"core-js/features/array/find\";\r\nimport \"core-js/features/array/includes\";\r\nimport 'core-js/features/url-search-params'\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n rootElement);\r\n//
app: V1.5.13
\r\nregisterServiceWorker();\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"receiverInstructions\":\"ReceiverInstructions_receiverInstructions__ChqNy\",\"input\":\"ReceiverInstructions_input__3LzY6\",\"cardCloseX\":\"ReceiverInstructions_cardCloseX__1xQch\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"listItem\":\"ShipmentListPage_listItem__2otmX\",\"shipmentStatusIcon\":\"ShipmentListPage_shipmentStatusIcon__1DjzV\",\"shipmentStatusText\":\"ShipmentListPage_shipmentStatusText__uiFCQ\"};"],"sourceRoot":""}