{"version":3,"sources":["images/logo.png","hocs/withTracker.js","helpers/ticket.js","styles.js","components/ServiceTicket.js","components/ContentHeader.js","views/Service.js","helpers/validators.js","components/LoaderButton.js","components/ConfirmationForm.js","views/Login.js","components/PhoneNumberInput.js","helpers/errors.js","views/Register.js","helpers/formatters.js","components/PaymentForm.js","components/VoucherForm.js","components/ConfirmPurchase.js","helpers/contact.js","helpers/service-availability.js","components/BuyAgainForm.js","helpers/date.js","views/BuyAgain.js","components/ZonesForm.js","components/PassengerForm.js","components/DirectDebitPaymentForm.js","components/ConfirmDirectDebitPurchase.js","helpers/image.js","views/CreateTicket.js","components/SendTicket.js","components/ViewTicketButtons.js","components/ButtonLink.js","views/OrderConfirmed.js","views/AdhocOrderConfirmed.js","components/TicketTable.js","views/ViewTickets.js","views/Account.js","components/Header.js","components/Footer.js","components/AuthenticatedRoute.js","components/UnauthenticatedRoute.js","views/TicketDetail.js","views/TicketNotifications.js","components/PasswordResetConfirmationForm.js","views/ForgotPassword.js","views/CreateMandate.js","views/MandateConfirmed.js","views/TicketSent.js","views/TicketSmsSent.js","components/RenewalPaymentForm.js","components/ConfirmRenewal.js","components/DirectDebitRenewalPaymentForm.js","components/ConfirmDirectDebitRenewal.js","views/RenewTicket.js","views/RenewalConfirmed.js","views/Help.js","views/WaitingList.js","components/TripsTable.js","views/Trips.js","components/TopUpForm.js","views/TopUp.js","views/TopUpConfirmed.js","components/BookingPaymentForm.js","components/ConfirmBooking.js","views/MultiServiceSelector.js","views/BookingConfirmed.js","views/MultiServiceSelectorExistingTicket.js","components/BookingTable.js","views/Bookings.js","components/ConfirmBookingChange.js","views/ChangeBooking.js","App.js","aws-config.js","index.js","muitheme.js"],"names":["module","exports","__webpack_require__","p","GoogleAnalytics","initialize","process","withTracker","WrappedComponent","options","arguments","length","undefined","trackPage","page","set","Object","objectSpread","_Component","HOC","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","apply","inherits","createClass","key","value","props","location","pathname","search","prevProps","_this$props$location","nextPage","react_default","a","createElement","Component","getCurrencySymbol","currency","parseTravelPattern","travelPattern","split","map","item","join","getYearGroups","yearGroups","groups","primary","push","secondary","sixth_form","getMinPrice","ticket","service","pricing_model","zone_prices","zones","validTicketZonePrices","keys","filter","ticketZone","find","serviceZone","name","validZoneName","zonePrices","values","Math","min","toConsumableArray","toFixed","price","hasValidZonePricing","src_styles","link","color","boldLink","fontWeight","savedCardHeader","background","savedCard","styles","root","padding","borderTop","display","justifyContent","alignItems","&:last-child","borderBottom","serviceInfo","paddingRight","button","paddingLeft","closeBtn","position","right","top","plainText","border","textDecoration","cursor","globalStyles","title","zone","zoneTitle","modalLinks","paddingBottom","& a","formatTicketName","ticketName","concat","type","charAt","toUpperCase","slice","replace","sub_type","travel_pattern","formatTicketPrice","ticketPrice","zoneMax","max","zoneMin","default_trips","trip_price","formatDirectDebitNumPayments","payment_type","hasDeposit","numPayments","num_monthly_payments","zone_prices_deposit","some","zone_prices_monthly","price_deposit","price_monthly","totalInstalments","formatRemainingTickets","remaining","buttonLink","clientSlug","ticketYear","year","available","id","formatTicketNamePlainText","BootstrapDialog","styled","Dialog","_ref","theme","& .MuiDialogContent-root","spacing","& .MuiDialogActions-root","BootstrapDialogTitle","classes","children","onClose","other","objectWithoutProperties","DialogTitle","assign","className","Box","style","width","IconButton","aria-label","onClick","Icon","renderModal","Typography","moment","monthly_sub_start","format","react","withStyles","_ref2","_React$useState","React","useState","_React$useState2","slicedToArray","open","setOpen","handleClose","Fragment","isFixedReturn","isSoldOut","aria-labelledby","PaperProps","margin","minWidth","ServiceTicket_BootstrapDialogTitle","DialogContent","dividers","timetable_url","href","target","rel","DialogActions","Button","autoFocus","component","Link","to","variant","start","formatTicketInfo","whiteSpace","ContentHeader","text","header","defaultProps","textAlign","Service","_this","call","state","client","loading","error","description","el","_this$props$match$par","match","params","serviceId","getService","axios","get","data","services","setState","serviceFound","i","getTicketData","Error","_this2","salesYearTicketRq","sales_year","salesYearTicketUrl","now","toISOString","all","then","spread","tickets","_len","responses","Array","_key","forEach","res","generalSaleTickets","isPrivateSale","is_private","isDisabled","is_enabled","isSimplePass","isExpiredFixedReturn","expiry","sort","b","aPrice","Number","bPrice","reverse","catch","e","console","_this3","_this$state","_this$props","_this$props$match$par2","align","CircularProgress","spinner","isVouchersVisible","features","buy_vouchers","ticketsByYear","disable_year","includes","filterTicketsByYear","components_ContentHeader","formatDescription","operatorInfo","route_url","marginRight","size","icon","terms_url","serviceTickets","components_ServiceTicket","fontSize","defineProperty","maxWidth","boxShadow","breakpoints","down","nameContainer","marginBottom","red","validateEmail","email","test","LoaderButton","isLoading","loadingText","_ref$className","_ref$disabled","disabled","buttonLoader","left","marginTop","marginLeft","ConfirmationForm","handleConfirmationSubmit","asyncToGenerator","regenerator_default","mark","_callee","event","retryIfQuotaExceeded","password","handleAuth","confirmationCode","_args","wrap","_context","prev","next","preventDefault","Auth","confirmSignUp","toLowerCase","trim","signIn","t0","window","localStorage","clear","abrupt","message","stop","_x","handleChange","displayError","resendCode","_callee2","_context2","hasResentCode","resendSignUp","setItem","Date","localStorageErr","_this$props2","form","onSubmit","paragraph","aria-hidden","disabledLink","TextField","autoComplete","input","label","onChange","components_LoaderButton","validateConfirmationForm","flexDirection","height","minHeight","Login","getRegisterLink","assertThisInitialized","qs","queryString","parse","ignoreQueryPrefix","redirect","getForgotPasswordLink","_this$setState","handleSubmit","codeLastSent","code","getItem","subtract","showConfirmation","_this$state2","_this$state3","register","react_router_dom","buttons","validateForm","_this$state4","components_ConfirmationForm","renderLoginForm","SUPPORTED_COUNTRY_CODES","PhoneNumberInput","number","onCountryChange","errorMessage","_ref$placeholder","placeholder","_ref$label","defaultCountry","countries","addInternationalOption","htmlFor","FAILED_AUTH_PAYMENT_ERROR","DEFAULT_ERROR","errorMap","_errorMap","getFriendlyPaymentError","defaultErrorMessage","errMessage","defaultErr","force","detail","response","isSafePaymentError","isValidPhoneNumber","countryCode","getInvalidPhoneNumberMessage","Register","getLoginLink","handlePhoneChange","phone","handleCountryCodeChange","newUser","signUp","username","attributes","phone_number","sent","confirmPassword","validatePassword","validatePasswordContainsLowerCase","validatePasswordContainsUpperCase","validatePasswordContainsDigits","validatePasswordNoWhitespace","login","src_components_PhoneNumberInput","passwordHelp","enableButton","_this$state5","renderForm","formatDate","dateString","formatTicketType","serviceName","ticketType","ticketSubType","ticketTravelPattern","ticketOptionName","formatPrice","formattedPrice","isNaN","card","borderRadius","saveCard","existingCardParent","existingCard","flexWrap","existingCardHeader","flexBasis","changeCard","lineHeight","PaymentForm","uploadImage","passenger","post","fileType","photo","fileSize","put","preSignedUrl","headers","Content-Type","fileName","cardError","cardValid","paymentMethods","buyAgain","disablePhoto","imageFileName","netPrice","processing","status","handleInitialPayment","t1","paymentError","_ref3","_callee3","stripe","history","voucher","saveReplacedCard","paymentMethodId","_ref4","paymentMethod","err","_err","_err2","currentSession","body","isAdhoc","confirmUrl","_context3","createPaymentMethod","cardElement","param","Authorization","getIdToken","getJwtToken","payment_method_id","save_card","slug","scrollTo","requires_action","payment_intent_client_secret","handleActionPayment","_ref5","_callee4","paymentResponse","_this$props3","_ref6","errorAction","paymentIntent","_context4","handleCardAction","payment_intent_id","handleAction","_x2","_x3","handleReady","element","on","empty","complete","_this$props4","handleCheckboxChange","checked","isLoadingPaymentMethods","getAccessToken","payload","sub","_context5","_this$props5","hasPaymentMethods","es","onReady","base","fontFamily","FormControl","FormGroup","FormControlLabel","control","Checkbox","last4","injectStripe","withRouter","withWidth","verticalAlign","& > div","& input","discountApplied","VoucherForm","voucherId","handleApply","setVoucher","applied","voucherValue","voucherCurrency","enableTextField","ConfirmPurchase","calcEndDate","startDate","endDate","add","endOf","Stripe","stripeAccount","stripe_account_id","handleEdit","imagePreviewUrl","requireStudentId","isFlexiAndNotSingle","firstName","lastName","zoneStop","dest","yr","startTime","useZones","imagePreview","src","alt","passengerInfo","textTransform","zone_trip_prices","components_VoucherForm","fonts","cssSrc","components_PaymentForm","& > img","@media only screen and (max-device-width: 400px)","contactOperatorString","supportDetails","support","contactString","calc","serviceAvailability","date","calendarDate","calendarAMDate","calendarPMDate","amAvailability","pmAvailability","currentDate","clone","startOf","oneWeek","dates","lowestAvailability","day","fourWeek","isDateAvailable","fourWeeks","isUnavailableFn","isAnyAvailable","today","hasAvailability","renderZoneOption","MenuItem","zoneMenuItem","monthly","deposit","renderZonePricing","BuyAgainForm","handleDateChange","shouldDisableDateFn","availability","yr_groups","showDestination","destinations","availablilityEl","availablilityStatement","isValid","stopSelectionValid","dateValid","timeValid","availabilityValid","yearGroupIsValid","destinationValid","zoneSelectionValid","stops","useUtils_cfb96ac9","utils","MomentUtils","formControl","InputLabel","Select","OutlinedInput","labelWidth","datePicker","DatePicker","autoOk","minDate","inputVariant","maxDate","shouldDisableDate","smallPrint","zoneHasPrice","hasZoneStops","renderZonesForm","serviceStop","confirm","confirmButton","uploadButton","upload","imageUpload","getAcademicYear","shortYear","BuyAgain","getOldTicketData","getClientData","ticketId","_x4","_x5","_x6","getServiceAvailability","_x7","_x8","_x9","passengerData","handleSubmitPassenger","passengerSubmitted","handleEditPassenger","passengerValid","yearGroupValid","destValid","require_id","isIdValid","showConfirmPurchase","ticketWord","clientId","oldCustomerTicketId","oldTicket","extractService","first_name","last_name","ext_id","zone_stop","_client$services","disable_photo","showAvailabilityWarning","availabilityWarning","availabilityWarningHeading","availabilityWarningText","components_ConfirmPurchase","components_BuyAgainForm","ZonesForm","passengerZone","PassengerForm","handleImageChange","isPhotoValid","isRegularReturn","isAdhocTicket","components_ZonesForm","serviceDest","imagePreviewPlaceholder","imagePreviewHelp","photoHelp","accept","DirectDebitPaymentForm","ConfirmDirectDebitPurchase","calcMonthlyPriceAfterDiscount","priceMonthly","monthlyDiscount","getVoucherMessage","total","roundedMonthlyPricePenceAfterDiscount","priceDeposit","hasFullValueVoucher","hasMonthlyPayments","parseFloat","monthlyPriceAfterDiscount","round","totalMonthlyPriceAfterDiscount","voucherMessage","paymentHelp","components_DirectDebitPaymentForm","getOrientation","file","callback","reader","FileReader","onload","view","DataView","result","getUint16","byteLength","offset","marker","getUint32","little","tags","readAsArrayBuffer","resetOrientation","srcBase64","srcOrientation","img","Image","canvas","document","ctx","getContext","transform","drawImage","toDataURL","CreateTicket","getCustomerTickets","getMandates","_callee5","files","onloadend","destBase64","readAsDataURL","destinationSelectionValid","existingTickets","showCheckTickets","mandates","items","customerTicket","ticket_id","ticket_status","activeFlexiTicketsInDebit","ct","trips","trips_taken","_context6","errorLink","datePurchased","date_purchased","tripsTaken","existingTicket","existingTicketDetails","existingTicketButton","heroBody","actionBody","modalSplash","modalContainer","modalHeader","breakLine","duplicateWarn","renderTickets","modalButtons","_this$props2$match$pa","confirmPurchaseComponent","react_router","components_ConfirmDirectDebitPurchase","components_PassengerForm","renderCheckTicketsModal","zIndex","overflow","&> h5","gap","alignSelf","SendTicket","handleEmailChange","phoneNumber","handleEmailSubmit","customerTicketId","handleSmsSubmit","smsError","smsSent","emailInput","required","InputLabelProps","asterisk","sendButton","phoneParent","mobileButtons","mobileButton","mobileIcon","subheading","& .MobileInputWrapper","getWhatsAppLink","viewTicketLink","getMessengerLink","hasNotifications","components_SendTicket","data-action","ButtonLink","heading","inner","_match$params","components_ButtonLink","components_ViewTicketButtons","isFixed","is_fixed","showBuyAgain","sortByDate","hasExpired","getTripsLabelClassName","tripsLeft","tripsLabel","tripsLabelWarn","tripsLabelFail","getTripsBadgeClassName","tripsBadge","tripsBadgeWarn","tripsBadgeFail","canBuyAgain","currentAcademicYear","ticket_year","client_id","gridGap","gridTemplateColumns","gridRowStart","passengerName","& > p","adhocExp","ticketText","flexGrow","& > h6","buyAgainButton","notifyBtn","notifyIcon","renewals","academicYear","Card","CardContent","notify","formattedType","service_name","opt","getTicketName","getPassengerName","service_id","ViewTickets","loadingMore","lastItem","loadMoreError","openFaq","renewalsResponse","renewal","customer_ticket_id","last_item","encodeURIComponent","JSON","stringify","ViewTickets_BootstrapDialog","ViewTickets_BootstrapDialogTitle","faqContent","components_TicketTable","loadMoreButton","loadMoreTickets","noTickets","faq","listStyleType","& p","intro","&:invalid","error > div","submit","_useState","_useState2","setIsLoading","_useState3","_useState4","setEmail","_useState5","_useState6","mobile","setMobile","_useState7","_useState8","setCountryCode","_useState9","_useState10","mobileErrorMessage","setMobileErrorMessage","_useState11","_useState12","isSubmitted","setIsSubmitted","_useState13","_useState14","isSubmitError","setIsSubmitError","useEffect","_fetchAccountDetails","currentAuthenticatedUser","bypassCache","fetchAccountDetails","user","updateUserAttributes","shrink","subNavRoot","subNavLinks","toolbar","subNavToolbar","logo","isAuthenticated","onSignOut","signOut","AppBar","Toolbar","Logo","footerLink","footer","gutterBottom","getFullYear","AuthenticatedRoute","C","cProps","rest","render","TicketDetail","total_price","voucher_id","has_boarding_notifications","main","switch","hasError","setHasError","setTicket","setNotify","hasNotifyError","setHasNotifyError","isNotifyLoading","setIsNotifyLoading","loadData","ticketResponse","Switch","newNotify","renderInner","PasswordResetConfirmationForm","forgotPasswordSubmit","removeItem","forgotPassword","ForgotPassword","components_PasswordResetConfirmationForm","renderResetForm","CreateMandate","mandateSession","renewalId","postMandateSession","renewal_id","innerRoot","redirect_url","MandateConfirmed","buyTicketUrl","mandateSessionConfirmed","sessionId","postConfirmMandateSession","client_slug","ticketUrl","useHistory","goBack","RenewalPaymentForm","extId","z","zonesDescription","zonesForm","ConfirmRenewal","onBusStopChange","onYearGroupChange","onDestinationChange","onExtIdChange","components_RenewalPaymentForm","ConfirmDirectDebitRenewal","DirectDebitRenewalPaymentForm","RenewTicket","previous_customer_ticket","renewalTicket","renewal_ticket","t","safeZone","safeZoneStop","safeStop","safeDest","components_ConfirmDirectDebitRenewal","components_ConfirmRenewal","paddingTop","yearSelect","serviceSelect","passengerCount","passengers","submitted","setSubmitted","submitFailed","setSubmitFailed","setData","cleanYear","setService","_useState15","_useState16","setYear","_useState17","_useState18","postCode","setPostCode","_useState19","_useState20","setPassengerCount","_useState21","_useState22","setPassengers","_useState23","_useState24","isServiceValid","setIsServiceValid","_useState25","_useState26","isYearValid","setIsYearValid","sortServices","serviceA","serviceB","aMatches","bMatches","localeCompare","parseInt","_fetchWaitingList","query","serviceParam","serviceMatch","fetchWaitingList","setFunc","renderTextField","select","count","prevState","newSlice","diff","index","_ref7","_ref8","table","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","trip","date_time","scope","Trips","tripsResponse","components_TripsTable","TopUpForm","numTrips","num_trips","displayTripOptions","tripPrice","minTrips","displayTripOption","TopUp","customerTicketResponse","clientResponse","isVoided","components_TopUpForm","BookingPaymentForm","booking","reduce","acc","termsUrl","ConfirmBooking","bookings","sortedBookings","time","tripLine","tripLineHead","tripDate","tripDateDay","tripDateMonth","tripService","tripStop","tripStopLabel","site_name","renderTrips","components_BookingPaymentForm","borderRight","selectedJourneys","defaultStop","s","serviceHasStops","showStopModal","journey","currentServiceStops","currentService","currentDay","isChecked","hasSelectedJourneys","hasPassengerDetails","nextWeek","validatePassengerForm","servicesOpen","updatedSelectedJourneys","dayKey","serviceSelections","badge","yyyymmddString","dayIsChecked","dayBarClassName","dayBar","dayBarActive","dayIsAvailable","isDayAvailable","dayLabelParent","dayLabel","checkbox","dayStop","getStop","editStopButton","isPassengerValid","MultiServiceSelector_BootstrapDialog","MultiServiceSelector_BootstrapDialogTitle","handleStopSelection","rootMulti","components_ConfirmBooking","textCenter","role","serviceHeading","toggleService","serviceHeadingMain","checkOpen","renderNumServiceSelections","serviceBodyOpen","serviceBody","descriptionList","renderDayItem","totalParent","calcTotal","displayTotalJourneys","buyBtnDisabled","buyBtn","textShadow","borderLeft","& label","bottom","&:hover","opacity","previousBookings","fromDate","toDate","bookingsResponse","s_id","date_svc","dayAlreadyBooked","isAlreadyBooked","MultiServiceSelectorExistingTicket_BootstrapDialog","MultiServiceSelectorExistingTicket_BootstrapDialogTitle","extractTime","dateService","substring","extractDate","tripLineActive","tripChange","changeIcon","currentBookings","is_swappable","pk","sk","s_name","Bookings","components_BookingTable","ConfirmBookingChange","hasSwapped","oldBooking","bookingItem","old_booking","new_booking","ctid","renderTrip","ChangeBooking","decodedPk","decodeURIComponent","decodedSk","samePricedServices","ChangeBooking_BootstrapDialog","ChangeBooking_BootstrapDialogTitle","components_ConfirmBookingChange","App","authenticated","isAuthenticating","childProps","userHasAuthenticated","CssBaseline","components_Header","path","Help","components_AuthenticatedRoute","exact","Account","TicketNotifications","MultiServiceSelectorExistingTicket","MultiServiceSelector","BookingConfirmed","AdhocOrderConfirmed","OrderConfirmed","RenewalConfirmed","TicketSent","TicketSmsSent","components_UnauthenticatedRoute","WaitingList","TopUpConfirmed","components_Footer","awsconfig","aws_project_region","aws_cognito_region","aws_user_pools_id","aws_user_pools_web_client_id","createMuiTheme","palette","typography","h4","h5","Amplify","configure","ReactDOM","ThemeProvider","src_App","getElementById"],"mappings":"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","file":"static/js/main.2684fda8.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo.20bfc24e.png\";","import React, { Component } from 'react';\nimport GoogleAnalytics from 'react-ga';\n\nGoogleAnalytics.initialize(process.env.REACT_APP_ANALYTICS_ID);\n\nconst withTracker = (WrappedComponent, options = {}) => {\n const trackPage = page => {\n GoogleAnalytics.set({\n page,\n ...options\n });\n\n if (process.env.REACT_APP_ANALYTICS_ENABLED === 'true') {\n GoogleAnalytics.pageview(page);\n }\n };\n\n // eslint-disable-next-line\n const HOC = class extends Component {\n componentDidMount() {\n const page =\n // eslint-disable-next-line\n this.props.location.pathname + this.props.location.search;\n trackPage(page);\n }\n\n componentDidUpdate(prevProps) {\n const {\n location: { pathname, search }\n } = this.props;\n const currentPage =\n prevProps.location.pathname + prevProps.location.search;\n const nextPage = pathname + search;\n\n if (currentPage !== nextPage) {\n trackPage(nextPage);\n }\n }\n\n render() {\n return ;\n }\n };\n\n return HOC;\n};\n\nexport default withTracker;\n","export const getCurrencySymbol = currency => {\n if (currency === 'eur') {\n return '€';\n }\n return '£';\n};\n\nexport const parseTravelPattern = travelPattern => {\n if (!travelPattern) {\n return '';\n }\n\n const travelPatternArr = travelPattern.split('#');\n\n return travelPatternArr\n .map(item => {\n if (item === 'm') {\n return 'Mon';\n }\n\n if (item === 'tu') {\n return 'Tue';\n }\n\n if (item === 'w') {\n return 'Wed';\n }\n\n if (item === 'th') {\n return 'Thu';\n }\n\n if (item === 'f') {\n return 'Fri';\n }\n\n if (item === 'sa') {\n return 'Sat';\n }\n\n if (item === 'su') {\n return 'Sun';\n }\n\n return '';\n })\n .join('/');\n};\n\nexport const getYearGroups = yearGroups => {\n const groups = [];\n const primaryGroups = ['reception', 1, 2, 3, 4, 5, 6];\n const secondaryGroups = [7, 8, 9, 10, 11];\n const sixthForm = [12, 13];\n\n if (!yearGroups) {\n return groups;\n }\n\n if (yearGroups.primary) {\n groups.push(...primaryGroups);\n }\n\n if (yearGroups.secondary) {\n groups.push(...secondaryGroups);\n }\n\n if (yearGroups.sixth_form) {\n groups.push(...sixthForm);\n }\n\n return groups;\n};\n\nexport const getMinPrice = (ticket, service) => {\n if (\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_prices &&\n service.zones\n ) {\n const validTicketZoneNames = Object.keys(ticket.zone_prices).filter(\n ticketZone =>\n service.zones.find(\n serviceZone => serviceZone.name === ticketZone\n ) && ticket.zone_prices[ticketZone] > 0\n );\n\n const validTicketZonePrices = validTicketZoneNames.map(\n validZoneName => ticket.zone_prices[validZoneName]\n );\n\n const zonePrices = Object.values(validTicketZonePrices);\n const zoneMin = Math.min(...zonePrices).toFixed(2);\n return zoneMin;\n }\n\n return ticket.price;\n};\n\nexport const hasValidZonePricing = (ticket, service) => {\n if (\n !service.zones ||\n !service.zones.length ||\n !ticket.zone_prices ||\n !Object.keys(ticket.zone_prices).length\n ) {\n return false;\n }\n\n const validTicketZones = Object.keys(ticket.zone_prices).filter(\n ticketZone =>\n service.zones.find(\n serviceZone => serviceZone.name === ticketZone\n ) && ticket.zone_prices[ticketZone] > 0\n );\n\n return validTicketZones.length > 0;\n};\n","export default {\n link: {\n color: '#50b9b3'\n },\n boldLink: {\n color: '#50b9b3 !important',\n fontWeight: 'bold'\n },\n savedCardHeader: {\n background: '#50b9b3 !important'\n },\n savedCard: {\n background: '#eee'\n }\n};\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles, styled } from '@material-ui/core/styles';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport IconButton from '@material-ui/core/IconButton';\nimport Icon from '@material-ui/core/Icon';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment';\nimport {\n getCurrencySymbol,\n hasValidZonePricing,\n parseTravelPattern\n} from '../helpers/ticket';\nimport globalStyles from '../styles';\n\nconst styles = {\n root: {\n padding: '10px 0',\n borderTop: '1px solid rgba(0, 0, 0, 0.26)',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n '&:last-child': {\n borderBottom: '1px solid rgba(0, 0, 0, 0.26)'\n }\n },\n serviceInfo: {\n paddingRight: '10px'\n },\n button: {\n paddingRight: '8px',\n paddingLeft: '8px'\n },\n closeBtn: {\n position: 'absolute',\n right: 8,\n top: 8\n },\n plainText: {\n background: 'none',\n border: 0,\n padding: 0,\n textDecoration: 'underline',\n cursor: 'pointer',\n ...globalStyles.link\n },\n title: {\n padding: '16px 16px'\n },\n zone: {\n borderBottom: '1px solid #ddd',\n padding: '10px 0px'\n },\n zoneTitle: {\n fontWeight: 'bold'\n },\n modalLinks: {\n borderBottom: '1px solid #ddd',\n paddingBottom: 10,\n '& a': globalStyles.link\n }\n};\n\nconst formatTicketNamePlainText = ticket => {\n let ticketName = `${ticket.type.charAt(0).toUpperCase()}${ticket.type.slice(\n 1\n )}`;\n\n ticketName = ticketName.replace('_', ' ');\n\n if (ticket.sub_type === 'pm_only') {\n ticketName += ' (PM only)';\n } else if (ticket.sub_type === 'am_only') {\n ticketName += ' (AM Only)';\n } else if (ticket.sub_type === 'custom' && ticket.travel_pattern) {\n ticketName += ` (${parseTravelPattern(ticket.travel_pattern)} only)`;\n }\n\n return ticket.name ? `${ticketName} ${ticket.name}` : ticketName;\n};\n\nconst formatTicketName = ticket => {\n let ticketName = `${ticket.type.charAt(0).toUpperCase()}${ticket.type.slice(\n 1\n )}`;\n\n ticketName = ticketName.replace('_', ' ');\n\n if (ticket.sub_type === 'pm_only') {\n ticketName += ' (PM only)';\n } else if (ticket.sub_type === 'am_only') {\n ticketName += ' (AM Only)';\n } else if (ticket.sub_type === 'custom' && ticket.travel_pattern) {\n ticketName += ` (${parseTravelPattern(ticket.travel_pattern)} only)`;\n }\n\n return (\n \n {ticketName} {ticket.name ? ` ${ticket.name}` : ''}\n \n );\n};\n\nconst formatTicketPrice = (service, ticket) => {\n let ticketPrice = `${getCurrencySymbol(ticket.currency)}${ticket.price}`;\n\n if (ticket.pricing_model === 'Zonal' && ticket.zone_prices) {\n const validTicketZoneNames = Object.keys(ticket.zone_prices).filter(\n ticketZone =>\n service.zones.find(\n serviceZone => serviceZone.name === ticketZone\n ) && ticket.zone_prices[ticketZone] > 0\n );\n\n const validTicketZonePrices = validTicketZoneNames.map(\n validZoneName => ticket.zone_prices[validZoneName]\n );\n\n const zonePrices = Object.values(validTicketZonePrices);\n const zoneMax = Math.max(...zonePrices).toFixed(2);\n const zoneMin = Math.min(...zonePrices).toFixed(2);\n\n ticketPrice = `${getCurrencySymbol(\n ticket.currency\n )}${zoneMin} - ${getCurrencySymbol(ticket.currency)}${zoneMax}`;\n }\n\n if (ticket.type === 'flexi') {\n ticketPrice += ` (${ticket.default_trips} trips${\n ticket.pricing_model !== 'Zonal'\n ? ` x ${getCurrencySymbol(ticket.currency)}${ticket.trip_price}`\n : ''\n })`;\n }\n\n return ticketPrice;\n};\n\nconst formatTicketInfo = (service, ticket) => {\n return (\n <>\n {formatTicketName(ticket)} {formatTicketPrice(service, ticket)}\n \n );\n};\n\nconst formatDirectDebitNumPayments = ticket => {\n if ('payment_type' in ticket && ticket.payment_type === 'dd') {\n let hasDeposit = false;\n let numPayments = ticket.num_monthly_payments;\n\n if (ticket.pricing_model === 'Zonal') {\n hasDeposit = Object.values(ticket.zone_prices_deposit).some(\n price => price > 0\n );\n numPayments = Object.values(ticket.zone_prices_monthly).some(\n price => price > 0\n )\n ? numPayments\n : 0;\n } else {\n hasDeposit = ticket.price_deposit > 0;\n numPayments = ticket.price_monthly > 0 ? numPayments : 0;\n }\n\n const totalInstalments = numPayments + (hasDeposit ? 1 : 0);\n\n return `${totalInstalments} x Direct Debit payment${\n totalInstalments > 1 ? 's' : ''\n }`;\n }\n\n return '';\n};\n\nconst formatRemainingTickets = ticket => {\n if (\n 'remaining' in ticket &&\n ticket.remaining > 0 &&\n ticket.remaining <= 10\n ) {\n return `Only ${ticket.remaining} left!`;\n }\n\n if ('remaining' in ticket && ticket.remaining <= 0) {\n return `SOLD OUT!`;\n }\n\n return '';\n};\n\nconst buttonLink = (clientSlug, ticket, service) => {\n const ticketYear = ticket.year.replace('/', '-');\n if (!ticket.available) {\n return `/waiting-list/${ticketYear}/${clientSlug}?ticket=${formatTicketNamePlainText(\n ticket\n )}&service=${service.name}`;\n }\n return `/create-ticket/${ticketYear}/${clientSlug}/${service.id}/${\n ticket.id\n }`;\n};\n\nconst BootstrapDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiDialogContent-root': {\n padding: theme.spacing(2)\n },\n '& .MuiDialogActions-root': {\n padding: theme.spacing(1)\n }\n}));\n\nconst BootstrapDialogTitle = props => {\n const { classes, children, onClose, ...other } = props;\n\n return (\n \n \n {children}\n \n {onClose ? (\n \n close\n \n ) : null}\n \n \n \n );\n};\n\nconst renderModal = (classes, ticket, serviceZone) => {\n if (ticket.pricing_model !== 'Zonal' || !serviceZone) {\n return (\n
\n \n Initial payment due now:{' '}\n {getCurrencySymbol(ticket.currency)}\n {ticket.price_deposit || '0.00'}\n \n \n Monthly payments: {getCurrencySymbol(ticket.currency)}\n {ticket.price_monthly || '0.00'} x{' '}\n {ticket.num_monthly_payments}\n \n \n First monthly payment: 1st{' '}\n {moment(ticket.monthly_sub_start).format('MMM')}\n \n \n Total price: {getCurrencySymbol(ticket.currency)}\n {ticket.price}\n \n
\n );\n }\n\n if (\n ticket.zone_prices &&\n serviceZone.name in ticket.zone_prices &&\n ticket.zone_prices[serviceZone.name] > 0\n ) {\n return (\n \n \n Zone: {serviceZone.name}\n \n \n Initial payment due now:{' '}\n {getCurrencySymbol(ticket.currency)}\n {ticket.zone_prices_deposit[serviceZone.name] || '0.00'}\n \n \n Monthly payments: {getCurrencySymbol(ticket.currency)}\n {ticket.zone_prices_monthly[serviceZone.name] || '0.00'}\n {' x '}\n {ticket.num_monthly_payments}\n \n \n First monthly payment: 1st{' '}\n {moment(ticket.monthly_sub_start).format('MMM')}\n \n \n Total price: {getCurrencySymbol(ticket.currency)}\n {ticket.zone_prices[serviceZone.name]}\n \n \n );\n }\n\n return ;\n};\n\nconst ServiceTicket = ({ service, clientSlug, ticket, classes }) => {\n const [open, setOpen] = React.useState(false);\n\n const handleClose = () => {\n setOpen(false);\n };\n\n if (ticket.pricing_model === 'Zonal') {\n if (!hasValidZonePricing(ticket, service)) {\n return <>;\n }\n }\n\n const isFixedReturn =\n ticket.type === 'return' && ticket.sub_type === 'fixed';\n\n const isSoldOut = 'remaining' in ticket && ticket.remaining <= 0;\n\n return (\n
\n {ticket.payment_type === 'dd' && (\n \n \n {formatTicketName(ticket)}\n \n \n \n This ticket can be paid for in instalments using a\n direct debit mandate.\n \n {ticket.pricing_model === 'Zonal' && (\n <>\n \n {service.timetable_url !== '' && (\n <>\n \n Which zone am I?\n {' '}\n |{' '}\n \n )}\n \n Direct Debit FAQ\n \n \n {service.zones.map(serviceZone =>\n renderModal(classes, ticket, serviceZone)\n )}\n \n )}\n {ticket.pricing_model !== 'Zonal' && (\n <>\n \n \n Direct Debit FAQ\n \n \n {renderModal(classes, ticket)}\n \n )}\n \n \n \n {ticket.available\n ? 'Buy ticket'\n : 'Join waiting list'}\n \n \n \n )}\n\n \n {isFixedReturn && (\n <>\n \n {formatTicketName(ticket)}\n \n \n {moment(ticket.start).format('ddd Do MMM')}{' '}\n \n \n {isSoldOut && (\n \n {formatRemainingTickets(ticket)}\n \n )}\n {!isSoldOut && (\n <>\n {formatTicketPrice(service, ticket)}{' '}\n \n {formatRemainingTickets(ticket)}\n \n \n )}\n \n \n )}\n\n {!isFixedReturn && (\n <>\n \n {formatTicketInfo(service, ticket)}\n \n {formatDirectDebitNumPayments(ticket) !== '' && (\n \n {\n setOpen(true);\n }}\n className={classes.plainText}\n >\n {formatDirectDebitNumPayments(ticket)}\n \n \n )}\n \n {formatRemainingTickets(ticket)}\n \n \n )}\n
\n
\n \n {ticket.available ? 'Buy' : 'Wait list'}\n \n
\n \n );\n};\n\nServiceTicket.propTypes = {\n ticket: PropTypes.shape({\n id: PropTypes.string,\n type: PropTypes.string\n }).isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(ServiceTicket);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Typography, withStyles } from '@material-ui/core';\n\nconst styles = {\n root: {\n padding: '10px',\n textAlign: 'left'\n },\n header: {\n color: '#fff'\n }\n};\n\nconst ContentHeader = ({ text, id, classes }) => (\n
\n \n {text}\n \n
\n);\n\nContentHeader.propTypes = {\n text: PropTypes.string.isRequired,\n id: PropTypes.string,\n classes: PropTypes.shape().isRequired\n};\n\nContentHeader.defaultProps = {\n id: ''\n};\n\nexport default withStyles(styles)(ContentHeader);\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport red from '@material-ui/core/colors/red';\nimport { Icon, Button } from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment';\n\nimport ServiceTicket from '../components/ServiceTicket';\nimport ContentHeader from '../components/ContentHeader';\nimport { getMinPrice } from '../helpers/ticket';\nimport globalStyles from '../styles';\n\nimport './Service.css';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n paddingBottom: '1px',\n position: 'relative',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n nameContainer: {\n padding: '10px 10px',\n background: '#70d0ff'\n },\n name: {\n color: '#fff'\n },\n description: {\n marginBottom: '20px',\n paddingRight: '20px'\n },\n serviceTickets: {\n margin: '0 20px 0px',\n padding: '0 0 20px'\n },\n error: {\n margin: '40px 20px',\n color: red[500]\n },\n spinner: {\n margin: '40px auto',\n display: 'block'\n },\n operatorInfo: {\n padding: '0 20px'\n },\n icon: {\n fontSize: '15px'\n },\n button: {\n paddingLeft: '2px',\n paddingRight: '4px'\n },\n link: globalStyles.boldLink\n});\n\nclass Service extends Component {\n static formatDescription(description) {\n return description.split('*').filter(el => el !== '');\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n service: null,\n client: null,\n loading: true,\n error: false\n };\n }\n\n componentDidMount() {\n const {\n match: {\n params: { clientSlug, serviceId }\n }\n } = this.props;\n\n if (!clientSlug || !serviceId) {\n return;\n }\n\n this.getService(clientSlug, serviceId);\n }\n\n async getService(clientSlug, serviceId) {\n try {\n const client = await axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/client/slug/${clientSlug}`\n );\n\n const { services = [] } = client.data;\n\n this.setState({\n client: client.data\n });\n\n if (services.length) {\n let serviceFound = false;\n for (let i = 0; i < services.length; i += 1) {\n const service = services[i];\n if (service.id === serviceId) {\n serviceFound = true;\n this.getTicketData(client.data, service, serviceId);\n }\n }\n\n if (!serviceFound) {\n throw new Error();\n }\n } else {\n throw new Error();\n }\n } catch (e) {\n this.setState({ error: true, loading: false });\n }\n }\n\n getTicketData(client, service, serviceId) {\n const salesYearTicketRq = [];\n for (let i = 0; i < client.sales_year.length; i += 1) {\n const salesYearTicketUrl = `${\n process.env.REACT_APP_TICKET_API_ENDPOINT\n }/service/${serviceId}/tickets/${client.sales_year[i].replace(\n '/',\n '-'\n )}`;\n salesYearTicketRq.push(axios.get(salesYearTicketUrl));\n }\n if (salesYearTicketRq.length === 0) {\n throw new Error('No services');\n }\n\n const now = moment().toISOString();\n axios\n .all(salesYearTicketRq)\n .then(\n axios.spread((...responses) => {\n const tickets = [];\n responses.forEach(res => {\n if (res.data && res.data.length > 0) {\n res.data.forEach(item => {\n tickets.push(item);\n });\n }\n });\n\n const generalSaleTickets = tickets.filter(ticket => {\n const isPrivateSale =\n 'is_private' in ticket && ticket.is_private;\n const isDisabled =\n 'is_enabled' in ticket &&\n ticket.is_enabled === false;\n const isSimplePass =\n 'payment_type' in ticket &&\n ticket.payment_type === 'ext';\n const isExpiredFixedReturn =\n ticket.type === 'return' &&\n ticket.sub_type === 'fixed' &&\n ticket.expiry < now;\n return !(\n isPrivateSale ||\n isDisabled ||\n isSimplePass ||\n isExpiredFixedReturn\n );\n });\n\n generalSaleTickets\n .sort((a, b) => {\n const aPrice = Number(getMinPrice(a, service));\n const bPrice = Number(getMinPrice(b, service));\n\n if (aPrice < bPrice) {\n return -1;\n }\n\n if (aPrice > bPrice) {\n return 1;\n }\n\n if (a.expiry > b.expiry) {\n return -1;\n }\n\n if (a.expiry < b.expiry) {\n return 1;\n }\n\n return 0;\n })\n .reverse();\n\n this.setState({\n service: { ...service, tickets: generalSaleTickets },\n loading: false,\n error: false\n });\n })\n )\n .catch(e => {\n console.error(e);\n this.setState({ error: true, loading: false });\n });\n }\n\n filterTicketsByYear(year) {\n const { service } = this.state;\n return service.tickets.filter(ticket => {\n return ticket.year === year;\n });\n }\n\n render() {\n const { service, client, loading, error } = this.state;\n const {\n match: {\n params: { clientSlug, serviceId }\n },\n classes\n } = this.props;\n\n if (error) {\n return (\n
\n \n There was a problem retrieving the ticket info, please\n try again later\n \n
\n );\n }\n\n if (loading) {\n return (\n \n );\n }\n\n const isVouchersVisible = client.features.buy_vouchers !== false;\n\n const ticketsByYear = {};\n\n client.sales_year.forEach(year => {\n if (\n !service.disable_year ||\n !(service.disable_year instanceof Array) ||\n !service.disable_year.includes(year)\n ) {\n ticketsByYear[year] = this.filterTicketsByYear(year);\n }\n });\n\n return (\n
\n \n
\n \n Service operated by {client.name}.\n \n
\n
\n
    \n {Service.formatDescription(service.description).map(\n item => (\n
  • \n \n {item}\n \n
  • \n )\n )}\n
\n
\n
\n

\n {service.route_url && (\n \n \n \n location_on\n {' '}\n Route\n \n \n )}\n\n {service.timetable_url && (\n \n \n \n access_time\n {' '}\n timetable\n \n \n )}\n\n {service.terms_url && (\n \n \n list\n Terms\n \n \n )}\n

\n
\n {Object.keys(ticketsByYear).length === 0 && (\n <>\n \n Tickets\n \n \n

\n There are no tickets currently listed by{' '}\n {client.name}.\n

\n

\n Please contact {client.name} directly for more\n information and ticket availability.\n

\n
\n \n )}\n {Object.keys(ticketsByYear).map((ticketYear, i) => (\n \n {ticketsByYear[ticketYear].length > 0 && (\n <>\n \n {ticketYear} Tickets\n \n \n {ticketsByYear[ticketYear].map(ticket => (\n \n ))}\n \n \n )}\n {ticketsByYear[ticketYear].length === 0 && (\n <>\n \n {ticketYear} Tickets\n \n \n

\n There are no tickets currently listed by{' '}\n {client.name}.\n

\n

\n Please contact {client.name} for ticket\n availability or join their waiting list.\n

\n \n Join waiting list\n \n \n \n )}\n
\n ))}\n {isVouchersVisible && (\n
\n \n Buy vouchers\n \n
\n \n Want to split the cost between parents or\n family? Looking to gift the full value of a\n ticket?{' '}\n \n Buy a voucher\n {' '}\n from the voucher checkout.\n \n
\n
\n )}\n \n );\n }\n}\n\nService.propTypes = {\n match: PropTypes.shape({\n params: PropTypes.shape({\n clientSlug: PropTypes.string,\n serviceId: PropTypes.string\n })\n }).isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(Service);\n","export const validateEmail = email => {\n const regexp = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n return regexp.test(email);\n};\n\nexport const validatePassword = password => {\n // eslint-disable-next-line no-useless-escape\n const regexp = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[A-Za-z\\d@$!%*?&\\-_='\"~`[\\]{}+^():;,.|\\/\\\\<>#]{8,}$/;\n return regexp.test(password);\n};\n\nexport const validatePasswordContainsLowerCase = password => {\n const regexp = /(?=.*[a-z])/;\n return regexp.test(password);\n};\n\nexport const validatePasswordContainsUpperCase = password => {\n const regexp = /(?=.*[A-Z])/;\n return regexp.test(password);\n};\n\nexport const validatePasswordContainsDigits = password => {\n const regexp = /(?=.*[0-9])/;\n return regexp.test(password);\n};\n\nexport const validatePasswordNoWhitespace = password => {\n const regexp = /(?=.*[\\s])/;\n return !regexp.test(password);\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = {\n button: {\n position: 'relative'\n },\n buttonLoader: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n marginTop: '-12px',\n marginLeft: '-12px'\n }\n};\n\nconst LoaderButton = ({\n classes,\n isLoading,\n text,\n loadingText,\n className = '',\n disabled = false,\n ...props\n}) => (\n \n {isLoading && (\n \n )}\n {!isLoading ? text : loadingText}\n \n);\n\nLoaderButton.propTypes = {\n classes: PropTypes.shape().isRequired,\n isLoading: PropTypes.bool.isRequired,\n text: PropTypes.string.isRequired,\n loadingText: PropTypes.string.isRequired,\n className: PropTypes.string,\n disabled: PropTypes.bool\n};\n\nLoaderButton.defaultProps = {\n className: '',\n disabled: false\n};\n\nexport default withStyles(styles)(LoaderButton);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport TextField from '@material-ui/core/TextField';\nimport { Auth } from 'aws-amplify';\nimport { Typography, withStyles } from '@material-ui/core';\nimport red from '@material-ui/core/colors/red';\nimport LoaderButton from './LoaderButton';\nimport ContentHeader from './ContentHeader';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n textAlign: 'center',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '800px',\n margin: '0 auto',\n padding: '20px 10px'\n },\n input: {\n margin: '20px 20px 10px'\n },\n button: {\n width: '200px',\n height: '56px',\n margin: '0 auto'\n },\n error: {\n margin: '0 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold',\n textDecoration: 'underline',\n cursor: 'pointer'\n },\n disabledLink: {\n color: '#666',\n fontWeight: 'bold'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px'\n }\n});\n\nclass ConfirmationForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n error: null,\n loading: false,\n confirmationCode: '',\n hasResentCode: false\n };\n }\n\n handleConfirmationSubmit = async (event, retryIfQuotaExceeded = true) => {\n event.preventDefault();\n const { email, password, handleAuth } = this.props;\n const { confirmationCode } = this.state;\n\n this.setState({ loading: true });\n\n try {\n await Auth.confirmSignUp(\n email.toLowerCase(),\n confirmationCode.trim()\n );\n await Auth.signIn(email.toLowerCase(), password);\n\n handleAuth(true);\n } catch (e) {\n if (e.name === 'QuotaExceededError' && retryIfQuotaExceeded) {\n window.localStorage.clear();\n\n await this.handleConfirmationSubmit(event, false);\n return;\n }\n\n let err = e.message;\n\n if (\n err === 'Invalid verification code provided, please try again.'\n ) {\n err =\n \"Invalid verification code. Please enter the very latest code we sent you, older codes won't work.\";\n }\n\n this.setState({\n error: e.message\n });\n this.setState({ loading: false });\n }\n };\n\n handleChange = event => {\n this.setState({\n confirmationCode: event.target.value\n });\n };\n\n displayError = message => {\n if (!message) {\n return <>;\n }\n\n if (\n message === 'Invalid verification code provided, please try again.'\n ) {\n return (\n <>\n Invalid verification code. Please enter only the very latest\n code we sent you; older codes won{\"'\"}t work.{' '}\n \n More info\n \n .\n \n );\n }\n\n return <>{message};\n };\n\n resendCode = async () => {\n const { email } = this.props;\n this.setState({\n hasResentCode: true\n });\n\n await Auth.resendSignUp(email.toLowerCase());\n\n try {\n window.localStorage.setItem(\n 'confirmation_code_sent',\n new Date().toISOString()\n );\n } catch (localStorageErr) {\n console.error(localStorageErr);\n }\n };\n\n validateConfirmationForm() {\n const { confirmationCode } = this.state;\n\n return confirmationCode.length > 0;\n }\n\n render() {\n const { confirmationCode, error, loading, hasResentCode } = this.state;\n const { classes, email } = this.props;\n\n return (\n
\n \n \n \n Please enter the code sent to {email}.\n \n \n NOTE: This email could arrive in your\n junk folder. Please double check this first.\n \n \n \n Help confirming your account\n \n \n \n {!hasResentCode && (\n \n Send another code\n \n )}\n {hasResentCode && (\n \n New code sent. Please check your inbox.\n \n )}\n \n \n \n {this.displayError(error)}\n \n \n \n
\n );\n }\n}\n\nConfirmationForm.propTypes = {\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(ConfirmationForm);\n","import React, { Component } from 'react';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\nimport TextField from '@material-ui/core/TextField';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Typography } from '@material-ui/core';\nimport red from '@material-ui/core/colors/red';\nimport { Auth } from 'aws-amplify';\nimport { Link } from 'react-router-dom';\nimport queryString from 'query-string';\nimport { validateEmail } from '../helpers/validators';\nimport LoaderButton from '../components/LoaderButton';\nimport ConfirmationForm from '../components/ConfirmationForm';\nimport ContentHeader from '../components/ContentHeader';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n textAlign: 'center',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '800px',\n margin: '40px auto',\n paddingBottom: '20px'\n },\n input: {\n margin: '0 20px 10px'\n },\n button: {\n width: '200px',\n height: '56px',\n marginBottom: '30px'\n },\n error: {\n margin: '0 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n register: {\n fontSize: '1em',\n marginBottom: '2em'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n }\n});\n\nclass Login extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n email: '',\n password: '',\n error: '',\n loading: false,\n showConfirmation: false\n };\n }\n\n getRegisterLink = () => {\n const { props } = this;\n const qs = queryString.parse(props.location.search, {\n ignoreQueryPrefix: true\n });\n\n if ('redirect' in qs) {\n return `/register?redirect=${qs.redirect}`;\n }\n\n return `/register`;\n };\n\n getForgotPasswordLink = () => {\n const { props } = this;\n const qs = queryString.parse(props.location.search, {\n ignoreQueryPrefix: true\n });\n\n if ('redirect' in qs) {\n return `/forgot-password?redirect=${qs.redirect}`;\n }\n\n return `/forgot-password`;\n };\n\n handleChange = event => {\n this.setState({\n [event.target.id]: event.target.value,\n error: false\n });\n };\n\n handleSubmit = async (event, retryIfQuotaExceeded = true) => {\n event.preventDefault();\n const { email, password } = this.state;\n const { handleAuth } = this.props;\n\n this.setState({ loading: true });\n\n try {\n await Auth.signIn(email.toLowerCase(), password);\n handleAuth(true);\n } catch (e) {\n if (e.name === 'QuotaExceededError' && retryIfQuotaExceeded) {\n window.localStorage.clear();\n\n await this.handleSubmit(event, false);\n return;\n }\n\n if (e.code === 'UserNotConfirmedException') {\n // @FIXME: handle \"LimitExceededException\" on resendSignUp\n let codeLastSent = '';\n\n try {\n codeLastSent = window.localStorage.getItem(\n 'confirmation_code_sent'\n );\n } catch (localStorageErr) {\n console.error(localStorageErr);\n }\n\n if (\n !codeLastSent ||\n moment(codeLastSent) < moment().subtract(18, 'hours')\n ) {\n await Auth.resendSignUp(email.toLowerCase());\n try {\n window.localStorage.setItem(\n 'confirmation_code_sent',\n new Date().toISOString()\n );\n } catch (localStorageErr) {\n console.error(localStorageErr);\n }\n }\n\n this.setState({\n showConfirmation: true\n });\n }\n this.setState({\n error: e.message,\n loading: false\n });\n }\n };\n\n validateForm() {\n const { email, password } = this.state;\n\n return validateEmail(email) && password.length > 0;\n }\n\n renderLoginForm() {\n const { classes } = this.props;\n const { email, password, error, loading } = this.state;\n\n return (\n
\n \n \n \n Don{\"'\"}t have a ShuttleID account?{' '}\n \n Register\n \n .\n \n \n \n {error}\n
\n \n \n \n Forgot password\n \n \n
\n \n
\n );\n }\n\n render() {\n const { handleAuth } = this.props;\n const { email, password, showConfirmation } = this.state;\n\n return (\n
\n {!showConfirmation ? (\n this.renderLoginForm()\n ) : (\n \n )}\n
\n );\n }\n}\n\nLogin.propTypes = {\n handleAuth: PropTypes.func.isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(Login);\n","import React from 'react';\nimport PhoneInput from 'react-phone-number-input';\nimport 'react-phone-number-input/style.css';\n\nimport './PhoneNumberInput.css';\n\nconst SUPPORTED_COUNTRY_CODES = ['GB', 'IE'];\n\nconst DEFAULT_COUNTRY = process.env.REACT_APP_DEFAULT_PHONE_COUNTRY || 'GB';\n\nconst PhoneNumberInput = ({\n number,\n onChange,\n onCountryChange,\n errorMessage,\n placeholder = 'Your phone number',\n label = 'Your mobile number'\n}) => {\n return (\n \n \n {/* eslint-disable-next-line jsx-a11y/label-has-for,jsx-a11y/label-has-associated-control */}\n \n {label}\n \n {errorMessage &&

{errorMessage}

}\n \n );\n};\n\nexport default PhoneNumberInput;\n","export const INVALID_ACCOUNT_STRIPE_ERROR = 'Invalid account.';\nexport const INVALID_ACCOUNT_FRIENDLY_ERROR =\n 'Your card, or the account connected to it, appears invalid. Double check your details and contact your card issuer to ensure working order. Alternatively, please try a different card if you have access to one.';\nexport const FAILED_AUTH_PAYMENT_ERROR =\n 'We are unable to authenticate your payment method. Please choose a different payment method and try again.';\n\nexport const CARD_ADD_DECLINED_STRIPE_ERROR = 'Card declined';\nexport const CARD_ADD_DECLINED_FRIENDLY_ERROR =\n 'Card declined. Double check your details and contact your card issuer to ensure working order. Alternatively, please try a different card if you have access to one.';\n\nexport const CARD_ADD_ERROR_STRIPE_ERROR = 'Card error';\nexport const CARD_ADD_ERROR_FRIENDLY_ERROR =\n 'Card error. Double check your details and contact your card issuer to ensure working order. Alternatively, please try a different card if you have access to one.';\n\nexport const CARD_ADD_INVALID_REQ_STRIPE_ERROR = 'Invalid request';\nexport const CARD_ADD_INVALID_REQ_FRIENDLY_ERROR =\n 'Card error. Double check your details and contact your card issuer to ensure working order. Alternatively, please try a different card if you have access to one.';\n\nexport const DEFAULT_ERROR =\n 'There was an issue confirming your order. Please check your email to see if your order was successful. If no email is received you are safe to re-attempt your order.';\n\nconst errorMap = {\n [INVALID_ACCOUNT_STRIPE_ERROR]: INVALID_ACCOUNT_FRIENDLY_ERROR,\n [FAILED_AUTH_PAYMENT_ERROR]: FAILED_AUTH_PAYMENT_ERROR,\n [CARD_ADD_DECLINED_STRIPE_ERROR]: CARD_ADD_DECLINED_FRIENDLY_ERROR,\n [CARD_ADD_ERROR_STRIPE_ERROR]: CARD_ADD_ERROR_FRIENDLY_ERROR\n};\n\n// eslint-disable-next-line import/prefer-default-export\nexport const getFriendlyPaymentError = (error, defaultErrorMessage) => {\n let errMessage = error.message;\n let defaultErr = defaultErrorMessage;\n\n if (error.force) {\n if (error.detail) {\n return `${error.message}: ${error.detail}`;\n }\n return error.message;\n }\n\n if (error.response) {\n errMessage = error.response.data.error;\n defaultErr = error.response.data.error;\n }\n\n return errorMap[errMessage] || defaultErr;\n};\n\nexport const isSafePaymentError = error => {\n return error !== DEFAULT_ERROR;\n};\n\nexport const isValidPhoneNumber = (number, countryCode) => {\n if (countryCode === 'GB') {\n return /^(?:07|\\+?447)(?:\\d\\s?){9}$/.test(number);\n }\n\n if (countryCode === 'IE') {\n return /^(?:08|\\+?3538)(?:\\d\\s?){8}$/.test(number);\n }\n\n return false;\n};\n\nexport const getInvalidPhoneNumberMessage = countryCode => {\n if (countryCode === 'GB') {\n return 'Please provide a valid UK (+447) mobile number';\n }\n\n if (countryCode === 'IE') {\n return 'Please provide a valid ROI (+3538) mobile number';\n }\n\n return 'Please provide a valid UK or IE mobile number';\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport TextField from '@material-ui/core/TextField';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Typography } from '@material-ui/core';\nimport red from '@material-ui/core/colors/red';\nimport { Auth } from 'aws-amplify';\nimport { Link } from 'react-router-dom';\nimport queryString from 'query-string';\nimport {\n validateEmail,\n validatePassword,\n validatePasswordContainsLowerCase,\n validatePasswordContainsUpperCase,\n validatePasswordContainsDigits,\n validatePasswordNoWhitespace\n} from '../helpers/validators';\nimport LoaderButton from '../components/LoaderButton';\nimport ConfirmationForm from '../components/ConfirmationForm';\nimport ContentHeader from '../components/ContentHeader';\nimport globalStyles from '../styles';\nimport PhoneNumberInput from '../components/PhoneNumberInput';\nimport { isValidPhoneNumber } from '../helpers/errors';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n textAlign: 'center',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '800px',\n margin: '20px auto 40px',\n padding: '0 10px 20px'\n },\n input: {\n margin: '0 20px 10px'\n },\n button: {\n width: '200px',\n height: '56px',\n margin: '0 auto 20px'\n },\n error: {\n margin: '0 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n login: {\n fontSize: '1em',\n marginBottom: '1em'\n },\n passwordHelp: {\n fontSize: '.8em'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n }\n});\n\nclass Register extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n email: '',\n phone: '',\n password: '',\n confirmPassword: '',\n error: '',\n newUser: null,\n loading: false,\n countryCode: process.env.REACT_APP_DEFAULT_PHONE_COUNTRY || 'GB'\n };\n }\n\n getLoginLink = () => {\n const { props } = this;\n const qs = queryString.parse(props.location.search, {\n ignoreQueryPrefix: true\n });\n\n if ('redirect' in qs) {\n return `/login?redirect=${qs.redirect}`;\n }\n\n return `/login`;\n };\n\n handleChange = event => {\n this.setState({\n [event.target.id]: event.target.value,\n error: false\n });\n };\n\n handlePhoneChange = number => {\n this.setState({\n phone: number,\n error: false\n });\n };\n\n handleCountryCodeChange = code => {\n this.setState({\n countryCode: code,\n error: false\n });\n };\n\n handleSubmit = async event => {\n event.preventDefault();\n const { email, phone, password } = this.state;\n\n if (this.validateForm(true)) {\n this.setState({ loading: true });\n\n try {\n const newUser = await Auth.signUp({\n username: email.toLowerCase(),\n password,\n attributes: {\n phone_number: phone\n }\n });\n window.localStorage.setItem(\n 'confirmation_code_sent',\n new Date().toISOString()\n );\n this.setState({\n newUser\n });\n } catch (e) {\n this.setState({\n error: e.message\n });\n }\n\n this.setState({ loading: false });\n }\n };\n\n validateForm() {\n const {\n email,\n phone,\n password,\n confirmPassword,\n countryCode\n } = this.state;\n let errorMessage = null;\n\n if (!validateEmail(email)) {\n errorMessage = 'Please enter a valid email';\n } else if (!isValidPhoneNumber(phone, countryCode)) {\n errorMessage =\n 'Please only provide numbers in the phone number and enough digits for a valid number.';\n } else if (!validatePassword(password)) {\n if (password.length < 8) {\n errorMessage = `Your password length is only ${\n password.length\n }. It needs to be at least 8.`;\n } else if (!validatePasswordContainsLowerCase(password)) {\n errorMessage = `Your password needs to contain at least 1 lowercase letter.`;\n } else if (!validatePasswordContainsUpperCase(password)) {\n errorMessage = `Your password needs to contain at least 1 uppercase letter.`;\n } else if (!validatePasswordContainsDigits(password)) {\n errorMessage = `Your password needs to contain at least 1 digit.`;\n } else if (!validatePasswordNoWhitespace(password)) {\n errorMessage = `Your password cannot contain whitespace.`;\n } else {\n errorMessage = `Only the following special characters are supported: @ $ ! % * ? & - _ = ' \" ~ \\` [ ] { } + ^ ( ) : ; , . | / \\\\ < > #`;\n }\n } else if (password !== confirmPassword) {\n errorMessage = 'Passwords do not match';\n }\n\n if (errorMessage) {\n this.setState({\n error: errorMessage\n });\n\n return false;\n }\n\n return true;\n }\n\n enableButton() {\n const { email, password, phone, confirmPassword } = this.state;\n\n return (\n email.length > 0 &&\n password.length > 0 &&\n phone &&\n phone.length > 0 &&\n password === confirmPassword\n );\n }\n\n renderForm() {\n const { classes } = this.props;\n const {\n email,\n phone,\n password,\n confirmPassword,\n error,\n loading\n } = this.state;\n\n return (\n
\n \n
\n \n Create an account with ShuttleID.\n \n \n You{\"'\"}ll be able to purchase tickets for multiple{' '}\n passengers using this{' '}\n single account.\n \n \n We{\"'\"}ll use the contact details below if there{\"'\"}s\n an issue with your account or any of your purchases.\n \n \n Already have an account?{' '}\n \n Login\n \n .\n \n \n \n \n \n \n We request passwords to be a minimum 8 characters and to\n include at least 1 number, 1 lowercase and 1 uppercase\n letter.\n \n \n {error}\n \n \n \n
\n );\n }\n\n render() {\n const { newUser, email, password } = this.state;\n const { handleAuth } = this.props;\n\n return (\n
\n {newUser === null ? (\n this.renderForm()\n ) : (\n
\n \n
\n )}\n
\n );\n }\n}\n\nRegister.propTypes = {\n classes: PropTypes.shape().isRequired,\n handleAuth: PropTypes.func.isRequired\n};\n\nexport default withStyles(styles)(Register);\n","/* eslint-disable no-restricted-globals */\nimport moment from 'moment';\nimport { getCurrencySymbol, parseTravelPattern } from './ticket';\n\nexport const formatDate = dateString => {\n return moment(dateString).format('ddd Do MMM YYYY HH:mm');\n};\n\nexport const formatTicketType = (\n serviceName,\n ticketType,\n ticketSubType,\n ticketTravelPattern,\n ticketOptionName\n) => {\n let ticketName = `${serviceName} ${ticketType\n .charAt(0)\n .toUpperCase()}${ticketType.slice(1)}`;\n\n ticketName = ticketName.replace('_', ' ');\n\n if (ticketOptionName) {\n ticketName += ` ${ticketOptionName}`;\n }\n\n if (ticketSubType && ticketSubType === 'pm_only') {\n ticketName += ' (PM Only)';\n } else if (ticketSubType && ticketSubType === 'am_only') {\n ticketName += ' (AM Only)';\n } else if (ticketSubType === 'custom' && ticketTravelPattern) {\n ticketName += ` (${parseTravelPattern(ticketTravelPattern)} Only)`;\n }\n\n return ticketName;\n};\n\nexport const formatPrice = (price, currency) => {\n const formattedPrice = Number(price);\n\n if (isNaN(formattedPrice)) {\n return '';\n }\n\n return `${getCurrencySymbol(currency)}${Number(price).toFixed(2)}`;\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { CardElement, injectStripe } from 'react-stripe-elements';\nimport {\n withStyles,\n Typography,\n withWidth,\n CircularProgress,\n Icon\n} from '@material-ui/core';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport { withRouter } from 'react-router-dom';\nimport axios from 'axios';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport LoaderButton from './LoaderButton';\nimport { formatPrice } from '../helpers/formatters';\nimport {\n DEFAULT_ERROR,\n getFriendlyPaymentError,\n isSafePaymentError\n} from '../helpers/errors';\nimport globalStyles from '../styles';\n\nconst styles = {\n root: {\n marginTop: '20px',\n minHeight: '100px',\n marginBottom: '20px',\n padding: '0 10px 10px',\n textAlign: 'center'\n },\n card: {\n margin: '30px auto 15px auto',\n maxWidth: '360px',\n border: '1px solid rgba(0, 0, 0, 0.23)',\n borderRadius: '4px',\n padding: '10px 0 10px 8px'\n },\n button: {\n margin: '20px 0 20px',\n width: '200px',\n height: '56px'\n },\n error: {\n margin: '20px 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n saveCard: {\n display: 'inline',\n marginLeft: 14,\n marginTop: 18\n },\n spinner: {\n marginTop: 60,\n marginBottom: 60,\n marginLeft: 'calc(50% - 22px)'\n },\n icon: {\n fontSize: 25\n },\n existingCardParent: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: 20\n },\n existingCard: {\n ...globalStyles.savedCard,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '0 10px',\n flexWrap: 'wrap'\n },\n existingCardHeader: {\n flexBasis: '100%',\n marginTop: 10,\n ...globalStyles.savedCardHeader\n },\n changeCard: {\n width: 'auto',\n height: 'auto',\n padding: '5px',\n lineHeight: '1',\n marginLeft: 10,\n fontSize: 12\n }\n};\n\nclass PaymentForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n processing: false,\n error: '',\n cardError: '',\n cardValid: false,\n paymentError: false,\n saveCard: false,\n saveReplacedCard: false,\n paymentMethods: null,\n isLoadingPaymentMethods: true\n };\n }\n\n async componentDidMount() {\n try {\n // get customer payment methods\n const { client } = this.props;\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/payment-methods/${\n currentSession.getAccessToken().payload.sub\n }/${client.slug}`,\n {\n headers\n }\n );\n\n // if any, set state\n if (\n response.data &&\n response.data.data &&\n response.data.data.length\n ) {\n this.setState({\n paymentMethods: response.data.data,\n isLoadingPaymentMethods: false\n });\n } else {\n this.setState({\n isLoadingPaymentMethods: false\n });\n }\n } catch (error) {\n console.error(error);\n this.setState({\n isLoadingPaymentMethods: false\n });\n }\n }\n\n uploadImage = async () => {\n const { passenger } = this.props;\n\n try {\n const response = await axios.post(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/pre-signed-url`,\n {\n fileType: passenger.photo.type,\n fileSize: passenger.photo.size\n }\n );\n\n // @NOTE: Skip photo upload for automated tests\n // This will also break photos for local dev.\n // @TODO: Fix so skipped for tests but available for local dev\n if (process.env.NODE_ENV !== 'development') {\n await axios.put(response.data.preSignedUrl, passenger.photo, {\n headers: {\n 'Content-Type': passenger.photo.type\n }\n });\n }\n\n return response.data.fileName;\n } catch (error) {\n throw new Error(error);\n }\n };\n\n handleSubmit = async () => {\n const { cardError, cardValid, paymentMethods } = this.state;\n const { buyAgain, disablePhoto, ticket } = this.props;\n\n // Only check for card errors if there is value to pay\n // Full voucher value means no card validation required\n if (Number(this.netPrice()) >= 1) {\n if (cardError) {\n this.setState({\n error: cardError\n });\n return;\n }\n if (!cardValid && !paymentMethods) {\n this.setState({\n error: 'Please complete all card details including postcode'\n });\n return;\n }\n } else if (Number(this.netPrice()) > 0) {\n this.setState({\n error: `Invalid amount. Amount can only be 0 or a minimum of ${formatPrice(\n 1,\n ticket.currency\n )} using card payment.`\n });\n return;\n }\n\n let imageFileName;\n\n this.setState({\n processing: true,\n error: ''\n });\n\n if (!buyAgain && !disablePhoto) {\n try {\n imageFileName = await this.uploadImage();\n } catch (e) {\n console.error(e);\n\n if (e.response && e.response.status === 403) {\n this.setState({\n processing: false,\n error:\n 'Your photo failed to upload in time. Please retry with either a smaller image or on a faster network (WiFi).'\n });\n } else {\n this.setState({\n processing: false,\n error:\n 'There was a problem uploading your image. Please ensure it is a portrait photo and less than 10MB in size.'\n });\n }\n return;\n }\n }\n\n try {\n await this.handleInitialPayment(imageFileName);\n } catch (e) {\n console.error(e);\n const error = getFriendlyPaymentError(e, DEFAULT_ERROR);\n this.setState({\n processing: false,\n error,\n paymentError: !isSafePaymentError(error)\n });\n }\n };\n\n handleInitialPayment = async imageFileName => {\n const {\n stripe,\n history,\n ticket,\n service,\n passenger,\n client,\n voucher,\n buyAgain,\n disablePhoto\n } = this.props;\n\n const { saveCard, saveReplacedCard, paymentMethods } = this.state;\n\n let paymentMethodId;\n\n // Only create payment method when there is something to charge.\n // A full value voucher will hide card field.\n if (this.netPrice() > 0) {\n if (paymentMethods && paymentMethods.length) {\n paymentMethodId = paymentMethods[0].id;\n } else {\n let paymentError;\n\n try {\n const {\n paymentMethod,\n error\n } = await stripe.createPaymentMethod(\n 'card',\n this.cardElement\n );\n\n if (!error) {\n paymentMethodId = paymentMethod.id;\n } else {\n paymentError = error;\n }\n } catch (paymentMethodError) {\n const err = new Error(\n `Error adding payment method: ${\n paymentMethodError.message\n }`\n );\n err.force = true;\n throw err;\n }\n\n if (paymentError) {\n if (paymentError.code === 'card_declined') {\n throw new Error('Card declined');\n } else if (paymentError.type === 'card_error') {\n throw new Error('Card error');\n } else if (paymentError.type === 'invalid_request_error') {\n const err = new Error('Invalid request');\n err.force = true;\n if (paymentError.param) {\n err.detail = paymentError.param;\n }\n throw err;\n } else {\n const err = new Error('Card api error');\n err.force = true;\n if (paymentError.message) {\n err.detail = paymentError.message;\n }\n throw err;\n }\n }\n }\n }\n\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const body = {\n payment_method_id: paymentMethodId,\n ticket,\n voucher,\n service,\n passenger: {\n ...passenger\n },\n client,\n save_card: saveCard || saveReplacedCard\n };\n\n if (!disablePhoto) {\n body.passenger.photo = buyAgain ? passenger.photo : imageFileName;\n }\n\n const response = await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-ticket/stripe`,\n body,\n {\n headers\n }\n );\n\n if (response.data.id) {\n const ticketYear = ticket.year.replace('/', '-');\n\n const isAdhoc =\n ticket.type === 'single' ||\n ticket.type === 'return' ||\n ticket.type === 'week' ||\n ticket.type === '4_week';\n\n let confirmUrl = `/order-confirmed/${\n response.data.id\n }/${ticketYear}/${client.slug}/${service.id}/${ticket.id}`;\n\n if (isAdhoc) {\n confirmUrl = `/order-confirmed/adhoc/${\n response.data.id\n }/${ticketYear}/${client.id}/${client.slug}/${service.id}/${\n ticket.id\n }`;\n }\n\n if (ticket.sub_type === 'fixed') {\n confirmUrl += '?is_fixed=true';\n }\n\n history.push(confirmUrl);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else if (\n response.data.requires_action &&\n response.data.payment_intent_client_secret\n ) {\n await this.handleActionPayment(response.data, imageFileName);\n } else {\n throw new Error('Problem creating payment intent.');\n }\n };\n\n handleActionPayment = async (paymentResponse, imageFileName) => {\n const {\n stripe,\n history,\n ticket,\n service,\n passenger,\n client,\n voucher,\n buyAgain,\n disablePhoto\n } = this.props;\n\n const {\n error: errorAction,\n paymentIntent\n } = await stripe.handleCardAction(\n paymentResponse.payment_intent_client_secret\n );\n\n if (errorAction) {\n throw new Error(errorAction.message);\n } else {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const body = {\n payment_intent_id: paymentIntent.id,\n ticket,\n service,\n voucher,\n passenger: {\n ...passenger\n },\n client\n };\n\n if (!disablePhoto) {\n body.passenger.photo = buyAgain\n ? passenger.photo\n : imageFileName;\n }\n\n const response = await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-ticket/stripe`,\n body,\n {\n headers\n }\n );\n\n if (response.data.id) {\n const ticketYear = ticket.year.replace('/', '-');\n\n const isAdhoc =\n ticket.type === 'single' ||\n ticket.type === 'return' ||\n ticket.type === 'week' ||\n ticket.type === '4_week';\n\n let confirmUrl = `/order-confirmed/${\n response.data.id\n }/${ticketYear}/${client.slug}/${service.id}/${ticket.id}`;\n\n if (isAdhoc) {\n confirmUrl = `/order-confirmed/adhoc/${\n response.data.id\n }/${ticketYear}/${client.id}/${client.slug}/${service.id}/${\n ticket.id\n }`;\n }\n history.push(confirmUrl);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else if (\n response.data.requires_action &&\n response.data.payment_intent_client_secret\n ) {\n await this.handleAction(response.data, imageFileName);\n } else {\n throw new Error('Problem confirming payment intent.');\n }\n }\n };\n\n handleReady = element => {\n this.cardElement = element;\n this.cardElement.on('change', response => {\n const cardValid = !response.empty && response.complete;\n const cardError = response.error ? response.error.message : '';\n this.setState({\n cardValid,\n cardError\n });\n });\n };\n\n netPrice = () => {\n const { ticket, voucher, passenger } = this.props;\n\n const useZones =\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_prices &&\n passenger.zone;\n const ticketPrice = useZones\n ? ticket.zone_prices[passenger.zone]\n : ticket.price;\n\n if (voucher) {\n return ticketPrice - voucher.value;\n }\n return ticketPrice;\n };\n\n handleCheckboxChange = event => {\n this.setState({ [event.target.name]: event.target.checked });\n };\n\n render() {\n const { classes, width, client, service, ticket } = this.props;\n const {\n processing,\n error,\n paymentError,\n saveCard,\n saveReplacedCard,\n paymentMethods,\n isLoadingPaymentMethods\n } = this.state;\n\n const hasPaymentMethods = paymentMethods && paymentMethods.length;\n\n if (isLoadingPaymentMethods) {\n return (\n \n );\n }\n\n return (\n
\n \n By completing this purchase, I confirm I have read and\n accepted the following:\n \n {service.terms_url && (\n \n \n {client.name} T&Cs\n \n \n )}\n \n \n ShuttleID T&Cs\n \n \n\n {this.netPrice() >= 1 && (\n <>\n {!hasPaymentMethods && (\n <>\n \n {!saveReplacedCard && (\n
\n \n \n \n }\n label=\"Save card details\"\n />\n \n \n
\n )}\n \n )}\n {hasPaymentMethods && (\n
\n
\n
\n Saved card\n
\n \n credit_card\n \n \n ****-****-****-\n {paymentMethods[0].card.last4}\n \n {\n this.setState({\n paymentMethods: null,\n saveReplacedCard: true\n });\n }}\n />\n
\n
\n )}\n \n )}\n {error && (\n \n {error}\n \n )}\n\n \n
\n );\n }\n}\n\nPaymentForm.propTypes = {\n classes: PropTypes.shape().isRequired,\n stripe: PropTypes.shape().isRequired,\n ticket: PropTypes.shape().isRequired,\n service: PropTypes.shape().isRequired,\n passenger: PropTypes.shape().isRequired,\n client: PropTypes.shape().isRequired,\n buyAgain: PropTypes.bool,\n disablePhoto: PropTypes.bool\n};\n\nPaymentForm.defaultProps = {\n buyAgain: false,\n disablePhoto: false\n};\n\nexport default withStyles(styles)(\n injectStripe(withRouter(withWidth()(PaymentForm)))\n);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles, Typography } from '@material-ui/core';\nimport TextField from '@material-ui/core/TextField';\nimport axios from 'axios';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport LoaderButton from './LoaderButton';\nimport { getCurrencySymbol } from '../helpers/ticket';\n\nconst styles = {\n root: {\n marginTop: '20px',\n minHeight: '100px',\n marginBottom: '20px',\n padding: '0 10px 10px',\n textAlign: 'center'\n },\n input: {\n width: '100%',\n maxWidth: '250px',\n display: 'inline-block',\n margin: '15px auto 25px',\n verticalAlign: 'unset',\n '& > div': {\n display: 'block'\n },\n '& input': {\n maxWidth: '220px'\n }\n },\n discountApplied: {\n marginTop: '-10px',\n marginBottom: '5px',\n color: 'rgba(44, 136, 0, 0.87)'\n },\n button: {\n margin: '15px 0 25px 10px',\n height: '56px',\n verticalAlign: 'top'\n },\n error: {\n marginTop: '-10px',\n marginBottom: '5px',\n color: red[500]\n }\n};\n\nclass VoucherForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n processing: false,\n error: '',\n voucherValue: 0.0,\n voucherId: '',\n applied: false\n };\n }\n\n handleChange = event => {\n this.setState({\n voucherId: event.target.value\n });\n };\n\n handleApply = async () => {\n this.setState({\n processing: true,\n error: '',\n applied: false,\n voucherValue: 0.0\n });\n\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const { voucherId } = this.state;\n const { client, setVoucher } = this.props;\n\n try {\n const response = await axios.post(\n `${process.env.REACT_APP_PAYMENT_API_ENDPOINT}/voucher/apply/${\n client.id\n }/${voucherId.trim()}`,\n null,\n {\n headers\n }\n );\n\n if (response.data.id) {\n this.setState({\n processing: false,\n applied: true,\n voucherValue: response.data.value,\n voucherCurrency: response.data.currency || 'gbp'\n });\n\n setVoucher(response.data);\n } else {\n this.setState({\n error: 'Invalid voucher code.',\n processing: false,\n applied: false\n });\n setVoucher(null);\n }\n } catch (e) {\n console.error(e);\n this.setState({\n error: 'Invalid voucher code.',\n processing: false,\n applied: false\n });\n setVoucher(null);\n }\n };\n\n render() {\n const { classes, message } = this.props;\n const {\n voucherId,\n processing,\n error,\n applied,\n voucherValue,\n voucherCurrency\n } = this.state;\n\n const enableTextField = !applied;\n\n return (\n
\n \n \n {!error && applied && (\n <>\n \n {getCurrencySymbol(voucherCurrency)}\n {voucherValue} voucher code applied!\n \n {message}\n \n )}\n {error && (\n \n {error}\n \n )}\n
\n );\n }\n}\n\nVoucherForm.propTypes = {\n classes: PropTypes.shape().isRequired,\n client: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(VoucherForm);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { withStyles, Typography, Button } from '@material-ui/core';\nimport { Elements, StripeProvider } from 'react-stripe-elements';\nimport PaymentForm from './PaymentForm';\nimport VoucherForm from './VoucherForm';\nimport ContentHeader from './ContentHeader';\nimport {\n formatTicketType,\n formatDate,\n formatPrice\n} from '../helpers/formatters';\nimport { getCurrencySymbol } from '../helpers/ticket';\n\nconst styles = {\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)'\n },\n description: {\n padding: '10px',\n marginBottom: '20px',\n fontWeight: '100'\n },\n button: {\n height: '40px',\n marginTop: '10px',\n marginBottom: '10px'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n },\n imagePreview: {\n minHeight: '56px',\n margin: '20px auto 0',\n width: '100%',\n maxWidth: '400px',\n display: 'flex',\n justifyContent: 'center',\n '& > img': {\n maxWidth: '100%'\n },\n '@media only screen and (max-device-width: 400px)': {\n margin: '0 auto 0'\n }\n }\n};\n\nclass ConfirmPurchase extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n voucher: null,\n stripe: null\n };\n }\n\n async componentDidMount() {\n const { client } = this.props;\n const stripe = window.Stripe(process.env.REACT_APP_STRIPE_PUB_KEY, {\n stripeAccount: client.stripe_account_id\n });\n\n this.setState({\n stripe\n });\n }\n\n setVoucher = voucher => {\n this.setState({ voucher });\n };\n\n netPrice = price => {\n const { voucher } = this.state;\n if (voucher) {\n return price - voucher.value;\n }\n return price;\n };\n\n calcEndDate = (type, startDate) => {\n if (type === 'week') {\n const endDate = moment(startDate.toISOString());\n endDate.add(6, 'days').endOf('day');\n return endDate.format('ddd Do MMM YYYY');\n }\n\n if (type === '4_week') {\n const endDate = moment(startDate.toISOString());\n endDate\n .add(4, 'weeks')\n .subtract(1, 'days')\n .endOf('day');\n return endDate.format('ddd Do MMM YYYY');\n }\n\n if (type === 'return') {\n const endDate = moment(startDate.toISOString());\n endDate.endOf('day');\n return endDate.format('ddd Do MMM YYYY');\n }\n\n return 'Unknown';\n };\n\n render() {\n const {\n handleEdit,\n passenger,\n ticket,\n client,\n service,\n imagePreviewUrl,\n classes,\n buyAgain,\n disablePhoto,\n requireStudentId\n } = this.props;\n\n const { voucher, stripe } = this.state;\n\n if (!stripe) {\n return <>;\n }\n\n const isFlexiAndNotSingle =\n ticket.type === 'week' ||\n ticket.type === '4_week' ||\n ticket.type === 'return';\n\n const {\n firstName,\n lastName,\n zone,\n zoneStop,\n stop,\n dest,\n yr,\n startDate,\n startTime,\n id\n } = passenger;\n\n const useZones =\n ticket.pricing_model === 'Zonal' && ticket.zone_prices && zone;\n\n return (\n \n
\n
\n \n {!buyAgain && imagePreviewUrl && (\n
\n \"Ticket\n
\n )}\n
\n \n Passenger: {firstName} {lastName}\n \n {requireStudentId && id && (\n \n Student ID: {id}\n \n )}\n {stop && (\n \n Bus stop: {stop}\n \n )}\n {zone && (\n \n Zone: {zone}\n \n )}\n {zoneStop && (\n \n Bus stop: {zoneStop}\n \n )}\n {dest && (\n \n Destination: {dest}\n \n )}\n {yr && (\n \n Year group:{' '}\n \n {yr}\n \n \n )}\n \n Ticket:{' '}\n {formatTicketType(\n service.name,\n ticket.type,\n ticket.sub_type,\n ticket.travel_pattern,\n ticket.name\n )}\n \n {ticket.start && (\n \n Valid from: {formatDate(ticket.start)}\n \n )}\n {ticket.expiry && (\n \n Valid until: {formatDate(ticket.expiry)}\n \n )}\n {startDate && startTime && (\n \n Valid: {startDate.format('ddd Do MMM YYYY')}{' '}\n - {startTime.toUpperCase()} Only\n \n )}\n {startDate && isFlexiAndNotSingle && (\n <>\n \n Valid from:{' '}\n {startDate.format('ddd Do MMM YYYY')}{' '}\n \n \n Valid until:{' '}\n {this.calcEndDate(\n ticket.type,\n startDate\n )}\n \n \n )}\n \n Price:{' '}\n {formatPrice(\n this.netPrice(\n useZones\n ? ticket.zone_prices[zone]\n : ticket.price\n ),\n ticket.currency\n )}{' '}\n {ticket.type === 'flexi' &&\n `(${\n ticket.default_trips\n } trips x ${getCurrencySymbol(\n ticket.currency\n )}${\n useZones\n ? ticket.zone_trip_prices[zone]\n : ticket.trip_price\n })`}\n \n \n Edit\n \n
\n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n
\n );\n }\n}\n\nConfirmPurchase.propTypes = {\n handleEdit: PropTypes.func.isRequired,\n passenger: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n photo: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n stop: PropTypes.string\n }).isRequired,\n ticket: PropTypes.shape({\n start: PropTypes.string,\n expiry: PropTypes.string,\n price: PropTypes.string\n }).isRequired,\n client: PropTypes.shape().isRequired,\n service: PropTypes.shape().isRequired,\n imagePreviewUrl: PropTypes.string,\n classes: PropTypes.shape().isRequired,\n buyAgain: PropTypes.bool,\n disablePhoto: PropTypes.bool,\n requireStudentId: PropTypes.bool\n};\n\nConfirmPurchase.defaultProps = {\n imagePreviewUrl: '',\n buyAgain: false,\n disablePhoto: false,\n requireStudentId: false\n};\n\nexport default withStyles(styles)(ConfirmPurchase);\n","// eslint-disable-next-line import/prefer-default-export\nexport const contactOperatorString = client => {\n const supportDetails = client && client.support ? client.support : null;\n\n if (!(supportDetails && supportDetails.name)) {\n return 'your transport provider directly';\n }\n\n let contactString = supportDetails.name;\n\n if (supportDetails.email) {\n contactString += ` at ${supportDetails.email}`;\n if (supportDetails.phone) {\n contactString += ` or on ${supportDetails.phone}`;\n }\n } else if (supportDetails.phone) {\n contactString += ` on ${supportDetails.phone}`;\n }\n\n return contactString;\n};\n","export const calc = (ticket, serviceAvailability, date, startTime) => {\n if (\n ticket.type === 'annual' ||\n ticket.type === 'autumn' ||\n ticket.type === 'spring' ||\n ticket.type === 'summer' ||\n !date\n ) {\n return null;\n }\n\n if (ticket.type === 'single') {\n if (!startTime) {\n return null;\n }\n const calendarDate = date.format('YYYYMMDD') + startTime.toUpperCase();\n if (serviceAvailability && calendarDate in serviceAvailability) {\n return serviceAvailability[calendarDate];\n }\n }\n\n if (ticket.type === 'return') {\n const calendarAMDate = `${date.format('YYYYMMDD')}AM`;\n const calendarPMDate = `${date.format('YYYYMMDD')}PM`;\n const amAvailability = serviceAvailability[calendarAMDate];\n const pmAvailability = serviceAvailability[calendarPMDate];\n\n return amAvailability > pmAvailability\n ? pmAvailability\n : amAvailability;\n }\n\n if (ticket.type === 'week') {\n const currentDate = date.clone().startOf('day');\n const oneWeek = date\n .clone()\n .endOf('day')\n .add(6, 'days');\n\n const dates = [];\n\n while (currentDate <= oneWeek) {\n dates.push(currentDate.format('YYYYMMDDA'));\n currentDate.add(12, 'hours');\n }\n\n let lowestAvailability = null;\n\n dates.forEach(day => {\n lowestAvailability =\n lowestAvailability === null ||\n lowestAvailability > serviceAvailability[day]\n ? serviceAvailability[day]\n : lowestAvailability;\n });\n\n return lowestAvailability;\n }\n\n if (ticket.type === '4_week') {\n const currentDate = date.clone().startOf('day');\n const fourWeek = date\n .clone()\n .endOf('day')\n .add(4, 'weeks')\n .subtract(1, 'day');\n\n const dates = [];\n\n while (currentDate <= fourWeek) {\n dates.push(currentDate.format('YYYYMMDDA'));\n currentDate.add(12, 'hours');\n }\n\n let lowestAvailability = null;\n\n dates.forEach(day => {\n lowestAvailability =\n lowestAvailability === null ||\n lowestAvailability > serviceAvailability[day]\n ? serviceAvailability[day]\n : lowestAvailability;\n });\n\n return lowestAvailability;\n }\n\n return 0;\n};\n\nexport const isDateAvailable = (\n ticket,\n serviceAvailability,\n date,\n startTime\n) => {\n if (ticket.type === 'single') {\n if (startTime !== 'am' && startTime !== 'pm') {\n return false;\n }\n const calendarDate = date.format('YYYYMMDD') + startTime.toUpperCase();\n if (\n serviceAvailability &&\n calendarDate in serviceAvailability &&\n serviceAvailability[calendarDate] <= 0\n ) {\n return false;\n }\n return true;\n }\n\n if (ticket.type === 'return') {\n const calendarAMDate = `${date.format('YYYYMMDD')}AM`;\n const calendarPMDate = `${date.format('YYYYMMDD')}PM`;\n const amAvailability = serviceAvailability[calendarAMDate];\n const pmAvailability = serviceAvailability[calendarPMDate];\n\n const lowestAvailability =\n amAvailability > pmAvailability ? pmAvailability : amAvailability;\n return lowestAvailability > 0;\n }\n\n if (ticket.type === 'week') {\n const currentDate = date.clone().startOf('day');\n const oneWeek = date\n .clone()\n .endOf('day')\n .add(6, 'days');\n\n const dates = [];\n\n while (currentDate <= oneWeek) {\n dates.push(currentDate.format('YYYYMMDDA'));\n currentDate.add(12, 'hours');\n }\n\n let lowestAvailability = null;\n\n dates.forEach(day => {\n lowestAvailability =\n lowestAvailability === null ||\n lowestAvailability > serviceAvailability[day]\n ? serviceAvailability[day]\n : lowestAvailability;\n });\n\n return lowestAvailability > 0;\n }\n\n if (ticket.type === '4_week') {\n const currentDate = date.clone().startOf('day');\n const fourWeeks = date\n .clone()\n .endOf('day')\n .add(4, 'weeks')\n .subtract(1, 'day');\n\n const dates = [];\n\n while (currentDate <= fourWeeks) {\n dates.push(currentDate.format('YYYYMMDDA'));\n currentDate.add(12, 'hours');\n }\n\n let lowestAvailability = null;\n\n dates.forEach(day => {\n lowestAvailability =\n lowestAvailability === null ||\n lowestAvailability > serviceAvailability[day]\n ? serviceAvailability[day]\n : lowestAvailability;\n });\n\n return lowestAvailability > 0;\n }\n\n return false;\n};\n\nexport const isUnavailableFn = (ticket, serviceAvailability, passenger) => {\n if (\n ticket.type === 'single' ||\n ticket.type === 'return' ||\n ticket.type === 'week' ||\n ticket.type === '4_week'\n ) {\n const { startTime } = passenger;\n return date => {\n return !isDateAvailable(\n ticket,\n serviceAvailability,\n date,\n startTime\n );\n };\n }\n\n return false;\n};\n\nexport const isAnyAvailable = (ticket, serviceAvailability, today) => {\n if (\n ticket.type === 'annual' ||\n ticket.type === 'autumn' ||\n ticket.type === 'spring' ||\n ticket.type === 'summer' ||\n ticket.type === 'flexi'\n ) {\n return true;\n }\n\n let hasAvailability = false;\n let endDate;\n const currentDate = today.clone().startOf('day');\n\n if (ticket.type === 'single') {\n endDate = today\n .clone()\n .endOf('day')\n .add(7, 'days');\n\n while (currentDate <= endDate) {\n hasAvailability =\n hasAvailability === true ||\n isDateAvailable(\n ticket,\n serviceAvailability,\n currentDate,\n currentDate.format('a')\n );\n currentDate.add(12, 'hours');\n }\n\n return hasAvailability;\n }\n\n if (ticket.type === 'return') {\n endDate = today\n .clone()\n .endOf('day')\n .add(7, 'days');\n\n while (currentDate <= endDate) {\n hasAvailability =\n hasAvailability === true ||\n isDateAvailable(\n ticket,\n serviceAvailability,\n currentDate,\n currentDate.format('a')\n );\n currentDate.add(1, 'day');\n }\n\n return hasAvailability;\n }\n\n if (ticket.type === 'week') {\n endDate = today\n .clone()\n .endOf('day')\n .add(7, 'days');\n\n while (currentDate <= endDate) {\n hasAvailability =\n hasAvailability === true ||\n isDateAvailable(\n ticket,\n serviceAvailability,\n currentDate,\n currentDate.format('a')\n );\n currentDate.add(1, 'day');\n }\n\n return hasAvailability;\n }\n\n if (ticket.type === '4_week') {\n endDate = today\n .clone()\n .endOf('day')\n .add(7, 'days');\n\n while (currentDate <= endDate) {\n hasAvailability =\n hasAvailability === true ||\n isDateAvailable(\n ticket,\n serviceAvailability,\n currentDate,\n currentDate.format('a')\n );\n currentDate.add(1, 'day');\n }\n\n return hasAvailability;\n }\n\n return false;\n};\n","/* eslint-disable jsx-a11y/accessible-emoji */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport MomentUtils from '@date-io/moment';\nimport { DatePicker, MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport { withStyles, Typography, Button } from '@material-ui/core';\nimport TextField from '@material-ui/core/TextField';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport Select from '@material-ui/core/Select';\nimport moment from 'moment';\nimport ContentHeader from './ContentHeader';\nimport {\n calc,\n isUnavailableFn,\n isAnyAvailable,\n isDateAvailable\n} from '../helpers/service-availability';\nimport { getCurrencySymbol, getYearGroups } from '../helpers/ticket';\nimport globalStyles from '../styles';\n\nconst styles = () => ({\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)'\n },\n form: {\n padding: '0 10px 10px'\n },\n description: {\n padding: '20px 0 0',\n fontWeight: '100',\n textAlign: 'center'\n },\n name: {\n margin: '0 auto 20px'\n },\n input: {\n width: '100%',\n maxWidth: '250px',\n display: 'block',\n margin: '20px auto',\n '& > div': {\n display: 'block'\n },\n '& input': {\n width: 220\n }\n },\n button: {\n height: '56px',\n margin: '0 auto 10px'\n },\n uploadButton: {\n height: '56px',\n margin: '0 auto',\n padding: '0.6em'\n },\n confirmButton: {\n height: '56px',\n padding: '0.6em'\n },\n upload: {\n display: 'none'\n },\n imageUpload: {\n margin: '0 0 40px 0',\n textAlign: 'center'\n },\n datePicker: {\n margin: '0 auto 20px',\n maxWidth: '250px',\n '& > div': {\n width: '100%'\n }\n },\n formControl: {\n maxWidth: 250,\n width: '100%',\n margin: '0 auto 20px',\n display: 'flex'\n },\n smallPrint: {\n fontSize: 13,\n textAlign: 'center',\n color: '#444',\n marginBottom: 10\n },\n confirm: {\n display: 'flex'\n },\n zoneMenuItem: {\n whiteSpace: 'normal'\n },\n link: globalStyles.link\n});\n\nconst validateForm = (\n passenger,\n service,\n ticket,\n serviceAvailability,\n useZones\n) => {\n let stopSelectionValid = true;\n let dateValid = true;\n let timeValid = true;\n let availabilityValid = true;\n let yearGroupIsValid = true;\n let destinationValid = true;\n let zoneSelectionValid = true;\n\n if (service && 'stops' in service && !useZones) {\n stopSelectionValid = service.stops.includes(passenger.stop);\n }\n\n if (useZones) {\n const zone =\n passenger.zone &&\n service.zones.find(\n serviceZone => serviceZone.name === passenger.zone\n );\n\n if (zone && (!zone.stops || !zone.stops.length)) {\n zoneSelectionValid = true;\n } else if (\n zone &&\n zone.stops &&\n zone.stops.includes(passenger.zoneStop)\n ) {\n zoneSelectionValid = true;\n } else {\n zoneSelectionValid = false;\n }\n }\n\n if (service && service.destinations && service.destinations.length) {\n destinationValid = service.destinations.includes(passenger.dest);\n }\n\n if (ticket && ticket.type === 'single') {\n dateValid = passenger.startDate;\n timeValid =\n passenger.startTime === 'am' || passenger.startTime === 'pm';\n if (dateValid && timeValid) {\n availabilityValid = isDateAvailable(\n ticket,\n serviceAvailability,\n passenger.startDate,\n passenger.startTime\n );\n }\n }\n\n if (service && 'yr_groups' in service) {\n const yearGroups = getYearGroups(service.yr_groups);\n\n if (yearGroups.length) {\n yearGroupIsValid = yearGroups.includes(passenger.yr);\n }\n }\n\n if (\n ticket &&\n (ticket.type === 'return' ||\n ticket.type === '4_week' ||\n ticket.type === 'week')\n ) {\n dateValid = passenger.startDate;\n if (dateValid) {\n availabilityValid = isDateAvailable(\n ticket,\n serviceAvailability,\n passenger.startDate,\n passenger.startTime\n );\n }\n }\n\n return (\n stopSelectionValid &&\n destinationValid &&\n passenger.firstName &&\n passenger.lastName &&\n dateValid &&\n timeValid &&\n availabilityValid &&\n yearGroupIsValid &&\n zoneSelectionValid\n );\n};\n\nconst availablilityStatement = availability => {\n if (availability === null) {\n return <>;\n }\n\n if (availability <= 0) {\n return (\n \n There are no tickets remaining on this date.\n

\n );\n }\n\n if (availability < 10) {\n return (\n \n Hurry, only {availability} tickets available!\n

\n );\n }\n\n if (availability > 0) {\n return (\n \n Tickets available.\n

\n );\n }\n\n return <>;\n};\n\nconst renderZonePricing = ({ serviceZone, ticket }) => {\n const price = ticket.zone_prices[serviceZone.name];\n\n if (ticket.payment_type === 'dd') {\n const monthly = `${\n ticket.num_monthly_payments\n } monthly payments x ${getCurrencySymbol(ticket.currency)}${\n ticket.zone_prices_monthly[serviceZone.name]\n }`;\n const deposit = `${getCurrencySymbol(ticket.currency)}${\n ticket.zone_prices_deposit[serviceZone.name]\n }`;\n return `${getCurrencySymbol(\n ticket.currency\n )}${price} (${deposit} + ${monthly})`;\n }\n\n return `${getCurrencySymbol(ticket.currency)}${price}`;\n};\n\nconst renderZoneOption = ({ classes, serviceZone, ticket }) => (\n \n {serviceZone.name} - {renderZonePricing({ serviceZone, ticket })}\n \n);\n\nconst zoneHasPrice = (serviceZone, ticket) => {\n return (\n serviceZone.name in ticket.zone_prices &&\n ticket.zone_prices[serviceZone.name] > 0\n );\n};\n\nconst hasZoneStops = (passenger, service) => {\n const zone =\n passenger.zone &&\n service.zones.find(serviceZone => serviceZone.name === passenger.zone);\n return zone && zone.stops && zone.stops.length > 0;\n};\n\nconst renderZonesForm = ({\n classes,\n passenger,\n service,\n ticket,\n handleChange\n}) => (\n <>\n \n Zone\n \n }\n >\n {service.zones\n .filter(serviceZone => zoneHasPrice(serviceZone, ticket))\n .map(serviceZone =>\n renderZoneOption({ classes, serviceZone, ticket })\n )}\n \n \n {hasZoneStops(passenger, service) && (\n \n \n Bus stop\n \n \n }\n >\n {passenger.zone &&\n service.zones\n .find(\n serviceZone =>\n serviceZone.name === passenger.zone\n )\n .stops.map(zoneStop => (\n \n {zoneStop}\n \n ))}\n \n \n )}\n \n);\n\nconst BuyAgainForm = ({\n handleChange,\n handleDateChange,\n handleSubmit,\n passenger,\n service,\n serviceAvailability,\n ticket,\n classes,\n requireStudentId\n}) => {\n const shouldDisableDateFn = isUnavailableFn(\n ticket,\n serviceAvailability,\n passenger\n );\n const availability = calc(\n ticket,\n serviceAvailability,\n passenger.startDate,\n passenger.startTime\n );\n\n let yearGroups = [];\n\n if (service) {\n yearGroups = getYearGroups(service.yr_groups);\n }\n\n const useZones =\n service.zones && ticket.pricing_model === 'Zonal' && ticket.zone_prices;\n\n const showDestination =\n service && service.destinations && service.destinations.length > 0;\n\n const availablilityEl = availablilityStatement(availability);\n const isValid = validateForm(\n passenger,\n service,\n ticket,\n serviceAvailability,\n useZones\n );\n\n if (!isAnyAvailable(ticket, serviceAvailability, moment())) {\n return (\n
\n \n \n This type of ticket is currently unavailable.\n

\n \n Please check again soon or contact your transport operator\n directly for more information.\n

\n
\n );\n }\n\n return (\n
\n \n
\n \n
\n {ticket && ticket.type === 'single' && (\n <>\n \n \n Journey time\n \n \n }\n >\n \n AM - morning\n \n \n PM - afternoon\n \n \n \n
\n \n
\n {availablilityEl}\n \n NOTE: Single tickets can\n only be purchased up to one week in advance.\n \n \n )}\n {ticket && ticket.type === 'return' && (\n <>\n \n \n
\n {availablilityEl}\n \n NOTE: Return tickets can\n only be purchased up to one week in advance.\n \n \n )}\n {ticket && ticket.type === 'week' && (\n <>\n \n \n
\n {availablilityEl}\n \n NOTE: Week tickets can only\n be purchased up to one week in advance.\n \n \n )}\n {ticket && ticket.type === '4_week' && (\n <>\n \n \n \n {availablilityEl}\n \n NOTE: Four week tickets can\n only be purchased up to one week in advance.\n \n \n )}\n \n \n
\n {useZones && (\n
\n \n \n Select your travel zone.{' '}\n {service.timetable_url && (\n <>\n \n Help finding your zone\n \n .\n \n )}\n \n
\n {renderZonesForm({\n classes,\n passenger,\n service,\n ticket,\n handleChange\n })}\n
\n
\n )}\n
\n \n \n Please confirm the details of the passenger this ticket is\n for:\n \n
\n
\n \n \n {requireStudentId && (\n \n )}\n
\n {service && 'stops' in service && !useZones && (\n \n \n Bus stop\n \n \n }\n >\n {service.stops.map(serviceStop => (\n \n {serviceStop}\n \n ))}\n \n \n )}\n {showDestination && (\n \n \n Destination\n \n \n }\n >\n {service.destinations.map(dest => (\n \n {dest}\n \n ))}\n \n \n )}\n {yearGroups.length > 0 && (\n \n \n Year group\n \n \n }\n >\n {yearGroups.map(year => (\n \n {year === 'reception'\n ? 'Reception'\n : `Year ${year}`}\n \n ))}\n \n \n )}\n
\n \n {!isValid ? (\n 🚫\n ) : (\n \n )}\n  Confirm\n \n
\n
\n
\n
\n );\n};\n\nBuyAgainForm.propTypes = {\n handleChange: PropTypes.func.isRequired,\n handleSubmit: PropTypes.func.isRequired,\n handleDateChange: PropTypes.func,\n passenger: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n stop: PropTypes.string,\n dest: PropTypes.string\n }).isRequired,\n service: PropTypes.shape().isRequired,\n ticket: PropTypes.shape({\n type: PropTypes.string\n }),\n classes: PropTypes.shape().isRequired,\n requireStudentId: PropTypes.bool\n};\n\nBuyAgainForm.defaultProps = {\n ticket: null,\n handleDateChange: () => {},\n requireStudentId: false\n};\n\nexport default withStyles(styles)(BuyAgainForm);\n","import moment from 'moment';\n// eslint-disable-next-line import/prefer-default-export\nexport const getAcademicYear = day => {\n const shortYear = Number(moment(day).format(`YY`));\n const monthDay = moment(day).format(`MMDD`);\n const academicYear =\n monthDay >= '0801'\n ? `${shortYear}/${shortYear + 1}`\n : `${shortYear - 1}/${shortYear}`;\n return academicYear;\n};\n","import React, { Component } from 'react';\nimport axios from 'axios';\nimport { Typography, withStyles, CircularProgress } from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport moment from 'moment';\nimport ConfirmPurchase from '../components/ConfirmPurchase';\nimport { getYearGroups, hasValidZonePricing } from '../helpers/ticket';\nimport { contactOperatorString } from '../helpers/contact';\nimport BuyAgainForm from '../components/BuyAgainForm';\nimport { getAcademicYear } from '../helpers/date';\n\nconst styles = theme => ({\n root: {\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n error: {\n margin: '20px 0 0 5px',\n color: red[500],\n minHeight: '20px',\n textAlign: 'center'\n },\n spinner: {\n marginLeft: 'calc(50% - 22px)',\n marginTop: '60px'\n },\n availabilityWarning: {\n background: 'red',\n textAlign: 'center',\n marginBottom: 20,\n padding: 5\n },\n availabilityWarningHeading: {\n color: 'white',\n fontWeight: 'bold'\n },\n availabilityWarningText: {\n color: 'white'\n }\n});\n\nclass BuyAgain extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n error: '',\n passengerData: {\n firstName: '',\n lastName: '',\n id: '',\n stop: '',\n dest: '',\n photo: null,\n startDate: null,\n startTime: '',\n yr: '',\n zone: '',\n zoneStop: ''\n },\n passengerSubmitted: false,\n ticket: null,\n client: null,\n service: null,\n serviceAvailability: null,\n isLoading: true\n };\n }\n\n async componentDidMount() {\n const {\n match: {\n params: {\n clientId,\n year,\n serviceId,\n ticketId,\n oldCustomerTicketId\n }\n }\n } = this.props;\n\n let client;\n\n try {\n client = await this.getClientData(clientId);\n } catch (e) {\n this.setState({\n isLoading: false,\n error:\n 'There was a problem retrieving the ticket. Please try again later or contact our support team.'\n });\n return;\n }\n\n try {\n if (\n process.env.REACT_APP_DISABLE_EXPIRED_TICKETS === '1' &&\n getAcademicYear() > year.replace('-', '/')\n ) {\n throw new Error('Expired ticket year');\n }\n\n const oldTicket = await this.getOldTicketData(oldCustomerTicketId);\n const service = this.extractService(client, serviceId);\n const ticket = await this.getTicketData(\n client,\n year,\n service,\n ticketId\n );\n let serviceAvailability = null;\n\n if (\n ticket.type === 'single' ||\n ticket.type === 'return' ||\n ticket.type === 'week' ||\n ticket.type === '4_week'\n ) {\n serviceAvailability = await this.getServiceAvailability(\n client.slug,\n serviceId,\n year\n );\n }\n\n this.setState({\n client,\n ticket,\n service,\n serviceAvailability,\n passengerData: {\n firstName: oldTicket.passenger.first_name,\n lastName: oldTicket.passenger.last_name,\n stop: oldTicket.stop,\n photo: oldTicket.passenger.photo || null,\n id: oldTicket.ext_id || null,\n startDate: null,\n startTime: '',\n yr: oldTicket.yr,\n dest: oldTicket.dest,\n zone: oldTicket.zone,\n zoneStop: oldTicket.zone_stop\n },\n isLoading: false,\n error: ''\n });\n } catch (e) {\n console.error(e);\n let errorMessage =\n 'There was a problem retrieving the ticket. Please try again later or contact our support team.';\n\n if (e.message === 'Ticket unavailable') {\n errorMessage = `This ticket type is now sold out. Please contact ${contactOperatorString(\n client\n )} for more information regarding ticket availability.`;\n }\n\n if (e.message === 'Ticket disabled') {\n errorMessage = `Ticket disabled by your transport provider. Please contact ${contactOperatorString(\n client\n )} for more information.`;\n }\n\n if (e.message === 'Ticket expired') {\n errorMessage = `This ticket type has a fixed expiry date which has now expired. Please contact ${contactOperatorString(\n client\n )} for an alternative ticket type to purchase.`;\n }\n\n if (e.message === 'Zonal pricing misconfiguration') {\n errorMessage = `Zonal pricing on this ticket has not been configured. Please contact ${contactOperatorString(\n client\n )} to request they update their pricing.`;\n }\n\n if (e.message === 'Expired ticket year') {\n errorMessage = `This ticket type was valid for a previous year and has now expired. Please contact ${contactOperatorString(\n client\n )} for an alternative ticket type to purchase.`;\n }\n\n if (e.message === 'No service') {\n errorMessage = `This service has either been discontinued or does not exist. Please contact ${contactOperatorString(\n client\n )} for an alternative ticket type to purchase.`;\n }\n\n this.setState({\n isLoading: false,\n error: errorMessage\n });\n }\n }\n\n getOldTicketData = async id => {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${process.env.REACT_APP_API_ENDPOINT}/customer-ticket/user-id/${\n currentSession.getAccessToken().payload.sub\n }/${id}`,\n {\n headers\n }\n );\n\n return response.data;\n };\n\n getClientData = async clientSlug => {\n const response = await axios.get(\n `${process.env.REACT_APP_API_ENDPOINT}/client/${clientSlug}`\n );\n\n return response.data;\n };\n\n getTicketData = async (client, year, service, ticketId) => {\n const response = await axios.get(\n `${process.env.REACT_APP_TICKET_API_ENDPOINT}/service/${\n service.id\n }/tickets/${year}`\n );\n\n if (!response.data.length) {\n throw new Error();\n }\n\n const ticket = response.data.find(item => item.id === ticketId);\n\n if (!ticket) {\n throw new Error();\n }\n\n if (ticket.is_enabled === false) {\n throw new Error('Ticket disabled');\n }\n\n if (ticket.available === false) {\n throw new Error('Ticket unavailable');\n }\n\n if (ticket.pricing_model === 'Zonal') {\n if (!hasValidZonePricing(ticket, service)) {\n throw new Error('Zonal pricing misconfiguration');\n }\n }\n\n if (\n ticket.expiry &&\n process.env.REACT_APP_DISABLE_EXPIRED_TICKETS === '1'\n ) {\n const now = moment();\n const expiry = moment(ticket.expiry);\n\n if (now.toISOString() > expiry.toISOString()) {\n throw new Error('Ticket expired');\n }\n }\n\n return ticket;\n };\n\n getServiceAvailability = async (clientSlug, serviceId, year) => {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/service-availability/${clientSlug}/${serviceId}/${year}`,\n {\n headers\n }\n );\n\n return response.data;\n };\n\n handleChange = event => {\n const { passengerData } = this.state;\n this.setState({\n passengerData: {\n ...passengerData,\n [event.target.name]: event.target.value\n },\n error: ''\n });\n };\n\n handleDateChange = date => {\n const { passengerData } = this.state;\n this.setState({\n passengerData: {\n ...passengerData,\n startDate: date\n },\n error: ''\n });\n };\n\n handleSubmitPassenger = event => {\n event.preventDefault();\n this.setState({\n passengerSubmitted: true\n });\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n };\n\n handleEditPassenger = () => {\n this.setState({\n passengerSubmitted: false\n });\n };\n\n passengerValid = () => {\n const { passengerData, service, client } = this.state;\n\n let stopSelectionValid = true;\n let yearGroupValid = true;\n let destValid = true;\n let zoneSelectionValid = true;\n\n const useZones = service.zones && passengerData.zone;\n\n if (service && 'stops' in service && !useZones) {\n stopSelectionValid = service.stops.includes(passengerData.stop);\n }\n\n if (useZones) {\n const zone =\n passengerData.zone &&\n service.zones.find(\n serviceZone => serviceZone.name === passengerData.zone\n );\n\n if (zone && (!zone.stops || !zone.stops.length)) {\n zoneSelectionValid = true;\n } else if (\n zone &&\n zone.stops &&\n zone.stops.includes(passengerData.zoneStop)\n ) {\n zoneSelectionValid = true;\n } else {\n zoneSelectionValid = false;\n }\n }\n\n if (service && getYearGroups(service.yr_groups).length) {\n if (!passengerData.yr) {\n yearGroupValid = false;\n }\n }\n\n if (service && 'destinations' in service) {\n destValid = service.destinations.includes(passengerData.dest);\n }\n\n const requireStudentId = client.features.require_id === 'student';\n const isIdValid =\n !requireStudentId || (requireStudentId && passengerData.id);\n\n return (\n stopSelectionValid &&\n passengerData.firstName &&\n passengerData.lastName &&\n yearGroupValid &&\n destValid &&\n zoneSelectionValid &&\n isIdValid\n );\n };\n\n showConfirmPurchase = () => {\n const { ticket, passengerSubmitted, service } = this.state;\n\n return this.passengerValid() && ticket && service && passengerSubmitted;\n };\n\n formatRemainingTickets = ticket => {\n const ticketWord = ticket.remaining > 1 ? 'tickets' : 'ticket';\n return `Only ${ticket.remaining} ${ticketWord} left, hurry!`;\n };\n\n extractService(client, serviceId) {\n try {\n const { services = [] } = client;\n\n if (!services.length) {\n throw new Error();\n }\n\n const service = services.find(item => item.id === serviceId);\n\n if (!service) {\n throw new Error('No service');\n }\n\n return service;\n } catch (e) {\n this.setState({\n error:\n 'There was a problem retrieving the ticket info, please try again later'\n });\n return null;\n }\n }\n\n render() {\n const {\n passengerData,\n ticket,\n client,\n service,\n serviceAvailability,\n error,\n isLoading\n } = this.state;\n\n const { classes } = this.props;\n\n if (isLoading) {\n return (\n
\n \n
\n );\n }\n\n if (error) {\n return (\n
\n \n {error}\n \n
\n );\n }\n\n const disablePhoto =\n client && client.features && client.features.disable_photo === true;\n\n const requireStudentId =\n client &&\n client.features &&\n client.features.require_id === 'student';\n\n const showAvailabilityWarning =\n 'remaining' in ticket &&\n ticket.remaining > 0 &&\n ticket.remaining <= 10;\n\n return (\n
\n {showAvailabilityWarning && (\n
\n \n {this.formatRemainingTickets(ticket)}\n \n \n If you need more tickets than available please do\n not purchase this ticket.\n \n
\n )}\n {this.showConfirmPurchase() ? (\n
\n \n
\n ) : (\n \n )}\n
\n );\n }\n}\n\nexport default withStyles(styles)(BuyAgain);\n","import React from 'react';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Select from '@material-ui/core/Select';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport { getCurrencySymbol } from '../helpers/ticket';\n\nconst renderZonePricing = ({ serviceZone, ticket }) => {\n const price = ticket.zone_prices[serviceZone.name];\n\n if (ticket.payment_type === 'dd') {\n const monthly = `${\n ticket.num_monthly_payments\n } monthly payments x ${getCurrencySymbol(ticket.currency)}${ticket\n .zone_prices_monthly[serviceZone.name] || '0.00'}`;\n const deposit = `${getCurrencySymbol(ticket.currency)}${ticket\n .zone_prices_deposit[serviceZone.name] || '0.00'}`;\n return `${getCurrencySymbol(\n ticket.currency\n )}${price} (${deposit} + ${monthly})`;\n }\n\n if (ticket.type === 'flexi') {\n return `${getCurrencySymbol(ticket.currency)}${price} (${\n ticket.default_trips\n } trips x ${getCurrencySymbol(ticket.currency)}${\n ticket.zone_trip_prices[serviceZone.name]\n })`;\n }\n\n return `${getCurrencySymbol(ticket.currency)}${price}`;\n};\n\nconst renderZoneOption = ({ classes, serviceZone, ticket }) => (\n \n {serviceZone.name} - {renderZonePricing({ serviceZone, ticket })}\n \n);\n\nconst zoneHasPrice = (serviceZone, ticket) => {\n return (\n serviceZone.name in ticket.zone_prices &&\n ticket.zone_prices[serviceZone.name] > 0\n );\n};\n\nconst hasZoneStops = (passenger, service, passengerZone) => {\n const zone =\n passengerZone &&\n service.zones.find(serviceZone => serviceZone.name === passengerZone);\n return zone.stops && zone.stops.length > 0;\n};\n\nconst ZonesForm = ({\n classes,\n passenger,\n service,\n ticket,\n handleChange,\n zone,\n zoneStop\n}) => (\n <>\n \n Zone\n \n }\n >\n {service.zones\n .filter(serviceZone => zoneHasPrice(serviceZone, ticket))\n .map(serviceZone =>\n renderZoneOption({ classes, serviceZone, ticket })\n )}\n \n \n {hasZoneStops(passenger, service, zone) && (\n \n \n Bus stop\n \n \n }\n >\n {zone &&\n service.zones\n .find(serviceZone => serviceZone.name === zone)\n .stops.map(stop => (\n \n {stop}\n \n ))}\n \n \n )}\n \n);\n\nexport default ZonesForm;\n","/* eslint-disable jsx-a11y/accessible-emoji */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport MomentUtils from '@date-io/moment';\nimport { DatePicker, MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport { withStyles, Typography, Button } from '@material-ui/core';\nimport TextField from '@material-ui/core/TextField';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport Select from '@material-ui/core/Select';\nimport moment from 'moment';\nimport ContentHeader from './ContentHeader';\nimport {\n calc,\n isUnavailableFn,\n isAnyAvailable,\n isDateAvailable\n} from '../helpers/service-availability';\nimport { getYearGroups } from '../helpers/ticket';\nimport ZonesForm from './ZonesForm';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)'\n },\n form: {\n padding: '0 10px 10px'\n },\n description: {\n padding: '20px 5px 0',\n fontWeight: '100',\n textAlign: 'center'\n },\n name: {\n margin: '0 auto 20px'\n },\n input: {\n width: '100%',\n maxWidth: '250px',\n display: 'block',\n margin: '20px auto',\n '& > div': {\n display: 'block'\n },\n '& input': {\n width: 220\n }\n },\n button: {\n height: '56px',\n margin: '0 auto 10px'\n },\n uploadButton: {\n height: '56px',\n margin: '0 auto',\n padding: '0.6em'\n },\n confirmButton: {\n height: '56px',\n margin: '0 0 0 10px',\n padding: '0.6em'\n },\n upload: {\n display: 'none'\n },\n imageUpload: {\n margin: '0 0 40px 0',\n textAlign: 'center'\n },\n datePicker: {\n margin: '0 auto 20px',\n maxWidth: '250px',\n '& > div': {\n width: '100%'\n }\n },\n imagePreview: {\n minHeight: '56px',\n width: '100%',\n maxWidth: '400px',\n margin: '0 auto 10px',\n '& > img': {\n maxWidth: '100%'\n },\n '& > div': {\n background: 'lightgrey',\n minHeight: '56px',\n borderRadius: '4px',\n border: '1px solid'\n },\n [theme.breakpoints.down('sm')]: {\n marginTop: '10px'\n }\n },\n imagePreviewHelp: {\n display: 'block',\n fontWeight: '100',\n padding: '.5em'\n },\n imagePreviewPlaceholder: {\n borderRadius: '0 !important',\n minHeight: '400px !important',\n border: '0 !important',\n width: '252px',\n margin: '0 auto',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n photoHelp: {\n ...globalStyles.link,\n padding: '1em 0',\n display: 'block'\n },\n formControl: {\n maxWidth: 250,\n width: '100%',\n margin: '0 auto 20px',\n display: 'flex'\n },\n smallPrint: {\n fontSize: 13,\n textAlign: 'center',\n color: '#444',\n marginBottom: 10\n },\n zoneMenuItem: {\n whiteSpace: 'normal'\n },\n link: globalStyles.link\n});\n\nconst validateForm = (\n passenger,\n service,\n ticket,\n serviceAvailability,\n useZones,\n disablePhoto,\n requireStudentId\n) => {\n let stopSelectionValid = true;\n let dateValid = true;\n let timeValid = true;\n let availabilityValid = true;\n let yearGroupIsValid = true;\n let destinationValid = true;\n let zoneSelectionValid = true;\n\n if (service && 'stops' in service && !useZones) {\n stopSelectionValid = service.stops.includes(passenger.stop);\n }\n\n if (useZones) {\n const zone =\n passenger.zone &&\n service.zones.find(\n serviceZone => serviceZone.name === passenger.zone\n );\n\n if (zone && (!zone.stops || !zone.stops.length)) {\n zoneSelectionValid = true;\n } else if (\n zone &&\n zone.stops &&\n zone.stops.includes(passenger.zoneStop)\n ) {\n zoneSelectionValid = true;\n } else {\n zoneSelectionValid = false;\n }\n }\n\n if (service && service.destinations && service.destinations.length) {\n destinationValid = service.destinations.includes(passenger.dest);\n }\n\n if (ticket && ticket.type === 'single') {\n dateValid = passenger.startDate;\n timeValid =\n passenger.startTime === 'am' || passenger.startTime === 'pm';\n if (dateValid && timeValid) {\n availabilityValid = isDateAvailable(\n ticket,\n serviceAvailability,\n passenger.startDate,\n passenger.startTime\n );\n }\n }\n\n if (service && 'yr_groups' in service) {\n const yearGroups = getYearGroups(service.yr_groups);\n\n if (yearGroups.length) {\n yearGroupIsValid = yearGroups.includes(passenger.yr);\n }\n }\n\n if (\n ticket &&\n ((ticket.type === 'return' && ticket.sub_type !== 'fixed') ||\n ticket.type === '4_week' ||\n ticket.type === 'week')\n ) {\n dateValid = passenger.startDate;\n if (dateValid) {\n availabilityValid = isDateAvailable(\n ticket,\n serviceAvailability,\n passenger.startDate,\n passenger.startTime\n );\n }\n }\n\n const isPhotoValid = disablePhoto === true || passenger.photo;\n\n const isIdValid = !requireStudentId || (requireStudentId && passenger.id);\n\n return (\n stopSelectionValid &&\n destinationValid &&\n passenger.firstName &&\n passenger.lastName &&\n isPhotoValid &&\n dateValid &&\n timeValid &&\n availabilityValid &&\n yearGroupIsValid &&\n zoneSelectionValid &&\n isIdValid\n );\n};\n\nconst availablilityStatement = availability => {\n if (availability === null) {\n return <>;\n }\n\n if (availability <= 0) {\n return (\n \n There are no tickets remaining on this date.\n

\n );\n }\n\n if (availability < 10) {\n return (\n \n Hurry, only {availability} tickets available!\n

\n );\n }\n\n if (availability > 0) {\n return (\n \n Tickets available.\n

\n );\n }\n\n return <>;\n};\n\nconst isAdhocTicket = ticket => {\n if (\n ticket &&\n (ticket.type === 'single' ||\n (ticket.type === 'return' && ticket.sub_type !== 'fixed') ||\n ticket.type === 'week' ||\n ticket.type === '4_week')\n ) {\n return true;\n }\n return false;\n};\n\nconst PassengerForm = ({\n handleChange,\n handleDateChange,\n handleSubmit,\n handleImageChange,\n passenger,\n service,\n serviceAvailability,\n ticket,\n imagePreviewUrl,\n classes,\n disablePhoto,\n requireStudentId\n}) => {\n const shouldDisableDateFn = isUnavailableFn(\n ticket,\n serviceAvailability,\n passenger\n );\n const availability = calc(\n ticket,\n serviceAvailability,\n passenger.startDate,\n passenger.startTime\n );\n\n let yearGroups = [];\n\n if (service) {\n yearGroups = getYearGroups(service.yr_groups);\n }\n\n const useZones =\n service.zones && ticket.pricing_model === 'Zonal' && ticket.zone_prices;\n\n const showDestination =\n service && service.destinations && service.destinations.length > 0;\n\n const availablilityEl = availablilityStatement(availability);\n const isValid = validateForm(\n passenger,\n service,\n ticket,\n serviceAvailability,\n useZones,\n disablePhoto,\n requireStudentId\n );\n\n const isRegularReturn =\n ticket && ticket.type === 'return' && ticket.sub_type !== 'fixed';\n\n if (!isAnyAvailable(ticket, serviceAvailability, moment())) {\n return (\n
\n \n \n This type of ticket is currently unavailable.\n

\n \n Please check again soon or contact your transport operator\n directly for more information.\n

\n
\n );\n }\n\n return (\n
\n {isAdhocTicket(ticket) && (\n \n
\n \n
\n {ticket && ticket.type === 'single' && (\n <>\n \n \n Journey time\n \n \n }\n >\n \n AM - morning\n \n \n PM - afternoon\n \n \n \n
\n \n
\n {availablilityEl}\n \n NOTE: Single tickets\n can only be purchased up to one week in\n advance.\n \n \n )}\n {isRegularReturn && (\n <>\n \n \n
\n {availablilityEl}\n \n NOTE: Return tickets\n can only be purchased up to one week in\n advance.\n \n \n )}\n {ticket && ticket.type === 'week' && (\n <>\n \n \n
\n {availablilityEl}\n \n NOTE: Week tickets can\n only be purchased up to one week in\n advance.\n \n \n )}\n {ticket && ticket.type === '4_week' && (\n <>\n \n \n \n {availablilityEl}\n \n NOTE: Four week tickets\n can only be purchased up to one week in\n advance.\n \n \n )}\n \n \n
\n )}\n {useZones && (\n
\n \n \n Select your travel zone.{' '}\n {service.timetable_url && (\n <>\n \n Help finding your zone\n \n .\n \n )}\n \n
\n \n
\n
\n )}\n
\n \n \n Please confirm the details of the passenger this ticket is\n for:\n \n
\n
\n \n \n {requireStudentId && (\n \n )}\n
\n {service && 'stops' in service && !useZones && (\n \n \n Bus stop\n \n \n }\n >\n {service.stops.map(serviceStop => (\n \n {serviceStop}\n \n ))}\n \n \n )}\n {showDestination && (\n \n \n Destination\n \n \n }\n >\n {service.destinations.map(serviceDest => (\n \n {serviceDest}\n \n ))}\n \n \n )}\n {yearGroups.length > 0 && (\n \n \n Year group\n \n \n }\n >\n {yearGroups.map(year => (\n \n {year === 'reception'\n ? 'Reception'\n : `Year ${year}`}\n \n ))}\n \n \n )}\n
\n {!disablePhoto && (\n <>\n
\n {imagePreviewUrl ? (\n \n ) : (\n \n \n Passenger photo\n \n Please provide a clear\n passport style headshot of\n the passenger,\n including only head and\n shoulders.\n \n \n
\n )}\n \n \n I need help with my photo\n \n \n
\n \n \n )}\n \n {!isValid ? (\n 🚫\n ) : (\n \n )}\n  Confirm\n \n
\n
\n \n
\n );\n};\n\nPassengerForm.propTypes = {\n handleChange: PropTypes.func.isRequired,\n handleSubmit: PropTypes.func.isRequired,\n handleDateChange: PropTypes.func,\n handleImageChange: PropTypes.func.isRequired,\n passenger: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n stop: PropTypes.string,\n photo: PropTypes.object\n }).isRequired,\n service: PropTypes.shape().isRequired,\n imagePreviewUrl: PropTypes.string,\n ticket: PropTypes.shape({\n type: PropTypes.string\n }),\n disablePhoto: PropTypes.bool,\n requireStudentId: PropTypes.bool,\n classes: PropTypes.shape().isRequired\n};\n\nPassengerForm.defaultProps = {\n imagePreviewUrl: '',\n ticket: null,\n disablePhoto: false,\n requireStudentId: false,\n handleDateChange: () => {}\n};\n\nexport default withStyles(styles)(PassengerForm);\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { withStyles, Typography } from '@material-ui/core';\nimport axios from 'axios';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport LoaderButton from './LoaderButton';\n\nconst styles = {\n root: {\n marginTop: '20px',\n minHeight: '100px',\n marginBottom: '20px',\n padding: '0 10px 10px',\n textAlign: 'center'\n },\n card: {\n margin: '30px auto 0 auto',\n maxWidth: '360px',\n border: '1px solid rgba(0, 0, 0, 0.23)',\n borderRadius: '4px',\n padding: '10px 0 10px 8px'\n },\n button: {\n margin: '40px 0 20px',\n width: '200px',\n height: '56px'\n },\n error: {\n margin: '20px 20px 10px',\n color: red[500],\n minHeight: '20px'\n }\n};\n\nclass DirectDebitPaymentForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n processing: false,\n error: ''\n };\n }\n\n uploadImage = async () => {\n const { passenger } = this.props;\n\n try {\n const response = await axios.post(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/pre-signed-url`,\n {\n fileType: passenger.photo.type,\n fileSize: passenger.photo.size\n }\n );\n\n if (process.env.NODE_ENV !== 'development') {\n await axios.put(response.data.preSignedUrl, passenger.photo, {\n headers: {\n 'Content-Type': passenger.photo.type\n }\n });\n }\n\n return response.data.fileName;\n } catch (error) {\n throw new Error(error);\n }\n };\n\n handleSubmit = async () => {\n const {\n history,\n ticket,\n service,\n passenger,\n client,\n voucher,\n disablePhoto\n } = this.props;\n this.setState({\n processing: true,\n error: ''\n });\n\n let imageFileName;\n\n if (!disablePhoto) {\n try {\n imageFileName = await this.uploadImage();\n } catch (e) {\n console.error(e);\n\n if (e.response && e.response.status === 403) {\n this.setState({\n processing: false,\n error:\n 'Your photo failed to upload in time. Please retry with either a smaller image or on a faster network (WiFi).'\n });\n } else {\n this.setState({\n processing: false,\n error:\n 'There was a problem uploading your image. Please ensure it is a portrait photo and less than 10MB in size.'\n });\n }\n return;\n }\n }\n\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const body = {\n ticket,\n service,\n passenger: {\n ...passenger\n },\n client,\n voucher\n };\n\n if (!disablePhoto) {\n body.passenger.photo = imageFileName;\n }\n\n const response = await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-ticket/gocardless`,\n body,\n {\n headers\n }\n );\n\n if (response.data.id) {\n const ticketYear = ticket.year.replace('/', '-');\n const confirmUrl = `/order-confirmed/${\n response.data.id\n }/${ticketYear}/${client.slug}/${service.id}/${ticket.id}`;\n history.push(confirmUrl);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else {\n throw new Error('No ticket id generated.');\n }\n } catch (e) {\n console.error(e);\n this.setState({\n processing: false,\n error:\n 'There was a problem processing your payment, please try again later'\n });\n }\n };\n\n render() {\n const { classes, client, service } = this.props;\n const { processing, error } = this.state;\n\n return (\n
\n \n By completing this purchase, I confirm I have read and\n accepted the following:\n \n {service.terms_url && (\n \n \n {client.name} T&Cs\n \n \n )}\n \n \n ShuttleID T&Cs\n \n \n \n {error && (\n \n {error}\n \n )}\n
\n );\n }\n}\n\nDirectDebitPaymentForm.propTypes = {\n classes: PropTypes.shape().isRequired,\n ticket: PropTypes.shape().isRequired,\n service: PropTypes.shape().isRequired,\n passenger: PropTypes.shape().isRequired,\n client: PropTypes.shape().isRequired,\n disablePhoto: PropTypes.bool\n};\n\nDirectDebitPaymentForm.defaultProps = {\n disablePhoto: false\n};\n\nexport default withStyles(styles)(withRouter(DirectDebitPaymentForm));\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles, Typography, Button } from '@material-ui/core';\nimport moment from 'moment';\nimport VoucherForm from './VoucherForm';\nimport DirectDebitPaymentForm from './DirectDebitPaymentForm';\nimport ContentHeader from './ContentHeader';\nimport {\n formatTicketType,\n formatDate,\n formatPrice\n} from '../helpers/formatters';\nimport { getCurrencySymbol } from '../helpers/ticket';\nimport globalStyles from '../styles';\n\nconst styles = () => ({\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)'\n },\n description: {\n padding: '10px',\n marginBottom: '20px',\n fontWeight: '100'\n },\n button: {\n height: '40px',\n marginTop: '10px',\n marginBottom: '10px'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n },\n imagePreview: {\n minHeight: '56px',\n margin: '20px auto 0',\n width: '100%',\n maxWidth: '400px',\n display: 'flex',\n justifyContent: 'center',\n '& > img': {\n maxWidth: '100%'\n },\n '@media only screen and (max-device-width: 400px)': {\n margin: '0 auto 0'\n }\n },\n paymentHelp: {\n ...globalStyles.link,\n padding: '1em 0',\n display: 'block'\n }\n});\n\nclass ConfirmDirectDebitPurchase extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n voucher: null\n };\n }\n\n setVoucher = voucher => {\n this.setState({ voucher });\n };\n\n netPrice = price => {\n const { voucher } = this.state;\n if (voucher) {\n return price - voucher.value;\n }\n return price;\n };\n\n calcMonthlyPriceAfterDiscount = (ticket, priceMonthly) => {\n const { voucher } = this.state;\n\n if (voucher) {\n const monthlyDiscount =\n (Number(voucher.value) * 100) /\n Number(ticket.num_monthly_payments);\n return (Number(priceMonthly) * 100 - monthlyDiscount) / 100;\n }\n\n return Number(priceMonthly);\n };\n\n getVoucherMessage = (\n ticket,\n total,\n roundedMonthlyPricePenceAfterDiscount,\n priceMonthly,\n priceDeposit\n ) => {\n const hasFullValueVoucher = roundedMonthlyPricePenceAfterDiscount < 100;\n const hasMonthlyPayments = parseFloat(priceMonthly) > 0;\n const { voucher } = this.state;\n\n if (!hasMonthlyPayments) {\n return '';\n }\n\n if (!voucher) {\n return '';\n }\n\n if (hasFullValueVoucher) {\n return (\n <>\n \n Full value voucher codes cannot be used with this type\n of ticket.\n \n \n Please contact your transport operator for an\n alternative ticket to use your voucher on.\n \n \n );\n }\n\n return (\n <>\n \n Monthly payments reduced to{' '}\n {getCurrencySymbol(ticket.currency)}\n {(roundedMonthlyPricePenceAfterDiscount / 100).toFixed(2)}.\n \n \n New total: {getCurrencySymbol(ticket.currency)}\n {priceDeposit} + {getCurrencySymbol(ticket.currency)}\n {(roundedMonthlyPricePenceAfterDiscount / 100).toFixed(2)}\n {' x '}\n {ticket.num_monthly_payments} ={' '}\n {getCurrencySymbol(ticket.currency)}\n {total.toFixed(2)}.\n \n \n );\n };\n\n render() {\n const {\n handleEdit,\n passenger,\n ticket,\n client,\n service,\n imagePreviewUrl,\n classes,\n disablePhoto,\n requireStudentId\n } = this.props;\n\n const { voucher } = this.state;\n\n const useZones =\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_prices &&\n passenger.zone;\n\n const priceDeposit = useZones\n ? ticket.zone_prices_deposit[passenger.zone]\n : ticket.price_deposit;\n\n const priceMonthly = useZones\n ? ticket.zone_prices_monthly[passenger.zone]\n : ticket.price_monthly;\n\n const monthlyPriceAfterDiscount = this.calcMonthlyPriceAfterDiscount(\n ticket,\n priceMonthly\n );\n\n const roundedMonthlyPricePenceAfterDiscount = Math.round(\n monthlyPriceAfterDiscount * 100\n );\n\n const totalMonthlyPriceAfterDiscount =\n (roundedMonthlyPricePenceAfterDiscount / 100).toFixed(2) *\n ticket.num_monthly_payments;\n\n const total =\n Number(totalMonthlyPriceAfterDiscount) + Number(priceDeposit || 0);\n\n const voucherMessage = this.getVoucherMessage(\n ticket,\n total,\n roundedMonthlyPricePenceAfterDiscount,\n priceMonthly,\n priceDeposit\n );\n\n const hasFullValueVoucher =\n parseFloat(priceMonthly || 0) > 0 &&\n roundedMonthlyPricePenceAfterDiscount < 100;\n\n return (\n
\n
\n \n {imagePreviewUrl && (\n
\n \"Ticket\n
\n )}\n
\n \n Passenger: {passenger.firstName}{' '}\n {passenger.lastName}\n \n {requireStudentId && passenger.id && (\n \n Student ID: {passenger.id}\n \n )}\n {passenger.stop && (\n \n Bus stop: {passenger.stop}\n \n )}\n {passenger.zone && (\n \n Zone: {passenger.zone}\n \n )}\n {passenger.zoneStop && (\n \n Bus stop: {passenger.zoneStop}\n \n )}\n {passenger.dest && (\n \n Destination: {passenger.dest}\n \n )}\n {passenger.yr && (\n \n Year group:{' '}\n \n {passenger.yr}\n \n \n )}\n \n Ticket:{' '}\n {formatTicketType(\n service.name,\n ticket.type,\n ticket.sub_type,\n ticket.travel_pattern,\n ticket.name\n )}\n \n \n Valid from: {formatDate(ticket.start)}\n \n \n Valid until: {formatDate(ticket.expiry)}\n \n {parseFloat(priceMonthly) <= 0 && (\n <>\n \n Total price:{' '}\n {(formatPrice(total), ticket.currency)}\n \n\n \n Edit\n \n \n )}\n {parseFloat(priceMonthly) > 0 && (\n
\n \n Edit\n \n

Pricing

\n \n Initial payment due now:{' '}\n {formatPrice(priceDeposit, ticket.currency)}\n \n \n Monthly payments:{' '}\n {formatPrice(\n monthlyPriceAfterDiscount,\n ticket.currency\n )}\n {' x '}\n {ticket.num_monthly_payments}\n {voucher && voucher.value && (\n <> (discounted)\n )}\n \n \n First monthly payment:{' 1st '}\n {moment(ticket.monthly_sub_start).format(\n 'MMMM YYYY'\n )}\n \n \n Total price:{' '}\n {formatPrice(total, ticket.currency)}\n \n

\n \n How Direct Debit payments work\n \n

\n
\n )}\n
\n
\n\n {parseFloat(priceMonthly) > 0 && (\n
\n \n \n
\n )}\n\n {!hasFullValueVoucher && (\n
\n \n \n
\n )}\n
\n );\n }\n}\n\nConfirmDirectDebitPurchase.propTypes = {\n handleEdit: PropTypes.func.isRequired,\n passenger: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n photo: PropTypes.object,\n stop: PropTypes.string,\n dest: PropTypes.string\n }).isRequired,\n ticket: PropTypes.shape({\n start: PropTypes.string,\n expiry: PropTypes.string,\n price: PropTypes.string,\n price_monthly: PropTypes.string,\n price_deposit: PropTypes.string\n }).isRequired,\n client: PropTypes.shape().isRequired,\n service: PropTypes.shape().isRequired,\n imagePreviewUrl: PropTypes.string,\n classes: PropTypes.shape().isRequired,\n disablePhoto: PropTypes.bool,\n requireStudentId: PropTypes.bool\n};\n\nConfirmDirectDebitPurchase.defaultProps = {\n imagePreviewUrl: '',\n disablePhoto: false,\n requireStudentId: false\n};\n\nexport default withStyles(styles)(ConfirmDirectDebitPurchase);\n","export const getOrientation = (file, callback) => {\n const reader = new FileReader();\n reader.onload = e => {\n const view = new DataView(e.target.result);\n if (view.getUint16(0, false) !== 0xffd8) {\n return callback(-2);\n }\n const length = view.byteLength;\n let offset = 2;\n while (offset < length) {\n if (view.getUint16(offset + 2, false) <= 8) {\n return callback(-1);\n }\n const marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xffe1) {\n const markerVar = view.getUint32((offset += 2), false);\n if (markerVar !== 0x45786966) {\n return callback(-1);\n }\n\n const little = view.getUint16((offset += 6), false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n const tags = view.getUint16(offset, little);\n offset += 2;\n for (let i = 0; i < tags; i += 1) {\n if (view.getUint16(offset + i * 12, little) === 0x0112) {\n return callback(\n view.getUint16(offset + i * 12 + 8, little)\n );\n }\n }\n } else if (\n // eslint-disable-next-line no-bitwise\n (marker & 0xff00) !==\n 0xff00\n ) {\n break;\n } else {\n offset += view.getUint16(offset, false);\n }\n }\n return callback(-1);\n };\n reader.readAsArrayBuffer(file);\n};\n\nexport const resetOrientation = (srcBase64, srcOrientation, callback) => {\n const img = new window.Image();\n\n img.onload = () => {\n const { width, height } = img;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n // set proper canvas dimensions before transform & export\n if (srcOrientation > 4 && srcOrientation < 9) {\n canvas.width = height;\n canvas.height = width;\n } else {\n canvas.width = width;\n canvas.height = height;\n }\n\n // transform context before drawing image\n /* eslint-disable indent */\n switch (srcOrientation) {\n case 2:\n ctx.transform(-1, 0, 0, 1, width, 0);\n break;\n case 3:\n ctx.transform(-1, 0, 0, -1, width, height);\n break;\n case 4:\n ctx.transform(1, 0, 0, -1, 0, height);\n break;\n case 5:\n ctx.transform(0, 1, 1, 0, 0, 0);\n break;\n case 6:\n ctx.transform(0, 1, -1, 0, height, 0);\n break;\n case 7:\n ctx.transform(0, -1, -1, 0, height, width);\n break;\n case 8:\n ctx.transform(0, -1, 1, 0, 0, width);\n break;\n default:\n break;\n }\n /* eslint-enable indent */\n\n ctx.drawImage(img, 0, 0);\n\n callback(canvas.toDataURL('image/jpeg'));\n };\n\n img.src = srcBase64;\n};\n","import React, { Component } from 'react';\nimport axios from 'axios';\nimport {\n Typography,\n withStyles,\n CircularProgress,\n Button\n} from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport { Redirect, Link } from 'react-router-dom';\nimport moment from 'moment';\nimport Icon from '@material-ui/core/Icon';\nimport IconButton from '@material-ui/core/IconButton';\nimport PassengerForm from '../components/PassengerForm';\nimport ConfirmPurchase from '../components/ConfirmPurchase';\nimport ConfirmDirectDebitPurchase from '../components/ConfirmDirectDebitPurchase';\nimport { getOrientation, resetOrientation } from '../helpers/image';\nimport { getYearGroups, hasValidZonePricing } from '../helpers/ticket';\nimport { contactOperatorString } from '../helpers/contact';\nimport { getAcademicYear } from '../helpers/date';\n\nconst styles = theme => ({\n root: {\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n error: {\n margin: '20px 0 0 5px',\n color: red[500],\n minHeight: '20px',\n textAlign: 'center'\n },\n spinner: {\n marginLeft: 'calc(50% - 22px)',\n marginTop: '60px'\n },\n availabilityWarning: {\n background: 'red',\n textAlign: 'center',\n marginBottom: 20,\n padding: 5\n },\n availabilityWarningHeading: {\n color: 'white',\n fontWeight: 'bold',\n fontSize: '1rem'\n },\n availabilityWarningText: {\n color: 'white'\n },\n modalSplash: {\n position: 'fixed',\n top: 0,\n left: 0,\n zIndex: 1000,\n height: '100vh',\n width: '100vw',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n overflow: 'scroll',\n background: 'rgba(0, 0, 0, 0.6)'\n },\n modalContainer: {\n maxWidth: '600px',\n padding: '25px 25px 35px 25px',\n background: 'white',\n borderRadius: '4px',\n [theme.breakpoints.down('xs')]: {\n padding: '15px 15px 25px 15px'\n }\n },\n modalHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n '&> h5': {\n [theme.breakpoints.down('xs')]: {\n fontSize: '1.3rem'\n }\n }\n },\n existingTickets: {\n display: 'flex',\n flexDirection: 'column',\n margin: '20px 0',\n alignItems: 'center',\n borderTop: '1px solid #eee'\n },\n existingTicket: {\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between',\n borderBottom: '1px solid #eee',\n padding: '5px 0'\n },\n existingTicketDetails: {\n display: 'flex',\n flexDirection: 'column'\n },\n breakLine: {\n width: '100%',\n height: '1px',\n background: 'black',\n margin: '0 0 20px'\n },\n modalButtons: {\n alignItems: 'center',\n marginTop: '30px',\n display: 'flex',\n flexDirection: 'column',\n gap: '10px'\n },\n existingTicketButton: {\n alignSelf: 'center',\n fontSize: '0.9rem',\n padding: '2px 5px'\n },\n duplicateWarn: {\n fontSize: '0.9rem',\n textAlign: 'center'\n },\n errorLink: {\n color: 'red'\n }\n});\n\nclass CreateTicket extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n error: '',\n passengerData: {\n firstName: '',\n lastName: '',\n stop: '',\n dest: '',\n photo: null,\n startDate: null,\n startTime: '',\n yr: '',\n zone: '',\n zoneStop: '',\n id: ''\n },\n passengerSubmitted: false,\n imagePreviewUrl: null,\n ticket: null,\n existingTickets: null,\n showCheckTickets: false,\n client: null,\n service: null,\n serviceAvailability: null,\n mandates: null,\n isLoading: true\n };\n }\n\n async componentDidMount() {\n const {\n match: {\n params: { clientSlug, year, serviceId, ticketId }\n },\n classes\n } = this.props;\n\n let client;\n\n try {\n client = await this.getClientData(clientSlug, serviceId);\n } catch (e) {\n this.setState({\n isLoading: false,\n error:\n 'There was a problem retrieving the ticket. Please try again later or contact our support team.'\n });\n return;\n }\n\n try {\n if (\n process.env.REACT_APP_DISABLE_EXPIRED_TICKETS === '1' &&\n getAcademicYear() > year.replace('-', '/')\n ) {\n throw new Error('Expired ticket year');\n }\n\n const service = this.extractService(client, serviceId);\n const ticket = await this.getTicketData(year, service, ticketId);\n\n const tickets = await this.getCustomerTickets();\n const now = new Date();\n const existingTickets = tickets.data.items.filter(\n customerTicket =>\n customerTicket.ticket_id === ticket.id &&\n ['annual', 'autumn', 'spring', 'summer', 'flexi'].includes(\n ticket.type\n ) &&\n now < new Date(customerTicket.expiry) &&\n customerTicket.ticket_status !== 'void'\n );\n\n const activeFlexiTicketsInDebit = tickets.data.items.filter(\n ct =>\n ct.type === 'flexi' &&\n now < new Date(ct.expiry) &&\n ct.ticket_status !== 'void' &&\n ct.trips - ct.trips_taken < 0\n );\n\n if (activeFlexiTicketsInDebit && activeFlexiTicketsInDebit.length) {\n throw new Error('Flexi debit on account');\n }\n\n let serviceAvailability = null;\n\n if (\n ticket.type === 'single' ||\n ticket.type === 'return' ||\n ticket.type === 'week' ||\n ticket.type === '4_week'\n ) {\n serviceAvailability = await this.getServiceAvailability(\n clientSlug,\n serviceId,\n year\n );\n }\n\n let mandates = [];\n if (ticket && ticket.payment_type === 'dd') {\n mandates = await this.getMandates(client.id);\n }\n\n this.setState({\n client,\n ticket,\n existingTickets,\n showCheckTickets: existingTickets.length > 0,\n service,\n mandates,\n serviceAvailability,\n isLoading: false,\n error: ''\n });\n } catch (e) {\n console.error(e);\n let errorMessage =\n 'There was a problem retrieving the ticket. Please try again later or contact our support team.';\n\n if (e.message === 'Ticket unavailable') {\n errorMessage = `This ticket type is now sold out. Please contact ${contactOperatorString(\n client\n )} for more information regarding ticket availability.`;\n }\n\n if (e.message === 'Flexi debit on account') {\n errorMessage = (\n <>\n

\n Your account has an active flexi ticket in debit.\n Ticket purchasing on your account is disabled until{' '}\n you have topped up your existing flexi ticket to{' '}\n settle the balance due.\n

\n

\n Flexi tickets can be topped up from the{' '}\n \n My Tickets\n {' '}\n view or from the email notifications previously sent{' '}\n to you.\n

\n

\n Please contact {contactOperatorString(client)} for{' '}\n more information.\n

\n \n );\n }\n\n if (e.message === 'Ticket disabled') {\n errorMessage = `Ticket disabled by your transport provider. Please contact ${contactOperatorString(\n client\n )} for more information.`;\n }\n\n if (e.message === 'Ticket expired') {\n errorMessage = `This ticket type has a fixed expiry date which has now expired. Please contact ${contactOperatorString(\n client\n )} for an alternative ticket type to purchase.`;\n }\n\n if (e.message === 'Zonal pricing misconfiguration') {\n errorMessage = `Zonal pricing on this ticket has not been configured. Please contact ${contactOperatorString(\n client\n )} to request they update their pricing.`;\n }\n\n if (e.message === 'Expired ticket year') {\n errorMessage = `This ticket type was valid for a previous year and has now expired. Please contact ${contactOperatorString(\n client\n )} for an alternative ticket type to purchase.`;\n }\n\n if (e.message === 'No service') {\n errorMessage = `This service has either been discontinued or does not exist. Please contact ${contactOperatorString(\n client\n )} for an alternative ticket type to purchase.`;\n }\n\n if (\n e.response &&\n e.response.status === 503 &&\n e.response.data.error &&\n e.response.data.error.key === 'gocardless.offline'\n ) {\n errorMessage = e.response.data.error.message;\n }\n\n this.setState({\n isLoading: false,\n error: errorMessage\n });\n }\n }\n\n getCustomerTickets = async () => {\n const currentSession = await Auth.currentSession();\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n return axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/list-by/user-id/${\n currentSession.getAccessToken().payload.sub\n }`,\n {\n headers\n }\n );\n };\n\n getClientData = async clientSlug => {\n const response = await axios.get(\n `${process.env.REACT_APP_API_ENDPOINT}/client/slug/${clientSlug}`\n );\n\n return response.data;\n };\n\n getTicketData = async (year, service, ticketId) => {\n const response = await axios.get(\n `${process.env.REACT_APP_TICKET_API_ENDPOINT}/service/${\n service.id\n }/tickets/${year}`\n );\n\n if (!response.data.length) {\n throw new Error();\n }\n\n const ticket = response.data.find(item => item.id === ticketId);\n\n if (!ticket) {\n throw new Error();\n }\n\n if (ticket.is_enabled === false) {\n throw new Error('Ticket disabled');\n }\n\n if (ticket.available === false) {\n throw new Error('Ticket unavailable');\n }\n\n if (ticket.pricing_model === 'Zonal') {\n if (!hasValidZonePricing(ticket, service)) {\n throw new Error('Zonal pricing misconfiguration');\n }\n }\n\n if (\n ticket.expiry &&\n process.env.REACT_APP_DISABLE_EXPIRED_TICKETS === '1'\n ) {\n const now = moment();\n const expiry = moment(ticket.expiry);\n\n if (now.toISOString() > expiry.toISOString()) {\n throw new Error('Ticket expired');\n }\n }\n\n return ticket;\n };\n\n getServiceAvailability = async (clientSlug, serviceId, year) => {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/service-availability/${clientSlug}/${serviceId}/${year}`,\n {\n headers\n }\n );\n\n return response.data;\n };\n\n getMandates = async clientId => {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-mandate/client/${clientId}`,\n {\n headers\n }\n );\n\n return response.data;\n };\n\n handleChange = event => {\n const { passengerData } = this.state;\n this.setState({\n passengerData: {\n ...passengerData,\n [event.target.name]: event.target.value\n },\n error: ''\n });\n };\n\n handleDateChange = date => {\n const { passengerData } = this.state;\n this.setState({\n passengerData: {\n ...passengerData,\n startDate: date\n },\n error: ''\n });\n };\n\n /**\n * @NOTE: Some pretty mad gymnastics going on to preview the image correctly as orientation may be stored in EXIF data\n * @SEE: https://stackoverflow.com/questions/7584794/accessing-jpeg-exif-rotation-data-in-javascript-on-the-client-side/32490603#32490603\n * @SEE: https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\n */\n handleImageChange = event => {\n const reader = new FileReader();\n const file = event.target.files[0];\n const { passengerData } = this.state;\n\n if (file) {\n if (file.size > 10e7) {\n this.setState({\n error: 'Photo must be no more than 10MB'\n });\n } else {\n reader.onloadend = () => {\n getOrientation(file, srcOrientation => {\n resetOrientation(\n reader.result,\n srcOrientation,\n destBase64 => {\n this.setState({\n passengerData: {\n ...passengerData,\n photo: file\n },\n imagePreviewUrl: destBase64\n });\n }\n );\n });\n };\n reader.readAsDataURL(file);\n }\n }\n\n event.preventDefault();\n };\n\n handleSubmitPassenger = event => {\n event.preventDefault();\n this.setState({\n passengerSubmitted: true\n });\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n };\n\n handleEditPassenger = () => {\n this.setState({\n passengerSubmitted: false\n });\n };\n\n passengerValid = () => {\n const { passengerData, service, client } = this.state;\n\n let stopSelectionValid = true;\n let yearGroupValid = true;\n let destinationSelectionValid = true;\n let zoneSelectionValid = true;\n\n const useZones = service.zones && passengerData.zone;\n\n if (service && 'stops' in service && !useZones) {\n stopSelectionValid = service.stops.includes(passengerData.stop);\n }\n\n if (useZones) {\n const zone =\n passengerData.zone &&\n service.zones.find(\n serviceZone => serviceZone.name === passengerData.zone\n );\n\n if (zone && (!zone.stops || !zone.stops.length)) {\n zoneSelectionValid = true;\n } else if (\n zone &&\n zone.stops &&\n zone.stops.includes(passengerData.zoneStop)\n ) {\n zoneSelectionValid = true;\n } else {\n zoneSelectionValid = false;\n }\n }\n\n if (service && service.destinations && service.destinations.length) {\n destinationSelectionValid = service.destinations.includes(\n passengerData.dest\n );\n }\n\n if (service && getYearGroups(service.yr_groups).length) {\n if (!passengerData.yr) {\n yearGroupValid = false;\n }\n }\n\n const isPhotoValid =\n client.features.disable_photo === true || passengerData.photo;\n\n const requireStudentId = client.features.require_id === 'student';\n const isIdValid =\n !requireStudentId || (requireStudentId && passengerData.id);\n\n return (\n stopSelectionValid &&\n destinationSelectionValid &&\n passengerData.firstName &&\n passengerData.lastName &&\n isPhotoValid &&\n yearGroupValid &&\n zoneSelectionValid &&\n isIdValid\n );\n };\n\n showConfirmPurchase = () => {\n const { ticket, passengerSubmitted, service } = this.state;\n\n return this.passengerValid() && ticket && service && passengerSubmitted;\n };\n\n formatRemainingTickets = ticket => {\n const ticketWord = ticket.remaining > 1 ? 'tickets' : 'ticket';\n return `Only ${ticket.remaining} ${ticketWord} left, hurry!`;\n };\n\n extractService(client, serviceId) {\n try {\n const { services = [] } = client;\n\n if (!services.length) {\n throw new Error();\n }\n\n const service = services.find(item => item.id === serviceId);\n\n if (!service) {\n throw new Error('No service');\n }\n\n return service;\n } catch (e) {\n this.setState({\n error:\n 'There was a problem retrieving the ticket info, please try again later'\n });\n return null;\n }\n }\n\n renderTickets(existingTickets) {\n const { classes } = this.props;\n\n return (\n
\n {existingTickets.map(ticket => {\n const {\n id,\n type,\n passenger,\n date_purchased: datePurchased,\n expiry,\n trips,\n trips_taken: tripsTaken\n } = ticket;\n\n return (\n
\n
\n \n \n {passenger.first_name}{' '}\n {passenger.last_name}\n \n {type === 'flexi' && (\n \n {' '}\n {trips - tripsTaken} trips\n \n )}\n \n \n Purchased{' '}\n {moment(datePurchased).format(\n 'ddd Do MMM HH:mm'\n )}\n \n {type === 'flexi' && (\n \n Expires{' '}\n {moment(expiry).format(\n 'ddd Do MMM HH:mm'\n )}\n \n )}\n
\n {type === 'flexi' ? (\n \n Top up\n \n ) : (\n \n View\n \n )}\n
\n );\n })}\n
\n );\n }\n\n renderCheckTicketsModal(ticket, existingTickets) {\n const { classes } = this.props;\n\n let heroBody = 'You have purchased this ticket type before:';\n let actionBody = 'Are you sure you want to buy another?';\n if (ticket.type === 'flexi') {\n heroBody =\n 'You have purchased this ticket type before. Flexi tickets are active until the expiry date listed on your ticket. Until it expires, it just needs topping up with more credit.';\n actionBody =\n existingTickets.length > 1\n ? 'Would you like to top up an existing ticket instead?'\n : 'Would you like to top up this ticket instead?';\n }\n\n return (\n
\n
\n
\n \n Duplicate purchase check\n \n {\n this.setState({ showCheckTickets: false });\n }}\n >\n close\n \n
\n
\n \n {heroBody}\n \n {this.renderTickets(existingTickets)}\n \n {actionBody}\n \n {ticket.type === 'flexi' ? (\n
\n {existingTickets.length > 1 ? (\n \n Yes, view my tickets\n \n ) : (\n \n Yes, top up my ticket\n \n )}\n {\n this.setState({ showCheckTickets: false });\n }}\n >\n No, buy another flexi ticket\n \n
\n ) : (\n
\n {\n this.setState({ showCheckTickets: false });\n }}\n >\n Yes, buy another\n \n \n
\n )}\n
\n
\n );\n }\n\n render() {\n const {\n passengerData,\n imagePreviewUrl,\n ticket,\n existingTickets,\n client,\n service,\n serviceAvailability,\n showCheckTickets,\n error,\n mandates,\n isLoading\n } = this.state;\n\n const {\n classes,\n match: {\n params: { year, serviceId, ticketId }\n }\n } = this.props;\n\n if (isLoading) {\n return (\n
\n \n
\n );\n }\n\n if (error) {\n return (\n
\n \n {error}\n \n
\n );\n }\n\n const disablePhoto =\n client && client.features && client.features.disable_photo === true;\n\n const requireStudentId =\n client &&\n client.features &&\n client.features.require_id === 'student';\n\n if (\n ticket &&\n ticket.payment_type === 'dd' &&\n mandates &&\n !mandates.length\n ) {\n return (\n \n );\n }\n\n let confirmPurchaseComponent;\n\n if (ticket && ticket.payment_type === 'dd') {\n confirmPurchaseComponent = (\n \n );\n } else {\n confirmPurchaseComponent = (\n \n );\n }\n\n const showAvailabilityWarning =\n 'remaining' in ticket &&\n ticket.remaining > 0 &&\n ticket.remaining <= 10;\n\n return (\n
\n {showAvailabilityWarning && (\n
\n \n {this.formatRemainingTickets(ticket)}\n \n \n If you need more tickets than available please do\n not purchase this ticket.\n \n
\n )}\n {this.showConfirmPurchase() ? (\n
{confirmPurchaseComponent}
\n ) : (\n \n )}\n {showCheckTickets &&\n this.renderCheckTicketsModal(ticket, existingTickets)}\n
\n );\n }\n}\n\nexport default withStyles(styles)(CreateTicket);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles, Button, Typography } from '@material-ui/core';\nimport axios from 'axios';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport TextField from '@material-ui/core/TextField';\nimport { withRouter } from 'react-router-dom';\nimport globalStyles from '../styles';\nimport PhoneNumberInput from './PhoneNumberInput';\nimport {\n getInvalidPhoneNumberMessage,\n isValidPhoneNumber\n} from '../helpers/errors';\n\nconst styles = theme => ({\n buttons: {\n marginTop: '20px',\n display: 'block'\n },\n button: {\n margin: '5px 5px'\n },\n icon: {\n fontSize: '16px',\n marginLeft: '5px'\n },\n mobileButtons: {\n display: 'none',\n [theme.breakpoints.down('sm')]: {\n display: 'block',\n justifyContent: 'center'\n }\n },\n mobileButton: {\n margin: '5px'\n },\n mobileIcon: {\n '& > img': {\n width: '19px'\n },\n width: '19px',\n marginLeft: '5px'\n },\n subheading: {\n margin: '20px 0 10px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n link: globalStyles.link,\n emailInput: {\n maxWidth: 162\n },\n sendButton: {\n height: '56px',\n margin: '0 0 0 10px',\n padding: '0.4em'\n },\n form: {\n marginTop: 30\n },\n error: {\n margin: '20px 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n asterisk: {\n display: 'none'\n },\n phoneParent: {\n display: 'flex',\n justifyContent: 'center'\n },\n phone: {\n maxWidth: 195,\n margin: '0 0 0px',\n display: 'inline-block',\n '& .MobileInputWrapper': {\n marginLeft: '0 !important',\n marginRight: '0 !important'\n }\n }\n});\n\nclass SendTicket extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n email: '',\n phoneNumber: '',\n loading: false,\n error: '',\n smsError: '',\n sent: false,\n smsSent: false,\n countryCode: process.env.REACT_APP_DEFAULT_PHONE_COUNTRY || 'GB'\n };\n }\n\n handleEmailChange = event => {\n this.setState({\n email: event.target.value.trim()\n });\n };\n\n handlePhoneChange = number => {\n this.setState({\n phoneNumber: number\n });\n };\n\n handleCountryCodeChange = code => {\n this.setState({\n countryCode: code\n });\n };\n\n handleEmailSubmit = async event => {\n event.preventDefault();\n this.setState({\n loading: true,\n error: ''\n });\n\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const { customerTicketId } = this.props;\n const { email } = this.state;\n\n await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-ticket/send/${customerTicketId}`,\n {\n email\n },\n {\n headers\n }\n );\n\n this.setState({\n loading: false,\n sent: true\n });\n } catch (e) {\n console.error(e);\n this.setState({\n loading: false,\n error: 'Ticket could not be sent. Please try again later.'\n });\n }\n };\n\n handleSmsSubmit = async event => {\n event.preventDefault();\n this.setState({\n loading: true,\n smsError: ''\n });\n\n const { phoneNumber, countryCode } = this.state;\n\n if (!isValidPhoneNumber(phoneNumber, countryCode)) {\n this.setState({\n loading: false,\n smsError: getInvalidPhoneNumberMessage(phoneNumber, countryCode)\n });\n return;\n }\n\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const { customerTicketId } = this.props;\n\n await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-ticket/send-sms/${customerTicketId}`,\n {\n phone_number: phoneNumber\n },\n {\n headers\n }\n );\n\n this.setState({\n loading: false,\n smsSent: true\n });\n } catch (e) {\n console.error(e);\n this.setState({\n loading: false,\n smsError: 'Ticket could not be sent. Please try again later.'\n });\n }\n };\n\n render() {\n const { classes, customerTicketId, history } = this.props;\n const {\n loading,\n error,\n smsError,\n email,\n phoneNumber,\n sent,\n smsSent\n } = this.state;\n\n if (smsSent) {\n history.push(`/ticket/${customerTicketId}/sms-sent`);\n }\n\n if (sent) {\n history.push(`/ticket/${customerTicketId}/sent`);\n }\n\n return (\n <>\n \n
\n \n \n Send Email\n \n
\n {error !== '' && (\n \n {error}\n \n )}\n \n \n - OR -\n \n
\n
\n
\n
\n \n
\n \n Send SMS\n \n
\n
\n {smsError !== '' && (\n \n {smsError}\n \n )}\n
\n \n );\n }\n}\n\nSendTicket.propTypes = {\n classes: PropTypes.shape().isRequired,\n customerTicketId: PropTypes.string.isRequired\n};\n\nexport default withStyles(styles)(withRouter(SendTicket));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles, Button, Icon, Typography } from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport SendTicket from './SendTicket';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n buttons: {\n marginTop: '20px',\n display: 'block'\n },\n button: {\n margin: '5px 5px'\n },\n icon: {\n fontSize: '16px',\n marginLeft: '5px'\n },\n mobileButtons: {\n display: 'none',\n [theme.breakpoints.down('sm')]: {\n display: 'block',\n justifyContent: 'center'\n }\n },\n mobileButton: {\n margin: '5px'\n },\n mobileIcon: {\n '& > img': {\n width: '19px'\n },\n width: '19px',\n marginLeft: '5px'\n },\n subheading: {\n margin: '20px 0 10px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n link: globalStyles.link,\n emailInput: {\n maxWidth: 184\n },\n sendButton: {\n height: '56px',\n margin: '0 0 0 10px',\n padding: '0.6em'\n },\n form: {\n marginTop: 30\n }\n});\n\nconst getWhatsAppLink = viewTicketLink =>\n `whatsapp://send?text=Your ShuttleID bus ticket can be viewed here: ${viewTicketLink}`;\n\nconst getMessengerLink = viewTicketLink =>\n `fb-messenger://share/?link=${viewTicketLink}`;\n\nconst ViewTicketButtons = ({ ticketId, hasNotifications, classes }) => {\n const viewTicketBaseLink = process.env.REACT_APP_VIEW_TICKET_BASE_URL;\n const viewTicketLink = `${viewTicketBaseLink}${ticketId}`;\n\n return (\n
\n
\n \n View ticket\n confirmation_number\n \n \n Print ticket\n print\n \n {hasNotifications && (\n \n Notifications\n notifications_none\n \n )}\n
\n \n Send ticket to passenger\n \n \n The ticket can be printed or presented directly on the passenger\n {\"'\"}s mobile device.\n \n\n \n Enter the passenger email or mobile number below and we{\"'\"}ll\n send the private ticket link to open on their device.\n \n\n \n\n
\n \n Other ways to send your ticket link\n \n \n WhatsApp ticket link{' '}\n {/* */}\n \n \n Messenger ticket link{' '}\n {/* */}\n \n
\n
\n );\n};\n\nViewTicketButtons.propTypes = {\n ticketId: PropTypes.string.isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(ViewTicketButtons);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport Button from '@material-ui/core/Button';\n\nconst ButtonLink = ({ children, to, ...props }) => (\n \n);\n\nButtonLink.propTypes = {\n children: PropTypes.node.isRequired,\n to: PropTypes.string.isRequired\n};\n\nexport default ButtonLink;\n","import React from 'react';\nimport { withStyles, Typography } from '@material-ui/core';\nimport ContentHeader from '../components/ContentHeader';\nimport ViewTicketButtons from '../components/ViewTicketButtons';\nimport ButtonLink from '../components/ButtonLink';\n\nconst styles = theme => ({\n root: {\n textAlign: 'center',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n heading: {\n marginBottom: '10px'\n },\n subheading: {\n marginTop: '20px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n inner: {\n padding: '20px 10px'\n },\n button: {\n margin: '5px 5px'\n }\n});\n\nconst OrderConfirmed = ({ classes, match }) => {\n const {\n params: {\n customerTicketId,\n year,\n clientSlug,\n serviceId,\n ticketId,\n clientId\n }\n } = match;\n\n return (\n
\n \n
\n \n Congratulations, your order was successful and your ticket\n is ready to use.\n \n {year && clientSlug && serviceId && ticketId && (\n \n \n Buy another\n \n \n )}\n {year && clientId && serviceId && ticketId && (\n \n \n Buy again\n \n \n )}\n \n Tickets will be scanned on board and will need to be\n presented by the passenger.\n \n\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(OrderConfirmed);\n","import React from 'react';\nimport { withStyles, Typography } from '@material-ui/core';\nimport qs from 'query-string';\nimport ContentHeader from '../components/ContentHeader';\nimport ViewTicketButtons from '../components/ViewTicketButtons';\nimport ButtonLink from '../components/ButtonLink';\n\nconst styles = theme => ({\n root: {\n textAlign: 'center',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n heading: {\n marginBottom: '10px'\n },\n subheading: {\n marginTop: '20px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n inner: {\n padding: '20px 10px'\n },\n button: {\n margin: '5px 5px'\n }\n});\n\nconst AdhocOrderConfirmed = ({ classes, match, location }) => {\n const {\n params: {\n customerTicketId,\n year,\n clientSlug,\n serviceId,\n ticketId,\n clientId\n }\n } = match;\n\n const query = qs.parse(location.search);\n const isFixed = query.is_fixed || false;\n\n const hideBuyAgain = ['4338dc60-3dc5-45eb-98b5-426581ac1e17'];\n\n const showBuyAgain =\n year &&\n clientId &&\n serviceId &&\n ticketId &&\n !isFixed &&\n !hideBuyAgain.includes(clientId);\n\n return (\n
\n \n
\n \n Congratulations, your order was successful and your ticket\n is ready to use.\n \n {showBuyAgain && (\n \n \n Buy again\n \n \n )}\n {year && clientSlug && serviceId && ticketId && (\n \n \n Buy for another passenger\n \n \n )}\n \n Tickets will be scanned on board and will need to be\n presented by the passenger.\n \n\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(AdhocOrderConfirmed);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n withStyles,\n Card,\n CardContent,\n Typography,\n Icon,\n Button\n} from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment';\nimport { getAcademicYear } from '../helpers/date';\n\nconst styles = theme => ({\n root: {\n display: 'grid',\n gridGap: '20px',\n gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 0.5fr))',\n gridRowStart: '2',\n margin: '0 20px',\n justifyContent: 'space-evenly',\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))',\n margin: '0'\n }\n },\n passengerName: {\n marginBottom: '20px',\n '& > p': {\n fontSize: '16px'\n }\n },\n ticket: {\n display: 'flex',\n height: '100%',\n flexDirection: 'column',\n '&:last-child': {\n paddingBottom: '16px'\n },\n position: 'relative'\n },\n tripsLabel: {\n fontSize: '12px !important',\n color: 'green',\n textTransform: 'uppercase'\n },\n tripsLabelWarn: {\n color: '#848400'\n },\n tripsLabelFail: {\n color: 'red'\n },\n adhocExp: {\n color: 'red',\n fontSize: '13px !important'\n },\n tripsBadge: {\n background: 'green',\n color: 'white',\n borderRadius: '50%',\n padding: '3px',\n width: 20,\n height: 20,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n tripsBadgeWarn: {\n background: '#e0e000',\n color: 'black'\n },\n tripsBadgeFail: {\n background: 'red',\n color: 'white'\n },\n ticketText: {\n flexGrow: 2\n },\n icon: {\n fontSize: '18px',\n marginLeft: '5px'\n },\n ticketName: {\n '& > h6': {\n fontSize: '1.1em'\n }\n },\n buyAgainButton: {\n marginLeft: '10px'\n },\n notifyBtn: {\n position: 'absolute',\n padding: 0,\n minWidth: '0',\n right: 10,\n border: 'none !important'\n },\n notifyIcon: {\n fontSize: '18px'\n }\n});\n\nconst getTicketName = ticket => {\n const { type } = ticket;\n let formattedType = type.charAt(0).toUpperCase() + type.slice(1);\n\n formattedType = formattedType.replace('_', ' ');\n\n let description = `${ticket.service_name} ${formattedType}`;\n\n if (ticket.opt) {\n description += ` ${ticket.opt}`;\n }\n\n if (type === 'advance') {\n return description;\n }\n\n description += ` ${ticket.ticket_year}`;\n\n if (ticket.sub_type === 'pm_only') {\n description += ' (PM Only)';\n } else if (ticket.sub_type === 'am_only') {\n description += ' (AM Only)';\n } else if (ticket.sub_type === 'custom') {\n description += ' (Custom)';\n }\n\n return description;\n};\n\nconst getPassengerName = ticket => {\n const { passenger } = ticket;\n\n return `${passenger.first_name} ${passenger.last_name}`;\n};\n\nconst sortByDate = (a, b) => {\n if (a.date_purchased > b.date_purchased) {\n return -1;\n }\n if (a.date_purchased < b.date_purchased) {\n return 1;\n }\n return 0;\n};\n\nconst hasExpired = ticket => {\n const now = new Date().toISOString();\n return ticket.expiry && ticket.expiry < now;\n};\n\nconst getTripsLabelClassName = (ticket, classes) => {\n const tripsLeft = ticket.trips - ticket.trips_taken;\n let className = classes.tripsLabel;\n\n if (tripsLeft === 1 || tripsLeft === 2) {\n className += ` ${classes.tripsLabelWarn}`;\n }\n\n if (tripsLeft < 1) {\n className += ` ${classes.tripsLabelFail}`;\n }\n\n return className;\n};\n\nconst getTripsBadgeClassName = (ticket, classes) => {\n const tripsLeft = ticket.trips - ticket.trips_taken;\n let className = classes.tripsBadge;\n\n if (tripsLeft === 1 || tripsLeft === 2) {\n className += ` ${classes.tripsBadgeWarn}`;\n }\n\n if (tripsLeft < 1) {\n className += ` ${classes.tripsBadgeFail}`;\n }\n\n return className;\n};\n\nconst isAdhoc = ticket => {\n return (\n ticket.type === 'single' ||\n ticket.type === 'return' ||\n ticket.type === 'week' ||\n ticket.type === '4_week'\n );\n};\n\nconst canBuyAgain = (ticket, currentAcademicYear) => {\n const hideBuyAgain = ['4338dc60-3dc5-45eb-98b5-426581ac1e17'];\n return (\n isAdhoc(ticket) &&\n ticket.sub_type !== 'fixed' &&\n ticket.ticket_year === currentAcademicYear &&\n !hideBuyAgain.includes(ticket.client_id)\n );\n};\n\nconst TicketTable = ({ renewals, tickets, classes }) => {\n const academicYear = getAcademicYear();\n return (\n
\n {tickets.sort(sortByDate).map(ticket => {\n return (\n \n \n {ticket.notify && (\n \n \n notifications\n \n \n )}\n
\n
\n \n {getTicketName(ticket)}\n \n
\n
\n \n {getPassengerName(ticket)}\n \n {ticket.type === 'flexi' && (\n \n \n {ticket.trips -\n ticket.trips_taken}\n {' '}\n trips left\n

\n )}\n {isAdhoc(ticket) && !hasExpired(ticket) && (\n

\n Expires{' '}\n {moment(ticket.expiry).format(\n 'ddd Do MMM HH:mm'\n )}\n

\n )}\n
\n
\n
\n {!hasExpired(ticket) && (\n <>\n \n Details\n \n menu\n \n \n {canBuyAgain(ticket, academicYear) && (\n \n Buy again\n \n )}\n {ticket.type === 'flexi' && (\n \n Top up\n \n autorenew\n \n \n )}\n {ticket.type === 'advance' && (\n \n Book trip\n \n )}\n \n )}\n {hasExpired(ticket) && (\n <>\n \n Expired\n \n {canBuyAgain(ticket, academicYear) && (\n \n Buy again\n \n )}\n \n )}\n {renewals[ticket.id] && (\n \n Renew\n \n autorenew\n \n \n )}\n
\n
\n
\n );\n })}\n
\n );\n};\n\nTicketTable.propTypes = {\n renewals: PropTypes.shape().isRequired,\n tickets: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n type: PropTypes.string,\n service_name: PropTypes.string,\n ticket_year: PropTypes.string,\n passenger: PropTypes.shape({\n first_name: PropTypes.string,\n last_name: PropTypes.string\n })\n })\n ).isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(TicketTable);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Auth } from 'aws-amplify';\nimport axios from 'axios';\nimport Box from '@material-ui/core/Box';\nimport {\n Typography,\n withStyles,\n CircularProgress,\n styled\n} from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport IconButton from '@material-ui/core/IconButton';\nimport Icon from '@material-ui/core/Icon';\nimport { Link } from 'react-router-dom';\nimport LoaderButton from '../components/LoaderButton';\nimport TicketTable from '../components/TicketTable';\nimport globalStyles from '../styles';\n\nconst BootstrapDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiDialogContent-root': {\n padding: theme.spacing(2)\n },\n '& .MuiDialogActions-root': {\n padding: theme.spacing(1)\n }\n}));\n\nconst BootstrapDialogTitle = props => {\n const { classes, children, onClose, ...other } = props;\n\n return (\n \n \n {children}\n \n {onClose ? (\n \n close\n \n ) : null}\n \n \n \n );\n};\n\nconst styles = theme => ({\n root: {\n maxWidth: '1200px',\n margin: '20px auto',\n textAlign: 'center',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px'\n }\n },\n heading: {\n marginBottom: '20px'\n },\n error: {\n margin: '20px 0',\n fontSize: '18px',\n color: red[500]\n },\n noTickets: {\n maxWidth: 400,\n margin: '0 auto',\n '& > p': {\n margin: '20px auto',\n fontSize: '18px'\n }\n },\n button: {\n marginTop: '10px'\n },\n loadMoreButton: {\n marginTop: 20\n },\n faq: {\n listStyleType: 'none',\n padding: 0\n },\n faqContent: {\n '& p': {\n margin: '20px auto',\n fontSize: '18px'\n }\n },\n closeBtn: {\n position: 'absolute',\n right: 8,\n top: 8\n },\n title: {\n padding: '16px 16px'\n },\n link: globalStyles.link\n});\n\nclass ViewTickets extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n loading: true,\n loadingMore: false,\n tickets: [],\n lastItem: null,\n renewals: {},\n loadMoreError: false,\n openFaq: 0\n };\n }\n\n async componentDidMount() {\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/list-by/user-id/${\n currentSession.getAccessToken().payload.sub\n }`,\n {\n headers\n }\n );\n\n const renewalsResponse = await axios.get(\n `${process.env.REACT_APP_RENEWAL_API_ENDPOINT}/renewal/user/${\n currentSession.getAccessToken().payload.sub\n }`,\n {\n headers\n }\n );\n\n const renewals = {};\n\n renewalsResponse.data.forEach(renewal => {\n renewals[renewal.customer_ticket_id] = renewal;\n });\n\n this.setState({\n tickets: response.data.items,\n lastItem: response.data.last_item,\n renewals,\n loading: false,\n error: false\n });\n } catch (e) {\n this.setState({\n loading: false,\n error: true\n });\n }\n }\n\n async loadMoreTickets() {\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const { lastItem, tickets } = this.state;\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/list-by/user-id/${\n currentSession.getAccessToken().payload.sub\n }?lastKey=${encodeURIComponent(JSON.stringify(lastItem))}`,\n {\n headers\n }\n );\n\n this.setState({\n tickets: [...tickets, ...response.data.items],\n lastItem: response.data.last_item,\n loadingMore: false,\n loadMoreError: false\n });\n } catch (e) {\n this.setState({\n loadingMore: false,\n loadMoreError: true\n });\n }\n }\n\n handleClose() {\n this.setState({\n openFaq: 0\n });\n }\n\n render() {\n const {\n tickets,\n renewals,\n loading,\n loadingMore,\n loadMoreError,\n lastItem,\n error,\n openFaq\n } = this.state;\n const { classes } = this.props;\n\n if (loading) {\n return (\n
\n \n
\n );\n }\n return (\n
\n {\n this.handleClose();\n }}\n aria-labelledby=\"customized-dialog-title\"\n open={openFaq}\n PaperProps={{\n style: {\n margin: 16,\n minWidth: 300\n }\n }}\n >\n {\n this.handleClose();\n }}\n classes={classes}\n >\n FAQ\n \n \n {openFaq === 1 && (\n <>\n \n How to buy my ticket\n \n \n Your Transport Provider will need to give\n you a link to their ticket listing on\n ShuttleID where you can purchase your\n ticket.\n \n \n Your Transport Provider may promote their\n ticket listing link on their own website, on\n their social media pages, or they may have\n emailed it directly to you.\n \n \n If you have not been given access to the\n ticket listing, please contact your\n Transport Provider directly, who will be\n able to help.\n \n \n )}\n {openFaq === 2 && (\n <>\n \n Who is my Transport Provider?\n \n \n Your Transport Provider is the organisation\n that arranges your transport, and is who you\n will pay directly. This could be your\n bus/coach company or could be your\n school/college/workplace.\n \n \n ShuttleID is a ticketing platform that helps\n your Transport Provider sell their bus\n tickets online.\n \n \n )}\n {openFaq === 3 && (\n <>\n \n How do I apply my bursary?\n \n \n If you have a bursary or financial support\n that pays for your travel, either partially\n or in full, your Transport Provider will\n either need to supply you with a special\n link to buy a discounted ticket, or they\n will need to provide you with a voucher code\n which you can apply at the checkout.\n \n \n Please contact your Transport Provider\n directly if you have not received either a\n link to your discounted ticket, or your\n voucher code.\n \n \n )}\n {openFaq === 4 && (\n <>\n \n How do I apply my voucher code?\n \n \n When buying a ticket, voucher codes are\n applied at the final stage of the checkout\n before confirming payment.\n \n \n If you are using Direct Debit as your\n payment method, please note this option is\n after you create your initial Direct Debit\n mandate. After, you will be given the\n opportunity to enter the passenger details,\n apply your voucher code, and then confirm\n the order.\n \n \n Further information on{' '}\n \n how to apply your voucher code\n {' '}\n is available in the Help Portal.\n \n \n )}\n {openFaq === 5 && (\n <>\n \n I exited my Direct Debit ticket purchase too\n early. How do I go back?\n \n \n Tickets purchased using Direct Debit require\n a Direct Debit mandate to be initially set\n up.\n \n \n The mandate set up itself does not create\n any payments, but it does give permission\n for your Transport Provider to make charges\n in future. We use this mandate to schedule\n payments automatically, after purchasing\n your ticket.\n \n \n If you left the ticket purchase after\n creating the Direct Debit mandate, you will\n have a Direct Debit mandate, but you won\n {\"'\"}t have a ticket, and no payments will\n be scheduled.\n \n \n To complete your purchase, simply attempt\n your purchase again using the same process\n as before (e.g. clicking a link in an email\n from your Transport Provider, or a link from\n their website). The next time you do this,\n it will skip the Direct Debit mandate form\n as you have already created a mandate.\n Instead, you will be asked to complete the\n details for the ticket purchase (e.g.{' '}\n passenger name, photo, bus stop, etc).\n \n \n Completing your purchase will give you\n instant access to your ticket, and you will\n receive email confirmation of your order.\n \n \n Further help on{' '}\n \n how to buy your ticket using Direct\n Debit\n {' '}\n is available on the Help Portal.\n \n \n )}\n \n \n {\n this.handleClose();\n }}\n >\n Close\n \n \n \n\n \n My Tickets\n \n {error && (\n \n There was a problem retrieving your tickets\n \n )}\n {tickets.length === 0 && !error ? (\n
\n \n After purchasing your tickets, you{\"'\"}ll be able to\n access them here in the My Tickets area.\n \n \n Frequently asked questions\n \n
    \n
  • \n {\n this.setState({ openFaq: 1 });\n }}\n >\n + How to buy my ticket\n \n
  • \n
  • \n {\n this.setState({ openFaq: 2 });\n }}\n >\n + Who is my Transport Provider?\n \n
  • \n
  • \n {\n this.setState({ openFaq: 3 });\n }}\n >\n + How do I apply my bursary?\n \n
  • \n
  • \n {\n this.setState({ openFaq: 4 });\n }}\n >\n + How do I apply my voucher code?\n \n
  • \n
  • \n {\n this.setState({ openFaq: 5 });\n }}\n >\n + I exited my Direct Debit ticket purchase\n too early. How do I go back?\n \n
  • \n
  • \n \n
  • \n
\n
\n ) : (\n <>\n \n {loadMoreError && (\n \n There was a problem retrieving your tickets.\n Please try again shortly.\n \n )}\n {lastItem && (\n {\n this.setState({\n loadingMore: true\n });\n\n this.loadMoreTickets();\n }}\n text=\"Load More\"\n loadingText=\"Loading...\"\n />\n )}\n \n )}\n
\n );\n }\n}\n\nViewTickets.propTypes = {\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(ViewTickets);\n","import React, { useState, useEffect } from 'react';\n\nimport { CircularProgress } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Auth } from 'aws-amplify';\nimport ContentHeader from '../components/ContentHeader';\nimport globalStyles from '../styles';\nimport PhoneNumberInput from '../components/PhoneNumberInput';\nimport {\n getInvalidPhoneNumberMessage,\n isValidPhoneNumber\n} from '../helpers/errors';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '600px',\n margin: '40px auto',\n position: 'relative',\n textAlign: 'center',\n minHeight: '300px',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n intro: {\n marginTop: 0,\n marginBottom: 40\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '360px',\n margin: '20px auto 40px',\n padding: '20px 10px 40px'\n },\n input: {\n margin: '0 20px 20px',\n '&:invalid': {\n border: 'red solid 2px'\n }\n },\n message: {\n display: 'inline-block',\n margin: '130px auto'\n },\n spinner: {\n margin: '130px auto'\n },\n 'error > div': {\n border: '1px solid red'\n },\n link: globalStyles.link,\n submit: {\n width: '200px',\n height: '56px',\n margin: '20px auto'\n }\n});\n\nconst Account = ({ classes }) => {\n const [isLoading, setIsLoading] = useState(true);\n\n const [email, setEmail] = useState('');\n const [mobile, setMobile] = useState('');\n const [countryCode, setCountryCode] = useState(\n process.env.REACT_APP_DEFAULT_PHONE_COUNTRY || 'GB'\n );\n const [mobileErrorMessage, setMobileErrorMessage] = useState(null);\n const [isSubmitted, setIsSubmitted] = useState(false);\n const [isSubmitError, setIsSubmitError] = useState(false);\n\n useEffect(() => {\n async function fetchAccountDetails() {\n try {\n const { attributes } = await Auth.currentAuthenticatedUser({\n bypassCache: true\n });\n setEmail(attributes.email);\n setMobile(attributes.phone_number);\n setIsLoading(false);\n } catch (error) {\n setIsLoading(false);\n }\n }\n\n fetchAccountDetails();\n }, []);\n\n const onChangeMobile = number => {\n setMobile(number);\n setMobileErrorMessage(null);\n };\n\n const onSubmit = async e => {\n e.preventDefault();\n\n setIsSubmitError(false);\n\n if (!isValidPhoneNumber(mobile, countryCode)) {\n setMobileErrorMessage(getInvalidPhoneNumberMessage(countryCode));\n return;\n }\n\n setIsLoading(true);\n\n try {\n const user = await Auth.currentAuthenticatedUser();\n await Auth.updateUserAttributes(user, {\n phone_number: mobile\n });\n setIsLoading(false);\n setIsSubmitted(true);\n } catch (error) {\n setIsLoading(false);\n setIsSubmitError(true);\n }\n };\n\n if (isLoading) {\n return (\n
\n \n
\n );\n }\n\n if (!isLoading && !email) {\n return (\n
\n \n Account details could not be loaded. Please try again.\n \n
\n );\n }\n\n if (isSubmitted) {\n return (\n
\n \n
\n

\n Your account details have successfully been updated.\n

\n {\n setIsSubmitted(false);\n }}\n >\n Account details\n \n \n
\n );\n }\n\n return (\n
\n \n\n
\n

\n Keep your{' '}\n \n email\n {' '}\n and phone details up-to-date to ensure your transport\n provider can reach you.\n

\n\n

\n Your operator will be able to use your mobile number to send\n SMS service alerts.\n

\n\n \n \n {isSubmitError && (\n

\n There was a problem updating your details. Please ensure\n valid values and try again.\n

\n )}\n \n Update\n \n \n
\n );\n};\n\nAccount.propTypes = {\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(Account);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport { Link } from 'react-router-dom';\nimport { Auth } from 'aws-amplify';\nimport Logo from '../images/logo.png';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n position: 'relative',\n zIndex: '1000',\n boxShadow: 'none !important'\n },\n subNavRoot: {\n background: '#fff',\n position: 'relative',\n boxShadow:\n '0px 2px 4px -1px rgba(0,0,0,0.2), 0px 4px 5px 0px rgba(0,0,0,0.14), 0px 1px 10px 0px rgba(0,0,0,0.12) !important',\n marginBottom: '1em'\n },\n subNavLinks: {\n '& a': {\n color: '#50b9b3',\n marginLeft: '.4em',\n marginRight: '.4em',\n padding: '0.5em 0',\n display: 'inline-block',\n textDecoration: 'none',\n textTransform: 'uppercase',\n fontFamily:\n 'Montserrat,Helvetica,Arial,Lucida,sans-serif !important',\n fontSize: 15\n }\n },\n heading: {\n color: '#fff',\n fontSize: '40px',\n [theme.breakpoints.down('sm')]: {\n fontSize: '28px'\n }\n },\n toolbar: {\n justifyContent: 'center'\n },\n subNavToolbar: {\n minHeight: '0',\n justifyContent: 'center',\n paddingLeft: '8px !important',\n paddingRight: '8px !important'\n },\n logo: {\n maxWidth: '200px',\n display: 'block',\n minWidth: 50,\n marginTop: 10\n }\n});\n\nconst Header = ({ classes, isAuthenticated, handleAuth }) => {\n const onSignOut = async e => {\n e.preventDefault();\n try {\n await Auth.signOut();\n handleAuth(false);\n } catch (err) {\n console.error(err);\n }\n };\n\n return (\n
\n \n \n \n \n \n \n \n \n \n\n
\n \n \n Bus tickets\n {isAuthenticated && (\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n Account\n )}\n Help\n {isAuthenticated && (\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n \n Logout\n \n )}\n \n \n
\n
\n );\n};\n\nHeader.propTypes = {\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(Header);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = () => ({\n root: {\n fontSize: '0.8em',\n color: '#ccc'\n },\n text: {\n fontSize: '0.8em',\n color: '#aaa'\n },\n footerLink: {\n color: '#aaa'\n },\n footer: {\n marginBottom: '20px'\n }\n});\n\nconst Footer = ({ classes }) => (\n
\n \n © {new Date().getFullYear()}{' '}\n \n ShuttleID\n {' '}\n |{' '}\n \n Terms\n {' '}\n |{' '}\n \n Privacy policy\n {' '}\n | Build 1706\n \n \n Cevenco Ltd trading as ShuttleID is a limited company registered in\n England and Wales. Registered number: 11901852.\n \n
\n);\n\nFooter.propTypes = {\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(Footer);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Route, Redirect } from 'react-router-dom';\n\nconst AuthenticatedRoute = ({ component: C, props: cProps, ...rest }) => (\n \n cProps.isAuthenticated ? (\n \n ) : (\n \n )\n }\n />\n);\n\nAuthenticatedRoute.propTypes = {\n component: PropTypes.func.isRequired,\n props: PropTypes.shape()\n};\n\nAuthenticatedRoute.defaultProps = {\n props: {}\n};\n\nexport default AuthenticatedRoute;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Route, Redirect, withRouter } from 'react-router-dom';\nimport qs from 'query-string';\n\nconst UnauthenticatedRoute = ({\n component: C,\n props: cProps,\n location,\n ...rest\n}) => {\n const query = qs.parse(location.search);\n const redirect = query.redirect || null;\n\n return (\n \n !cProps.isAuthenticated ? (\n \n ) : (\n \n )\n }\n />\n );\n};\n\nUnauthenticatedRoute.propTypes = {\n component: PropTypes.func.isRequired,\n props: PropTypes.shape().isRequired,\n location: PropTypes.shape({\n search: PropTypes.string\n }).isRequired\n};\n\nexport default withRouter(UnauthenticatedRoute);\n","import React, { Component } from 'react';\nimport { Auth } from 'aws-amplify';\nimport axios from 'axios';\nimport { Typography, withStyles, CircularProgress } from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport { Link } from 'react-router-dom';\nimport ContentHeader from '../components/ContentHeader';\nimport {\n formatTicketType,\n formatDate,\n formatPrice\n} from '../helpers/formatters';\nimport ViewTicketButtons from '../components/ViewTicketButtons';\nimport ButtonLink from '../components/ButtonLink';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n spinner: {\n marginLeft: 'calc(50% - 22px)',\n marginTop: '60px',\n marginBottom: '60px'\n },\n error: {\n margin: '20px 0',\n fontSize: '18px',\n color: red[500],\n textAlign: 'center',\n paddingBottom: '20px'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n },\n button: {\n margin: '15px 5px 0'\n }\n});\n\nclass TicketDetail extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n loading: true,\n error: false,\n ticket: null\n };\n }\n\n async componentDidMount() {\n try {\n const currentSession = await Auth.currentSession();\n const {\n match: {\n params: { ticketId }\n }\n } = this.props;\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/user-id/${\n currentSession.getAccessToken().payload.sub\n }/${ticketId}?include_notifications=true`,\n {\n headers\n }\n );\n\n this.setState({\n ticket: response.data,\n loading: false,\n error: false\n });\n } catch (e) {\n this.setState({\n loading: false,\n error: true\n });\n }\n }\n\n render() {\n const { ticket, error, loading } = this.state;\n const { classes } = this.props;\n\n if (loading) {\n return (\n \n );\n }\n\n return (\n
\n \n {error && (\n \n There was a problem retrieving your tickets\n \n )}\n {ticket && !error && (\n
\n \n Passenger: {ticket.passenger.first_name}{' '}\n {ticket.passenger.last_name}\n \n \n Ticket:{' '}\n {formatTicketType(\n ticket.service_name,\n ticket.type,\n ticket.sub_type,\n ticket.travel_pattern,\n ticket.opt\n )}\n \n {ticket.type !== 'advance' && (\n <>\n {'yr' in ticket && (\n \n Year group:{' '}\n \n {ticket.yr}\n \n \n )}\n {'zone' in ticket && (\n \n Zone: {ticket.zone}\n \n )}\n {('zone_stop' in ticket ||\n 'stop' in ticket) && (\n \n Stop: {ticket.zone_stop || ticket.stop}\n \n )}\n {'start' in ticket && (\n \n Valid from: {formatDate(ticket.start)}\n \n )}\n {'expiry' in ticket && (\n \n Valid until: {formatDate(ticket.expiry)}\n \n )}\n \n Price:{' '}\n {formatPrice(\n 'total_price' in ticket\n ? ticket.total_price\n : ticket.price,\n ticket.currency\n )}\n {ticket.voucher_id && <> (Discounted)}\n \n \n )}\n {ticket.type === 'flexi' && (\n \n {ticket.trips - ticket.trips_taken} trips left -{' '}\n \n Top up\n {' '}\n -{' '}\n \n View trips\n \n \n )}\n {ticket.type === 'advance' && (\n <>\n \n Bookings\n \n \n Book trip\n \n \n )}\n \n
\n )}\n
\n );\n }\n}\n\nexport default withStyles(styles)(TicketDetail);\n","import React, { useEffect, useState } from 'react';\nimport { Auth } from 'aws-amplify';\nimport axios from 'axios';\nimport {\n CircularProgress,\n Icon,\n Switch,\n Typography,\n withStyles\n} from '@material-ui/core';\nimport ContentHeader from '../components/ContentHeader';\nimport ButtonLink from '../components/ButtonLink';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n spinner: {\n marginLeft: 'calc(50% - 22px)',\n marginTop: '60px',\n marginBottom: '60px'\n },\n main: {\n padding: '30px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '20px'\n },\n switch: {\n display: 'flex',\n alignItems: 'center'\n },\n error: {\n color: 'red'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n }\n});\n\nconst TicketNotifications = ({ match, classes }) => {\n const {\n params: { ticketId }\n } = match;\n\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [ticket, setTicket] = useState(undefined);\n const [notify, setNotify] = useState(false);\n const [hasNotifyError, setHasNotifyError] = useState(false);\n const [isNotifyLoading, setIsNotifyLoading] = useState(false);\n\n const loadData = async () => {\n setIsLoading(true);\n\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const ticketResponse = await axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/user-id/${\n currentSession.getAccessToken().payload.sub\n }/${ticketId}?include_notifications=true`,\n {\n headers\n }\n );\n\n setIsLoading(false);\n setTicket(ticketResponse.data);\n setNotify(ticketResponse.data.notify || false);\n setHasError(false);\n } catch (e) {\n setIsLoading(false);\n setHasError(true);\n }\n };\n\n const updateNotifications = newNotify => async event => {\n event.preventDefault();\n setIsNotifyLoading(true);\n\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const res = await axios.put(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/user-id/${\n currentSession.getAccessToken().payload.sub\n }/${ticketId}/boarding-notifications`,\n {\n notify: newNotify\n },\n {\n headers\n }\n );\n\n if (res.status !== 200) {\n throw Error;\n }\n\n setIsNotifyLoading(false);\n setHasNotifyError(false);\n setNotify(newNotify);\n } catch (e) {\n setIsNotifyLoading(false);\n setHasNotifyError(true);\n }\n };\n\n useEffect(() => {\n loadData();\n }, []);\n\n if (isLoading) {\n return (\n \n );\n }\n\n const renderInner = () => {\n if (hasError || !ticket) {\n return (\n \n There was a problem loading your tickets. Please try again\n later.\n \n );\n }\n\n if (!ticket.has_boarding_notifications) {\n return (\n <>\n \n Your transport provider has disabled boarding\n notifications for this service.\n \n \n Please contact your transport provider directly for more\n information.\n \n \n );\n }\n\n return (\n <>\n
\n \n EMAIL BOARDING NOTIFICATIONS\n \n \n
\n \n \n How notifications work\n \n \n {hasNotifyError && (\n \n There was an issue updating your notification\n preferences. Please try again later.\n \n )}\n \n );\n };\n\n return (\n
\n \n
\n {renderInner()}\n \n arrow_left\n Back to ticket details\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(TicketNotifications);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport TextField from '@material-ui/core/TextField';\nimport { Auth } from 'aws-amplify';\nimport { Typography, withStyles } from '@material-ui/core';\nimport red from '@material-ui/core/colors/red';\nimport LoaderButton from './LoaderButton';\nimport ContentHeader from './ContentHeader';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n textAlign: 'center',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '800px',\n margin: '0 auto',\n padding: '20px 10px'\n },\n input: {\n margin: '20px 20px 10px'\n },\n button: {\n width: '200px',\n height: '56px',\n margin: '0 auto'\n },\n error: {\n margin: '0 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold',\n textDecoration: 'underline',\n cursor: 'pointer'\n },\n disabledLink: {\n color: '#666',\n fontWeight: 'bold'\n }\n});\n\nclass PasswordResetConfirmationForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n error: null,\n loading: false,\n confirmationCode: '',\n password: '',\n hasResentCode: false\n };\n }\n\n handleConfirmationSubmit = async (event, retryIfQuotaExceeded = true) => {\n event.preventDefault();\n const { email, handleAuth } = this.props;\n const { confirmationCode, password } = this.state;\n\n this.setState({ loading: true });\n\n try {\n await Auth.forgotPasswordSubmit(\n email.toLowerCase(),\n confirmationCode.trim(),\n password\n );\n await Auth.signIn(email.toLowerCase(), password);\n try {\n window.localStorage.removeItem('forgot_code_sent');\n } catch (localStorageErr) {\n console.error(localStorageErr);\n }\n handleAuth(true);\n } catch (e) {\n if (e.name === 'QuotaExceededError' && retryIfQuotaExceeded) {\n window.localStorage.clear();\n\n await this.handleConfirmationSubmit(event, false);\n return;\n }\n\n this.setState({\n error: e.message\n });\n this.setState({ loading: false });\n }\n };\n\n handleChange = event => {\n this.setState({\n [event.target.id]: event.target.value,\n error: false\n });\n };\n\n resendCode = async () => {\n const { email } = this.props;\n this.setState({\n hasResentCode: true\n });\n\n await Auth.forgotPassword(email.toLowerCase());\n\n try {\n window.localStorage.setItem(\n 'forgot_code_sent',\n new Date().toISOString()\n );\n } catch (localStorageErr) {\n console.error(localStorageErr);\n }\n };\n\n validateConfirmationForm() {\n const { confirmationCode, password } = this.state;\n return confirmationCode.length > 0 && password.length > 0;\n }\n\n render() {\n const {\n confirmationCode,\n password,\n error,\n loading,\n hasResentCode\n } = this.state;\n const { classes, email } = this.props;\n\n return (\n
\n \n \n \n Please enter the latest verification code sent to{' '}\n {email} and the new password you wish\n to use. Please note the verification code will expire\n after one hour.\n \n \n {!hasResentCode && (\n \n Send another code\n \n )}\n {hasResentCode && (\n \n New code sent. Please check your inbox.\n \n )}\n \n \n \n {error}\n \n \n
\n );\n }\n}\n\nPasswordResetConfirmationForm.propTypes = {\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(PasswordResetConfirmationForm);\n","import React, { Component } from 'react';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\nimport TextField from '@material-ui/core/TextField';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Typography } from '@material-ui/core';\nimport red from '@material-ui/core/colors/red';\nimport { Auth } from 'aws-amplify';\nimport { validateEmail } from '../helpers/validators';\nimport LoaderButton from '../components/LoaderButton';\nimport PasswordResetConfirmationForm from '../components/PasswordResetConfirmationForm';\nimport ContentHeader from '../components/ContentHeader';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n textAlign: 'center',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '800px',\n margin: '40px auto',\n padding: '0 10px 20px'\n },\n input: {\n margin: '0 20px 10px'\n },\n button: {\n width: '200px',\n height: '56px',\n marginBottom: '30px'\n },\n error: {\n margin: '0 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n register: {\n fontSize: '1em',\n marginBottom: '2em'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n }\n});\n\nclass ForgotPassword extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n email: '',\n error: '',\n loading: false,\n showConfirmation: false\n };\n }\n\n handleChange = event => {\n this.setState({\n [event.target.id]: event.target.value,\n error: false\n });\n };\n\n handleSubmit = async event => {\n event.preventDefault();\n const { email } = this.state;\n\n this.setState({ loading: true });\n\n try {\n let codeLastSent = '';\n\n try {\n codeLastSent = window.localStorage.getItem('forgot_code_sent');\n } catch (localStorageErr) {\n console.error(localStorageErr);\n }\n\n if (\n !codeLastSent ||\n moment(codeLastSent) < moment().subtract(60, 'minutes')\n ) {\n await Auth.forgotPassword(email.toLowerCase());\n try {\n window.localStorage.setItem(\n 'forgot_code_sent',\n new Date().toISOString()\n );\n } catch (localStorageErr) {\n console.error(localStorageErr);\n }\n }\n\n this.setState({\n loading: false,\n showConfirmation: true\n });\n } catch (e) {\n this.setState({\n error: e.message,\n loading: false\n });\n }\n };\n\n validateForm() {\n const { email } = this.state;\n return validateEmail(email);\n }\n\n renderResetForm() {\n const { classes } = this.props;\n const { email, error, loading } = this.state;\n\n return (\n
\n \n
\n \n Forgot your password? Enter your email address to reset\n your login details.\n \n \n {error}\n
\n \n
\n \n
\n );\n }\n\n render() {\n const { handleAuth } = this.props;\n const { email, showConfirmation } = this.state;\n\n return (\n
\n {!showConfirmation ? (\n this.renderResetForm()\n ) : (\n \n )}\n
\n );\n }\n}\n\nForgotPassword.propTypes = {\n handleAuth: PropTypes.func.isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(ForgotPassword);\n","import React, { Component } from 'react';\nimport axios from 'axios';\nimport {\n Typography,\n withStyles,\n CircularProgress,\n Button\n} from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport ContentHeader from '../components/ContentHeader';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n border: '0',\n maxWidth: '600px',\n margin: '40px auto',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 10px'\n }\n },\n innerRoot: {\n textAlign: 'center',\n border: '0',\n maxWidth: '600px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 10px'\n }\n },\n error: {\n margin: '20px 0 0 5px',\n color: red[500],\n minHeight: '20px'\n },\n spinner: {\n marginTop: '60px'\n },\n button: {\n minHeight: '40px',\n marginTop: '10px',\n marginBottom: '10px'\n },\n inner: {\n padding: '20px 10px'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n }\n});\n\nclass CreateMandate extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n mandateSession: null,\n error: '',\n isLoading: true\n };\n }\n\n async componentDidMount() {\n const {\n match: {\n params: { clientId, serviceId, ticketId, renewalId, year }\n }\n } = this.props;\n\n const mandateSession = await this.postMandateSession(\n clientId,\n serviceId,\n ticketId,\n year,\n renewalId\n );\n\n this.setState({\n mandateSession,\n isLoading: false\n });\n }\n\n async postMandateSession(clientId, serviceId, ticketId, year, renewalId) {\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-mandate-session/client/${clientId}`,\n {\n service_id: serviceId,\n ticket_id: ticketId,\n year,\n renewal_id: renewalId\n },\n {\n headers\n }\n );\n\n return response.data;\n } catch (e) {\n this.setState({\n error:\n 'There was a problem whilst trying to establish a session for a new direct debit mandate. Please try again later or contact support if this issue continues.'\n });\n return null;\n }\n }\n\n render() {\n const { classes } = this.props;\n const { mandateSession, error, isLoading } = this.state;\n\n return (\n
\n
\n \n
\n \n This ticket requires payment using Direct Debit.\n \n \n To get started, you need a Direct Debit mandate with\n your Transport Provider. After creating your mandate\n below, you will return to ShuttleID to buy your\n ticket.\n \n\n \n When you are redirected back to ShuttleID, you will\n provide the passenger details, apply any voucher\n codes that you have, and confirm the order.\n \n\n \n IMPORTANT!\n \n\n \n If you exit the process immediately after creating\n your mandate, you will not have a ticket and\n payments will not be scheduled.\n \n\n {/* \n After the mandate is set up, you will be able to add\n the passenger details, apply a voucher code if you\n have one, and confirm the order.\n \n\n \n Please note creating a direct debit mandate does not\n confirm your order and will not give you a ticket.\n Your order is only confirmed after supplying the\n passenger details and confirming the payment\n schedule.\n */}\n\n \n \n Help buying your ticket with Direct Debit\n \n \n\n {isLoading && (\n \n )}\n\n {!isLoading && mandateSession !== null && (\n

\n \n \n Setup direct debit mandate\n \n \n

\n )}\n\n {!isLoading && error !== '' && (\n \n {error}\n \n )}\n
\n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(CreateMandate);\n","import React, { Component } from 'react';\nimport axios from 'axios';\nimport { Typography, withStyles, CircularProgress } from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport { Redirect } from 'react-router-dom';\nimport ContentHeader from '../components/ContentHeader';\n\nconst styles = theme => ({\n root: {\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n innerRoot: {\n textAlign: 'center',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n error: {\n margin: '20px 0 0 5px',\n color: red[500],\n minHeight: '20px'\n },\n spinner: {\n marginTop: '60px'\n },\n button: {\n height: '40px',\n marginTop: '10px',\n marginBottom: '10px'\n },\n inner: {\n padding: '20px 10px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n }\n});\n\nclass MandateConfirmed extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n mandateSessionConfirmed: false,\n error: '',\n isLoading: true\n };\n }\n\n async componentDidMount() {\n const {\n match: {\n params: {\n clientSlug,\n serviceId,\n ticketId,\n sessionId,\n renewalId\n }\n }\n } = this.props;\n\n const mandateSessionConfirmed = await this.postConfirmMandateSession(\n clientSlug,\n serviceId,\n ticketId,\n sessionId,\n renewalId\n );\n\n this.setState({\n mandateSessionConfirmed,\n isLoading: false\n });\n }\n\n buyTicketUrl = (clientSlug, serviceId, ticketId, year, renewalId) => {\n if (renewalId) {\n return `/renew/${renewalId}`;\n }\n\n return `/create-ticket/${year}/${clientSlug}/${serviceId}/${ticketId}`;\n };\n\n async postConfirmMandateSession(\n clientSlug,\n serviceId,\n ticketId,\n sessionId,\n renewalId\n ) {\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-mandate-session/confirm/${sessionId}`,\n {\n service_id: serviceId,\n ticket_id: ticketId,\n client_slug: clientSlug,\n renewal_id: renewalId\n },\n {\n headers\n }\n );\n\n return true;\n } catch (e) {\n this.setState({\n error:\n 'There was a problem whilst trying to confirm your direct debit mandate. Please try again later or contact support if this issue continues.'\n });\n return false;\n }\n }\n\n render() {\n const {\n classes,\n match: {\n params: { clientSlug, year, serviceId, ticketId, renewalId }\n }\n } = this.props;\n const { mandateSessionConfirmed, error, isLoading } = this.state;\n const ticketUrl = this.buyTicketUrl(\n clientSlug,\n serviceId,\n ticketId,\n year,\n renewalId\n );\n\n if (!isLoading && mandateSessionConfirmed === true) {\n return ;\n }\n\n return (\n
\n
\n \n
\n {isLoading && (\n \n )}\n\n {!isLoading && error !== '' && (\n \n {error}\n \n )}\n
\n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(MandateConfirmed);\n","import React from 'react';\nimport { withStyles, Typography, Icon, Button } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport ContentHeader from '../components/ContentHeader';\n\nconst styles = theme => ({\n root: {\n textAlign: 'center',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n heading: {\n marginBottom: '10px'\n },\n subheading: {\n marginTop: '20px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n inner: {\n padding: '20px 10px'\n },\n button: {\n marginTop: 20\n }\n});\n\nconst TicketSent = ({ classes }) => {\n const history = useHistory();\n return (\n
\n \n
\n \n Your ticket was sent to the passenger.\n \n \n They can now access the ticket on their mobile device by\n opening the private ticket link in the email.\n \n \n The email should arrive instantly. If the passenger doesn\n {\"'\"}t see it, ask them to check their spam folder.\n \n \n NOTE: Often a simple typo is the reason for\n a ticket not arriving. Try send again but take extra when\n entering the email address.\n \n\n {\n history.goBack();\n }}\n >\n arrow_back\n Back to ticket\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(TicketSent);\n","import React from 'react';\nimport { withStyles, Typography, Icon, Button } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport ContentHeader from '../components/ContentHeader';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n textAlign: 'center',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n heading: {\n marginBottom: '10px'\n },\n subheading: {\n marginTop: '20px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n inner: {\n padding: '20px 10px'\n },\n button: {\n marginTop: 20\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n }\n});\n\nconst TicketSmsSent = ({ classes }) => {\n const history = useHistory();\n return (\n
\n \n
\n \n Your ticket was sent to the passenger.\n \n \n They can now access the ticket on their mobile device by\n opening the private ticket link in the text message.\n \n \n The message should arrive instantly. If the passenger doesn\n {\"'\"}t see it, send your message again and{' '}\n double check the phone number is input\n correctly.\n \n \n If your ticket still hasn{\"'\"}t arrived please contact our\n support team via{' '}\n \n support@shuttleid.uk\n \n .\n \n\n {\n history.goBack();\n }}\n >\n arrow_back\n Back to ticket\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(TicketSmsSent);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { CardElement, injectStripe } from 'react-stripe-elements';\nimport {\n withStyles,\n Typography,\n withWidth,\n CircularProgress,\n Icon\n} from '@material-ui/core';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport { withRouter } from 'react-router-dom';\nimport axios from 'axios';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport LoaderButton from './LoaderButton';\nimport { formatPrice } from '../helpers/formatters';\nimport { getYearGroups } from '../helpers/ticket';\nimport {\n DEFAULT_ERROR,\n getFriendlyPaymentError,\n isSafePaymentError\n} from '../helpers/errors';\nimport globalStyles from '../styles';\n\nconst styles = {\n root: {\n marginTop: '20px',\n minHeight: '100px',\n marginBottom: '20px',\n padding: '0 10px 10px',\n textAlign: 'center'\n },\n card: {\n margin: '30px auto 15px auto',\n maxWidth: '360px',\n border: '1px solid rgba(0, 0, 0, 0.23)',\n borderRadius: '4px',\n padding: '10px 0 10px 8px'\n },\n button: {\n margin: '20px 0 20px',\n width: '200px',\n height: '56px'\n },\n error: {\n margin: '20px 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n saveCard: {\n display: 'inline',\n marginLeft: 14,\n marginTop: 18\n },\n spinner: {\n marginTop: 60,\n marginBottom: 60,\n marginLeft: 'calc(50% - 22px)'\n },\n icon: {\n fontSize: 25\n },\n existingCardParent: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: 20\n },\n existingCard: {\n ...globalStyles.savedCard,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '0 10px',\n flexWrap: 'wrap'\n },\n existingCardHeader: {\n flexBasis: '100%',\n marginTop: 10,\n ...globalStyles.savedCardHeader\n },\n changeCard: {\n width: 'auto',\n height: 'auto',\n padding: '5px',\n lineHeight: '1',\n marginLeft: 10,\n fontSize: 12\n }\n};\n\nclass RenewalPaymentForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n processing: false,\n error: '',\n cardError: '',\n cardValid: false,\n paymentError: false,\n saveCard: false,\n saveReplacedCard: false,\n paymentMethods: null,\n isLoadingPaymentMethods: true\n };\n }\n\n async componentDidMount() {\n try {\n // get customer payment methods\n const { client } = this.props;\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/payment-methods/${\n currentSession.getAccessToken().payload.sub\n }/${client.slug}`,\n {\n headers\n }\n );\n\n // if any, set state\n if (\n response.data &&\n response.data.data &&\n response.data.data.length\n ) {\n this.setState({\n paymentMethods: response.data.data,\n isLoadingPaymentMethods: false\n });\n } else {\n this.setState({\n isLoadingPaymentMethods: false\n });\n }\n } catch (error) {\n console.error(error);\n this.setState({\n isLoadingPaymentMethods: false\n });\n }\n }\n\n handleSubmit = async () => {\n const { cardError, cardValid, paymentMethods } = this.state;\n const {\n client,\n service,\n stop,\n yr,\n dest,\n zone,\n zoneStop,\n ticket,\n extId\n } = this.props;\n\n if (\n client &&\n client.features &&\n client.features.require_id === 'student' &&\n !extId\n ) {\n this.setState({\n processing: false,\n error: 'Please provide a student id'\n });\n return;\n }\n\n const useZones =\n service.zones &&\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_prices;\n\n if (useZones) {\n const serviceZone =\n zone && service.zones.find(z => z.name === zone);\n\n if (!serviceZone) {\n this.setState({\n processing: false,\n error: 'Please select a zone'\n });\n return;\n }\n\n if (\n serviceZone.stops &&\n serviceZone.stops.length &&\n !serviceZone.stops.includes(zoneStop)\n ) {\n this.setState({\n processing: false,\n error: 'Please select a bus stop'\n });\n return;\n }\n } else if (\n service &&\n 'stops' in service &&\n !service.stops.includes(stop)\n ) {\n this.setState({\n error: 'Please select a bus stop'\n });\n return;\n }\n\n if (service && service.destinations && service.destinations.length) {\n if (!service.destinations.includes(dest)) {\n this.setState({\n processing: false,\n error: 'Please select a destination'\n });\n return;\n }\n }\n\n if (service && getYearGroups(service.yr_groups).length) {\n if (!yr) {\n this.setState({\n processing: false,\n error: 'Please select a year group'\n });\n return;\n }\n }\n\n // Only check for card errors if there is value to pay\n // Full voucher value means no card validation required\n if (Number(this.netPrice()) >= 1) {\n if (cardError) {\n this.setState({\n error: cardError\n });\n return;\n }\n if (!cardValid && !paymentMethods) {\n this.setState({\n error: 'Please complete all card details including postcode'\n });\n return;\n }\n } else if (Number(this.netPrice()) > 0) {\n this.setState({\n error: `Invalid amount. Amount can only be 0 or a minimum of ${formatPrice(\n 1,\n ticket.currency\n )} using card payment.`\n });\n return;\n }\n\n this.setState({\n processing: true,\n error: ''\n });\n\n try {\n await this.handleInitialPayment();\n } catch (e) {\n console.error(e);\n const error = getFriendlyPaymentError(e, DEFAULT_ERROR);\n this.setState({\n processing: false,\n error,\n paymentError: !isSafePaymentError(error)\n });\n }\n };\n\n handleInitialPayment = async () => {\n const {\n stripe,\n history,\n ticket,\n service,\n renewal,\n client,\n voucher,\n stop,\n dest,\n yr,\n zone,\n zoneStop,\n extId\n } = this.props;\n\n const { saveCard, saveReplacedCard, paymentMethods } = this.state;\n\n let paymentMethodId;\n\n // Only create payment method when there is something to charge.\n // A full value voucher will hide card field.\n if (this.netPrice() > 0) {\n if (paymentMethods && paymentMethods.length) {\n paymentMethodId = paymentMethods[0].id;\n } else {\n let paymentError;\n\n try {\n const {\n paymentMethod,\n error\n } = await stripe.createPaymentMethod(\n 'card',\n this.cardElement\n );\n\n if (!error) {\n paymentMethodId = paymentMethod.id;\n } else {\n paymentError = error;\n }\n } catch (paymentMethodError) {\n const err = new Error(\n `Error adding payment method: ${\n paymentMethodError.message\n }`\n );\n err.force = true;\n throw err;\n }\n\n if (paymentError) {\n if (paymentError.code === 'card_declined') {\n throw new Error('Card declined');\n } else if (paymentError.type === 'card_error') {\n throw new Error('Card error');\n } else if (paymentError.type === 'invalid_request_error') {\n const err = new Error('Invalid request');\n err.force = true;\n if (paymentError.param) {\n err.detail = paymentError.param;\n }\n throw err;\n } else {\n const err = new Error('Card api error');\n err.force = true;\n if (paymentError.message) {\n err.detail = paymentError.message;\n }\n throw err;\n }\n }\n }\n }\n\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const data = {\n payment_method_id: paymentMethodId,\n ticket,\n voucher,\n service,\n client,\n renewal,\n stop,\n dest,\n save_card: saveCard || saveReplacedCard\n };\n\n if (extId) {\n data.ext_id = extId;\n }\n\n if (service && getYearGroups(service.yr_groups).length) {\n data.yr = yr;\n }\n\n const useZones =\n service.zones &&\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_prices;\n\n if (useZones) {\n data.zone = zone;\n data.zoneStop = zoneStop;\n }\n\n const response = await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-ticket/stripe/renew`,\n data,\n {\n headers\n }\n );\n\n if (response.data.id) {\n history.push(`/renewal-confirmed/${response.data.id}`);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else if (\n response.data.requires_action &&\n response.data.payment_intent_client_secret\n ) {\n await this.handleActionPayment(response.data);\n } else {\n throw new Error('Problem creating payment intent.');\n }\n };\n\n handleActionPayment = async paymentResponse => {\n const {\n stripe,\n history,\n ticket,\n service,\n client,\n voucher,\n renewal,\n stop,\n dest,\n zone,\n zoneStop,\n yr,\n extId\n } = this.props;\n\n const {\n error: errorAction,\n paymentIntent\n } = await stripe.handleCardAction(\n paymentResponse.payment_intent_client_secret\n );\n\n if (errorAction) {\n throw new Error(errorAction.message);\n } else {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const data = {\n payment_intent_id: paymentIntent.id,\n renewal,\n ticket,\n service,\n voucher,\n client,\n stop,\n dest\n };\n\n if (extId) {\n data.ext_id = extId;\n }\n\n if (service && getYearGroups(service.yr_groups).length) {\n data.yr = yr;\n }\n\n const useZones =\n service.zones &&\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_prices;\n\n if (useZones) {\n data.zone = zone;\n data.zoneStop = zoneStop;\n }\n\n const response = await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-ticket/stripe/renew`,\n data,\n {\n headers\n }\n );\n\n if (response.data.id) {\n history.push(`/renewal-confirmed/${response.data.id}`);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else if (\n response.data.requires_action &&\n response.data.payment_intent_client_secret\n ) {\n await this.handleAction(response.data);\n } else {\n throw new Error('Problem confirming payment intent.');\n }\n }\n };\n\n handleReady = element => {\n this.cardElement = element;\n this.cardElement.on('change', response => {\n const cardValid = !response.empty && response.complete;\n const cardError = response.error ? response.error.message : '';\n this.setState({\n cardValid,\n cardError\n });\n });\n };\n\n netPrice = () => {\n const { ticket, voucher, zone } = this.props;\n\n const useZones =\n ticket.pricing_model === 'Zonal' && ticket.zone_prices && zone;\n const ticketPrice = useZones ? ticket.zone_prices[zone] : ticket.price;\n\n if (voucher) {\n return ticketPrice - voucher.value;\n }\n return ticketPrice;\n };\n\n handleCheckboxChange = event => {\n this.setState({ [event.target.name]: event.target.checked });\n };\n\n render() {\n const { classes, width, client, service, ticket } = this.props;\n const {\n processing,\n error,\n paymentError,\n saveCard,\n saveReplacedCard,\n paymentMethods,\n isLoadingPaymentMethods\n } = this.state;\n\n const hasPaymentMethods = paymentMethods && paymentMethods.length;\n\n if (isLoadingPaymentMethods) {\n return (\n \n );\n }\n\n return (\n
\n \n By completing this purchase, I confirm I have read and\n accepted the following:\n \n {service.terms_url && (\n \n \n {client.name} T&Cs\n \n \n )}\n \n \n ShuttleID T&Cs\n \n \n\n {this.netPrice() >= 1 && (\n <>\n {!hasPaymentMethods && (\n <>\n \n {!saveReplacedCard && (\n
\n \n \n \n }\n label=\"Save card details\"\n />\n \n \n
\n )}\n \n )}\n {hasPaymentMethods && (\n
\n
\n
\n Saved card\n
\n \n credit_card\n \n \n ****-****-****-\n {paymentMethods[0].card.last4}\n \n {\n this.setState({\n paymentMethods: null,\n saveReplacedCard: true\n });\n }}\n />\n
\n
\n )}\n \n )}\n {error && (\n \n {error}\n \n )}\n \n
\n );\n }\n}\n\nRenewalPaymentForm.propTypes = {\n classes: PropTypes.shape().isRequired,\n stripe: PropTypes.shape().isRequired,\n ticket: PropTypes.shape().isRequired,\n service: PropTypes.shape().isRequired,\n client: PropTypes.shape().isRequired,\n renewal: PropTypes.shape().isRequired,\n stop: PropTypes.string,\n dest: PropTypes.string,\n extId: PropTypes.string\n};\n\nRenewalPaymentForm.defaultProps = {\n stop: '',\n dest: '',\n extId: ''\n};\n\nexport default withStyles(styles)(\n injectStripe(withRouter(withWidth()(RenewalPaymentForm)))\n);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles, Typography } from '@material-ui/core';\nimport TextField from '@material-ui/core/TextField';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport Select from '@material-ui/core/Select';\nimport { Elements, StripeProvider } from 'react-stripe-elements';\nimport RenewalPaymentForm from './RenewalPaymentForm';\nimport VoucherForm from './VoucherForm';\nimport ContentHeader from './ContentHeader';\nimport {\n formatTicketType,\n formatDate,\n formatPrice\n} from '../helpers/formatters';\nimport { getYearGroups } from '../helpers/ticket';\nimport ZonesForm from './ZonesForm';\nimport globalStyles from '../styles';\n\nconst styles = {\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)'\n },\n description: {\n padding: '10px',\n marginBottom: '20px',\n fontWeight: '100'\n },\n zonesDescription: {\n padding: '20px 0 0',\n fontWeight: '100',\n textAlign: 'center'\n },\n button: {\n height: '40px',\n marginTop: '10px',\n marginBottom: '10px'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n },\n zoneMenuItem: {\n whiteSpace: 'normal'\n },\n formControl: {\n maxWidth: 250,\n width: '100%',\n margin: '0 auto',\n display: 'flex'\n },\n zonesForm: {\n display: 'flex',\n flexDirection: 'column',\n gap: '20px',\n paddingBottom: '35px'\n },\n link: globalStyles.link\n};\n\nclass ConfirmRenewal extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n voucher: null,\n stop: props.stop,\n yr: props.yr,\n dest: props.dest,\n zone: props.zone,\n zoneStop: props.zoneStop,\n extId: props.extId,\n stripe: null\n };\n }\n\n async componentDidMount() {\n const { client } = this.props;\n const stripe = window.Stripe(process.env.REACT_APP_STRIPE_PUB_KEY, {\n stripeAccount: client.stripe_account_id\n });\n\n this.setState({\n stripe\n });\n }\n\n setVoucher = voucher => {\n this.setState({ voucher });\n };\n\n netPrice = price => {\n const { voucher } = this.state;\n if (voucher) {\n return price - voucher.value;\n }\n return price;\n };\n\n onBusStopChange = event => {\n this.setState({\n stop: event.target.value\n });\n };\n\n onYearGroupChange = event => {\n this.setState({\n yr: event.target.value\n });\n };\n\n onDestinationChange = event => {\n this.setState({\n dest: event.target.value\n });\n };\n\n onExtIdChange = event => {\n this.setState({\n extId: event.target.value\n });\n };\n\n render() {\n const {\n passenger,\n ticket,\n client,\n service,\n renewal,\n classes,\n requireStudentId\n } = this.props;\n\n const {\n voucher,\n stop,\n yr,\n dest,\n zone,\n zoneStop,\n stripe,\n extId\n } = this.state;\n\n if (!stripe) {\n return <>;\n }\n\n let yearGroups = [];\n\n if (service) {\n yearGroups = getYearGroups(service.yr_groups);\n }\n\n const showDestination =\n service && service.destinations && service.destinations.length > 0;\n\n const useZones =\n service.zones &&\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_prices;\n\n const formattedPrice = formatPrice(\n this.netPrice(useZones ? ticket.zone_prices[zone] : ticket.price),\n ticket.currency\n );\n\n return (\n \n
\n
\n \n \n \n Passenger: {passenger.first_name}{' '}\n {passenger.last_name}\n \n \n Ticket:{' '}\n {formatTicketType(\n service.name,\n ticket.type,\n ticket.sub_type,\n ticket.travel_pattern,\n ticket.name\n )}{' '}\n {ticket.year}\n \n \n Valid from: {formatDate(ticket.start)}\n \n \n Valid until: {formatDate(ticket.expiry)}\n \n {formattedPrice !== '' && (\n \n Price: {formattedPrice}\n \n )}\n
\n \n \n Need a different ticket type? Contact{' '}\n {client.name} to discuss your renewal\n preference.\n \n
\n
\n {requireStudentId && (\n \n \n
\n \n \n \n \n \n Help finding your student id\n \n \n
\n \n )}\n {useZones && (\n \n \n \n Select your travel zone.{' '}\n {service.timetable_url && (\n <>\n \n Help finding your zone\n \n .\n \n )}\n \n
\n {\n this.setState({\n [e.target.name]: e.target.value\n });\n }}\n zone={zone}\n zoneStop={zoneStop}\n />\n
\n \n )}\n {service && 'stops' in service && !useZones && (\n \n \n
\n \n \n Bus Stop\n \n \n }\n >\n {service.stops.map(serviceStop => (\n \n {serviceStop}\n \n ))}\n \n \n
\n \n )}\n\n {showDestination && (\n \n \n
\n \n \n Destination\n \n \n }\n >\n {service.destinations.map(\n serviceDest => (\n \n {serviceDest}\n \n )\n )}\n \n \n
\n \n )}\n\n {yearGroups.length > 0 && (\n \n \n
\n \n \n Year group\n \n \n }\n >\n {yearGroups.map(year => (\n \n {year === 'reception'\n ? 'Reception'\n : `Year ${year}`}\n \n ))}\n \n \n
\n \n )}\n\n
\n \n \n
\n
\n \n \n \n \n
\n \n \n );\n }\n}\n\nConfirmRenewal.propTypes = {\n passenger: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string\n }).isRequired,\n ticket: PropTypes.shape({\n start: PropTypes.string,\n expiry: PropTypes.string,\n price: PropTypes.string\n }).isRequired,\n client: PropTypes.shape().isRequired,\n service: PropTypes.shape().isRequired,\n classes: PropTypes.shape().isRequired,\n dest: PropTypes.string,\n requireStudentId: PropTypes.bool\n};\n\nConfirmRenewal.defaultProps = {\n dest: '',\n requireStudentId: false\n};\n\nexport default withStyles(styles)(ConfirmRenewal);\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { withStyles, Typography } from '@material-ui/core';\nimport axios from 'axios';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport LoaderButton from './LoaderButton';\nimport { getYearGroups } from '../helpers/ticket';\n\nconst styles = {\n root: {\n marginTop: '20px',\n minHeight: '100px',\n marginBottom: '20px',\n padding: '0 10px 10px',\n textAlign: 'center'\n },\n card: {\n margin: '30px auto 0 auto',\n maxWidth: '360px',\n border: '1px solid rgba(0, 0, 0, 0.23)',\n borderRadius: '4px',\n padding: '10px 0 10px 8px'\n },\n button: {\n margin: '20px 0 20px',\n width: '200px',\n height: '56px'\n },\n error: {\n margin: '10px 20px 0px',\n color: red[500],\n minHeight: '20px'\n }\n};\n\nclass DirectDebitPaymentForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n processing: false,\n error: ''\n };\n }\n\n handleSubmit = async () => {\n const {\n history,\n ticket,\n service,\n renewal,\n client,\n stop,\n dest,\n voucher,\n yr,\n zone,\n zoneStop,\n extId\n } = this.props;\n this.setState({\n processing: true,\n error: ''\n });\n\n if (\n client &&\n client.features &&\n client.features.require_id === 'student' &&\n !extId\n ) {\n this.setState({\n processing: false,\n error: 'Please provide a student id'\n });\n return;\n }\n\n const useZones =\n service.zones &&\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_prices;\n\n if (useZones) {\n const serviceZone =\n zone && service.zones.find(z => z.name === zone);\n\n if (!serviceZone) {\n this.setState({\n processing: false,\n error: 'Please select a zone'\n });\n return;\n }\n\n if (\n serviceZone.stops &&\n serviceZone.stops.length &&\n !serviceZone.stops.includes(zoneStop)\n ) {\n this.setState({\n processing: false,\n error: 'Please select a bus stop'\n });\n return;\n }\n } else if (\n service &&\n 'stops' in service &&\n !service.stops.includes(stop)\n ) {\n this.setState({\n processing: false,\n error: 'Please select a bus stop'\n });\n return;\n }\n\n if (service && service.destinations && service.destinations.length) {\n if (!service.destinations.includes(dest)) {\n this.setState({\n processing: false,\n error: 'Please select a destination'\n });\n return;\n }\n }\n\n if (service && getYearGroups(service.yr_groups).length) {\n if (!yr) {\n this.setState({\n processing: false,\n error: 'Please select a year group'\n });\n return;\n }\n }\n\n try {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const data = {\n renewal,\n ticket,\n service,\n client,\n stop,\n voucher\n };\n\n if (extId) {\n data.ext_id = extId;\n }\n\n if (service && getYearGroups(service.yr_groups).length) {\n data.yr = yr;\n }\n\n if (useZones) {\n data.zone = zone;\n data.zoneStop = zoneStop;\n }\n\n if (\n service &&\n service.destinations &&\n service.destinations.length\n ) {\n data.dest = dest;\n }\n\n const response = await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-ticket/gocardless/renew`,\n data,\n {\n headers\n }\n );\n\n if (response.data.id) {\n history.push(`/renewal-confirmed/${response.data.id}`);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else {\n throw new Error('No ticket id generated.');\n }\n } catch (e) {\n console.error(e);\n this.setState({\n processing: false,\n error:\n 'There was a problem processing your payment, please try again later'\n });\n }\n };\n\n render() {\n const { classes, client, service } = this.props;\n const { processing, error } = this.state;\n\n return (\n
\n \n By completing this purchase, I confirm I have read and\n accepted the following:\n \n {service.terms_url && (\n \n \n {client.name} T&Cs\n \n \n )}\n \n \n ShuttleID T&Cs\n \n \n {error && (\n \n {error}\n \n )}\n \n
\n );\n }\n}\n\nDirectDebitPaymentForm.propTypes = {\n classes: PropTypes.shape().isRequired,\n ticket: PropTypes.shape().isRequired,\n service: PropTypes.shape().isRequired,\n renewal: PropTypes.shape().isRequired,\n client: PropTypes.shape().isRequired,\n stop: PropTypes.string,\n dest: PropTypes.string,\n extId: PropTypes.string\n};\n\nDirectDebitPaymentForm.defaultProps = {\n stop: '',\n dest: '',\n extId: ''\n};\n\nexport default withStyles(styles)(withRouter(DirectDebitPaymentForm));\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles, Typography } from '@material-ui/core';\nimport TextField from '@material-ui/core/TextField';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport Select from '@material-ui/core/Select';\nimport moment from 'moment';\nimport DirectDebitRenewalPaymentForm from './DirectDebitRenewalPaymentForm';\nimport VoucherForm from './VoucherForm';\nimport ContentHeader from './ContentHeader';\nimport {\n formatTicketType,\n formatDate,\n formatPrice\n} from '../helpers/formatters';\nimport { getCurrencySymbol, getYearGroups } from '../helpers/ticket';\nimport ZonesForm from './ZonesForm';\nimport globalStyles from '../styles';\n\nconst styles = {\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)'\n },\n input: {\n width: '100%',\n maxWidth: '250px',\n display: 'inline-block',\n margin: '0px auto 0px',\n verticalAlign: 'unset',\n '& > div': {\n display: 'block'\n },\n '& input': {\n maxWidth: '220px'\n }\n },\n description: {\n padding: '10px',\n marginBottom: '20px',\n fontWeight: '100'\n },\n zonesDescription: {\n padding: '20px 0 0',\n fontWeight: '100',\n textAlign: 'center'\n },\n button: {\n height: '40px',\n marginTop: '10px',\n marginBottom: '10px'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n },\n formControl: {\n maxWidth: 250,\n width: '100%',\n margin: '0 auto',\n display: 'flex'\n },\n zoneMenuItem: {\n whiteSpace: 'normal'\n },\n paymentHelp: {\n ...globalStyles.link,\n padding: '1em 0',\n display: 'block'\n },\n zonesForm: {\n display: 'flex',\n flexDirection: 'column',\n gap: '20px',\n paddingBottom: '35px'\n },\n link: globalStyles.link\n};\n\nclass ConfirmDirectDebitRenewal extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n voucher: null,\n stop: props.stop,\n yr: props.yr,\n dest: props.dest,\n zone: props.zone,\n zoneStop: props.zoneStop,\n extId: props.extId\n };\n }\n\n setVoucher = voucher => {\n this.setState({ voucher });\n };\n\n calcMonthlyPriceAfterDiscount = (ticket, priceMonthly) => {\n const { voucher } = this.state;\n\n if (voucher) {\n const monthlyDiscount =\n (Number(voucher.value) * 100) /\n Number(ticket.num_monthly_payments);\n return (Number(priceMonthly) * 100 - monthlyDiscount) / 100;\n }\n\n return Number(priceMonthly);\n };\n\n onBusStopChange = event => {\n this.setState({\n stop: event.target.value\n });\n };\n\n onDestinationChange = event => {\n this.setState({\n dest: event.target.value\n });\n };\n\n getVoucherMessage = (\n ticket,\n total,\n roundedMonthlyPricePenceAfterDiscount,\n priceMonthly,\n priceDeposit\n ) => {\n const hasFullValueVoucher = roundedMonthlyPricePenceAfterDiscount < 100;\n const hasMonthlyPayments = parseFloat(priceMonthly) > 0;\n const { voucher } = this.state;\n\n if (!hasMonthlyPayments) {\n return '';\n }\n\n if (!voucher) {\n return '';\n }\n\n if (hasFullValueVoucher) {\n return (\n <>\n \n Full value voucher codes cannot be used with this type\n of ticket.\n \n \n Please contact your transport operator for an\n alternative ticket to use your voucher on.\n \n \n );\n }\n\n return (\n <>\n \n Monthly payments reduced to{' '}\n {getCurrencySymbol(ticket.currency)}\n {(roundedMonthlyPricePenceAfterDiscount / 100).toFixed(2)}.\n \n \n New total: {getCurrencySymbol(ticket.currency)}\n {priceDeposit} + {getCurrencySymbol(ticket.currency)}\n {(roundedMonthlyPricePenceAfterDiscount / 100).toFixed(2)}\n {' x '}\n {ticket.num_monthly_payments} ={' '}\n {getCurrencySymbol(ticket.currency)}\n {total.toFixed(2)}.\n \n \n );\n };\n\n onYearGroupChange = event => {\n this.setState({\n yr: event.target.value\n });\n };\n\n onExtIdChange = event => {\n this.setState({\n extId: event.target.value\n });\n };\n\n render() {\n const {\n passenger,\n ticket,\n client,\n service,\n renewal,\n classes,\n requireStudentId\n } = this.props;\n\n const { voucher, stop, yr, dest, zone, zoneStop, extId } = this.state;\n\n const useZones =\n service.zones &&\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_prices;\n\n const priceDeposit = useZones\n ? ticket.zone_prices_deposit[zone]\n : ticket.price_deposit;\n\n const priceMonthly = useZones\n ? ticket.zone_prices_monthly[zone]\n : ticket.price_monthly;\n\n const monthlyPriceAfterDiscount = this.calcMonthlyPriceAfterDiscount(\n ticket,\n priceMonthly\n );\n\n const roundedMonthlyPricePenceAfterDiscount = Math.round(\n monthlyPriceAfterDiscount * 100\n );\n\n const totalMonthlyPriceAfterDiscount =\n (roundedMonthlyPricePenceAfterDiscount / 100).toFixed(2) *\n ticket.num_monthly_payments;\n\n const total =\n Number(totalMonthlyPriceAfterDiscount) + Number(priceDeposit || 0);\n\n const voucherMessage = this.getVoucherMessage(\n ticket,\n total,\n roundedMonthlyPricePenceAfterDiscount,\n priceMonthly,\n priceDeposit\n );\n\n const hasFullValueVoucher =\n parseFloat(priceMonthly) > 0 &&\n roundedMonthlyPricePenceAfterDiscount < 100;\n\n let yearGroups = [];\n\n if (service) {\n yearGroups = getYearGroups(service.yr_groups);\n }\n\n const showDestination =\n service && service.destinations && service.destinations.length > 0;\n\n return (\n
\n
\n \n \n \n Passenger: {passenger.first_name}{' '}\n {passenger.last_name}\n \n \n Ticket:{' '}\n {formatTicketType(\n service.name,\n ticket.type,\n ticket.sub_type,\n ticket.travel_pattern\n )}{' '}\n {ticket.year}\n \n \n Valid from: {formatDate(ticket.start)}\n \n \n Valid until: {formatDate(ticket.expiry)}\n \n {parseFloat(priceMonthly) <= 0 && (\n <>\n \n Total price:{' '}\n {formatPrice(total, ticket.currency)}\n \n \n )}\n {parseFloat(priceMonthly) > 0 && (\n
\n

Pricing

\n \n Initial payment due now:{' '}\n {formatPrice(priceDeposit, ticket.currency)}\n \n \n Monthly payments:{' '}\n {formatPrice(\n monthlyPriceAfterDiscount,\n ticket.currency\n )}\n {' x '}\n {ticket.num_monthly_payments}\n {voucher && voucher.value && (\n <> (discounted)\n )}\n \n \n First monthly payment:{' 1st '}\n {moment(ticket.monthly_sub_start).format(\n 'MMMM YYYY'\n )}\n \n \n Total price:{' '}\n {formatPrice(total, ticket.currency)}\n \n

\n \n How Direct Debit payments work\n \n

\n
\n )}\n
\n \n \n Need a different ticket type? Contact {client.name}{' '}\n to discuss your renewal preference.\n \n
\n \n {requireStudentId && (\n
\n \n
\n \n \n \n \n \n Help finding your student id\n \n \n
\n
\n )}\n {useZones && (\n
\n \n \n Select your travel zone.{' '}\n {service.timetable_url && (\n <>\n \n Help finding your zone\n \n .\n \n )}\n \n
\n {\n this.setState({\n [e.target.name]: e.target.value\n });\n }}\n zone={zone}\n zoneStop={zoneStop}\n />\n
\n
\n )}\n {service && 'stops' in service && !useZones && (\n
\n \n
\n \n \n Bus Stop\n \n \n }\n >\n {service.stops.map(serviceStop => (\n \n {serviceStop}\n \n ))}\n \n \n
\n
\n )}\n\n {showDestination && (\n
\n \n
\n \n \n Destination\n \n \n }\n >\n {service.destinations.map(serviceDest => (\n \n {serviceDest}\n \n ))}\n \n \n
\n
\n )}\n\n {yearGroups.length > 0 && (\n
\n \n
\n \n \n Year group\n \n \n }\n >\n {yearGroups.map(year => (\n \n {year === 'reception'\n ? 'Reception'\n : `Year ${year}`}\n \n ))}\n \n \n
\n
\n )}\n\n {parseFloat(priceMonthly) > 0 && (\n
\n \n \n
\n )}\n\n {!hasFullValueVoucher && (\n
\n \n \n
\n )}\n \n );\n }\n}\n\nConfirmDirectDebitRenewal.propTypes = {\n passenger: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string\n }).isRequired,\n ticket: PropTypes.shape({\n start: PropTypes.string,\n expiry: PropTypes.string,\n price: PropTypes.string\n }).isRequired,\n client: PropTypes.shape().isRequired,\n service: PropTypes.shape().isRequired,\n classes: PropTypes.shape().isRequired,\n requireStudentId: PropTypes.bool\n};\n\nConfirmDirectDebitRenewal.defaultProps = {\n requireStudentId: false\n};\n\nexport default withStyles(styles)(ConfirmDirectDebitRenewal);\n","import React, { Component } from 'react';\nimport axios from 'axios';\nimport { Typography, withStyles, CircularProgress } from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport { Redirect } from 'react-router-dom';\nimport ConfirmRenewal from '../components/ConfirmRenewal';\nimport ConfirmDirectDebitRenewal from '../components/ConfirmDirectDebitRenewal';\nimport { hasValidZonePricing } from '../helpers/ticket';\n\nconst styles = theme => ({\n root: {\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n error: {\n margin: '20px 0 0 5px',\n color: red[500],\n minHeight: '20px',\n textAlign: 'center'\n },\n spinner: {\n marginLeft: 'calc(50% - 22px)',\n marginTop: '60px'\n },\n availabilityWarning: {\n background: 'red',\n textAlign: 'center',\n marginBottom: 20,\n padding: 5\n },\n availabilityWarningHeading: {\n color: 'white',\n fontWeight: 'bold'\n },\n availabilityWarningText: {\n color: 'white'\n }\n});\n\nclass RenewTicket extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n error: '',\n passenger: {\n firstName: '',\n lastName: '',\n photo: null,\n zone: '',\n zoneStop: ''\n },\n stop: '',\n dest: '',\n yr: '',\n ticket: null,\n client: null,\n service: null,\n renewal: null,\n mandates: null,\n isLoading: true,\n extId: ''\n };\n }\n\n async componentDidMount() {\n const {\n match: {\n params: { renewalId }\n }\n } = this.props;\n\n try {\n // get detailed renewal\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_RENEWAL_API_ENDPOINT\n }/renewal/detailed/${renewalId}`,\n {\n headers\n }\n );\n\n // set client, service, ticket, previous customer ticket\n const { client, renewal } = response.data;\n const { passenger } = response.data.previous_customer_ticket;\n\n const renewalTicket = response.data.renewal_ticket;\n\n const tickets = await axios.get(\n `${process.env.REACT_APP_TICKET_API_ENDPOINT}/service/${\n renewalTicket.service_id\n }/tickets/${renewalTicket.year.replace('/', '-')}`\n );\n\n const ticket = tickets.data.find(\n t => t.id === response.data.renewal_ticket.id\n );\n\n const extId = response.data.previous_customer_ticket.ext_id || '';\n const stop = response.data.previous_customer_ticket.stop || '';\n const yr = response.data.previous_customer_ticket.yr || '';\n const dest = response.data.previous_customer_ticket.dest || '';\n const zone = response.data.previous_customer_ticket.zone || '';\n const zoneStop =\n response.data.previous_customer_ticket.zone_stop || '';\n\n if (ticket.available === false || ticket.is_enabled === false) {\n throw new Error('Ticket unavailable');\n }\n\n let mandates = [];\n if (ticket && ticket.payment_type === 'dd') {\n mandates = await this.getMandates(client.id);\n }\n\n const service = this.extractService(client, ticket.service_id);\n\n let safeZone = '';\n let safeZoneStop = '';\n let safeStop = '';\n let safeDest = '';\n\n // Previous zone selection may no longer be valid\n if (ticket.pricing_model === 'Zonal') {\n if (!hasValidZonePricing(ticket, service)) {\n throw new Error('Zonal pricing misconfiguration');\n }\n\n if (service.zones) {\n const serviceZone = service.zones.find(\n z => z.name === zone\n );\n\n if (serviceZone) {\n safeZone = zone;\n\n if (\n serviceZone.stops &&\n serviceZone.stops.length &&\n serviceZone.stops.includes(zoneStop)\n ) {\n safeZoneStop = zoneStop;\n }\n }\n }\n } else if (stop) {\n if (\n service.stops &&\n service.stops.length &&\n service.stops.find(item => item === stop)\n ) {\n safeStop = stop;\n }\n }\n\n if (dest) {\n if (\n service.destinations &&\n service.destinations.length &&\n service.destinations.find(item => item === dest)\n ) {\n safeDest = dest;\n }\n }\n\n this.setState({\n extId,\n client,\n ticket,\n service,\n renewal,\n passenger,\n mandates,\n stop: safeStop,\n dest: safeDest,\n yr,\n zone: safeZone,\n zoneStop: safeZoneStop,\n isLoading: false,\n error: ''\n });\n } catch (e) {\n console.error(e);\n let errorMessage =\n 'There was a problem retrieving the ticket. Please try again later or contact our support team.';\n if (e.message === 'Ticket unavailable') {\n errorMessage =\n 'Ticket is no longer available for purchase. Please contact your transport provider for more information.';\n }\n\n if (e.response && e.response.status === 403) {\n errorMessage =\n 'Permission denied: Renewals can only be accessed from the account which purchased the original ticket. Hint: Please log in with the email address that received the renewal notification.';\n }\n\n if (\n e.response &&\n e.response.status === 503 &&\n e.response.data.error &&\n e.response.data.error.key === 'gocardless.offline'\n ) {\n errorMessage = e.response.data.error.message;\n }\n\n this.setState({\n isLoading: false,\n error: errorMessage\n });\n }\n }\n\n getMandates = async clientId => {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-mandate/client/${clientId}`,\n {\n headers\n }\n );\n\n return response.data;\n };\n\n formatRemainingTickets = ticket => {\n const ticketWord = ticket.remaining > 1 ? 'tickets' : 'ticket';\n return `Only ${ticket.remaining} ${ticketWord} left, hurry!`;\n };\n\n extractService(client, serviceId) {\n try {\n const { services = [] } = client;\n\n if (!services.length) {\n throw new Error();\n }\n\n const service = services.find(item => item.id === serviceId);\n\n if (!service) {\n throw new Error('Could not find service for specified client.');\n }\n\n return service;\n } catch (e) {\n this.setState({\n error:\n 'There was a problem retrieving the ticket info, please try again later'\n });\n return null;\n }\n }\n\n render() {\n const {\n passenger,\n ticket,\n client,\n service,\n stop,\n dest,\n zone,\n zoneStop,\n error,\n renewal,\n mandates,\n isLoading,\n yr,\n extId\n } = this.state;\n\n const { classes } = this.props;\n\n if (isLoading) {\n return (\n
\n \n
\n );\n }\n\n if (error) {\n return (\n
\n \n {error}\n \n
\n );\n }\n\n if (\n ticket &&\n ticket.payment_type === 'dd' &&\n mandates &&\n !mandates.length\n ) {\n return (\n \n );\n }\n\n let confirmPurchaseComponent;\n\n const disablePhoto =\n client && client.features && client.features.disable_photo === true;\n\n const requireStudentId =\n client &&\n client.features &&\n client.features.require_id === 'student';\n\n if (ticket && ticket.payment_type === 'dd') {\n confirmPurchaseComponent = (\n \n );\n } else {\n confirmPurchaseComponent = (\n \n );\n }\n\n const showAvailabilityWarning =\n 'remaining' in ticket &&\n ticket.remaining > 0 &&\n ticket.remaining <= 10;\n\n return (\n
\n {showAvailabilityWarning && (\n
\n \n {this.formatRemainingTickets(ticket)}\n \n \n If you need more tickets than available please do\n not purchase this ticket.\n \n
\n )}\n
{confirmPurchaseComponent}
\n
\n );\n }\n}\n\nexport default withStyles(styles)(RenewTicket);\n","import React from 'react';\nimport { withStyles, Typography } from '@material-ui/core';\nimport ContentHeader from '../components/ContentHeader';\nimport ViewTicketButtons from '../components/ViewTicketButtons';\n\nconst styles = theme => ({\n root: {\n textAlign: 'center',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n heading: {\n marginBottom: '10px'\n },\n subheading: {\n marginTop: '20px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n inner: {\n padding: '20px 10px'\n }\n});\n\nconst RenewalConfirmed = ({ classes, match }) => {\n const {\n params: { ticketId }\n } = match;\n\n return (\n
\n \n
\n \n Congratulations, your order was successful and your new{' '}\n ticket is ready to use.\n \n \n Tickets will be scanned onboard and will need to be\n presented by the passenger.\n \n \n IMPORTANT: Please note\n your previous ticket will stop working when it expires and\n your new ticket can only be used from the start date\n displayed on the ticket.\n \n\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(RenewalConfirmed);\n","import React from 'react';\nimport { withStyles, Typography, Button } from '@material-ui/core';\nimport ContentHeader from '../components/ContentHeader';\nimport './Help.css';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n textAlign: 'left',\n border: '0',\n maxWidth: '600px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n heading: {\n marginBottom: '10px',\n fontSize: 22\n },\n subheading: {\n marginTop: '20px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n inner: {\n padding: '20px 10px'\n },\n link: globalStyles.link\n});\n\nconst Help = ({ classes }) => {\n return (\n
\n \n
\n \n To ensure your issue is dealt with as quick as possible, we\n need to determine the type of query you have. In many cases\n your query may need to go direct to your Transport Provider,\n who use our ticketing platform to issue/sell bus tickets.\n \n
\n \n I have a query about the bus service\n \n \n \n Any query regarding the below items needs to go to\n your Transport Provider\n \n . This is typically your bus/coach company but could be\n your school/college - whichever organisation is\n responsible for organising your travel and issuing\n tickets.\n \n
\n
    \n
  • Timetables
  • \n
  • Route/bus stops
  • \n
  • Ticket prices
  • \n
  • Ticket options
  • \n
  • Ticket availability
  • \n
\n
    \n
  • Payments
  • \n
  • Renewals
  • \n
  • Discounts/bursaries
  • \n
  • Refunds/cancellations
  • \n
  • Lost property
  • \n
\n
\n \n Contacting ShuttleID regarding the above items will\n delay in your query being resolved as ultimately it can\n only be handled by your Transport Provider.\n \n
\n
\n \n I have a technical query about purchasing or using my\n ticket\n \n \n The ShuttleID support team can only assist with\n technical queries regarding the purchase process and the\n use of the ticket itself.\n \n \n For guidance on how to complete your purchase or how to\n use your ticket, visit the{' '}\n \n Help Portal\n \n . Most queries are answered here and will allow you to\n resolve your issue immediately, without further delay.\n \n \n The{' '}\n \n Help Portal\n {' '}\n is available 24/7, enabling you to answer your query\n straight away, when it{\"'\"}s convenient for you.\n \n \n \n Visit Help Portal\n \n \n \n If you are purchasing a ticket via ShuttleID for the\n first time, please contact your Transport Provider for a\n link to their ticket listings page on the ShuttleID\n Passenger Portal.\n \n \n Your Transport Provider may advertise this directly on\n their own website, social media or via an email to you.\n \n \n For any other technical issues that are not already\n covered by the help portal, please email{' '}\n \n support@shuttleid.uk\n \n . Our support team will endeavour to respond to your\n request within 24 hours.\n \n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(Help);\n","import React, { useState, useEffect } from 'react';\nimport { CircularProgress } from '@material-ui/core';\nimport axios from 'axios';\nimport qs from 'query-string';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { withStyles } from '@material-ui/core/styles';\nimport Select from '@material-ui/core/Select';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport ContentHeader from '../components/ContentHeader';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '600px',\n margin: '40px auto',\n position: 'relative',\n textAlign: 'center',\n minHeight: '300px',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n intro: {\n marginTop: 30\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '360px',\n margin: '20px auto 40px',\n padding: '20px 10px 20px'\n },\n input: {\n margin: '0 20px 20px'\n },\n yearSelect: {\n textAlign: 'left'\n },\n serviceSelect: {\n textAlign: 'left'\n },\n passengerCount: {\n textAlign: 'right'\n },\n passengers: {\n display: 'flex',\n flexDirection: 'column',\n margin: '10px 0',\n padding: '25px 0 5px',\n border: '1px dashed #ccc'\n },\n submit: {\n width: '200px',\n height: '56px',\n margin: '20px auto'\n },\n message: {\n display: 'inline-block',\n margin: '130px auto'\n },\n spinner: {\n margin: '130px auto'\n },\n formControl: {\n margin: '0 20px 20px',\n display: 'flex'\n },\n 'error > div': {\n border: '1px solid red'\n }\n});\n\nconst WaitingList = ({ classes, match, location }) => {\n const {\n params: { clientSlug, year }\n } = match;\n\n const [isLoading, setIsLoading] = useState(true);\n const [submitted, setSubmitted] = useState(false);\n const [submitFailed, setSubmitFailed] = useState(false);\n const [data, setData] = useState(null);\n\n const cleanYear = year ? year.replace('-', '/') : '';\n\n const [email, setEmail] = useState('');\n const [mobile, setMobile] = useState('');\n const [service, setService] = useState('');\n const [academicYear, setYear] = useState(cleanYear);\n const [postCode, setPostCode] = useState('');\n const [passengerCount, setPassengerCount] = useState(1);\n const [passengers, setPassengers] = useState([\n {\n firstName: '',\n lastName: ''\n }\n ]);\n\n const [isServiceValid, setIsServiceValid] = useState(true);\n const [isYearValid, setIsYearValid] = useState(true);\n\n const sortServices = services => {\n return services.sort((a, b) => {\n const serviceA = a;\n const serviceB = b;\n\n const aMatches = serviceA.match(/([A-Za-z]+)([0-9]+)/);\n const bMatches = serviceB.match(/([A-Za-z]+)([0-9]+)/);\n\n if (!aMatches || !bMatches) {\n return serviceA.localeCompare(serviceB);\n }\n\n if (aMatches.length < 3 || bMatches.length < 3) {\n return serviceA.localeCompare(serviceB);\n }\n\n if (aMatches[1] === bMatches[1]) {\n return parseInt(aMatches[2], 10) - parseInt(bMatches[2], 10);\n }\n\n return aMatches[1].localeCompare(bMatches[1]);\n });\n };\n\n useEffect(() => {\n async function fetchWaitingList() {\n try {\n const response = await axios.get(\n `${\n process.env.REACT_APP_WAITING_LIST_API_ENDPOINT\n }/waiting-list/client/${clientSlug}`\n );\n\n if (response.data && response.data.services.length) {\n response.data.services = sortServices(\n response.data.services\n );\n }\n\n setData(response.data);\n\n if (response.data.services && response.data.services.length) {\n const query = qs.parse(location.search);\n const serviceParam = query.service || '';\n const serviceMatch = response.data.services.find(\n item => item === serviceParam\n );\n\n if (serviceMatch) {\n setService(serviceMatch);\n }\n }\n\n setIsLoading(false);\n } catch (error) {\n setIsLoading(false);\n }\n }\n\n fetchWaitingList();\n }, []);\n\n const onSubmit = async e => {\n e.preventDefault();\n\n if (data.services && data.services.length && service === '') {\n setIsServiceValid(false);\n return;\n }\n\n if (\n !(data.year && data.year.length && data.year.includes(academicYear))\n ) {\n setIsYearValid(false);\n return;\n }\n\n setIsLoading(true);\n\n try {\n const query = qs.parse(location.search);\n const ticketName = query.ticket || '';\n\n await axios.post(\n `${\n process.env.REACT_APP_WAITING_LIST_API_ENDPOINT\n }/waiting-list/passenger`,\n {\n email,\n mobile,\n postCode,\n passengers,\n year: academicYear,\n service,\n clientSlug,\n ticketName\n }\n );\n setIsLoading(false);\n setSubmitted(true);\n } catch (error) {\n setIsLoading(false);\n setSubmitFailed(true);\n }\n };\n\n const handleChange = setFunc => ({ target }) => setFunc(target.value);\n\n const handleServiceChange = ({ target }) => {\n setService(target.value);\n setIsServiceValid(true);\n };\n\n const handleYearChange = ({ target }) => {\n setYear(target.value);\n setIsYearValid(true);\n };\n\n const handlePassengerCount = ({ target }) => {\n const count = parseInt(target.value, 10);\n setPassengerCount(count);\n setPassengers(prevState => {\n const newSlice = prevState.slice(0, count);\n\n if (newSlice.length !== count) {\n const diff = count - newSlice.length;\n\n for (let i = 0; i < diff; i += 1) {\n newSlice.push({\n firstName: '',\n lastName: ''\n });\n }\n }\n\n return newSlice;\n });\n };\n\n const renderTextField = (id, label, value, onChange) => (\n \n );\n\n const renderPassengerInputs = (passenger, index) => (\n
\n {renderTextField(\n `passenger-first-${index}`,\n `Passenger ${index + 1} first name`,\n passenger.firstName,\n ({ target }) => {\n setPassengers(prevState =>\n prevState.map((item, i) => {\n if (index !== i) {\n return item;\n }\n\n return {\n firstName: target.value,\n lastName: passenger.lastName\n };\n })\n );\n }\n )}\n {renderTextField(\n `passenger-last-${index}`,\n `Passenger ${index + 1} last name`,\n passenger.lastName,\n ({ target }) => {\n setPassengers(prevState =>\n prevState.map((item, i) => {\n if (index !== i) {\n return item;\n }\n\n return {\n firstName: passenger.firstName,\n lastName: target.value\n };\n })\n );\n }\n )}\n
\n );\n\n if (isLoading) {\n return (\n
\n \n
\n );\n }\n\n if (!isLoading && !data) {\n return (\n
\n \n Cannot find waiting list\n \n
\n );\n }\n\n if (submitted) {\n return (\n
\n
\n

Thanks for joining the waiting list.

\n

\n We{\"'\"}ve sent a confirmation email to {email}.\n

\n

\n {data.name} will be in contact when there is\n availability on their service.\n

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

\n Join the waiting list for {data.name}.\n

\n
\n {renderTextField(\n 'email',\n 'Your email',\n email,\n handleChange(setEmail)\n )}\n {renderTextField(\n 'mobile',\n 'Your mobile number',\n mobile,\n handleChange(setMobile)\n )}\n {renderTextField(\n 'post-code',\n 'Your post code',\n postCode,\n handleChange(setPostCode)\n )}\n \n \n Year\n \n \n }\n >\n {data.year.map((item, i) => (\n // eslint-disable-next-line react/no-array-index-key\n \n {item}\n \n ))}\n \n \n {data.services && data.services.length > 0 && (\n \n \n Service\n \n \n }\n >\n {data.services.map((item, i) => (\n // eslint-disable-next-line react/no-array-index-key\n \n {item}\n \n ))}\n \n \n )}\n \n 1\n 2\n 3\n 4\n 5\n \n {passengers.map(renderPassengerInputs)}\n

\n By submitting this data, I confirm I have read and accepted\n the{' '}\n \n ShuttleID T&Cs\n \n

\n {!isServiceValid && (\n

\n Please select the service you wish to use.\n

\n )}\n {!isYearValid && (\n

\n Please select the year you wish to apply for.\n

\n )}\n {submitFailed && (\n

\n There was a problem handling your submission. Please try\n again or contact support@shuttleid.uk.\n

\n )}\n \n Submit\n \n \n
\n );\n};\n\nWaitingList.propTypes = {\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(WaitingList);\n","import React from 'react';\nimport moment from 'moment';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport Table from '@material-ui/core/Table';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableBody from '@material-ui/core/TableBody';\nimport { withStyles } from '@material-ui/core';\n\nconst styles = () => ({\n table: {\n maxWidth: '500px',\n margin: '0 auto'\n },\n subheading: {\n margin: '20px 0 10px'\n }\n});\n\nconst TripsTable = ({ trips, classes }) => {\n if (!trips || !trips.length) {\n return (\n <>\n

\n No trips taken\n

\n

We{\"'\"}ll display all your trips here for your records

\n \n );\n }\n\n return (\n \n \n \n \n Date Time\n Service\n \n \n \n {trips.map(trip => (\n \n \n {moment(trip.date_time).format(\n 'Do MMM YYYY HH:mm:ss'\n )}\n \n \n {trip.service_name}\n \n \n ))}\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(TripsTable);\n","import React, { Component } from 'react';\nimport { Auth } from 'aws-amplify';\nimport axios from 'axios';\nimport { Typography, withStyles, CircularProgress } from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport ContentHeader from '../components/ContentHeader';\nimport TripsTable from '../components/TripsTable';\n\nconst styles = theme => ({\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n spinner: {\n marginLeft: 'calc(50% - 22px)',\n marginTop: '60px',\n marginBottom: '60px'\n },\n error: {\n margin: '20px 0',\n fontSize: '18px',\n color: red[500],\n textAlign: 'center',\n paddingBottom: '20px'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n }\n});\n\nclass Trips extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n loading: true,\n error: false,\n trips: []\n };\n }\n\n async componentDidMount() {\n try {\n const currentSession = await Auth.currentSession();\n const {\n match: {\n params: { ticketId }\n }\n } = this.props;\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n let tripsResponse;\n try {\n tripsResponse = await axios.get(\n `${\n process.env.REACT_APP_TRIPS_API_ENDPOINT\n }/trips/by-ticket/${ticketId}`,\n {\n headers\n }\n );\n } catch (e) {\n tripsResponse = [];\n if (e.response.status !== 404) {\n throw e;\n }\n }\n\n this.setState({\n loading: false,\n error: false,\n trips: tripsResponse.data || tripsResponse\n });\n } catch (e) {\n this.setState({\n loading: false,\n error: true\n });\n }\n }\n\n render() {\n const { error, loading, trips } = this.state;\n const { classes } = this.props;\n\n if (loading) {\n return (\n \n );\n }\n\n return (\n
\n \n {error && (\n \n There was a problem retrieving your trip details\n \n )}\n {trips && !error && (\n
\n \n
\n )}\n
\n );\n }\n}\n\nexport default withStyles(styles)(Trips);\n","import React, { Component } from 'react';\nimport { CardElement, injectStripe } from 'react-stripe-elements';\nimport {\n withStyles,\n Typography,\n withWidth,\n CircularProgress,\n Icon\n} from '@material-ui/core';\nimport { withRouter } from 'react-router-dom';\nimport { Auth } from 'aws-amplify';\nimport axios from 'axios';\nimport { red } from '@material-ui/core/colors';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport Select from '@material-ui/core/Select';\nimport moment from 'moment';\nimport ContentHeader from './ContentHeader';\nimport { formatPrice } from '../helpers/formatters';\nimport LoaderButton from './LoaderButton';\nimport {\n DEFAULT_ERROR,\n getFriendlyPaymentError,\n isSafePaymentError\n} from '../helpers/errors';\nimport { getCurrencySymbol } from '../helpers/ticket';\nimport globalStyles from '../styles';\n\nconst styles = {\n root: {\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n textAlign: 'center'\n },\n description: {\n padding: '10px',\n marginBottom: '20px',\n fontWeight: '100'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n },\n card: {\n margin: '30px auto 15px auto',\n maxWidth: '360px',\n border: '1px solid rgba(0, 0, 0, 0.23)',\n borderRadius: '4px',\n padding: '10px 0 10px 8px'\n },\n button: {\n margin: '20px 0 20px',\n width: '200px',\n height: '56px'\n },\n error: {\n margin: '20px 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n saveCard: {\n display: 'inline',\n marginLeft: 14,\n marginTop: 18\n },\n spinner: {\n marginTop: 60,\n marginBottom: 60,\n marginLeft: 'calc(50% - 22px)'\n },\n icon: {\n fontSize: 25\n },\n existingCardParent: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: 20\n },\n existingCard: {\n ...globalStyles.savedCard,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '0 10px',\n flexWrap: 'wrap'\n },\n existingCardHeader: {\n flexBasis: '100%',\n marginTop: 10,\n ...globalStyles.savedCardHeader\n },\n changeCard: {\n width: 'auto',\n height: 'auto',\n padding: '5px',\n lineHeight: '1',\n marginLeft: 10,\n fontSize: 12\n }\n};\n\nclass TopUpForm extends Component {\n constructor(props) {\n super(props);\n\n const { ticket } = this.props;\n const numTrips =\n ticket.default_trips > 0 && ticket.default_trips < 50\n ? ticket.default_trips\n : 20;\n\n this.state = {\n processing: false,\n error: '',\n cardError: '',\n cardValid: false,\n paymentError: false,\n numTrips,\n saveCard: false,\n saveReplacedCard: false,\n paymentMethods: null,\n isLoadingPaymentMethods: true\n };\n }\n\n async componentDidMount() {\n try {\n // get customer payment methods\n const { client } = this.props;\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/payment-methods/${\n currentSession.getAccessToken().payload.sub\n }/${client.slug}`,\n {\n headers\n }\n );\n\n // if any, set state\n if (\n response.data &&\n response.data.data &&\n response.data.data.length\n ) {\n this.setState({\n paymentMethods: response.data.data,\n isLoadingPaymentMethods: false\n });\n } else {\n this.setState({\n isLoadingPaymentMethods: false\n });\n }\n } catch (error) {\n console.error(error);\n this.setState({\n isLoadingPaymentMethods: false\n });\n }\n }\n\n handleSubmit = async () => {\n const { cardError, cardValid, paymentMethods } = this.state;\n\n if (cardError) {\n this.setState({\n error: cardError\n });\n return;\n }\n if (!cardValid && !paymentMethods) {\n this.setState({\n error: 'Please complete all card details including postcode'\n });\n return;\n }\n\n this.setState({\n processing: true,\n error: ''\n });\n\n try {\n await this.handleInitialPayment();\n } catch (e) {\n console.error(e);\n const error = getFriendlyPaymentError(e, DEFAULT_ERROR);\n this.setState({\n processing: false,\n error,\n paymentError: !isSafePaymentError(error)\n });\n }\n };\n\n handleInitialPayment = async () => {\n const { stripe, history, customerTicket } = this.props;\n\n const {\n numTrips,\n saveCard,\n saveReplacedCard,\n paymentMethods\n } = this.state;\n\n let paymentMethodId;\n\n if (paymentMethods && paymentMethods.length) {\n paymentMethodId = paymentMethods[0].id;\n } else {\n const { paymentMethod, error } = await stripe.createPaymentMethod(\n 'card',\n this.cardElement\n );\n\n if (error) {\n if (error.code === 'card_declined') {\n throw new Error('Card declined');\n } else if (error.type === 'card_error') {\n throw new Error('Card error');\n } else {\n throw new Error('Card api error');\n }\n } else {\n paymentMethodId = paymentMethod.id;\n }\n }\n\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.post(\n `${process.env.REACT_APP_PAYMENT_API_ENDPOINT}/top-up/stripe`,\n {\n payment_method_id: paymentMethodId,\n customerTicketId: customerTicket.id,\n num_trips: numTrips,\n save_card: saveCard || saveReplacedCard\n },\n {\n headers\n }\n );\n\n if (response.data.id) {\n const confirmUrl = `/top-up-confirmed/${response.data.id}`;\n history.push(confirmUrl);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else if (\n response.data.requires_action &&\n response.data.payment_intent_client_secret\n ) {\n await this.handleActionPayment(response.data);\n } else {\n throw new Error('Problem creating payment intent.');\n }\n };\n\n handleActionPayment = async paymentResponse => {\n const { stripe, history, customerTicket } = this.props;\n const { numTrips } = this.state;\n\n const {\n error: errorAction,\n paymentIntent\n } = await stripe.handleCardAction(\n paymentResponse.payment_intent_client_secret\n );\n\n if (errorAction) {\n throw new Error(errorAction.message);\n } else {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.post(\n `${process.env.REACT_APP_PAYMENT_API_ENDPOINT}/top-up/stripe`,\n {\n payment_intent_id: paymentIntent.id,\n customerTicketId: customerTicket.id,\n num_trips: numTrips\n },\n {\n headers\n }\n );\n\n if (response.data.id) {\n const confirmUrl = `/top-up-confirmed/${response.data.id}`;\n history.push(confirmUrl);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else if (\n response.data.requires_action &&\n response.data.payment_intent_client_secret\n ) {\n await this.handleAction(response.data);\n } else {\n throw new Error('Problem confirming payment intent.');\n }\n }\n };\n\n handleReady = element => {\n this.cardElement = element;\n this.cardElement.on('change', response => {\n const cardValid = !response.empty && response.complete;\n const cardError = response.error ? response.error.message : '';\n this.setState({\n cardValid,\n cardError\n });\n });\n };\n\n handleChange = event => {\n this.setState({\n numTrips: event.target.value\n });\n };\n\n netPrice = price => {\n return price;\n };\n\n displayTripOptions = (ticket, numTrips, tripPrice) => {\n const options = [];\n\n let minTrips = 1;\n\n // @NOTE: Hardcoded min trips for York college\n if (ticket.client_id === 'b153084a-ac36-4d07-a524-9ce43c9ea3e6') {\n minTrips = 10;\n\n const now = moment().format('YYYY-MM-DD');\n\n if (now >= '2023-05-15') {\n minTrips = 1;\n } else if (now >= '2023-04-17') {\n minTrips = 6;\n }\n }\n\n // @NOTE: Hardcoded min trips for Denso\n if (ticket.client_id === 'd651edf0-3ffe-44cf-8dcc-f93257672c78') {\n minTrips = 5;\n }\n\n for (let i = minTrips; i <= 50; i += 1) {\n options.push(\n \n {this.displayTripOption(ticket, i, tripPrice)}\n \n );\n }\n\n return (\n \n }\n >\n {options}\n \n );\n };\n\n displayTripOption = (ticket, numTrips, tripPrice) => {\n return `${numTrips} trips x ${getCurrencySymbol(\n ticket.currency\n )}${tripPrice}`;\n };\n\n handleCheckboxChange = event => {\n this.setState({ [event.target.name]: event.target.checked });\n };\n\n render() {\n const {\n ticket,\n width,\n customerTicket,\n classes,\n tripPrice\n } = this.props;\n const {\n processing,\n error,\n paymentError,\n numTrips,\n saveCard,\n saveReplacedCard,\n paymentMethods,\n isLoadingPaymentMethods\n } = this.state;\n\n const hasPaymentMethods = paymentMethods && paymentMethods.length;\n\n if (isLoadingPaymentMethods) {\n return (\n \n );\n }\n\n return (\n
\n \n
\n
\n

\n \n Passenger: {customerTicket.passenger.first_name}{' '}\n {customerTicket.passenger.last_name}\n \n \n Ticket: {customerTicket.service_name}{' '}\n {customerTicket.type}\n {ticket.name ? ` ${ticket.name}` : ''}\n \n {customerTicket.zone && (\n \n Zone: {customerTicket.zone}\n \n )}\n {customerTicket.expiry && (\n \n Expiry:{' '}\n {moment(customerTicket.expiry).format(\n 'ddd Do MMM YYYY'\n )}\n \n )}\n \n Balance:{' '}\n {parseInt(customerTicket.trips, 10) -\n parseInt(\n customerTicket.trips_taken,\n 10\n )}{' '}\n trips left\n \n

\n

\n Choose top-up amount:\n

\n
\n \n \n Amount\n \n {this.displayTripOptions(\n ticket,\n numTrips,\n tripPrice\n )}\n \n

\n {formatPrice(\n this.netPrice(tripPrice * numTrips),\n ticket.currency\n )}\n

\n
\n
\n\n <>\n {!hasPaymentMethods && (\n <>\n \n {!saveReplacedCard && (\n
\n \n \n \n }\n label=\"Save card details\"\n />\n \n \n
\n )}\n \n )}\n {hasPaymentMethods && (\n
\n
\n
\n Saved card\n
\n \n credit_card\n \n \n ****-****-****-\n {paymentMethods[0].card.last4}\n \n {\n this.setState({\n paymentMethods: null,\n saveReplacedCard: true\n });\n }}\n />\n
\n
\n )}\n \n\n {error && (\n \n {error}\n \n )}\n\n \n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(\n injectStripe(withRouter(withWidth()(TopUpForm)))\n);\n","import React, { Component } from 'react';\nimport axios from 'axios';\nimport { Elements, StripeProvider } from 'react-stripe-elements';\nimport { Typography, withStyles, CircularProgress } from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport TopUpForm from '../components/TopUpForm';\nimport { contactOperatorString } from '../helpers/contact';\n\nconst styles = {\n root: {\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative'\n },\n error: {\n margin: '20px 0 0 5px',\n color: red[500],\n minHeight: '20px',\n textAlign: 'center'\n },\n spinner: {\n marginLeft: 'calc(50% - 22px)',\n marginTop: '60px'\n }\n};\n\nconst hasExpired = ticket => {\n const now = new Date().toISOString();\n return ticket.expiry && ticket.expiry < now;\n};\n\nconst isVoided = ticket => {\n return ticket.ticket_status === 'void';\n};\n\nclass TopUp extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n error: '',\n ticket: null,\n customerTicket: null,\n client: null,\n isLoading: true\n };\n }\n\n async componentDidMount() {\n const {\n match: {\n params: { ticketId }\n }\n } = this.props;\n\n try {\n const currentSession = await Auth.currentSession();\n\n // get customer ticket\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const customerTicketResponse = await axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/user-id/${\n currentSession.getAccessToken().payload.sub\n }/${ticketId}`,\n {\n headers\n }\n );\n\n const customerTicket = customerTicketResponse.data;\n\n // get client\n const clientResponse = await axios.get(\n `${process.env.REACT_APP_API_ENDPOINT}/client/${\n customerTicket.client_id\n }`,\n {\n headers\n }\n );\n const client = clientResponse.data;\n\n // get ticket\n const ticketResponse = await axios.get(\n `${process.env.REACT_APP_TICKET_API_ENDPOINT}/ticket/${\n customerTicket.ticket_id\n }`,\n {\n headers\n }\n );\n const ticket = ticketResponse.data;\n\n this.setState({\n ticket,\n client,\n customerTicket,\n isLoading: false,\n error: ''\n });\n } catch (e) {\n console.error(e);\n\n const errMessage =\n e.response && e.response.status === 403\n ? 'You do not have permission to top-up this ticket. Please log into the original account which purchased the ticket. Hint: Please use the email address where your top-up alert was sent to.'\n : 'There was a problem retrieving the ticket. Please try again later or contact our support team.';\n\n this.setState({\n isLoading: false,\n error: errMessage\n });\n }\n }\n\n render() {\n const { client, customerTicket, ticket, error, isLoading } = this.state;\n\n const { classes } = this.props;\n\n if (isLoading) {\n return (\n
\n \n
\n );\n }\n\n if (error) {\n return (\n
\n \n {error}\n \n
\n );\n }\n\n if (hasExpired(customerTicket)) {\n return (\n \n This ticket has expired and can no longer be topped up or\n used.\n \n );\n }\n\n if (isVoided(customerTicket)) {\n return (\n \n This ticket has been voided and cannot be topped up.\n \n );\n }\n\n const tripPrice =\n ticket.pricing_model === 'Zonal' &&\n ticket.zone_trip_prices &&\n customerTicket.zone\n ? ticket.zone_trip_prices[customerTicket.zone]\n : ticket.trip_price;\n\n if (ticket.pricing_model === 'Zonal' && !tripPrice) {\n return (\n \n The top-up facility for your flexi ticket is unavailable\n because pricing for your zone has been removed. Your\n transport provider can resolve this by configuring a price\n for your specified zone. Please contact{' '}\n {contactOperatorString(client)} for more information.\n \n );\n }\n\n const stripe = window.Stripe(process.env.REACT_APP_STRIPE_PUB_KEY, {\n stripeAccount: client.stripe_account_id\n });\n\n return (\n
\n \n \n \n \n \n
\n );\n }\n}\n\nexport default withStyles(styles)(TopUp);\n","import React from 'react';\nimport { withStyles, Typography } from '@material-ui/core';\nimport ContentHeader from '../components/ContentHeader';\nimport ButtonLink from '../components/ButtonLink';\n\nconst styles = theme => ({\n root: {\n textAlign: 'center',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n heading: {\n marginBottom: '10px'\n },\n subheading: {\n marginTop: '20px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n inner: {\n padding: '20px 10px'\n },\n button: {\n margin: '5px 5px'\n }\n});\n\nconst TopUpConfirmed = ({ classes, match }) => {\n const {\n params: { customerTicketId }\n } = match;\n\n return (\n
\n \n
\n \n Congratulations, your top-up was successful.\n \n \n \n View ticket\n \n \n My tickets\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(TopUpConfirmed);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { CardElement, injectStripe } from 'react-stripe-elements';\nimport {\n withStyles,\n Typography,\n withWidth,\n CircularProgress,\n Icon\n} from '@material-ui/core';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport { withRouter } from 'react-router-dom';\nimport axios from 'axios';\nimport { red } from '@material-ui/core/colors';\nimport { Auth } from 'aws-amplify';\nimport LoaderButton from './LoaderButton';\nimport { formatPrice } from '../helpers/formatters';\nimport {\n DEFAULT_ERROR,\n getFriendlyPaymentError,\n isSafePaymentError\n} from '../helpers/errors';\n\nconst styles = {\n root: {\n marginTop: '20px',\n minHeight: '100px',\n marginBottom: '20px',\n padding: '0 10px 10px',\n textAlign: 'center'\n },\n card: {\n margin: '30px auto 15px auto',\n maxWidth: '360px',\n border: '1px solid rgba(0, 0, 0, 0.23)',\n borderRadius: '4px',\n padding: '10px 0 10px 8px'\n },\n button: {\n margin: '20px 0 20px',\n width: '200px',\n height: '56px'\n },\n error: {\n margin: '20px 20px 10px',\n color: red[500],\n minHeight: '20px'\n },\n saveCard: {\n display: 'inline',\n marginLeft: 14,\n marginTop: 18\n },\n spinner: {\n marginTop: 60,\n marginBottom: 60,\n marginLeft: 'calc(50% - 22px)'\n },\n icon: {\n fontSize: 25\n },\n existingCardParent: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: 20\n },\n existingCard: {\n background: '#ebfaff',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '0 10px',\n flexWrap: 'wrap'\n },\n existingCardHeader: {\n flexBasis: '100%',\n marginTop: 10,\n background: '#70d0ff'\n },\n changeCard: {\n width: 'auto',\n height: 'auto',\n padding: '5px',\n lineHeight: '1',\n marginLeft: 10,\n fontSize: 12\n }\n};\n\nclass BookingPaymentForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n processing: false,\n error: '',\n cardError: '',\n cardValid: false,\n paymentError: false,\n saveCard: false,\n saveReplacedCard: false,\n paymentMethods: null,\n isLoadingPaymentMethods: true\n };\n }\n\n async componentDidMount() {\n try {\n // get customer payment methods\n const { client } = this.props;\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/payment-methods/${\n currentSession.getAccessToken().payload.sub\n }/${client.slug}`,\n {\n headers\n }\n );\n\n // if any, set state\n if (\n response.data &&\n response.data.data &&\n response.data.data.length\n ) {\n this.setState({\n paymentMethods: response.data.data,\n isLoadingPaymentMethods: false\n });\n } else {\n this.setState({\n isLoadingPaymentMethods: false\n });\n }\n } catch (error) {\n console.error(error);\n this.setState({\n isLoadingPaymentMethods: false\n });\n }\n }\n\n uploadImage = async () => {\n const { passenger } = this.props;\n\n try {\n const response = await axios.post(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/pre-signed-url`,\n {\n fileType: passenger.photo.type,\n fileSize: passenger.photo.size\n }\n );\n\n await axios.put(response.data.preSignedUrl, passenger.photo, {\n headers: {\n 'Content-Type': passenger.photo.type\n }\n });\n\n return response.data.fileName;\n } catch (error) {\n throw new Error(error);\n }\n };\n\n handleSubmit = async () => {\n const { cardError, cardValid, paymentMethods } = this.state;\n const { buyAgain, client } = this.props;\n\n // Only check for card errors if there is value to pay\n // Full voucher value means no card validation required\n if (Number(this.netPrice()) >= 1) {\n if (cardError) {\n this.setState({\n error: cardError\n });\n return;\n }\n if (!cardValid && !paymentMethods) {\n this.setState({\n error: 'Please complete all card details including postcode'\n });\n return;\n }\n } else if (Number(this.netPrice()) > 0) {\n this.setState({\n error: `Invalid amount. Amount can only be 0 or a minimum of ${formatPrice(\n 1,\n client.features.currency\n )} using card payment.`\n });\n return;\n }\n\n let imageFileName;\n\n this.setState({\n processing: true,\n error: ''\n });\n\n if (!buyAgain) {\n try {\n imageFileName = await this.uploadImage();\n } catch (e) {\n console.error(e);\n\n if (e.response && e.response.status === 403) {\n this.setState({\n processing: false,\n error:\n 'Your photo failed to upload in time. Please retry with either a smaller image or on a faster network (WiFi).'\n });\n } else {\n this.setState({\n processing: false,\n error:\n 'There was a problem uploading your image. Please ensure it is a portrait photo and less than 10MB in size.'\n });\n }\n return;\n }\n }\n\n try {\n await this.handleInitialPayment(imageFileName);\n } catch (e) {\n console.error(e);\n const error = getFriendlyPaymentError(e, DEFAULT_ERROR);\n this.setState({\n processing: false,\n error,\n paymentError: !isSafePaymentError(error)\n });\n }\n };\n\n handleInitialPayment = async imageFileName => {\n const {\n stripe,\n history,\n booking,\n passenger,\n client,\n voucher,\n buyAgain,\n customerTicketId\n } = this.props;\n\n const { saveCard, saveReplacedCard, paymentMethods } = this.state;\n\n let paymentMethodId;\n\n // Only create payment method when there is something to charge.\n // A full value voucher will hide card field.\n if (this.netPrice() > 0) {\n if (paymentMethods && paymentMethods.length) {\n paymentMethodId = paymentMethods[0].id;\n } else {\n const {\n paymentMethod,\n error\n } = await stripe.createPaymentMethod('card', this.cardElement);\n\n if (error) {\n if (error.code === 'card_declined') {\n throw new Error('Card declined');\n } else if (error.type === 'card_error') {\n throw new Error('Card error');\n } else {\n throw new Error('Card api error');\n }\n } else {\n paymentMethodId = paymentMethod.id;\n }\n }\n }\n\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-booking/stripe`,\n {\n payment_method_id: paymentMethodId,\n booking,\n voucher,\n passenger: {\n ...passenger,\n photo: buyAgain ? passenger.photo : imageFileName\n },\n client,\n save_card: saveCard || saveReplacedCard,\n customer_ticket_id: customerTicketId\n },\n {\n headers\n }\n );\n\n if (response.data.id) {\n const ticketYear = 'advance';\n\n const confirmUrl = `/booking-confirmed/${\n response.data.id\n }/${ticketYear}/${client.slug}/`;\n\n history.push(confirmUrl);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else if (\n response.data.requires_action &&\n response.data.payment_intent_client_secret\n ) {\n await this.handleActionPayment(response.data, imageFileName);\n } else {\n throw new Error('Problem creating payment intent.');\n }\n };\n\n handleActionPayment = async (paymentResponse, imageFileName) => {\n const {\n stripe,\n history,\n booking,\n passenger,\n client,\n voucher,\n buyAgain,\n customerTicketId\n } = this.props;\n\n const {\n error: errorAction,\n paymentIntent\n } = await stripe.handleCardAction(\n paymentResponse.payment_intent_client_secret\n );\n\n if (errorAction) {\n throw new Error(errorAction.message);\n } else {\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.post(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/customer-booking/stripe`,\n {\n payment_intent_id: paymentIntent.id,\n booking,\n voucher,\n passenger: {\n ...passenger,\n photo: buyAgain ? passenger.photo : imageFileName\n },\n client,\n customer_ticket_id: customerTicketId\n },\n {\n headers\n }\n );\n\n if (response.data.id) {\n const ticketYear = 'advance';\n\n const confirmUrl = `/booking-confirmed/${\n response.data.id\n }/${ticketYear}/${client.slug}`;\n\n history.push(confirmUrl);\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n } else if (\n response.data.requires_action &&\n response.data.payment_intent_client_secret\n ) {\n await this.handleAction(response.data, imageFileName);\n } else {\n throw new Error('Problem confirming payment intent.');\n }\n }\n };\n\n handleReady = element => {\n this.cardElement = element;\n this.cardElement.on('change', response => {\n const cardValid = !response.empty && response.complete;\n const cardError = response.error ? response.error.message : '';\n this.setState({\n cardValid,\n cardError\n });\n });\n };\n\n netPrice = () => {\n const { booking, voucher } = this.props;\n\n const ticketPrice = booking.reduce(\n (acc, b) => acc + Number(b.price),\n 0\n );\n\n if (voucher) {\n return ticketPrice - voucher.value;\n }\n return ticketPrice;\n };\n\n handleCheckboxChange = event => {\n this.setState({ [event.target.name]: event.target.checked });\n };\n\n render() {\n const { classes, width, client } = this.props;\n const {\n processing,\n error,\n paymentError,\n saveCard,\n saveReplacedCard,\n paymentMethods,\n isLoadingPaymentMethods\n } = this.state;\n\n const hasPaymentMethods = paymentMethods && paymentMethods.length;\n\n if (isLoadingPaymentMethods) {\n return (\n \n );\n }\n\n let termsUrl;\n\n client.services.forEach(service => {\n if (service.terms_url) {\n termsUrl = service.terms_url;\n }\n });\n\n return (\n
\n \n By completing this purchase, I confirm I have read and\n accepted the following:\n \n {termsUrl && (\n \n \n {client.name} T&Cs\n \n \n )}\n \n \n ShuttleID T&Cs\n \n \n\n {this.netPrice() >= 1 && (\n <>\n {!hasPaymentMethods && (\n <>\n \n {!saveReplacedCard && (\n
\n \n \n \n }\n label=\"Save card details\"\n />\n \n \n
\n )}\n \n )}\n {hasPaymentMethods && (\n
\n
\n
\n Saved card\n
\n \n credit_card\n \n \n ****-****-****-\n {paymentMethods[0].card.last4}\n \n {\n this.setState({\n paymentMethods: null,\n saveReplacedCard: true\n });\n }}\n />\n
\n
\n )}\n \n )}\n {error && (\n \n {error}\n \n )}\n\n \n
\n );\n }\n}\n\nBookingPaymentForm.propTypes = {\n classes: PropTypes.shape().isRequired,\n stripe: PropTypes.shape().isRequired,\n // booking: PropTypes.array,\n passenger: PropTypes.shape().isRequired,\n client: PropTypes.shape().isRequired,\n buyAgain: PropTypes.bool,\n customerTicketId: PropTypes.string\n};\n\nBookingPaymentForm.defaultProps = {\n buyAgain: false,\n customerTicketId: ''\n};\n\nexport default withStyles(styles)(\n injectStripe(withRouter(withWidth()(BookingPaymentForm)))\n);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { withStyles, Typography, Button } from '@material-ui/core';\nimport { Elements, StripeProvider } from 'react-stripe-elements';\nimport VoucherForm from './VoucherForm';\nimport ContentHeader from './ContentHeader';\nimport { formatPrice } from '../helpers/formatters';\nimport BookingPaymentForm from './BookingPaymentForm';\n\nconst styles = {\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)'\n },\n description: {\n padding: '10px',\n marginBottom: '20px',\n fontWeight: '100'\n },\n button: {\n height: '40px',\n marginTop: '10px',\n marginBottom: '10px'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n },\n imagePreview: {\n minHeight: '56px',\n margin: '20px auto 0',\n width: '100%',\n maxWidth: '400px',\n display: 'flex',\n justifyContent: 'center',\n '& > img': {\n maxWidth: '100%'\n },\n '@media only screen and (max-device-width: 400px)': {\n margin: '0 auto 0'\n }\n },\n tripLine: {\n border: '1px solid #ccc',\n borderRadius: 5,\n marginBottom: 5,\n textAlign: 'left',\n padding: 5,\n display: 'flex'\n },\n tripLineHead: {\n display: 'flex',\n borderRight: '1px solid #ccc',\n paddingRight: 5,\n marginRight: 5,\n textAlign: 'center',\n width: 55,\n justifyContent: 'center'\n },\n tripDate: {\n fontWeight: 'bold'\n },\n tripDateDay: {\n fontSize: 20,\n display: 'block',\n color: '#5dcaff'\n },\n tripDateMonth: {\n fontSize: 8,\n display: 'block'\n },\n tripService: {\n display: 'flex',\n alignItems: 'start',\n justifyContent: 'center',\n flexDirection: 'column'\n },\n tripStop: {\n fontSize: '0.8em',\n color: '#666',\n display: 'flex',\n alignItems: 'center'\n },\n icon: {\n fontSize: '15px'\n }\n};\n\nclass ConfirmBooking extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n voucher: null\n };\n }\n\n setVoucher = voucher => {\n this.setState({ voucher });\n };\n\n netPrice = price => {\n const { voucher } = this.state;\n if (voucher) {\n return price - voucher.value;\n }\n return price;\n };\n\n renderTrips(bookings) {\n const { classes } = this.props;\n const sortedBookings = bookings.map(item => item);\n sortedBookings.sort((a, b) => {\n if (a.date < b.date) {\n return -1;\n }\n if (a.date > b.date) {\n return 1;\n }\n if (a.time < b.time) {\n return -1;\n }\n if (a.time > b.time) {\n return 1;\n }\n return 0;\n });\n\n return (\n <>\n {sortedBookings.map(item => (\n
\n
\n
\n \n {moment(item.date)\n .format('ddd')\n .toUpperCase()}\n \n \n {moment(item.date)\n .format('Do MMM')\n .toUpperCase()}\n \n
\n
\n
\n {item.time} | {item.service_name}\n {'stop' in item && (\n
\n \n {item.stop}\n \n
\n )}\n
\n
\n ))}\n \n );\n }\n\n render() {\n const {\n handleEdit,\n passenger,\n booking,\n client,\n imagePreviewUrl,\n classes,\n buyAgain,\n customerTicketId\n } = this.props;\n\n const { voucher } = this.state;\n\n const stripe = window.Stripe(process.env.REACT_APP_STRIPE_PUB_KEY, {\n stripeAccount: client.stripe_account_id\n });\n\n const { firstName, lastName } = passenger;\n\n return (\n \n
\n
\n \n {!buyAgain && (\n
\n \"Ticket\n
\n )}\n
\n \n Passenger: {firstName} {lastName}\n \n\n \n Ticket: {client.site_name} Advance Pass\n \n \n Price:{' '}\n {formatPrice(\n this.netPrice(\n booking.reduce(\n (acc, b) => acc + Number(b.price),\n 0\n ),\n client.features.currency\n )\n )}{' '}\n ({booking.length} journeys)\n \n
\n
\n
\n
\n \n
\n {this.renderTrips(booking)}\n \n Edit\n \n
\n
\n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n
\n );\n }\n}\n\nConfirmBooking.propTypes = {\n handleEdit: PropTypes.func.isRequired,\n passenger: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n photo: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n stop: PropTypes.string\n }).isRequired,\n client: PropTypes.shape().isRequired,\n imagePreviewUrl: PropTypes.string,\n classes: PropTypes.shape().isRequired,\n buyAgain: PropTypes.bool,\n customerTicketId: PropTypes.string\n};\n\nConfirmBooking.defaultProps = {\n imagePreviewUrl: '',\n buyAgain: false,\n customerTicketId: ''\n};\n\nexport default withStyles(styles)(ConfirmBooking);\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles, styled } from '@material-ui/core/styles';\nimport red from '@material-ui/core/colors/red';\nimport { Icon, Button } from '@material-ui/core';\nimport TextField from '@material-ui/core/TextField';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport Box from '@material-ui/core/Box';\nimport { Auth } from 'aws-amplify';\n\nimport moment from 'moment';\nimport { getOrientation, resetOrientation } from '../helpers/image';\nimport ContentHeader from '../components/ContentHeader';\nimport ConfirmBooking from '../components/ConfirmBooking';\nimport { getCurrencySymbol } from '../helpers/ticket';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto 40px',\n paddingBottom: '1px',\n position: 'relative',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n rootMulti: {\n maxWidth: '800px',\n margin: '40px auto 40px',\n paddingBottom: '1px',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n nameContainer: {\n padding: '10px 10px',\n background: '#70d0ff'\n },\n name: {\n color: '#fff'\n },\n description: {\n marginBottom: 0,\n paddingRight: 5,\n paddingLeft: 10\n },\n descriptionList: {\n paddingLeft: 14\n },\n serviceHeading: {\n background: '#70d0ff',\n margin: '10px 20px 0 20px',\n padding: 5,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: 'pointer',\n fontSize: '1.2em',\n borderBottom: '1px solid #3e94be',\n textShadow: '1px 1px #3d94bead',\n color: 'white'\n },\n serviceHeadingMain: {\n display: 'flex',\n alignItems: 'center'\n },\n serviceBody: {\n display: 'none'\n },\n serviceBodyOpen: {\n margin: '0 20px 20px 20px',\n padding: 0,\n border: '1px solid #eee',\n boxShadow: '0px 4px 15px -10px rgba(0,0,0,0.51)'\n },\n serviceTickets: {\n margin: '0 20px 0px',\n padding: '0 0 20px'\n },\n error: {\n margin: '40px 20px',\n color: red[500]\n },\n spinner: {\n margin: '40px auto',\n display: 'block'\n },\n operatorInfo: {\n padding: '0 10px'\n },\n icon: {\n fontSize: '15px'\n },\n button: {\n paddingLeft: '2px',\n paddingRight: '4px',\n background: 'white'\n },\n editStopButton: {\n color: '#008004',\n border: 0,\n fontWeight: 'normal'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n },\n dayLabel: {\n display: 'flex',\n alignItems: 'center',\n textTransform: 'uppercase',\n flexGrow: 1,\n cursor: 'pointer',\n width: '100%',\n height: 50\n },\n dayBar: {\n borderTop: '1px solid #eee',\n borderLeft: '0',\n borderRight: '0',\n borderRadius: 0,\n marginTop: 0,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: 50,\n paddingLeft: 5,\n paddingRight: 5,\n cursor: 'pointer',\n color: '#555'\n },\n dayLabelParent: {\n display: 'flex',\n alignItems: 'start',\n justifyContent: 'center',\n flexDirection: 'column',\n flexGrow: 1\n },\n dayBarActive: {\n background: '#f1fff4',\n borderLeft: '2px solid green',\n color: 'green',\n '& label': {\n fontWeight: 'bold'\n }\n },\n dayStop: {\n fontSize: '0.8em',\n color: 'green',\n margin: 0,\n fontWeight: 'normal'\n },\n totalParent: {\n padding: 20,\n fontWeight: 'bold',\n position: 'sticky',\n background: 'white',\n bottom: 0,\n marginTop: 20,\n borderTop: '1px solid #eee',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center'\n },\n checkbox: {\n marginRight: 7\n },\n time: {\n fontWeight: 'bold',\n marginRight: 5\n },\n buyBtn: {\n background: 'green',\n color: 'white',\n border: 'none',\n '&:hover': {\n background: 'green',\n color: 'white',\n border: 'none'\n }\n },\n buyBtnDisabled: {\n background: 'green',\n color: 'white !important',\n border: 'none !important',\n opacity: 0.3\n },\n form: {\n padding: '0 10px 10px'\n },\n input: {\n width: '100%',\n maxWidth: '250px',\n display: 'block',\n margin: '20px auto',\n '& > div': {\n display: 'block'\n },\n '& input': {\n width: 220\n }\n },\n uploadButton: {\n height: '56px',\n margin: '0 auto',\n padding: '0.6em'\n },\n confirmButton: {\n height: '56px',\n margin: '0 0 0 10px',\n padding: '0.6em'\n },\n upload: {\n display: 'none'\n },\n imageUpload: {\n margin: '0 0 40px 0',\n textAlign: 'center'\n },\n datePicker: {\n margin: '0 auto 20px',\n maxWidth: '250px',\n '& > div': {\n width: '100%'\n }\n },\n imagePreview: {\n minHeight: '56px',\n width: '100%',\n maxWidth: '400px',\n margin: '0 auto 10px',\n '& > img': {\n maxWidth: '100%'\n },\n '& > div': {\n background: 'lightgrey',\n minHeight: '56px',\n borderRadius: '4px',\n border: '1px solid'\n },\n [theme.breakpoints.down('sm')]: {\n marginTop: '10px'\n }\n },\n imagePreviewHelp: {\n display: 'block',\n fontWeight: '100',\n padding: '.5em'\n },\n imagePreviewPlaceholder: {\n borderRadius: '0 !important',\n minHeight: '400px !important',\n border: '0 !important',\n width: '252px',\n margin: '0 auto',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n photoHelp: {\n color: '#03a9f4',\n padding: '1em 0',\n display: 'block'\n },\n formControl: {\n maxWidth: 250,\n width: '100%',\n margin: '0 auto 20px',\n display: 'flex'\n },\n smallPrint: {\n fontSize: 13,\n textAlign: 'center',\n color: '#444',\n marginBottom: 10\n },\n textCenter: {\n textAlign: 'center',\n padding: '20px 10px 0'\n },\n badge: {\n background: '#12b0ff',\n color: 'white',\n borderRadius: '50%',\n padding: '3px',\n width: 20,\n height: 20,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n disabled: {\n color: '#ccc'\n }\n});\n\nconst BootstrapDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiDialogContent-root': {\n padding: theme.spacing(2)\n },\n '& .MuiDialogActions-root': {\n padding: theme.spacing(1)\n }\n}));\n\nconst BootstrapDialogTitle = props => {\n const { classes, children, onClose, ...other } = props;\n\n return (\n \n \n {children}\n \n \n );\n};\n\nclass Service extends Component {\n static formatDescription(description) {\n return description.split('*').filter(el => el !== '');\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n services: null,\n client: null,\n loading: true,\n error: false,\n servicesOpen: {},\n dates: this.nextWeek(),\n selectedJourneys: [],\n hasSelectedJourneys: false,\n hasPassengerDetails: false,\n passenger: {\n firstName: '',\n lastName: '',\n photo: null\n },\n imagePreviewUrl: null,\n showStopModal: false,\n currentService: null,\n currentServiceStops: null,\n currentDay: null,\n defaultStop: {},\n availability: {}\n };\n }\n\n async componentDidMount() {\n const {\n match: {\n params: { clientSlug }\n }\n } = this.props;\n\n if (!clientSlug) {\n return;\n }\n\n try {\n await this.getService(clientSlug);\n } catch (e) {\n console.error(e);\n }\n }\n\n async getService(clientSlug) {\n const { history } = this.props;\n\n try {\n const client = await axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/client/slug/${clientSlug}`\n );\n\n const tickets = await this.getCustomerTickets();\n const existingTicket = tickets.data.items.find(\n customerTicket =>\n customerTicket.client_id === client.data.id &&\n customerTicket.ticket_status !== 'void'\n );\n\n if (existingTicket && existingTicket.id) {\n history.push(`/book/${existingTicket.id}`);\n return;\n }\n\n const { services = [] } = client.data;\n\n services.sort((a, b) => {\n if (a.time < b.time) {\n return -1;\n }\n if (a.time > b.time) {\n return 1;\n }\n return 0;\n });\n\n const currentSession = await Auth.currentSession();\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/service-availability/${clientSlug}/advance`,\n {\n headers\n }\n );\n\n this.setState({\n client: client.data,\n services,\n availability: response.data,\n loading: false\n });\n } catch (e) {\n this.setState({ error: true, loading: false });\n }\n }\n\n getCustomerTickets = async () => {\n const currentSession = await Auth.currentSession();\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n return axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/list-by/user-id/${\n currentSession.getAccessToken().payload.sub\n }`,\n {\n headers\n }\n );\n };\n\n getStop(service, day) {\n const { selectedJourneys } = this.state;\n const journey = selectedJourneys.find(\n item => item.service_id === service.id && item.date === day\n );\n\n if (!journey) {\n return '';\n }\n\n return journey.stop;\n }\n\n handleDateChange = e => {\n const { selectedJourneys, services, defaultStop } = this.state;\n const serviceId = e.target.name.split('#')[0];\n const day = e.target.name.split('#')[1];\n const service = services.find(s => s.id === serviceId);\n const serviceHasStops =\n service && service.stops && service.stops.length > 0;\n let showStopModal = false;\n\n if (e.target.checked) {\n const journey = {\n service_id: serviceId,\n service_name: service.name,\n date: day,\n time: service.time,\n price: service.price\n };\n\n if (serviceHasStops && serviceId in defaultStop) {\n journey.stop = defaultStop[serviceId];\n showStopModal = false;\n } else if (serviceHasStops) {\n showStopModal = true;\n }\n\n selectedJourneys.push(journey);\n\n this.setState({\n selectedJourneys,\n showStopModal,\n currentServiceStops: service.stops,\n currentService: service,\n currentDay: day\n });\n } else {\n this.setState({\n selectedJourneys: selectedJourneys.filter(\n item =>\n !(item.service_id === serviceId && item.date === day)\n )\n });\n }\n };\n\n isChecked = (serviceId, day) => {\n const { selectedJourneys } = this.state;\n return selectedJourneys.some(\n s => s.service_id === serviceId && s.date === day\n );\n };\n\n handleEdit = () => {\n this.setState({\n hasSelectedJourneys: false\n });\n };\n\n handleSubmitPassenger = event => {\n event.preventDefault();\n this.setState({\n hasPassengerDetails: true\n });\n // @NOTE: Hack to jump user to top of page on submit, as the route doesn't change\n // resulting in unexpected landing half way down subsequent view.\n window.scrollTo(0, 0);\n };\n\n handleChange = event => {\n const { passenger } = this.state;\n this.setState({\n passenger: {\n ...passenger,\n [event.target.name]: event.target.value\n },\n error: ''\n });\n };\n\n /**\n * @NOTE: Some pretty mad gymnastics going on to preview the image correctly as orientation may be stored in EXIF data\n * @SEE: https://stackoverflow.com/questions/7584794/accessing-jpeg-exif-rotation-data-in-javascript-on-the-client-side/32490603#32490603\n * @SEE: https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\n */\n handleImageChange = event => {\n const reader = new FileReader();\n const file = event.target.files[0];\n const { passenger } = this.state;\n\n if (file) {\n if (file.size > 10e7) {\n this.setState({\n error: 'Photo must be no more than 10MB'\n });\n } else {\n reader.onloadend = () => {\n getOrientation(file, srcOrientation => {\n resetOrientation(\n reader.result,\n srcOrientation,\n destBase64 => {\n this.setState({\n passenger: {\n ...passenger,\n photo: file\n },\n imagePreviewUrl: destBase64\n });\n }\n );\n });\n };\n reader.readAsDataURL(file);\n }\n }\n\n event.preventDefault();\n };\n\n nextWeek = () => {\n const now = moment();\n return [\n now,\n now.clone().add(1, 'day'),\n now.clone().add(2, 'day'),\n now.clone().add(3, 'day'),\n now.clone().add(4, 'day'),\n now.clone().add(5, 'day'),\n now.clone().add(6, 'day')\n ];\n };\n\n validatePassengerForm = passenger => {\n return passenger.firstName && passenger.lastName && passenger.photo;\n };\n\n checkOpen(serviceId) {\n const { servicesOpen } = this.state;\n return servicesOpen[serviceId];\n }\n\n calcTotal() {\n const { selectedJourneys } = this.state;\n const total = selectedJourneys.reduce(\n (acc, b) => acc + Number(b.price),\n 0\n );\n return total.toFixed(2);\n }\n\n displayTotalJourneys() {\n const { selectedJourneys } = this.state;\n\n if (selectedJourneys.length === 1) {\n return '1 journey';\n }\n return `${selectedJourneys.length} journeys`;\n }\n\n toggleService(serviceId) {\n const { servicesOpen } = this.state;\n servicesOpen[serviceId] = !servicesOpen[serviceId];\n this.setState({\n servicesOpen\n });\n }\n\n handleClose() {\n this.setState({\n showStopModal: false\n });\n }\n\n handleStopSelection(service, day, stop) {\n const { selectedJourneys, defaultStop } = this.state;\n\n const updatedSelectedJourneys = selectedJourneys.map(journey => {\n if (journey.service_id === service.id && journey.date === day) {\n return {\n ...journey,\n stop\n };\n }\n\n return journey;\n });\n\n defaultStop[service.id] = stop;\n\n this.setState({\n selectedJourneys: updatedSelectedJourneys,\n showStopModal: false,\n defaultStop\n });\n }\n\n isDayAvailable(serviceId, dayKey) {\n const { availability } = this.state;\n if (serviceId in availability && dayKey in availability[serviceId]) {\n return availability[serviceId][dayKey] > 0;\n }\n\n return false;\n }\n\n renderNumServiceSelections(serviceId) {\n const { selectedJourneys } = this.state;\n const { classes } = this.props;\n\n const serviceSelections = selectedJourneys.filter(\n journey => serviceId === journey.service_id\n );\n\n if (!serviceSelections.length) {\n return <>;\n }\n\n return (\n {serviceSelections.length}\n );\n }\n\n renderDayItem(date, service) {\n const { selectedJourneys } = this.state;\n const { classes } = this.props;\n const yyyymmddString = date.format('YYYY-MM-DD');\n\n const dayIsChecked = this.isChecked(service.id, yyyymmddString);\n let dayBarClassName = classes.dayBar;\n\n if (dayIsChecked) {\n dayBarClassName += ` ${classes.dayBarActive}`;\n }\n\n const dayIsAvailable = this.isDayAvailable(\n service.id,\n date.format('YYYYMMDD')\n );\n\n return (\n
\n
\n \n {' '}\n \n {date.format('ddd Do MMM')}\n
\n {this.getStop(service, yyyymmddString)}\n
\n
\n \n
\n {this.getStop(service, yyyymmddString) && (\n
\n {\n this.setState({\n selectedJourneys,\n showStopModal: true,\n currentServiceStops: service.stops,\n currentService: service,\n currentDay: yyyymmddString\n });\n }}\n >\n Edit\n \n
\n )}\n \n );\n }\n\n render() {\n const {\n services,\n client,\n loading,\n error,\n selectedJourneys,\n hasSelectedJourneys,\n passenger,\n hasPassengerDetails,\n imagePreviewUrl\n } = this.state;\n const { classes } = this.props;\n const {\n dates,\n showStopModal,\n currentServiceStops,\n currentService,\n currentDay\n } = this.state;\n\n const isPassengerValid = this.validatePassengerForm(passenger);\n\n if (error) {\n return (\n
\n \n There was a problem retrieving the bus service data,\n please try again later.\n \n
\n );\n }\n\n if (loading) {\n return (\n \n );\n }\n\n return (\n <>\n \n {\n this.handleClose();\n }}\n classes={classes}\n >\n Select bus stop\n \n \n <>\n {currentServiceStops &&\n currentServiceStops.map(stop => (\n
\n {\n this.handleStopSelection(\n currentService,\n currentDay,\n stop\n );\n }}\n >\n {stop}\n \n
\n ))}\n \n
\n \n {hasSelectedJourneys && hasPassengerDetails && (\n
\n \n
\n )}\n {hasSelectedJourneys && !hasPassengerDetails && (\n
\n
\n \n \n Please confirm the details of the passenger this\n ticket is for:\n \n
\n
\n \n \n
\n\n
\n
\n {imagePreviewUrl ? (\n \n ) : (\n \n \n Passenger photo\n \n Please provide a clear\n passport style headshot\n of the passenger,\n including only head and\n shoulders.\n \n \n
\n )}\n \n \n I need help with my photo\n \n \n
\n \n \n {!isPassengerValid ? (\n \n 🚫\n \n ) : (\n \n ✅\n \n )}\n  Confirm\n \n
\n
\n \n
\n )}\n {!hasSelectedJourneys && (\n
\n \n
\n \n Services operated by {client.name}.\n \n
\n {services &&\n services.length > 0 &&\n services.map(service => (\n
\n {\n this.toggleService(service.id);\n }}\n >\n \n \n {this.checkOpen(service.id)\n ? 'keyboard_arrow_down'\n : 'keyboard_arrow_right'}\n \n
\n \n {service.time}\n {' '}\n {service.name}\n
\n
\n
\n {this.renderNumServiceSelections(\n service.id\n )}\n
\n
\n \n \n \n {Service.formatDescription(\n service.description\n ).map(item => (\n
  • \n \n {item}\n \n
  • \n ))}\n \n

    \n Trip price:{' '}\n {getCurrencySymbol(\n client.features.currency\n )}\n {service.price}\n

    \n \n
    \n

    \n {service.route_url && (\n \n \n \n location_on\n {' '}\n Route\n \n \n )}\n\n {service.timetable_url && (\n \n \n \n access_time\n {' '}\n timetable\n \n \n )}\n\n {service.terms_url && (\n \n \n \n list\n \n Terms\n \n \n )}\n

    \n
    \n {dates.map(date =>\n this.renderDayItem(date, service)\n )}\n \n \n ))}\n
    \n
    \n Total:{' '}\n {getCurrencySymbol(client.features.currency)}\n {this.calcTotal()} (\n {this.displayTotalJourneys()})\n
    \n {\n this.setState({\n hasSelectedJourneys: true\n });\n window.scrollTo(0, 0);\n }}\n >\n Buy\n \n
    \n \n )}\n \n );\n }\n}\n\nService.propTypes = {\n match: PropTypes.shape({\n params: PropTypes.shape({\n clientSlug: PropTypes.string\n })\n }).isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(Service);\n","import React from 'react';\nimport { withStyles, Typography } from '@material-ui/core';\nimport ContentHeader from '../components/ContentHeader';\nimport ViewTicketButtons from '../components/ViewTicketButtons';\nimport ButtonLink from '../components/ButtonLink';\n\nconst styles = theme => ({\n root: {\n textAlign: 'center',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n heading: {\n marginBottom: '10px'\n },\n subheading: {\n marginTop: '20px'\n },\n paragraph: {\n fontSize: '16px',\n marginBottom: '10px',\n fontWeight: '100'\n },\n inner: {\n padding: '20px 10px'\n },\n button: {\n margin: '5px 5px'\n }\n});\n\nconst BookingConfirmed = ({ classes, match }) => {\n const {\n params: { customerTicketId }\n } = match;\n\n return (\n
    \n \n
    \n \n Congratulations, your order was successful and your advance\n pass is ready to use.\n \n \n Passes will be scanned on board and will need to be\n presented by the passenger.\n \n \n You can book more trips on your advance pass from the {'\"'}\n My Tickets{'\"'} area.\n \n \n \n Book more trips\n \n \n\n \n
    \n
    \n );\n};\n\nexport default withStyles(styles)(BookingConfirmed);\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles, styled } from '@material-ui/core/styles';\nimport red from '@material-ui/core/colors/red';\nimport { Icon, Button } from '@material-ui/core';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport Box from '@material-ui/core/Box';\nimport { Auth } from 'aws-amplify';\n\nimport moment from 'moment';\nimport ContentHeader from '../components/ContentHeader';\nimport ConfirmBooking from '../components/ConfirmBooking';\nimport { getCurrencySymbol } from '../helpers/ticket';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto 40px',\n paddingBottom: '1px',\n position: 'relative',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n rootMulti: {\n maxWidth: '800px',\n margin: '40px auto 40px',\n paddingBottom: '1px',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n nameContainer: {\n padding: '10px 10px',\n background: '#70d0ff'\n },\n name: {\n color: '#fff'\n },\n description: {\n marginBottom: 0,\n paddingRight: 5,\n paddingLeft: 10\n },\n descriptionList: {\n paddingLeft: 14\n },\n serviceHeading: {\n background: '#70d0ff',\n margin: '10px 20px 0 20px',\n padding: 5,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: 'pointer',\n fontSize: '1.2em',\n borderBottom: '1px solid #3e94be',\n textShadow: '1px 1px #3d94bead',\n color: 'white'\n },\n serviceHeadingMain: {\n display: 'flex',\n alignItems: 'center'\n },\n serviceBody: {\n display: 'none'\n },\n serviceBodyOpen: {\n margin: '0 20px 20px 20px',\n padding: 5,\n border: '1px solid #eee'\n },\n serviceTickets: {\n margin: '0 20px 0px',\n padding: '0 0 20px'\n },\n error: {\n margin: '40px 20px',\n color: red[500]\n },\n spinner: {\n margin: '40px auto',\n display: 'block'\n },\n operatorInfo: {\n padding: '0 10px'\n },\n icon: {\n fontSize: '15px'\n },\n button: {\n paddingLeft: '2px',\n paddingRight: '4px',\n background: 'white'\n },\n editStopButton: {\n color: '#008004',\n border: 0,\n fontWeight: 'normal'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n },\n dayLabel: {\n display: 'flex',\n alignItems: 'center',\n textTransform: 'uppercase',\n flexGrow: 1,\n cursor: 'pointer',\n width: '100%',\n height: 50\n },\n dayBar: {\n borderTop: '1px solid #eee',\n borderLeft: '0',\n borderRight: '0',\n borderRadius: 0,\n marginTop: 0,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: 50,\n paddingLeft: 5,\n paddingRight: 5,\n cursor: 'pointer',\n color: '#555'\n },\n dayLabelParent: {\n display: 'flex',\n alignItems: 'start',\n justifyContent: 'center',\n flexDirection: 'column',\n flexGrow: 1\n },\n dayBarActive: {\n background: '#f1fff4',\n borderLeft: '2px solid green',\n color: 'green',\n '& label': {\n fontWeight: 'bold'\n }\n },\n dayStop: {\n fontSize: '0.8em',\n color: 'green',\n margin: 0,\n fontWeight: 'normal'\n },\n totalParent: {\n padding: 20,\n fontWeight: 'bold',\n position: 'sticky',\n background: 'white',\n bottom: 0,\n marginTop: 20,\n borderTop: '1px solid #eee',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center'\n },\n checkbox: {\n marginRight: 7\n },\n time: {\n fontWeight: 'bold',\n marginRight: 5\n },\n buyBtn: {\n background: 'green',\n color: 'white',\n border: 'none',\n '&:hover': {\n background: 'green',\n color: 'white',\n border: 'none'\n }\n },\n buyBtnDisabled: {\n background: 'green',\n color: 'white !important',\n border: 'none !important',\n opacity: 0.3\n },\n form: {\n padding: '0 10px 10px'\n },\n input: {\n width: '100%',\n maxWidth: '250px',\n display: 'block',\n margin: '20px auto',\n '& > div': {\n display: 'block'\n },\n '& input': {\n width: 220\n }\n },\n uploadButton: {\n height: '56px',\n margin: '0 auto',\n padding: '0.6em'\n },\n confirmButton: {\n height: '56px',\n margin: '0 0 0 10px',\n padding: '0.6em'\n },\n upload: {\n display: 'none'\n },\n imageUpload: {\n margin: '0 0 40px 0',\n textAlign: 'center'\n },\n datePicker: {\n margin: '0 auto 20px',\n maxWidth: '250px',\n '& > div': {\n width: '100%'\n }\n },\n imagePreview: {\n minHeight: '56px',\n width: '100%',\n maxWidth: '400px',\n margin: '0 auto 10px',\n '& > img': {\n maxWidth: '100%'\n },\n '& > div': {\n background: 'lightgrey',\n minHeight: '56px',\n borderRadius: '4px',\n border: '1px solid'\n },\n [theme.breakpoints.down('sm')]: {\n marginTop: '10px'\n }\n },\n imagePreviewHelp: {\n display: 'block',\n fontWeight: '100',\n padding: '.5em'\n },\n imagePreviewPlaceholder: {\n borderRadius: '0 !important',\n minHeight: '400px !important',\n border: '0 !important',\n width: '252px',\n margin: '0 auto',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n photoHelp: {\n color: '#03a9f4',\n padding: '1em 0',\n display: 'block'\n },\n formControl: {\n maxWidth: 250,\n width: '100%',\n margin: '0 auto 20px',\n display: 'flex'\n },\n smallPrint: {\n fontSize: 13,\n textAlign: 'center',\n color: '#444',\n marginBottom: 10\n },\n textCenter: {\n textAlign: 'center',\n padding: '20px 10px 0'\n },\n badge: {\n background: '#12b0ff',\n color: 'white',\n borderRadius: '50%',\n padding: '3px',\n width: 20,\n height: 20,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n disabled: {\n color: '#ccc'\n }\n});\n\nconst BootstrapDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiDialogContent-root': {\n padding: theme.spacing(2)\n },\n '& .MuiDialogActions-root': {\n padding: theme.spacing(1)\n }\n}));\n\nconst BootstrapDialogTitle = props => {\n const { classes, children, onClose, ...other } = props;\n\n return (\n \n \n {children}\n \n \n );\n};\n\nclass Service extends Component {\n static formatDescription(description) {\n return description.split('*').filter(el => el !== '');\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n services: null,\n client: null,\n loading: true,\n error: false,\n servicesOpen: {},\n dates: this.nextWeek(),\n selectedJourneys: [],\n hasSelectedJourneys: false,\n passenger: {\n firstName: '',\n lastName: '',\n photo: null\n },\n imagePreviewUrl: null,\n showStopModal: false,\n currentService: null,\n currentServiceStops: null,\n currentDay: null,\n defaultStop: {},\n availability: {},\n previousBookings: []\n };\n }\n\n async componentDidMount() {\n const {\n match: {\n params: { customerTicketId }\n }\n } = this.props;\n\n const { dates } = this.state;\n\n if (!customerTicketId) {\n return;\n }\n\n try {\n const currentSession = await Auth.currentSession();\n\n // get customer ticket\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const customerTicketResponse = await axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/user-id/${\n currentSession.getAccessToken().payload.sub\n }/${customerTicketId}`,\n {\n headers\n }\n );\n\n const customerTicket = customerTicketResponse.data;\n\n let bookingsResponse;\n try {\n const fromDate = dates[0].format('YYYY-MM-DD');\n const toDate = dates[dates.length - 1].format('YYYY-MM-DD');\n bookingsResponse = await axios.get(\n `${\n process.env.REACT_APP_BOOKING_API_ENDPOINT\n }/bookings/by-ctid/${\n customerTicket.id\n }/by-date/${fromDate}/${toDate}`,\n {\n headers\n }\n );\n } catch (e) {\n bookingsResponse = [];\n if (e.response.status !== 404) {\n throw e;\n }\n }\n\n // get client\n const clientResponse = await axios.get(\n `${process.env.REACT_APP_API_ENDPOINT}/client/${\n customerTicket.client_id\n }`,\n {\n headers\n }\n );\n const client = clientResponse.data;\n\n const { services = [] } = client;\n\n services.sort((a, b) => {\n if (a.time < b.time) {\n return -1;\n }\n if (a.time > b.time) {\n return 1;\n }\n return 0;\n });\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/service-availability/${client.slug}/advance`,\n {\n headers\n }\n );\n\n this.setState({\n client,\n services,\n passenger: {\n firstName: customerTicket.passenger.first_name,\n lastName: customerTicket.passenger.last_name\n },\n availability: response.data,\n loading: false,\n previousBookings: bookingsResponse.data || []\n });\n } catch (e) {\n console.error(e);\n\n const errMessage =\n e.response && e.response.status === 403\n ? 'You do not have permission to use this ticket. Please log into the original account which purchased the ticket. Hint: Please use the email address where your booking confirmation was sent to.'\n : 'There was a problem retrieving your pass. Please try again later or contact our support team.';\n\n this.setState({\n loading: false,\n error: errMessage\n });\n }\n }\n\n getStop(service, day) {\n const { selectedJourneys } = this.state;\n const journey = selectedJourneys.find(\n item => item.service_id === service.id && item.date === day\n );\n\n if (!journey) {\n return '';\n }\n\n return journey.stop;\n }\n\n handleDateChange = e => {\n const { selectedJourneys, services, defaultStop } = this.state;\n const serviceId = e.target.name.split('#')[0];\n const day = e.target.name.split('#')[1];\n const service = services.find(s => s.id === serviceId);\n const serviceHasStops =\n service && service.stops && service.stops.length > 0;\n let showStopModal = false;\n\n if (e.target.checked) {\n const journey = {\n service_id: serviceId,\n service_name: service.name,\n date: day,\n time: service.time,\n price: service.price\n };\n\n if (serviceHasStops && serviceId in defaultStop) {\n journey.stop = defaultStop[serviceId];\n showStopModal = false;\n } else if (serviceHasStops) {\n showStopModal = true;\n }\n\n selectedJourneys.push(journey);\n\n this.setState({\n selectedJourneys,\n showStopModal,\n currentServiceStops: service.stops,\n currentService: service,\n currentDay: day\n });\n } else {\n this.setState({\n selectedJourneys: selectedJourneys.filter(\n item =>\n !(item.service_id === serviceId && item.date === day)\n )\n });\n }\n };\n\n nextWeek = () => {\n const now = moment();\n return [\n now,\n now.clone().add(1, 'day'),\n now.clone().add(2, 'day'),\n now.clone().add(3, 'day'),\n now.clone().add(4, 'day'),\n now.clone().add(5, 'day'),\n now.clone().add(6, 'day')\n ];\n };\n\n isChecked = (serviceId, day) => {\n const { selectedJourneys } = this.state;\n return selectedJourneys.some(\n s => s.service_id === serviceId && s.date === day\n );\n };\n\n handleEdit = () => {\n this.setState({\n hasSelectedJourneys: false\n });\n };\n\n checkOpen(serviceId) {\n const { servicesOpen } = this.state;\n return servicesOpen[serviceId];\n }\n\n calcTotal() {\n const { selectedJourneys } = this.state;\n const total = selectedJourneys.reduce(\n (acc, b) => acc + Number(b.price),\n 0\n );\n return total.toFixed(2);\n }\n\n displayTotalJourneys() {\n const { selectedJourneys } = this.state;\n\n if (selectedJourneys.length === 1) {\n return '1 journey';\n }\n return `${selectedJourneys.length} journeys`;\n }\n\n toggleService(serviceId) {\n const { servicesOpen } = this.state;\n servicesOpen[serviceId] = !servicesOpen[serviceId];\n this.setState({\n servicesOpen\n });\n }\n\n handleClose() {\n this.setState({\n showStopModal: false\n });\n }\n\n handleStopSelection(service, day, stop) {\n const { selectedJourneys, defaultStop } = this.state;\n\n const updatedSelectedJourneys = selectedJourneys.map(journey => {\n if (journey.service_id === service.id && journey.date === day) {\n return {\n ...journey,\n stop\n };\n }\n\n return journey;\n });\n\n defaultStop[service.id] = stop;\n\n this.setState({\n selectedJourneys: updatedSelectedJourneys,\n showStopModal: false,\n defaultStop\n });\n }\n\n isDayAvailable(serviceId, dayKey) {\n const { availability } = this.state;\n if (serviceId in availability && dayKey in availability[serviceId]) {\n return availability[serviceId][dayKey] > 0;\n }\n\n return false;\n }\n\n isAlreadyBooked(serviceId, dayKey) {\n const { previousBookings } = this.state;\n\n if (previousBookings && previousBookings.length) {\n const alreadyBooked = previousBookings.find(booking => {\n return (\n serviceId === booking.s_id &&\n dayKey === booking.date_svc.split('#')[1]\n );\n });\n return alreadyBooked !== undefined;\n }\n\n return false;\n }\n\n renderNumServiceSelections(serviceId) {\n const { selectedJourneys } = this.state;\n const { classes } = this.props;\n\n const serviceSelections = selectedJourneys.filter(\n journey => serviceId === journey.service_id\n );\n\n if (!serviceSelections.length) {\n return <>;\n }\n\n return (\n {serviceSelections.length}\n );\n }\n\n renderDayItem(date, service) {\n const { selectedJourneys } = this.state;\n const { classes } = this.props;\n const yyyymmddString = date.format('YYYY-MM-DD');\n\n const dayIsChecked = this.isChecked(service.id, yyyymmddString);\n let dayBarClassName = classes.dayBar;\n\n if (dayIsChecked) {\n dayBarClassName += ` ${classes.dayBarActive}`;\n }\n\n const dayAlreadyBooked = this.isAlreadyBooked(\n service.id,\n date.format('YYYY-MM-DD')\n );\n\n const dayIsAvailable = this.isDayAvailable(\n service.id,\n date.format('YYYYMMDD')\n );\n\n return (\n
    \n
    \n \n {' '}\n \n {date.format('ddd Do MMM')}\n
    \n {this.getStop(service, yyyymmddString)}\n
    \n
    \n \n
    \n {this.getStop(service, yyyymmddString) && (\n
    \n {\n this.setState({\n selectedJourneys,\n showStopModal: true,\n currentServiceStops: service.stops,\n currentService: service,\n currentDay: yyyymmddString\n });\n }}\n >\n Edit\n \n
    \n )}\n \n );\n }\n\n render() {\n const {\n services,\n client,\n loading,\n error,\n selectedJourneys,\n hasSelectedJourneys,\n imagePreviewUrl,\n passenger\n } = this.state;\n const { classes, match } = this.props;\n const {\n dates,\n showStopModal,\n currentServiceStops,\n currentService,\n currentDay\n } = this.state;\n\n const {\n params: { customerTicketId }\n } = match;\n\n const buyAgain = true;\n\n if (error) {\n return (\n
    \n \n There was a problem retrieving the bus service data,\n please try again later.\n \n
    \n );\n }\n\n if (loading) {\n return (\n \n );\n }\n\n return (\n <>\n \n {\n this.handleClose();\n }}\n classes={classes}\n >\n Select bus stop\n \n \n <>\n {currentServiceStops &&\n currentServiceStops.map(stop => (\n
    \n {\n this.handleStopSelection(\n currentService,\n currentDay,\n stop\n );\n }}\n >\n {stop}\n \n
    \n ))}\n \n
    \n \n {hasSelectedJourneys && (\n
    \n \n
    \n )}\n {!hasSelectedJourneys && (\n
    \n \n
    \n \n Services operated by {client.name}.\n \n
    \n {services &&\n services.length > 0 &&\n services.map(service => (\n
    \n {\n this.toggleService(service.id);\n }}\n >\n \n \n {this.checkOpen(service.id)\n ? 'keyboard_arrow_down'\n : 'keyboard_arrow_right'}\n \n
    \n \n {service.time}\n {' '}\n {service.name}\n
    \n
    \n
    \n {this.renderNumServiceSelections(\n service.id\n )}\n
    \n
    \n \n \n \n {Service.formatDescription(\n service.description\n ).map(item => (\n
  • \n \n {item}\n \n
  • \n ))}\n \n

    \n Trip price:{' '}\n {getCurrencySymbol(\n client.features.currency\n )}\n {service.price}\n

    \n \n
    \n

    \n {service.route_url && (\n \n \n \n location_on\n {' '}\n Route\n \n \n )}\n\n {service.timetable_url && (\n \n \n \n access_time\n {' '}\n timetable\n \n \n )}\n\n {service.terms_url && (\n \n \n \n list\n \n Terms\n \n \n )}\n

    \n
    \n {dates.map(date =>\n this.renderDayItem(date, service)\n )}\n \n \n ))}\n
    \n
    \n Total:{' '}\n {getCurrencySymbol(client.features.currency)}\n {this.calcTotal()} (\n {this.displayTotalJourneys()})\n
    \n {\n this.setState({\n hasSelectedJourneys: true\n });\n window.scrollTo(0, 0);\n }}\n >\n Buy\n \n
    \n \n )}\n \n );\n }\n}\n\nService.propTypes = {\n match: PropTypes.shape({\n params: PropTypes.shape({\n customerTicketId: PropTypes.string\n })\n }).isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(Service);\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React from 'react';\nimport moment from 'moment';\nimport { withStyles } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport globalStyles from '../styles';\n\nconst styles = () => ({\n table: {\n maxWidth: '500px',\n margin: '0 auto'\n },\n subheading: {\n margin: '20px 0 10px'\n },\n tripLine: {\n border: '1px solid #ccc',\n borderRadius: 5,\n marginBottom: 5,\n textAlign: 'left',\n padding: 5,\n display: 'flex'\n },\n tripLineActive: {\n border: '1px solid #5dcaff',\n cursor: 'pointer'\n },\n tripLineHead: {\n display: 'flex',\n borderRight: '1px solid #ccc',\n paddingRight: 5,\n marginRight: 5,\n textAlign: 'center',\n width: 55,\n justifyContent: 'center'\n },\n tripDate: {\n fontWeight: 'bold'\n },\n tripDateDay: {\n fontSize: 20,\n display: 'block',\n color: '#5dcaff'\n },\n tripDateMonth: {\n fontSize: 8,\n display: 'block'\n },\n tripService: {\n display: 'flex',\n alignItems: 'start',\n justifyContent: 'center',\n flexDirection: 'column',\n flexGrow: 1\n },\n tripStop: {\n fontSize: '0.8em',\n color: '#666',\n display: 'flex',\n alignItems: 'center'\n },\n tripChange: {\n display: 'flex',\n alignItems: 'end',\n justifyContent: 'center',\n flexDirection: 'column',\n color: '#03a9f4',\n fontSize: '0.8em',\n borderLeft: '1px solid #ccc',\n paddingLeft: 5,\n marginLeft: 5\n },\n icon: {\n fontSize: '15px'\n },\n link: globalStyles.link,\n changeIcon: {\n fontSize: 20,\n color: '#5dcaff'\n }\n});\n\nconst extractTime = dateService => {\n return dateService.substring(15, 19);\n};\n\nconst extractDate = dateService => {\n return dateService.substring(2, 12);\n};\n\nconst BookingTable = ({ bookings, classes }) => {\n if (!bookings || !bookings.length) {\n return (\n <>\n

    \n No trips booked\n

    \n

    We{\"'\"}ll display all your bookings here for your records

    \n \n );\n }\n\n const history = useHistory();\n\n const today = moment().format('YYYY-MM-DD');\n\n const previousBookings = bookings.filter(booking => {\n return extractDate(booking.date_svc) < today;\n });\n\n const currentBookings = bookings.filter(booking => {\n return extractDate(booking.date_svc) >= today;\n });\n\n if (currentBookings) {\n currentBookings.reverse();\n }\n\n return (\n <>\n {currentBookings && currentBookings.length > 0 && (\n <>\n

    Upcoming trips

    \n {currentBookings.map(trip => (\n {\n if (!trip.is_swappable) {\n return;\n }\n history.push(\n `/booking/${encodeURIComponent(\n trip.pk\n )}/${encodeURIComponent(trip.sk)}`\n );\n }}\n >\n
    \n
    \n \n {moment(extractDate(trip.date_svc))\n .format('ddd')\n .toUpperCase()}\n \n \n {moment(extractDate(trip.date_svc))\n .format('Do MMM')\n .toUpperCase()}\n \n
    \n
    \n
    \n {extractTime(trip.date_svc)} | {trip.s_name}\n
    \n \n {'stop' in trip && <>{trip.stop} }\n \n
    \n
    \n {trip.is_swappable && (\n
    EDIT
    \n )}\n \n ))}\n \n )}\n {previousBookings && previousBookings.length > 0 && (\n <>\n

    Previous trips

    \n {previousBookings.map(trip => (\n
    \n
    \n
    \n \n {moment(extractDate(trip.date_svc))\n .format('ddd')\n .toUpperCase()}\n \n \n {moment(extractDate(trip.date_svc))\n .format('Do MMM')\n .toUpperCase()}\n \n
    \n
    \n
    \n {extractTime(trip.date_svc)} | {trip.s_name}\n {'stop' in trip && (\n
    \n \n {trip.stop}\n \n
    \n )}\n
    \n
    \n ))}\n \n )}\n \n );\n};\n\nexport default withStyles(styles)(BookingTable);\n","import React, { Component } from 'react';\nimport { Auth } from 'aws-amplify';\nimport axios from 'axios';\nimport { Typography, withStyles, CircularProgress } from '@material-ui/core';\nimport { red } from '@material-ui/core/colors';\nimport ContentHeader from '../components/ContentHeader';\nimport BookingTable from '../components/BookingTable';\n\nconst styles = theme => ({\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n spinner: {\n marginLeft: 'calc(50% - 22px)',\n marginTop: '60px',\n marginBottom: '60px'\n },\n error: {\n margin: '20px 0',\n fontSize: '18px',\n color: red[500],\n textAlign: 'center',\n paddingBottom: '20px'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n }\n});\n\nclass Bookings extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n loading: true,\n error: false,\n bookings: []\n };\n }\n\n async componentDidMount() {\n try {\n const currentSession = await Auth.currentSession();\n const {\n match: {\n params: { customerTicketId }\n }\n } = this.props;\n\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n let bookingsResponse;\n try {\n bookingsResponse = await axios.get(\n `${\n process.env.REACT_APP_BOOKING_API_ENDPOINT\n }/bookings/by-ctid/${customerTicketId}`,\n {\n headers\n }\n );\n } catch (e) {\n bookingsResponse = [];\n if (e.response.status !== 404) {\n throw e;\n }\n }\n\n this.setState({\n loading: false,\n error: false,\n bookings: bookingsResponse.data || bookingsResponse\n });\n } catch (e) {\n this.setState({\n loading: false,\n error: true\n });\n }\n }\n\n render() {\n const { error, loading, bookings } = this.state;\n const { classes } = this.props;\n\n if (loading) {\n return (\n \n );\n }\n\n return (\n
    \n \n {error && (\n \n There was a problem retrieving your booking details\n \n )}\n {bookings && !error && (\n
    \n \n
    \n )}\n
    \n );\n }\n}\n\nexport default withStyles(styles)(Bookings);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { withStyles, Typography, Button } from '@material-ui/core';\nimport { Auth } from 'aws-amplify';\nimport axios from 'axios';\nimport ContentHeader from './ContentHeader';\nimport LoaderButton from './LoaderButton';\nimport ButtonLink from './ButtonLink';\n\nconst styles = {\n root: {\n textAlign: 'left',\n background: '#fff',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)'\n },\n description: {\n padding: '10px',\n marginBottom: '20px',\n fontWeight: '100'\n },\n button: {\n height: '40px',\n marginTop: '10px',\n marginBottom: '10px'\n },\n passengerInfo: {\n padding: '10px',\n marginBottom: '20px',\n textAlign: 'center'\n },\n imagePreview: {\n minHeight: '56px',\n margin: '20px auto 0',\n width: '100%',\n maxWidth: '400px',\n display: 'flex',\n justifyContent: 'center',\n '& > img': {\n maxWidth: '100%'\n },\n '@media only screen and (max-device-width: 400px)': {\n margin: '0 auto 0'\n }\n },\n tripLine: {\n border: '1px solid #ccc',\n borderRadius: 5,\n marginBottom: 5,\n textAlign: 'left',\n padding: 5,\n display: 'flex'\n },\n tripLineHead: {\n display: 'flex',\n borderRight: '1px solid #ccc',\n paddingRight: 5,\n marginRight: 5,\n textAlign: 'center',\n width: 55,\n justifyContent: 'center'\n },\n tripDate: {\n fontWeight: 'bold'\n },\n tripDateDay: {\n fontSize: 20,\n display: 'block',\n color: '#5dcaff'\n },\n tripDateMonth: {\n fontSize: 8,\n display: 'block'\n },\n tripService: {\n display: 'flex',\n alignItems: 'start',\n justifyContent: 'center',\n flexDirection: 'column'\n },\n tripStop: {\n fontSize: '0.8em',\n color: '#666',\n display: 'flex',\n alignItems: 'center'\n },\n icon: {\n fontSize: '15px'\n },\n buyBtn: {\n background: 'green !important',\n color: 'white !important',\n border: 'none',\n marginLeft: 8,\n '&:hover': {\n background: 'green',\n color: 'white',\n border: 'none'\n }\n }\n};\n\nclass ConfirmBookingChange extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n voucher: null,\n isLoading: false,\n error: null,\n hasSwapped: false\n };\n }\n\n netPrice = price => {\n const { voucher } = this.state;\n if (voucher) {\n return price - voucher.value;\n }\n return price;\n };\n\n async handleSubmit() {\n try {\n this.setState({\n isLoading: true,\n error: null\n });\n\n const currentSession = await Auth.currentSession();\n\n // get customer ticket\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const { booking, oldBooking } = this.props;\n\n const bookingItem = booking[0];\n\n await axios.post(\n `${process.env.REACT_APP_BOOKING_API_ENDPOINT}/booking/swap`,\n {\n old_booking: {\n pk: oldBooking.pk,\n sk: oldBooking.sk\n },\n new_booking: {\n service_id: bookingItem.service_id,\n service_name: bookingItem.service_name,\n date: bookingItem.date,\n time: bookingItem.time,\n price: bookingItem.price,\n stop: bookingItem.stop\n }\n },\n {\n headers\n }\n );\n\n this.setState({\n isLoading: false,\n hasSwapped: true\n });\n } catch (e) {\n console.error(e);\n\n let errMessage =\n e.response && e.response.status === 403\n ? 'You do not have permission to use this ticket. Please log into the original account which purchased the ticket. Hint: Please use the email address where your booking confirmation was sent to.'\n : 'There was a problem retrieving your pass. Please try again later or contact our support team.';\n\n if (e.response && e.response.data && e.response.data.error) {\n errMessage = e.response.data.error;\n }\n\n this.setState({\n isLoading: false,\n error: errMessage\n });\n }\n }\n\n renderTrip(booking) {\n const { classes } = this.props;\n const item = booking[0];\n\n return (\n <>\n
    \n
    \n
    \n \n {moment(item.date)\n .format('ddd')\n .toUpperCase()}\n \n \n {moment(item.date)\n .format('Do MMM')\n .toUpperCase()}\n \n
    \n
    \n
    \n {item.time} | {item.service_name}\n {'stop' in item && (\n
    \n \n {item.stop}\n \n
    \n )}\n
    \n
    \n \n );\n }\n\n render() {\n const { handleEdit, booking, oldBooking, classes } = this.props;\n const { isLoading, hasSwapped, error } = this.state;\n const ticketId = oldBooking.ctid;\n\n if (hasSwapped) {\n return (\n
    \n
    \n
    \n \n
    \n \n Booking successfully updated.\n \n \n An email will confirm your updated booking\n and you can view all bookings from the My\n Tickets area.\n \n \n View bookings\n \n
    \n
    \n
    \n
    \n );\n }\n\n return (\n
    \n
    \n
    \n \n
    \n \n Changing journey to the following:\n \n {this.renderTrip(booking)}\n {error && (\n \n {error}\n \n )}\n \n Go back\n \n {\n this.handleSubmit();\n }}\n />\n
    \n
    \n
    \n
    \n );\n }\n}\n\nConfirmBookingChange.propTypes = {\n handleEdit: PropTypes.func.isRequired,\n passenger: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n photo: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n stop: PropTypes.string\n }).isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(ConfirmBookingChange);\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles, styled } from '@material-ui/core/styles';\nimport red from '@material-ui/core/colors/red';\nimport { Icon, Button } from '@material-ui/core';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport Box from '@material-ui/core/Box';\nimport { Auth } from 'aws-amplify';\n\nimport moment from 'moment';\nimport ContentHeader from '../components/ContentHeader';\nimport ConfirmBookingChange from '../components/ConfirmBookingChange';\nimport { getCurrencySymbol } from '../helpers/ticket';\nimport globalStyles from '../styles';\n\nconst styles = theme => ({\n root: {\n background: '#fff',\n border: '0',\n maxWidth: '800px',\n margin: '40px auto 40px',\n paddingBottom: '1px',\n position: 'relative',\n boxShadow: '0px 2px 5px 0px rgba(0,0,0,0.21)',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n rootMulti: {\n maxWidth: '800px',\n margin: '40px auto 40px',\n paddingBottom: '1px',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n margin: '20px 15px'\n }\n },\n nameContainer: {\n padding: '10px 10px',\n background: '#70d0ff'\n },\n name: {\n color: '#fff'\n },\n description: {\n marginBottom: 0,\n paddingRight: 5,\n paddingLeft: 10\n },\n descriptionList: {\n paddingLeft: 14\n },\n serviceHeading: {\n background: '#70d0ff',\n margin: '10px 20px 0 20px',\n padding: 5,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: 'pointer',\n fontSize: '1.2em',\n borderBottom: '1px solid #3e94be',\n textShadow: '1px 1px #3d94bead',\n color: 'white'\n },\n serviceHeadingMain: {\n display: 'flex',\n alignItems: 'center'\n },\n serviceBody: {\n display: 'none'\n },\n serviceBodyOpen: {\n margin: '0 20px 20px 20px',\n padding: 5,\n border: '1px solid #eee'\n },\n serviceTickets: {\n margin: '0 20px 0px',\n padding: '0 0 20px'\n },\n error: {\n margin: '40px 20px',\n color: red[500]\n },\n spinner: {\n margin: '40px auto',\n display: 'block'\n },\n operatorInfo: {\n padding: '0 10px'\n },\n icon: {\n fontSize: '15px'\n },\n button: {\n paddingLeft: '2px',\n paddingRight: '4px',\n background: 'white'\n },\n editStopButton: {\n color: '#008004',\n border: 0,\n fontWeight: 'normal'\n },\n link: {\n ...globalStyles.link,\n fontWeight: 'bold'\n },\n dayLabel: {\n display: 'flex',\n alignItems: 'center',\n textTransform: 'uppercase',\n flexGrow: 1,\n cursor: 'pointer',\n width: '100%',\n height: 50\n },\n dayBar: {\n borderTop: '1px solid #eee',\n borderLeft: '0',\n borderRight: '0',\n borderRadius: 0,\n marginTop: 0,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: 50,\n paddingLeft: 5,\n paddingRight: 5,\n cursor: 'pointer',\n color: '#555'\n },\n dayLabelParent: {\n display: 'flex',\n alignItems: 'start',\n justifyContent: 'center',\n flexDirection: 'column',\n flexGrow: 1\n },\n dayBarActive: {\n background: '#f1fff4',\n borderLeft: '2px solid green',\n color: 'green',\n '& label': {\n fontWeight: 'bold'\n }\n },\n dayStop: {\n fontSize: '0.8em',\n color: 'green',\n margin: 0,\n fontWeight: 'normal'\n },\n totalParent: {\n padding: 20,\n fontWeight: 'bold',\n position: 'sticky',\n background: 'white',\n bottom: 0,\n marginTop: 20,\n borderTop: '1px solid #eee',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center'\n },\n checkbox: {\n marginRight: 7\n },\n time: {\n fontWeight: 'bold',\n marginRight: 5\n },\n buyBtn: {\n background: 'green',\n color: 'white',\n border: 'none',\n '&:hover': {\n background: 'green',\n color: 'white',\n border: 'none'\n }\n },\n buyBtnDisabled: {\n background: 'green',\n color: 'white !important',\n border: 'none !important',\n opacity: 0.3\n },\n form: {\n padding: '0 10px 10px'\n },\n input: {\n width: '100%',\n maxWidth: '250px',\n display: 'block',\n margin: '20px auto',\n '& > div': {\n display: 'block'\n },\n '& input': {\n width: 220\n }\n },\n uploadButton: {\n height: '56px',\n margin: '0 auto',\n padding: '0.6em'\n },\n confirmButton: {\n height: '56px',\n margin: '0 0 0 10px',\n padding: '0.6em'\n },\n upload: {\n display: 'none'\n },\n imageUpload: {\n margin: '0 0 40px 0',\n textAlign: 'center'\n },\n datePicker: {\n margin: '0 auto 20px',\n maxWidth: '250px',\n '& > div': {\n width: '100%'\n }\n },\n imagePreview: {\n minHeight: '56px',\n width: '100%',\n maxWidth: '400px',\n margin: '0 auto 10px',\n '& > img': {\n maxWidth: '100%'\n },\n '& > div': {\n background: 'lightgrey',\n minHeight: '56px',\n borderRadius: '4px',\n border: '1px solid'\n },\n [theme.breakpoints.down('sm')]: {\n marginTop: '10px'\n }\n },\n imagePreviewHelp: {\n display: 'block',\n fontWeight: '100',\n padding: '.5em'\n },\n imagePreviewPlaceholder: {\n borderRadius: '0 !important',\n minHeight: '400px !important',\n border: '0 !important',\n width: '252px',\n margin: '0 auto',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n photoHelp: {\n color: '#03a9f4',\n padding: '1em 0',\n display: 'block'\n },\n formControl: {\n maxWidth: 250,\n width: '100%',\n margin: '0 auto 20px',\n display: 'flex'\n },\n smallPrint: {\n fontSize: 13,\n textAlign: 'center',\n color: '#444',\n marginBottom: 10\n },\n textCenter: {\n textAlign: 'center',\n padding: '20px 10px 0'\n },\n badge: {\n background: '#12b0ff',\n color: 'white',\n borderRadius: '50%',\n padding: '3px',\n width: 20,\n height: 20,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n disabled: {\n color: '#ccc'\n }\n});\n\nconst BootstrapDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiDialogContent-root': {\n padding: theme.spacing(2)\n },\n '& .MuiDialogActions-root': {\n padding: theme.spacing(1)\n }\n}));\n\nconst BootstrapDialogTitle = props => {\n const { classes, children, onClose, ...other } = props;\n\n return (\n \n \n {children}\n \n \n );\n};\n\nclass ChangeBooking extends Component {\n static formatDescription(description) {\n return description.split('*').filter(el => el !== '');\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n booking: null,\n services: null,\n client: null,\n loading: true,\n error: false,\n servicesOpen: {},\n dates: this.nextWeek(),\n selectedJourneys: [],\n hasSelectedJourneys: false,\n passenger: {\n firstName: '',\n lastName: '',\n photo: null\n },\n imagePreviewUrl: null,\n showStopModal: false,\n currentService: null,\n currentServiceStops: null,\n currentDay: null,\n defaultStop: {},\n availability: {},\n previousBookings: []\n };\n }\n\n async componentDidMount() {\n const {\n match: {\n params: { pk, sk }\n }\n } = this.props;\n\n const { dates } = this.state;\n\n const decodedPk = decodeURIComponent(pk);\n const decodedSk = decodeURIComponent(sk);\n\n const customerTicketId = decodeURIComponent(sk).split('#')[5];\n\n if (!customerTicketId) {\n return;\n }\n\n try {\n const currentSession = await Auth.currentSession();\n\n // get customer ticket\n const headers = {\n Authorization: currentSession.getIdToken().getJwtToken()\n };\n\n const customerTicketResponse = await axios.get(\n `${\n process.env.REACT_APP_API_ENDPOINT\n }/customer-ticket/user-id/${\n currentSession.getAccessToken().payload.sub\n }/${customerTicketId}`,\n {\n headers\n }\n );\n\n const customerTicket = customerTicketResponse.data;\n\n let bookingsResponse;\n let booking;\n\n try {\n const fromDate = dates[0].format('YYYY-MM-DD');\n const toDate = dates[dates.length - 1].format('YYYY-MM-DD');\n bookingsResponse = await axios.get(\n `${\n process.env.REACT_APP_BOOKING_API_ENDPOINT\n }/bookings/by-ctid/${\n customerTicket.id\n }/by-date/${fromDate}/${toDate}`,\n {\n headers\n }\n );\n\n bookingsResponse.data.forEach(item => {\n if (item.pk === decodedPk && item.sk === decodedSk) {\n booking = item;\n }\n });\n\n if (!booking) {\n const errMessage = 'Booking not found.';\n this.setState({\n loading: false,\n error: errMessage\n });\n return;\n }\n } catch (e) {\n bookingsResponse = [];\n if (e.response.status !== 404) {\n throw e;\n }\n }\n\n // get client\n const clientResponse = await axios.get(\n `${process.env.REACT_APP_API_ENDPOINT}/client/${\n customerTicket.client_id\n }`,\n {\n headers\n }\n );\n const client = clientResponse.data;\n\n const { services = [] } = client;\n\n services.sort((a, b) => {\n if (a.time < b.time) {\n return -1;\n }\n if (a.time > b.time) {\n return 1;\n }\n return 0;\n });\n\n const samePricedServices = services.filter(service => {\n return Number(service.price) === Number(booking.trip_price);\n });\n\n const response = await axios.get(\n `${\n process.env.REACT_APP_PAYMENT_API_ENDPOINT\n }/service-availability/${client.slug}/advance`,\n {\n headers\n }\n );\n\n this.setState({\n booking,\n client,\n services: samePricedServices,\n passenger: {\n firstName: customerTicket.passenger.first_name,\n lastName: customerTicket.passenger.last_name\n },\n availability: response.data,\n loading: false,\n previousBookings: bookingsResponse.data || []\n });\n } catch (e) {\n console.error(e);\n\n const errMessage =\n e.response && e.response.status === 403\n ? 'You do not have permission to use this ticket. Please log into the original account which purchased the ticket. Hint: Please use the email address where your booking confirmation was sent to.'\n : 'There was a problem retrieving your pass. Please try again later or contact our support team.';\n\n this.setState({\n loading: false,\n error: errMessage\n });\n }\n }\n\n getStop(service, day) {\n const { selectedJourneys } = this.state;\n const journey = selectedJourneys.find(\n item => item.service_id === service.id && item.date === day\n );\n\n if (!journey) {\n return '';\n }\n\n return journey.stop;\n }\n\n extractTime = dateService => {\n return dateService.substring(15, 19);\n };\n\n extractDate = dateService => {\n return dateService.substring(2, 12);\n };\n\n handleDateChange = e => {\n const { selectedJourneys, services, defaultStop } = this.state;\n const serviceId = e.target.name.split('#')[0];\n const day = e.target.name.split('#')[1];\n const service = services.find(s => s.id === serviceId);\n const serviceHasStops =\n service && service.stops && service.stops.length > 0;\n let showStopModal = false;\n let hasSelectedJourneys = true;\n\n if (e.target.checked) {\n const journey = {\n service_id: serviceId,\n service_name: service.name,\n date: day,\n time: service.time,\n price: service.price\n };\n\n if (serviceHasStops && serviceId in defaultStop) {\n journey.stop = defaultStop[serviceId];\n showStopModal = false;\n hasSelectedJourneys = false;\n } else if (serviceHasStops) {\n showStopModal = true;\n hasSelectedJourneys = false;\n }\n\n selectedJourneys.push(journey);\n\n this.setState({\n hasSelectedJourneys,\n selectedJourneys,\n showStopModal,\n currentServiceStops: service.stops,\n currentService: service,\n currentDay: day\n });\n } else {\n this.setState({\n selectedJourneys: selectedJourneys.filter(\n item =>\n !(item.service_id === serviceId && item.date === day)\n )\n });\n }\n };\n\n nextWeek = () => {\n const now = moment();\n return [\n now,\n now.clone().add(1, 'day'),\n now.clone().add(2, 'day'),\n now.clone().add(3, 'day'),\n now.clone().add(4, 'day'),\n now.clone().add(5, 'day'),\n now.clone().add(6, 'day')\n ];\n };\n\n isChecked = (serviceId, day) => {\n const { selectedJourneys } = this.state;\n return selectedJourneys.some(\n s => s.service_id === serviceId && s.date === day\n );\n };\n\n handleEdit = () => {\n this.setState({\n hasSelectedJourneys: false,\n selectedJourneys: [],\n currentService: null,\n currentServiceStops: null,\n currentDay: null,\n defaultStop: {}\n });\n };\n\n checkOpen(serviceId) {\n const { servicesOpen } = this.state;\n return servicesOpen[serviceId];\n }\n\n calcTotal() {\n const { selectedJourneys } = this.state;\n const total = selectedJourneys.reduce(\n (acc, b) => acc + Number(b.price),\n 0\n );\n return total.toFixed(2);\n }\n\n displayTotalJourneys() {\n const { selectedJourneys } = this.state;\n\n if (selectedJourneys.length === 1) {\n return '1 journey';\n }\n return `${selectedJourneys.length} journeys`;\n }\n\n toggleService(serviceId) {\n const { servicesOpen } = this.state;\n servicesOpen[serviceId] = !servicesOpen[serviceId];\n this.setState({\n servicesOpen\n });\n }\n\n handleClose() {\n this.setState({\n showStopModal: false\n });\n }\n\n handleStopSelection(service, day, stop) {\n const { selectedJourneys, defaultStop } = this.state;\n\n const updatedSelectedJourneys = selectedJourneys.map(journey => {\n if (journey.service_id === service.id && journey.date === day) {\n return {\n ...journey,\n stop\n };\n }\n\n return journey;\n });\n\n defaultStop[service.id] = stop;\n\n this.setState({\n hasSelectedJourneys: true,\n selectedJourneys: updatedSelectedJourneys,\n showStopModal: false,\n defaultStop\n });\n }\n\n isDayAvailable(serviceId, dayKey) {\n const { availability } = this.state;\n if (serviceId in availability && dayKey in availability[serviceId]) {\n return availability[serviceId][dayKey] > 0;\n }\n\n return false;\n }\n\n isAlreadyBooked(serviceId, dayKey) {\n const { previousBookings } = this.state;\n\n if (previousBookings && previousBookings.length) {\n const alreadyBooked = previousBookings.find(booking => {\n return (\n serviceId === booking.s_id &&\n dayKey === booking.date_svc.split('#')[1]\n );\n });\n return alreadyBooked !== undefined;\n }\n\n return false;\n }\n\n renderDayItem(date, service) {\n const { classes } = this.props;\n const yyyymmddString = date.format('YYYY-MM-DD');\n\n const dayIsChecked = this.isChecked(service.id, yyyymmddString);\n let dayBarClassName = classes.dayBar;\n\n if (dayIsChecked) {\n dayBarClassName += ` ${classes.dayBarActive}`;\n }\n\n const dayAlreadyBooked = this.isAlreadyBooked(\n service.id,\n date.format('YYYY-MM-DD')\n );\n\n const dayIsAvailable = this.isDayAvailable(\n service.id,\n date.format('YYYYMMDD')\n );\n\n return (\n \n
    \n \n {' '}\n \n {date.format('ddd Do MMM')}\n
    \n {this.getStop(service, yyyymmddString)}\n
    \n
    \n \n \n \n );\n }\n\n render() {\n const {\n services,\n client,\n loading,\n error,\n selectedJourneys,\n hasSelectedJourneys,\n imagePreviewUrl,\n passenger,\n booking\n } = this.state;\n const { classes, match } = this.props;\n const {\n dates,\n showStopModal,\n currentServiceStops,\n currentService,\n currentDay\n } = this.state;\n\n const {\n params: { customerTicketId }\n } = match;\n\n const buyAgain = true;\n\n if (error) {\n return (\n
    \n \n {error}.\n \n
    \n );\n }\n\n if (loading) {\n return (\n \n );\n }\n\n return (\n <>\n \n {\n this.handleClose();\n }}\n classes={classes}\n >\n Select bus stop\n \n \n <>\n {currentServiceStops &&\n currentServiceStops.map(stop => (\n \n {\n this.handleStopSelection(\n currentService,\n currentDay,\n stop\n );\n }}\n >\n {stop}\n \n \n ))}\n \n \n \n {hasSelectedJourneys && (\n
    \n \n
    \n )}\n {!hasSelectedJourneys && (\n
    \n \n
    \n \n Service: {booking.s_name}\n
    \n Journey date:{' '}\n {booking && booking.date_svc && (\n \n {moment(\n this.extractDate(booking.date_svc)\n ).format('ddd Do MMM')}{' '}\n \n )}\n
    \n Journey time:{' '}\n \n {this.extractTime(booking.date_svc)}\n \n \n
    \n {services.length === 0 && (\n
    \n \n No available services priced at the same\n trip value of{' '}\n {getCurrencySymbol(booking.currency)}\n {booking.trip_price}. Please\n {client.name} directly at{' '}\n {client.support.email} to discuss your\n booking amendment further.\n \n
    \n )}\n {services && services.length > 0 && (\n <>\n
    \n \n Change your booking to another journey\n of equal value below. Only journeys that\n have availability can be selected.\n \n \n Need to cancel a journey? Please contact{' '}\n {client.name} directly at{' '}\n {client.support.email} or call{' '}\n {client.support.phone}.\n \n
    \n {services.map(service => (\n
    \n {\n this.toggleService(service.id);\n }}\n >\n \n \n {this.checkOpen(service.id)\n ? 'keyboard_arrow_down'\n : 'keyboard_arrow_right'}\n \n
    \n \n {service.time}\n {' '}\n {service.name}\n
    \n
    \n
    \n \n \n \n {ChangeBooking.formatDescription(\n service.description\n ).map(item => (\n
  • \n \n {item}\n \n
  • \n ))}\n \n

    \n Trip price:{' '}\n {getCurrencySymbol(\n booking.currency\n )}\n {service.price}\n

    \n \n \n

    \n {service.route_url && (\n \n \n \n location_on\n {' '}\n Route\n \n \n )}\n\n {service.timetable_url && (\n \n \n \n access_time\n {' '}\n timetable\n \n \n )}\n\n {service.terms_url && (\n \n \n \n list\n \n Terms\n \n \n )}\n

    \n \n {dates.map(date =>\n this.renderDayItem(\n date,\n service\n )\n )}\n \n \n ))}\n \n )}\n
    \n
    \n )}\n \n );\n }\n}\n\nChangeBooking.propTypes = {\n match: PropTypes.shape({\n params: PropTypes.shape({\n pk: PropTypes.string,\n sk: PropTypes.string\n })\n }).isRequired,\n classes: PropTypes.shape().isRequired\n};\n\nexport default withStyles(styles)(ChangeBooking);\n","import React, { Component, Fragment } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { Auth } from 'aws-amplify';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport withTracker from './hocs/withTracker';\nimport Service from './views/Service';\nimport Login from './views/Login';\nimport Register from './views/Register';\nimport BuyAgain from './views/BuyAgain';\nimport CreateTicket from './views/CreateTicket';\nimport OrderConfirmed from './views/OrderConfirmed';\nimport AdhocOrderConfirmed from './views/AdhocOrderConfirmed';\nimport ViewTickets from './views/ViewTickets';\nimport Account from './views/Account';\nimport Header from './components/Header';\nimport Footer from './components/Footer';\nimport AuthenticatedRoute from './components/AuthenticatedRoute';\nimport UnauthenticatedRoute from './components/UnauthenticatedRoute';\nimport TicketDetail from './views/TicketDetail';\nimport TicketNotifications from './views/TicketNotifications';\nimport ForgotPassword from './views/ForgotPassword';\nimport CreateMandate from './views/CreateMandate';\nimport MandateConfirmed from './views/MandateConfirmed';\nimport TicketSent from './views/TicketSent';\nimport TicketSmsSent from './views/TicketSmsSent';\nimport RenewTicket from './views/RenewTicket';\nimport RenewalConfirmed from './views/RenewalConfirmed';\nimport Help from './views/Help';\nimport WaitingList from './views/WaitingList';\nimport Trips from './views/Trips';\nimport TopUp from './views/TopUp';\nimport TopUpConfirmed from './views/TopUpConfirmed';\nimport MultiServiceSelector from './views/MultiServiceSelector';\nimport BookingConfirmed from './views/BookingConfirmed';\nimport MultiServiceSelectorExistingTicket from './views/MultiServiceSelectorExistingTicket';\nimport Bookings from './views/Bookings';\nimport ChangeBooking from './views/ChangeBooking';\nimport './Skin.css';\n\nclass App extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isAuthenticating: true,\n isAuthenticated: false\n };\n }\n\n async componentDidMount() {\n try {\n await Auth.currentSession();\n this.handleAuth(true);\n } catch (e) {\n if (e !== 'No current user') {\n console.error(e);\n }\n }\n\n this.setState({ isAuthenticating: false });\n }\n\n handleAuth = authenticated => {\n this.setState({\n isAuthenticated: authenticated\n });\n };\n\n render() {\n const { isAuthenticating, isAuthenticated } = this.state;\n const childProps = {\n isAuthenticated,\n userHasAuthenticated: this.userHasAuthenticated,\n handleAuth: this.handleAuth\n };\n return (\n !isAuthenticating && (\n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n )\n );\n }\n}\n\nexport default App;\n","const awsconfig = {\n aws_project_region: 'eu-west-1',\n aws_cognito_region: 'eu-west-1',\n aws_user_pools_id: `${process.env.REACT_APP_CUSTOMER_USER_POOL_ID}`,\n aws_user_pools_web_client_id: `${\n process.env.REACT_APP_CUSTOMER_WEB_CLIENT_ID\n }`\n};\n\nexport default awsconfig;\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport Amplify from 'aws-amplify';\nimport { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';\nimport App from './App';\nimport awsconfig from './aws-config';\nimport themeSettings from './muitheme';\n\nconst theme = createMuiTheme(themeSettings);\n\nAmplify.configure(awsconfig);\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n","export default {\n palette: {\n primary: {\n main: '#50b9b3'\n },\n secondary: {\n main: '#98c5e9'\n }\n },\n typography: {\n fontFamily: 'Montserrat,Helvetica,Arial,Lucida,sans-serif !important',\n h4: {\n fontFamily:\n 'Montserrat,Helvetica,Arial,Lucida,sans-serif !important',\n textTransform: 'uppercase',\n fontWeight: 500\n },\n h5: {\n fontFamily:\n 'Montserrat,Helvetica,Arial,Lucida,sans-serif !important',\n textTransform: 'uppercase'\n }\n }\n};\n"],"sourceRoot":""}