{"version":3,"sources":["components/NavMenu.js","components/Layout.js","components/Home.js","components/FetchData.js","components/Counter.js","components/ResidentLogin.js","components/BookedActivities.js","components/Activities.js","components/ActivitySessions.js","components/BookingDetails.js","components/ChargeDetails.js","components/ConfirmDetails.js","components/CheckoutForm.js","components/Payment.js","components/PaymentSuccess.js","App.js","serviceWorkerRegistration.js","reportWebVitals.js","index.js"],"names":["NavMenu","Component","constructor","props","super","onTriggerLogout","this","setState","loggedIn","localStorage","clear","layoutLogoutCallback","toggleNavbar","bind","state","collapsed","render","_jsxs","children","className","_jsx","onClick","NavLink","tag","Link","to","FontAwesomeIcon","icon","faHomeLg","style","paddingRight","faBook","faBookOpen","faMinusCircle","_NavMenu","displayName","name","Layout","handleMenuLogoutCallback","rootLogoutCallback","componentDidMount","Container","target","rel","href","_Layout","Home","loading","JSON","parse","getItem","history","push","alt","src","_Home","FetchData","forecasts","populateWeatherData","renderForecastsTable","map","forecast","date","temperatureC","temperatureF","summary","contents","id","response","fetch","data","json","_FetchData","Counter","currentCount","incrementCounter","_Counter","ResidentLogin","onTriggerLogin","rootLoginCallback","surname","postcode","voucher","error","loginStatus","submitting","errorMessage","handleChange","handleSubmit","event","value","fetchUser","preventDefault","window","location","reload","onSubmit","htmlFor","type","placeholder","onChange","Spinner","animation","isNaN","options","method","headers","body","stringify","setItem","activityBookings","length","BookedActivities","loadChangeBookingActivity","record","pathname","activityTypeId","savedActivityBooking","changeBookingMode","showModalForCancel","activityBooking","activityForCancel","showModal","modalMessage","activityBookingId","residentBooking","isCancelBookingSubmitting","message","cancelBooking","populateData","renderGrid","_residentBooking$acti","colSpan","activityName","Moment","format","startDate","Modal","show","Header","Title","Body","Footer","Button","variant","redirected","payload","actvityBookingId","includes","_BookedActivities","Activities","records","sessionId","Date","now","toString","Math","random","substring","activityTypeName","bookingModel","query","arrivalDate","departureDate","validFrom","validTo","ActivitySessions","saveChangedBooking","activitySession","isChangeBookingSubmitting","changeBooking","showModalForChange","activitySessionForChange","startTime","activityType","tableLoading","arrivalDateDayDifference","showToast","toastMessage","nextPreviousDay","storageBookedDetails","nonResidentValidFrom","nonResidentValidTo","removeItem","newArrivalDateDayDifference","currentDay","activitySessions","sessionLength","available","activitySessionId","chosenCurrentDay","endTime","tickets","activityTypeDescription","ToastContainer","position","Toast","bg","onClose","delay","autohide","startDateTime","moment","utcOffset","newStartDate","newStartTime","newEndTime","setTimeout","BookingDetails","orderedTickets","isValidatingQty","validateSessionQty","componentDidUpdate","prevProps","prevState","bookedDetails","ticketInputs","Array","from","document","getElementsByClassName","forEach","ticket","find","element","activityId","qty","previous","orders","i","parseInt","isIdMatched","activity","order","price","gross","totalOrderedQty","item","reduce","prev","curr","dangerouslySetInnerHTML","__html","role","min","minPeople","max","maxPeople","defaultValue","stateActivitySession","ChargeDetails","totalSum","voucherAmount","balance","ConfirmDetails","handleClose","handleShow","checkVoucher","async","isCheckingVoucher","activityBookingRequest","accountId","bookingId","charges","voucherCode","actvityDate","dataValidatedBooking","validatedActivity","vouchers","voucherApplied","activityVoucherId","appliedVoucherType","filter","chargeType","showVoucherField","voucherMessage","validatedVoucher","isBookingValidated","validatedCharges","termsChecked","showChargesOnly","paymentClientSecret","isValidatingBooking","bookingValidationMessage","prepareForPayment","moveToPayment","nonResidentModel","address1","address2","address3","country","county","email","firstName","phone","town","formSubmitting","defaultChecked","_Fragment","total","CheckoutForm","isSubmitting","stripe","elements","result","confirmPayment","confirmParams","return_url","PaymentElement","disabled","InjectedCheckoutForm","ElementsConsumer","_ref","stripePromise","loadStripe","Payment","getIntent","clientSecret","Elements","items","PaymentSuccess","paymentIntent","isSaving","appliedVoucher","URLSearchParams","search","get","checkStatus","saveBooking","activityCharges","quantity","activityChargeId","created","payment_method_types","amount","retrievePaymentIntent","status","showMessage","msg","payments","paymentType","paymentGatewayRef","lastDigitsCard","paymentStatus","emailAddress","paymentIntentId","appliedVoucherAmount","clearSessionFlowStates","App","handleLogoutCallback","isUserAuthenticated","handleLoginCallback","Route","exact","path","Redirect","component","_App","Boolean","hostname","match","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","BrowserRouter","basename","navigator","serviceWorker","ready","registration","unregister","catch","console"],"mappings":"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","file":"static/js/main.b8df23f3.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport './NavMenu.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faHomeLg, faPlus, faBookOpen, faBook, faMinusCircle } from '@fortawesome/free-solid-svg-icons'\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor (props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.state = {\r\n collapsed: true \r\n };\r\n }\r\n\r\n onTriggerLogout = () => {\r\n this.setState({ loggedIn: false });\r\n localStorage.clear()\r\n this.props.layoutLogoutCallback(); \r\n };\r\n\r\n toggleNavbar () {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n \r\n render () {\r\n return (\r\n \r\n
\r\n
\r\n Activity Booking\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n\r\n {!this.props.loggedIn\r\n ?\r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n\r\n
\r\n );\r\n }\r\n}\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n \r\n };\r\n }\r\n\r\n componentDidMount() {\r\n \r\n }\r\n\r\n handleMenuLogoutCallback = () => { \r\n this.props.rootLogoutCallback();\r\n }\r\n\r\n \r\n\r\n render() { \r\n\r\n return (\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n {this.props.children}\r\n \r\n\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class Home extends Component {\r\n\r\n static displayName = Home.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n let bookingModel = JSON.parse(localStorage.getItem(\"bookingModel\"));\r\n\r\n if (bookingModel) {\r\n this.props.history.push('/booked-activities'); \r\n } \r\n }\r\n \r\n\r\n render () {\r\n return (\r\n
\r\n
\r\n
\r\n \"kenegie\r\n\r\n

Kenegie Manor Activities

\r\n
\r\n \r\n

Welcome to the Kenegie Manor on-line swimming pool booking system. To book a swimming slot, Swimming Times for the days swims are released to residents (guests on site) at 8am daily and for Locals (non-residents) at 8.30am daily.\r\n

\r\n

They can ONLY be booked online using this system and not via the office or walk-in. For holiday makers you will be issued a pass code on check in.

\r\n Pool Passcode Booking\r\n {\r\n this.props.history.push('/activities'); \r\n }}\r\n >Visitors & Vouchers Booking\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class FetchData extends Component {\r\n static displayName = FetchData.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { forecasts: [], loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n this.populateWeatherData();\r\n }\r\n\r\n static renderForecastsTable(forecasts) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {forecasts.map(forecast =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
DateTemp. (C)Temp. (F)Summary
{forecast.date}{forecast.temperatureC}{forecast.temperatureF}{forecast.summary}
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : FetchData.renderForecastsTable(this.state.forecasts);\r\n\r\n return (\r\n
\r\n

Weather forecast

\r\n

This component demonstrates fetching data from the server.

\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateWeatherData() {\r\n const response = await fetch('weatherforecast');\r\n const data = await response.json();\r\n this.setState({ forecasts: data, loading: false });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class Counter extends Component {\r\n static displayName = Counter.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { currentCount: 0 };\r\n this.incrementCounter = this.incrementCounter.bind(this);\r\n }\r\n\r\n incrementCounter() {\r\n this.setState({\r\n currentCount: this.state.currentCount + 1\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n

Counter

\r\n\r\n

This is a simple example of a React component.

\r\n\r\n

Current count: {this.state.currentCount}

\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport Spinner from 'react-bootstrap/Spinner';\r\n\r\n\r\nexport class ResidentLogin extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n surname: '',\r\n postcode: '',\r\n voucher: '',\r\n error: '',\r\n loginStatus: false,\r\n submitting: false,\r\n errorMessage: null\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n onTriggerLogin = () => { \r\n this.props.rootLoginCallback();\r\n };\r\n\r\n handleChange(event) {\r\n this.setState({\r\n [event.target.name]: event.target.value\r\n });\r\n }\r\n\r\n handleSubmit(event) {\r\n this.setState({ submitting: true });\r\n this.fetchUser(this.state);\r\n event.preventDefault();\r\n }\r\n\r\n componentDidMount() {\r\n\r\n if (localStorage.getItem('refreshResidentLogin')) {\r\n localStorage.clear();\r\n window.location.reload(true);\r\n }\r\n \r\n }\r\n\r\n render() {\r\n \r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

Book your Activity

\r\n

Please enter your customer booking details.

\r\n
\r\n\r\n {this.state.errorMessage &&\r\n
\r\n {this.state.errorMessage}\r\n
\r\n } \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n {/*
*/}\r\n {/* */}\r\n {/* */}\r\n {/*
*/}\r\n
\r\n \r\n \r\n
\r\n
\r\n {this.state.submitting\r\n ?\r\n \r\n \r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n ); \r\n \r\n }\r\n\r\n async fetchUser() {\r\n\r\n if (isNaN(this.state.voucher)) {\r\n this.setState({\r\n errorMessage: \"Voucher should be numeric!\",\r\n submitting: false\r\n });\r\n return false;\r\n }\r\n\r\n if (!this.state.voucher || !this.state.surname) {\r\n this.setState({\r\n errorMessage: \"All fields are required!\",\r\n submitting: false\r\n });\r\n return false;\r\n }\r\n\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(this.state)\r\n };\r\n\r\n const response = await fetch('residentlogin', options);\r\n const data = await response.json();\r\n \r\n if (data.loggedIn) {\r\n\r\n this.onTriggerLogin(); // rootcallback\r\n localStorage.setItem(\"residentLogin\", JSON.stringify(this.state));\r\n localStorage.setItem(\"bookingModel\", JSON.stringify(data));\r\n\r\n this.props.history.push('/activities');\r\n \r\n } else if (data.activityBookings.length === 0) {\r\n\r\n this.setState({\r\n errorMessage: \"Sorry, we can't find a booking for this account. Please check your details and try again.\",\r\n submitting: false\r\n });\r\n }\r\n \r\n }\r\n \r\n}\r\n","import React, { Component } from 'react';\r\nimport Moment from 'react-moment';\r\nimport 'moment-timezone';\r\nimport Spinner from 'react-bootstrap/Spinner';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Button from 'react-bootstrap/Button';\r\n\r\nexport class BookedActivities extends Component {\r\n \r\n static displayName = BookedActivities.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n residentBooking: null,\r\n loading: true,\r\n isCancelBookingSubmitting: false,\r\n message: null,\r\n showModal: false,\r\n modalMessage: null,\r\n activityForCancel: null\r\n };\r\n this.loadChangeBookingActivity = this.loadChangeBookingActivity.bind(this);\r\n //this.cancelBookedActivity = this.cancelBookedActivity.bind(this);\r\n this.showModalForCancel = this.showModalForCancel.bind(this);\r\n this.cancelBooking = this.cancelBooking.bind(this);\r\n }\r\n \r\n componentDidMount() {\r\n var bookingModel = localStorage.getItem(\"bookingModel\");\r\n if (!bookingModel) {\r\n this.props.history.push('/resident-login');\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n\r\n loadChangeBookingActivity = (record) => {\r\n \r\n this.props.history.push({\r\n pathname: '/activity-sessions',\r\n state: {\r\n activityTypeId: record.activityTypeId,\r\n savedActivityBooking: record,\r\n changeBookingMode: true\r\n }\r\n })\r\n }\r\n\r\n //cancelBookedActivity = (record) => {\r\n\r\n // this.cancelBooking(record);\r\n\r\n //}\r\n\r\n showModalForCancel = (activityBooking) => {\r\n this.setState({\r\n activityForCancel: activityBooking,\r\n showModal: true,\r\n modalMessage: `Are you sure you want to cancel this booked activity # ${activityBooking.activityBookingId}?`\r\n });\r\n }\r\n\r\n renderGrid(residentBooking, props) {\r\n return (\r\n \r\n
\r\n
\r\n

Your Bookings

\r\n

Below are your currently booked activities.

\r\n
\r\n\r\n {this.state.message &&\r\n
\r\n {this.state.message}\r\n
\r\n }\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.isCancelBookingSubmitting\r\n ?\r\n \r\n \r\n \r\n \r\n \r\n :\r\n \r\n {residentBooking?.activityBookings?.map(record =>\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n )}\r\n \r\n }\r\n
ActivityStart TimeAction
\r\n \r\n
\r\n {record.activityName}
\r\n Reference: {record.activityBookingId}\r\n
\r\n {record.startDate}\r\n \r\n \r\n { // \r\n }\r\n {/**/}\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n Please Confirm\r\n \r\n \r\n {this.state.modalMessage}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?\r\n \r\n
\r\n \r\n
\r\n \r\n : this.renderGrid(this.state.residentBooking, this.props);\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n\r\n }\r\n\r\n \r\n async populateData() {\r\n \r\n var residentLogin = localStorage.getItem(\"residentLogin\");\r\n\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: residentLogin\r\n };\r\n \r\n const response = await fetch('mybookings/get-bookings', options);\r\n\r\n if (response.redirected) {\r\n // expired session\r\n localStorage.clear();\r\n localStorage.setItem('refreshResidentLogin', 'true');\r\n\r\n this.props.history.push({\r\n pathname: '/resident-login' \r\n }); \r\n\r\n return;\r\n }\r\n\r\n const data = await response.json();\r\n \r\n this.setState({ residentBooking: data, loading: false });\r\n }\r\n\r\n \r\n\r\n //async cancelBooking(activityBooking) {\r\n async cancelBooking() {\r\n\r\n this.setState({\r\n isCancelBookingSubmitting: true,\r\n showModal: false\r\n });\r\n \r\n var payload = this.state.activityForCancel;\r\n payload.surname = this.state.residentBooking.surname;\r\n payload.postcode = this.state.residentBooking.postcode;\r\n \r\n \r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(payload)\r\n\r\n };\r\n const response = await fetch('privatebooking/cancel-booking', options); \r\n const data = await response.json();\r\n if (data.actvityBookingId > 0 && data.message.includes(\"Booking Cancelled\") ) {\r\n\r\n this.setState({\r\n isCancelBookingSubmitting: false,\r\n message: `Booking with reference # ${data.actvityBookingId} cancelled successfully!`\r\n });\r\n\r\n this.populateData();\r\n } \r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport Moment from 'react-moment';\r\nimport 'moment-timezone';\r\nimport Spinner from 'react-bootstrap/Spinner';\r\n\r\nexport class Activities extends Component {\r\n \r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n records: [],\r\n loading: true\r\n };\r\n }\r\n \r\n componentDidMount() {\r\n\r\n const sessionId = Date.now().toString(36) + Math.random().toString(36).substring(2);\r\n localStorage.setItem(\"sessionId\", sessionId);\r\n this.populateData(); \r\n }\r\n \r\n renderGrid(records,props) {\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n

Booking Activity

\r\n

Choose your activity from the list below and click select to book your session.

\r\n
\r\n
\r\n
\r\n {records.length > 0\r\n ?
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {/**/}\r\n {/**/}\r\n \r\n \r\n \r\n \r\n {records.map(record =>\r\n \r\n \r\n {/**/}\r\n {/**/}\r\n \r\n \r\n )}\r\n \r\n
ActivityValid fromValid to 
{record.activityTypeName}*/}\r\n {/* {record.validFrom.toString()}*/}\r\n {/* */}\r\n {/* {record.validTo.toString()}*/}\r\n {/*\r\n {\r\n props.history.push({\r\n pathname: '/activity-sessions',\r\n state: {\r\n activityTypeId: record.activityTypeId\r\n }\r\n })}}>\r\n Select\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n :
\r\n Sorry, no available activities.\r\n
\r\n }\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?\r\n\r\n
\r\n \r\n
\r\n\r\n : this.renderGrid(this.state.records, this.props);\r\n\r\n return (\r\n
\r\n {contents} \r\n
\r\n ); \r\n \r\n }\r\n\r\n async populateData() {\r\n const bookingModel = JSON.parse(localStorage.getItem(\"bookingModel\"));\r\n\r\n let query = '';\r\n if (bookingModel) \r\n query = 'validFrom=' + bookingModel.arrivalDate + '&validTo=' + bookingModel.departureDate + '&loginStatus=' + bookingModel.loggedIn; \r\n\r\n const response = await fetch('activities?' + query);\r\n \r\n const data = await response.json();\r\n if (data) {\r\n this.setState({ records: data, loading: false });\r\n\r\n if (!bookingModel && data.length > 0) {\r\n localStorage.setItem(\"nonResidentValidFrom\", data[0].validFrom);\r\n localStorage.setItem(\"nonResidentValidTo\", data[0].validTo);\r\n } \r\n }\r\n \r\n }\r\n\r\n \r\n \r\n}\r\n","import React, {Component} from 'react';\r\nimport Moment from 'react-moment';\r\nimport 'moment-timezone';\r\nimport Spinner from 'react-bootstrap/Spinner';\r\nimport Toast from 'react-bootstrap/Toast';\r\nimport { ToastContainer } from 'react-bootstrap';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Button from 'react-bootstrap/Button';\r\nimport moment from \"moment\";\r\n\r\nexport class ActivitySessions extends Component {\r\n constructor(props) {\r\n super(props); \r\n this.state = {\r\n activityType: null,\r\n loading: true,\r\n tableLoading: true,\r\n bookingModel: null,\r\n arrivalDateDayDifference: 0,\r\n changeBookingMode : false,\r\n savedActivityBooking: null,\r\n isChangeBookingSubmitting: false,\r\n showToast: false,\r\n toastMessage: null,\r\n message: null,\r\n showModal: false,\r\n modalMessage: null,\r\n activitySessionForChange: null\r\n };\r\n this.nextPreviousDay = this.nextPreviousDay.bind(this);\r\n this.showModalForChange = this.showModalForChange.bind(this);\r\n this.changeBooking = this.changeBooking.bind(this);\r\n }\r\n \r\n componentDidMount() {\r\n \r\n const storageBookedDetails = JSON.parse(localStorage.getItem(\"bookedDetails\"));\r\n const activityTypeId = this.props.history.location.state.activityTypeId;\r\n let bookingModel = JSON.parse(localStorage.getItem(\"bookingModel\"));\r\n const nonResidentValidFrom = localStorage.getItem(\"nonResidentValidFrom\");\r\n const nonResidentValidTo = localStorage.getItem(\"nonResidentValidTo\");\r\n\r\n if (storageBookedDetails && storageBookedDetails.activityTypeId !== activityTypeId) {\r\n localStorage.removeItem(\"bookedDetails\");\r\n }\r\n\r\n if (!bookingModel && nonResidentValidFrom && nonResidentValidTo) {\r\n bookingModel = {\r\n arrivalDate : nonResidentValidFrom,\r\n departureDate: nonResidentValidTo\r\n }; \r\n }\r\n\r\n this.setState({\r\n bookingModel: bookingModel, \r\n savedActivityBooking: this.props.history.location.state.savedActivityBooking, //this is coming from My Bookings\r\n changeBookingMode: this.props.history.location.state.changeBookingMode\r\n });\r\n\r\n this.populateData(activityTypeId, bookingModel.arrivalDate ,0);\r\n }\r\n\r\n nextPreviousDay(value) {\r\n\r\n const newArrivalDateDayDifference = this.state.arrivalDateDayDifference + (1 * value);\r\n this.setState({\r\n arrivalDateDayDifference: newArrivalDateDayDifference\r\n });\r\n\r\n const activityTypeId = this.props.history.location.state.activityTypeId;\r\n this.populateData(activityTypeId, this.state.bookingModel.arrivalDate , newArrivalDateDayDifference);\r\n }\r\n\r\n saveChangedBooking = (activitySession) => { \r\n this.setState({\r\n isChangeBookingSubmitting: true,\r\n message: null\r\n },\r\n () => this.changeBooking(activitySession)\r\n ); \r\n }\r\n\r\n showModalForChange = (activitySession) => {\r\n this.setState({\r\n activitySessionForChange: activitySession,\r\n showModal: true,\r\n modalMessage: `Are you sure you want to change into this session with time ${activitySession.startTime}?`\r\n });\r\n }\r\n\r\n renderGrid(activityType, bookingModel) {\r\n return ( \r\n
\r\n
\r\n
\r\n
\r\n

{activityType.activityTypeName} - \r\n {activityType.currentDay}\r\n

\r\n
\r\n {this.state.changeBookingMode &&\r\n
\r\n
Current Booking -\r\n {this.state.savedActivityBooking.startDate}\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n

Your Sessions run daily from \r\n {bookingModel.arrivalDate} \r\n  and finish on \r\n {bookingModel.departureDate}\r\n

\r\n
\r\n
\r\n
\r\n\r\n
\r\n {/*
*/}\r\n {/*
*/}\r\n {/* {this.state.arrivalDateDayDifference > 0 && */}\r\n {/* */}\r\n {/* } */}\r\n {/*
*/}\r\n {/*
*/}\r\n {/* {activityType.currentDay !== bookingModel.departureDate &&*/}\r\n {/* */}\r\n {/* }*/}\r\n {/* */}\r\n {/*
*/}\r\n {/*
*/}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.tableLoading\r\n ?\r\n \r\n \r\n \r\n \r\n \r\n :\r\n \r\n {activityType.activitySessions.map(record =>\r\n \r\n \r\n \r\n \r\n\r\n {record.available > 0 && !this.state.changeBookingMode &&\r\n\r\n \r\n }\r\n {record.available > 0 && this.state.changeBookingMode\r\n && record.startDate === this.state.savedActivityBooking.startDate &&\r\n\r\n \r\n }\r\n {record.available > 0 && this.state.changeBookingMode\r\n && record.startDate !== this.state.savedActivityBooking.startDate &&\r\n \r\n \r\n }\r\n {record.available === 0 &&\r\n\r\n \r\n }\r\n \r\n )}\r\n \r\n }\r\n
StartLength (minutes)Available
\r\n
\r\n \r\n
\r\n
\r\n {record.startDate}\r\n \r\n {record.sessionLength}\r\n \r\n {record.available}\r\n \r\n \r\n \r\n Currently Booked\r\n \r\n {/**/}\r\n\r\n \r\n \r\n \r\n \r\n FULLY BOOKED\r\n
\r\n
\r\n
\r\n\r\n {this.state.changeBookingMode\r\n ?\r\n \r\n :\r\n \r\n }\r\n \r\n {this.state.isChangeBookingSubmitting &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {this.state.message &&\r\n
\r\n {this.state.message}\r\n
\r\n }\r\n\r\n \r\n this.setState({ showToast: false })}\r\n delay={3000} autohide={true} show={this.state.showToast}>\r\n \r\n {this.state.toastMessage}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Please Confirm\r\n \r\n \r\n {this.state.modalMessage}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n \r\n let contents = this.state.loading\r\n ? \r\n
\r\n \r\n
\r\n \r\n : this.renderGrid(this.state.activityType, this.state.bookingModel);\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n\r\n }\r\n\r\n async populateData(activityTypeId, startDateTime, arrivalDateDayDifference) {\r\n\r\n this.setState({ tableLoading: true });\r\n \r\n const response = await fetch(`activitysessions?activityTypeId=${activityTypeId}&startDateTime=${moment(startDateTime).utcOffset(0, true).format()\r\n }&arrivalDateDayDifference=${arrivalDateDayDifference}`);\r\n if (response.redirected) { \r\n // expired session\r\n localStorage.clear();\r\n this.props.history.push({\r\n pathname: '/resident-login'\r\n })\r\n\r\n return;\r\n } \r\n \r\n const data = await response.json();\r\n this.setState({ activityType: data, loading: false, tableLoading: false });\r\n localStorage.setItem(\"activitySessionsForChosenDay\", JSON.stringify(data.activitySessions));\r\n }\r\n \r\n async changeBooking() {\r\n\r\n this.setState({\r\n isChangeBookingSubmitting: true,\r\n message: null,\r\n showModal: false\r\n });\r\n\r\n const activitySession = this.state.activitySessionForChange;\r\n\r\n var payload = this.state.savedActivityBooking;\r\n payload.surname = this.state.bookingModel.surname;\r\n payload.postcode = this.state.bookingModel.postcode;\r\n payload.newStartDate = activitySession.startDate;\r\n payload.newStartTime = activitySession.startTime;\r\n payload.newEndTime = activitySession.endTime;\r\n\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(payload) \r\n \r\n };\r\n const response = await fetch('privatebooking/change-booking', options);\r\n const data = await response.json();\r\n if (data.actvityBookingId === 0) {\r\n \r\n this.setState({\r\n isChangeBookingSubmitting: false,\r\n toastMessage: data.message,\r\n showToast: true\r\n });\r\n } else if (data.actvityBookingId > 0) {\r\n\r\n this.setState({\r\n isChangeBookingSubmitting: false,\r\n message: `Booking with reference # ${data.actvityBookingId} changed successfully!`\r\n });\r\n\r\n setTimeout(() => {\r\n this.props.history.push('/booked-activities')\r\n },\r\n 1500\r\n );\r\n \r\n }\r\n }\r\n \r\n}\r\n","import React, {Component} from 'react';\r\nimport Moment from 'react-moment';\r\nimport 'moment-timezone';\r\nimport Spinner from 'react-bootstrap/Spinner';\r\n\r\n/*\r\n * Activity Ticket and Qty page\r\n */\r\nexport class BookingDetails extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n bookingModel: null,\r\n activitySession: null,\r\n errorMessage: null,\r\n orderedTickets: null,\r\n isValidatingQty : false\r\n };\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.validateSessionQty = this.validateSessionQty.bind(this);\r\n }\r\n \r\n \r\n componentDidMount() {\r\n \r\n this.setState({\r\n activitySession: this.props.history.location.state,\r\n loading: false\r\n }); \r\n \r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n // from saved state at localStorage\r\n const bookedDetails = JSON.parse(localStorage.getItem(\"bookedDetails\"));\r\n if (bookedDetails && bookedDetails.orderedTickets) {\r\n var ticketInputs = Array.from(document.getElementsByClassName(\"form-control\")); \r\n bookedDetails.orderedTickets.forEach(ticket => { \r\n const isIdMatched = (element) => element.name === ticket.activityId;\r\n const activityInput = ticketInputs.find(isIdMatched); \r\n activityInput.value = ticket.qty;\r\n });\r\n }\r\n }\r\n\r\n previous() {\r\n\r\n this.props.history.push({\r\n pathname: '/activity-sessions',\r\n state: { activityTypeId: this.state.activitySession.activityTypeId }\r\n })\r\n \r\n }\r\n\r\n async handleSubmit(event) {\r\n event.preventDefault();\r\n \r\n var orders = [];\r\n for (var i = 0; i < event.target.length; i++) {\r\n \r\n if (event.target[i].value && parseInt(event.target[i].value) > 0 ) {\r\n const activityId = parseInt(event.target[i].name);\r\n const isIdMatched = (element) => element.activityId === activityId;\r\n const activity = this.state.activitySession.tickets.find(isIdMatched);\r\n \r\n var order = {\r\n activityId: event.target[i].name,\r\n qty: parseInt(event.target[i].value),\r\n name: activity.activityName,\r\n price: activity.price,\r\n gross: parseInt(event.target[i].value) * activity.price\r\n };\r\n orders.push(order); \r\n } \r\n }\r\n\r\n if (orders.length === 0) {\r\n this.setState({ errorMessage: \"You need to select at least 1 item with a non-zero quantity.\" });\r\n return false;\r\n }\r\n\r\n //const activitySessionsForChosenDay = JSON.parse(localStorage.getItem(\"activitySessionsForChosenDay\"));\r\n //const orderedSessionAndQtyMatch = activitySessionsForChosenDay\r\n // .find(x => x.activitySessionId === this.state.activitySession.activitySessionId\r\n // && x.startTime === this.state.activitySession.startTime);\r\n \r\n this.setState({ orderedTickets: orders });\r\n\r\n const totalOrderedQty = orders.map(item => item.qty).reduce((prev, curr) => prev + curr, 0);\r\n\r\n const isValidated = await this.validateSessionQty(this.state.activitySession, totalOrderedQty);\r\n \r\n if (!isValidated) {\r\n return false;\r\n }\r\n \r\n //if (orderedSessionAndQtyMatch && orderedSessionAndQtyMatch.available < totalOrderedQty) {\r\n // this.setState({ errorMessage: `We only have ${orderedSessionAndQtyMatch.available} available slots left. Please change your chosen numbers or select another session.` });\r\n // return false;\r\n //}\r\n \r\n const bookedDetails = {\r\n activityTypeId: this.state.activitySession.activityTypeId,\r\n activityTypeName: this.state.activitySession.activityTypeName,\r\n startDate: this.state.activitySession.startDate,\r\n startTime: this.state.activitySession.startTime,\r\n endTime: this.state.activitySession.endTime,\r\n activitySessionId: this.state.activitySession.activitySessionId,\r\n chosenCurrentDay: this.state.activitySession.chosenCurrentDay,\r\n tickets: this.state.activitySession.tickets,\r\n orderedTickets: orders\r\n };\r\n\r\n localStorage.setItem(\"bookedDetails\", JSON.stringify(bookedDetails));\r\n\r\n this.props.history.push({\r\n pathname: '/confirm-details',\r\n state: bookedDetails \r\n })\r\n }\r\n\r\n renderGrid() {\r\n \r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

\r\n {this.state.activitySession.activityTypeName}\r\n  -  \r\n {this.state.activitySession.startDate}\r\n

\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n

Please select your number of places.

\r\n
\r\n {this.state.errorMessage &&\r\n\r\n
\r\n {this.state.errorMessage}\r\n
\r\n }\r\n
\r\n\r\n
\r\n
\r\n\r\n {this.state.activitySession.tickets.map(record =>\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n {this.state.isValidatingQty &&\r\n
\r\n \r\n
\r\n }\r\n\r\n this.previous()} >\r\n Change Session\r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n\r\n let contents = this.state.loading\r\n ?\r\n \r\n\r\n : this.renderGrid();\r\n \r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n\r\n }\r\n \r\n async validateSessionQty(stateActivitySession, qty) {\r\n\r\n this.setState({ isValidatingQty: true , errorMessage : `Validating...`});\r\n\r\n const activityTypeId = stateActivitySession.activityTypeId;\r\n const activitySessionId = stateActivitySession.activitySessionId;\r\n const startDateTime = stateActivitySession.startDate;\r\n\r\n const response = await fetch(`activitysessions/check-available?activityTypeId=${activityTypeId}&activitySessionId=${activitySessionId}&startDateTime=${startDateTime}`); \r\n const data = await response.json();\r\n if (data) {\r\n \r\n if (qty > data.available) {\r\n this.setState({ errorMessage: `We only have ${data.available} available slots left. Please change your chosen numbers or select another session.` });\r\n this.setState({ isValidatingQty: false});\r\n return false;\r\n }\r\n\r\n this.setState({ isValidatingQty: false, errorMessage: ``});\r\n return true;\r\n } else {\r\n this.setState({ isValidatingQty: false, errorMessage: ``});\r\n return false;\r\n }\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport Moment from 'react-moment';\r\nimport 'moment-timezone';\r\n\r\nexport class ChargeDetails extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false\r\n };\r\n }\r\n \r\n componentDidMount() {\r\n \r\n }\r\n\r\n \r\n renderGrid() {\r\n \r\n return (\r\n
\r\n

\r\n Your Booking\r\n

\r\n
    \r\n
  • \r\n
    \r\n
    Activity
    \r\n {this.props.bookedDetails.activityTypeName}\r\n
    \r\n
  • \r\n
  • \r\n
    \r\n
    Start date:
    \r\n \r\n {this.props.bookedDetails.startDate}\r\n \r\n
    \r\n
  • \r\n
\r\n\r\n

\r\n Your Charges\r\n

\r\n\r\n
    \r\n \r\n {this.props.bookedDetails.orderedTickets.map(record =>\r\n \r\n
  • \r\n
    \r\n
    {record.qty} x {record.name}
    \r\n
    \r\n £{record.gross}\r\n
  • \r\n )}\r\n \r\n
  • \r\n
    \r\n
    Total
    \r\n
    \r\n \r\n £{this.props.totalSum }\r\n \r\n
  • \r\n
  • \r\n
    \r\n
    Vouchers
    \r\n
    \r\n \r\n £{this.props.voucherAmount}\r\n \r\n
  • \r\n
  • \r\n
    \r\n
    Balance
    \r\n
    \r\n \r\n £{this.props.balance}\r\n \r\n
  • \r\n
\r\n\r\n \r\n
\r\n )\r\n }\r\n\r\n render() {\r\n \r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderGrid();\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Toast from 'react-bootstrap/Toast';\r\nimport { ToastContainer } from 'react-bootstrap';\r\nimport Spinner from 'react-bootstrap/Spinner';\r\nimport { ChargeDetails } from './ChargeDetails';\r\n\r\n\r\nexport class ConfirmDetails extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n bookingModel: null,\r\n bookedDetails: null,\r\n message: null,\r\n totalSum: 0,\r\n balance: 0, \r\n showModal: false,\r\n termsChecked: false,\r\n showToast: false,\r\n toastMessage: 'Please accept the Terms and Conditions by ticking on the checkbox.',\r\n showChargesOnly: false, \r\n paymentClientSecret: null,\r\n\r\n showVoucherField: false,\r\n voucherCode: null, \r\n isCheckingVoucher: false,\r\n voucherAmount: 0,\r\n voucherMessage: null,\r\n validatedVoucher: null,\r\n\r\n isValidatingBooking: false,\r\n isBookingValidated: false,\r\n bookingValidationMessage: null,\r\n validatedCharges : null, // same object as bookedDetails.orderedTickets but this is validated \r\n };\r\n \r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleShow = this.handleShow.bind(this);\r\n this.prepareForPayment = this.prepareForPayment.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.moveToPayment = this.moveToPayment.bind(this);\r\n }\r\n \r\n componentDidMount() {\r\n\r\n localStorage.removeItem(\"appliedVoucher\");\r\n\r\n let bookingModel = JSON.parse(localStorage.getItem(\"bookingModel\"));\r\n let nonResidentModel = JSON.parse(localStorage.getItem(\"nonResidentModel\"));\r\n const orderedTickets = this.props.history.location.state.orderedTickets;\r\n const totalSum = orderedTickets.map(item => item.gross).reduce((prev, curr) => prev + curr, 0);\r\n\r\n if (!bookingModel && !nonResidentModel) {\r\n bookingModel = {\r\n bookingId: 0,\r\n accountId: 0,\r\n address1: '',\r\n address2: '',\r\n address3: '',\r\n country: '',\r\n county: '',\r\n email: '',\r\n firstName: '',\r\n phone: '',\r\n postcode: '',\r\n surname: '',\r\n town: ''\r\n }\r\n } else if (!bookingModel && nonResidentModel) {\r\n bookingModel = nonResidentModel;\r\n }\r\n\r\n this.setState({\r\n bookedDetails: this.props.history.location.state, \r\n bookingModel: bookingModel,\r\n totalSum: totalSum,\r\n balance: totalSum - 0,\r\n formSubmitting: false,\r\n loading: false\r\n });\r\n \r\n }\r\n\r\n previous() {\r\n \r\n this.props.history.push({\r\n pathname: '/activity-sessions',\r\n state: { activityTypeId: this.state.bookedDetails.activityTypeId }\r\n })\r\n\r\n }\r\n\r\n handleClose = () => this.setState({ showModal : false});\r\n handleShow = () => this.setState({ showModal: true });\r\n\r\n handleChange(event) {\r\n\r\n if (event.target.name === 'voucherCode') {\r\n this.setState({ voucherCode: event.target.value }); // root state\r\n } else {\r\n this.setState(prevState => ({ // nested state use spread syntax\r\n bookingModel: {\r\n ...prevState.bookingModel,\r\n [event.target.name]: event.target.value\r\n }\r\n }));\r\n }\r\n \r\n }\r\n \r\n renderGrid(bookingModel) {\r\n \r\n return (\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n

Customer Details

\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n this.setState({ showToast: false })}\r\n delay={3000} autohide={true} show={this.state.showToast}>\r\n \r\n {this.state.toastMessage}\r\n \r\n \r\n \r\n\r\n this.setState({ termsChecked: !this.state.termsChecked })}\r\n />\r\n\r\n \r\n \r\n
\r\n
\r\n {!this.state.showVoucherField\r\n ?\r\n
\r\n this.setState({ showVoucherField: true })} >\r\n Apply Voucher\r\n \r\n
\r\n :\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n {!this.state.isCheckingVoucher\r\n ?\r\n \r\n Apply\r\n \r\n :\r\n <>\r\n \r\n \r\n }\r\n
\r\n
\r\n }\r\n\r\n {this.state.voucherMessage &&\r\n
\r\n {this.state.voucherMessage}\r\n
\r\n }\r\n\r\n
\r\n \r\n\r\n {this.state.isValidatingBooking && \r\n
\r\n \r\n
\r\n }\r\n\r\n {this.state.bookingValidationMessage && \r\n
\r\n {this.state.bookingValidationMessage}\r\n
\r\n }\r\n\r\n this.previous()}\r\n >\r\n Change Session\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n Terms and Conditions\r\n \r\n \r\n For the safety and enjoyment of all of our guests and leaseholders we ask that all members of your group the the time to familiarise yourself with some simple “house rules”\r\n
    \r\n
  • Children under the age of 8 are to accompanied by a responsible swimming adult of at least 18 years of age who must remain in the pool with the minor at all times regardless of swimming ability.
  • \r\n
  • One adult may accompany up to 2 children under the age of 8
  • \r\n
  • Children under 5 must be accompanied on a 1:1 basis by a swimming adult who must remain in the pool with the minor at all times regardless of swimming ability.
  • \r\n
  • Children between 8 and 15 must prove their swimming competence to the pool duty attendant prior to swimming un-accompanied in the pool and by accompanied by a responsible swimming adult who must remain in the pool complex but not necessarily in the pool.
  • \r\n
  • Non swimmers are to be accompanied by a responsible swimmer (over 18) throughout their visit in the pool complex and the responsible swimmer must remain in the pool at all times with the non-swimmer.
  • \r\n
  • For reasons of safety and for the enjoyment of all our pool users, ball games, masks, snorkels and large inflatables are not permitted in the pool.
  • \r\n
  • Do not run around the poolside as the floors may be slippery.
  • \r\n
  • Children using armbands and other swimming aids must be constantly supervised.
  • \r\n
  • Please do not run, fight, bomb, duck or behave in such a way to cause a danger to yourselves or others using the pool.
  • \r\n
  • A strict NO DIVING policy operates in the pool complex.
  • \r\n
  • No glassware poolside.
  • \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n )\r\n }\r\n\r\n render() {\r\n \r\n let contents = this.state.loading\r\n ? \r\n : this.renderGrid(this.state.bookingModel);\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n\r\n }\r\n\r\n async prepareForPayment() {\r\n\r\n if (!this.state.termsChecked) {\r\n this.setState({\r\n toastMessage: 'Please accept the Terms and Conditions by ticking on the checkbox.',\r\n showToast: true\r\n });\r\n return false;\r\n }\r\n\r\n if (!this.state.bookingModel.surname || !this.state.bookingModel.postcode\r\n || !this.state.bookingModel.address1 || !this.state.bookingModel.email) {\r\n this.setState({\r\n toastMessage: 'Email, Surname, Address1, and Postcode are required!',\r\n showToast: true\r\n });\r\n return false;\r\n }\r\n\r\n if (this.state.isBookingValidated) { // validated already in voucher check\r\n const totalSumValidated = this.state.validatedCharges.map(item => item.gross).reduce((prev, curr) => prev + curr, 0);\r\n if (totalSumValidated > 0) {\r\n this.moveToPayment();\r\n return true;\r\n } else { // no need payment\r\n\r\n if (this.state.loginStatus === true) {\r\n localStorage.setItem(\"bookingModel\", JSON.stringify(this.state.bookingModel));\r\n } else {\r\n localStorage.setItem(\"nonResidentModel\", JSON.stringify(this.state.bookingModel));\r\n }\r\n \r\n this.props.history.push({\r\n pathname: '/payment-success' \r\n });\r\n return true;\r\n }\r\n }\r\n \r\n this.setState({ isValidatingBooking: true });\r\n\r\n // validate booking here as everything is ready for payment\r\n const vouchers = [];\r\n if (this.state.validatedVoucher) {\r\n vouchers.push(this.state.validatedVoucher);\r\n }\r\n\r\n let payload = {\r\n accountId: this.state.bookingModel.accountId,\r\n bookingId: this.state.bookingModel.bookingId,\r\n surname: this.state.bookingModel.surname,\r\n postcode: this.state.bookingModel.postcode,\r\n activityTypeId: this.state.bookedDetails.activityTypeId,\r\n activitySessionId: this.state.bookedDetails.activitySessionId,\r\n startDate: this.state.bookedDetails.startDate,\r\n endTime: this.state.bookedDetails.endTime,\r\n charges: this.state.bookedDetails.orderedTickets,\r\n vouchers: vouchers \r\n };\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(payload)\r\n };\r\n\r\n const response = await fetch('booking/validate-booking', options);\r\n\r\n if (response.redirected) {\r\n // expired session\r\n localStorage.clear();\r\n this.props.history.push({\r\n pathname: '/resident-login'\r\n })\r\n\r\n return;\r\n }\r\n \r\n const data = await response.json();\r\n \r\n if (data.message === \"Booking Validated\") {\r\n\r\n //we get the intent in the payment page \r\n this.setState({\r\n isBookingValidated: true,\r\n validatedCharges: data.activityBookingRequest.charges,\r\n totalSum: data.activityBookingRequest.total,\r\n balance: data.activityBookingRequest.balance\r\n });\r\n \r\n \r\n \r\n if (this.state.loginStatus === true) {\r\n localStorage.setItem(\"bookingModel\", JSON.stringify(this.state.bookingModel));\r\n } else {\r\n localStorage.setItem(\"nonResidentModel\", JSON.stringify(this.state.bookingModel));\r\n }\r\n \r\n if (data.activityBookingRequest.balance > 0) {\r\n this.moveToPayment();\r\n } else {\r\n this.props.history.push({\r\n pathname: '/payment-success' \r\n });\r\n }\r\n \r\n } else {\r\n\r\n this.setState({\r\n isValidatingBooking: false,\r\n bookingValidationMessage: \"An error occurred in validating this booking. We can't proceed with payment.\"\r\n }); \r\n } \r\n }\r\n\r\n\r\n checkVoucher = async () => {\r\n\r\n this.setState({\r\n isCheckingVoucher: true\r\n })\r\n\r\n let activityBookingRequest = {\r\n accountId: this.state.bookingModel.accountId,\r\n bookingId: this.state.bookingModel.bookingId,\r\n surname: this.state.bookingModel.surname,\r\n postcode: this.state.bookingModel.postcode,\r\n activityTypeId: this.state.bookedDetails.activityTypeId,\r\n activitySessionId: this.state.bookedDetails.activitySessionId,\r\n startDate: this.state.bookedDetails.startDate,\r\n endTime: this.state.bookedDetails.endTime,\r\n charges: this.state.bookedDetails.orderedTickets \r\n };\r\n \r\n var payload = {\r\n accountId: this.state.bookingModel.accountId,\r\n activityTypeId: this.state.bookedDetails.activityTypeId,\r\n voucher: this.state.voucherCode,\r\n actvityDate: this.state.bookedDetails.startDate,\r\n activityBookingRequest: activityBookingRequest\r\n };\r\n\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(payload)\r\n };\r\n \r\n const response = await fetch('payment/check-voucher', options);\r\n\r\n if (response.redirected) {\r\n // expired session\r\n localStorage.clear();\r\n this.props.history.push({\r\n pathname: '/resident-login'\r\n })\r\n\r\n return;\r\n } \r\n\r\n const dataValidatedBooking = await response.json();\r\n\r\n const validatedActivity = dataValidatedBooking.activityBookingRequest;\r\n const vouchers = validatedActivity.vouchers;\r\n\r\n let voucherApplied = validatedActivity.voucherApplied;\r\n if (voucherApplied > 0 || (vouchers.length > 0 && vouchers[0].activityVoucherId > 0)) {\r\n \r\n if (voucherApplied === 0) { // this is not needed if voucherApplied will have non zero value from api\r\n const appliedVoucherType = validatedActivity.charges.filter(record => record.chargeType === \"Voucher\"); \r\n voucherApplied = appliedVoucherType.length > 0 ? -1 * appliedVoucherType[0].gross : 0;\r\n }\r\n\r\n this.setState({\r\n isCheckingVoucher: false,\r\n voucherAmount: voucherApplied, \r\n showVoucherField: false,\r\n voucherMessage: \"Voucher successfully applied.\",\r\n balance: validatedActivity.balance,\r\n validatedVoucher: vouchers[0]\r\n });\r\n \r\n localStorage.setItem(\"appliedVoucher\", JSON.stringify(vouchers[0]));\r\n \r\n if (dataValidatedBooking.message === \"Booking Validated\"\r\n && validatedActivity.charges.length > 0) {\r\n\r\n this.setState({\r\n isBookingValidated: true,\r\n validatedCharges: validatedActivity.charges\r\n });\r\n } \r\n\r\n } else {\r\n\r\n this.setState({ \r\n isCheckingVoucher: false,\r\n voucherAmount: 0,\r\n showVoucherField: true,\r\n voucherMessage: \"Sorry, your voucher is invalid.\",\r\n balance: this.state.totalSum,\r\n isBookingValidated: false,\r\n validatedCharges: null,\r\n validatedVoucher: null\r\n })\r\n }\r\n }\r\n \r\n moveToPayment() {\r\n this.props.history.push({\r\n pathname: '/payment',\r\n state: {\r\n bookedDetails: this.state.bookedDetails,\r\n totalSum: this.state.totalSum, // totalSum here is with no discounts/vouchers \r\n voucherAmount: this.state.voucherAmount,\r\n balance: this.state.balance,\r\n validatedCharges: this.state.validatedCharges\r\n }\r\n });\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport { ElementsConsumer, PaymentElement } from \"@stripe/react-stripe-js\";\r\nimport './CheckoutForm.css';\r\nimport Spinner from 'react-bootstrap/Spinner';\r\n\r\nclass CheckoutForm extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n errorMessage: null,\r\n isSubmitting: false \r\n };\r\n \r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n } \r\n\r\n handleSubmit = async (event) => {\r\n // We don't want to let default form submission happen here,\r\n // which would refresh the page.\r\n event.preventDefault();\r\n\r\n this.setState({ isSubmitting: true });\r\n\r\n const { stripe, elements } = this.props;\r\n\r\n if (!stripe || !elements) {\r\n // Stripe.js has not yet loaded.\r\n // Make sure to disable form submission until Stripe.js has loaded.\r\n return;\r\n }\r\n\r\n //TODO! find a way to get the last4digit\r\n //const cardNumber = await elements.getElement('cardNumber');\r\n //console.log(cardNumber); //console.log(stripe); \r\n //return false;\r\n\r\n const result = await stripe.confirmPayment({\r\n //`Elements` instance that was used to create the Payment Element\r\n elements,\r\n confirmParams: {\r\n return_url: \"https://activities.kenegie-manor.co.uk/payment-success\",\r\n }\r\n });\r\n\r\n // This point will only be reached if there is an immediate error when\r\n // confirming the payment. Otherwise, your customer will be redirected to\r\n // your `return_url`. For some payment methods like iDEAL, your customer will\r\n // be redirected to an intermediate site first to authorize the payment, then\r\n // redirected to the `return_url`.\r\n\r\n if (result.error.type === \"card_error\" || result.error.type === \"validation_error\") {\r\n this.setState({\r\n errorMessage: result.error.message,\r\n isSubmitting: false\r\n })\r\n } else {\r\n this.setState({\r\n errorMessage: \"An unexpected error occured.\",\r\n isSubmitting: false\r\n });\r\n }\r\n \r\n };\r\n \r\n render() {\r\n\r\n return (\r\n
\r\n

\r\n Your Payment\r\n

\r\n\r\n \r\n \r\n \r\n\r\n {this.state.isSubmitting &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {this.state.errorMessage &&\r\n
\r\n {this.state.errorMessage}\r\n
\r\n }\r\n \r\n \r\n );\r\n \r\n }\r\n\r\n\r\n}\r\n\r\n\r\nexport default function InjectedCheckoutForm() {\r\n return (\r\n \r\n {({ stripe, elements }) => (\r\n \r\n )}\r\n \r\n );\r\n}","import React, {Component} from 'react';\r\nimport { loadStripe } from \"@stripe/stripe-js\";\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\n\r\nimport Spinner from 'react-bootstrap/Spinner';\r\n\r\n\r\nimport { ChargeDetails } from './ChargeDetails';\r\nimport CheckoutForm from \"./CheckoutForm\";\r\n// Live\r\nconst key = \"pk_live_Uz255eHdHPOfMw4MS66vJ8CP003fN66jv4\";\r\n// Test\r\n//const key = \"pk_test_OP6Wy7qkx0N8MHUSzryp6XVh\";\r\n\r\n\r\nconst stripePromise = loadStripe(key);\r\n\r\nexport class Payment extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n paymentClientSecret: null,\r\n bookedDetails: null,\r\n totalSum: 0,\r\n voucherAmount: 0,\r\n balance: 0\r\n }; \r\n }\r\n \r\n componentDidMount() {\r\n\r\n const bookedDetails = localStorage.getItem(\"bookedDetails\");\r\n\r\n if (!bookedDetails) {\r\n this.props.history.push('/home');\r\n return false;\r\n } \r\n\r\n const validatedCharges = this.props.history.location.state.validatedCharges;\r\n \r\n this.setState({\r\n bookedDetails: this.props.history.location.state.bookedDetails, \r\n totalSum: this.props.history.location.state.totalSum,\r\n voucherAmount: this.props.history.location.state.voucherAmount,\r\n balance: this.props.history.location.state.balance\r\n });\r\n\r\n this.getIntent(validatedCharges);\r\n }\r\n \r\n renderGrid() {\r\n\r\n const options = {\r\n // passing the client secret obtained from the server \r\n clientSecret: this.state.paymentClientSecret\r\n };\r\n\r\n return (\r\n
\r\n \r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n )\r\n }\r\n\r\n render() {\r\n \r\n let contents = this.state.loading\r\n ?\r\n
\r\n \r\n
\r\n : this.renderGrid();\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n\r\n }\r\n\r\n async getIntent(charges) {\r\n\r\n const items = charges.map(({ activityId, qty }) => ({ activityId, qty }));\r\n const totalSum = charges.map(item => item.gross).reduce((prev, curr) => prev + curr, 0);\r\n \r\n let payload = {\r\n items: items, \r\n gross: totalSum\r\n };\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(payload)\r\n };\r\n\r\n const response = await fetch('payment/create-intent', options);\r\n const data = await response.json();\r\n\r\n this.setState({ paymentClientSecret: data.clientSecret, loading: false });\r\n\r\n }\r\n \r\n}\r\n","import React, {Component} from 'react';\r\nimport { loadStripe } from \"@stripe/stripe-js\";\r\nimport Spinner from 'react-bootstrap/Spinner';\r\nimport Moment from 'react-moment';\r\nimport 'moment-timezone';\r\n\r\n/*\r\n * This is also the SAVE BOOKING page\r\n **/\r\nexport class PaymentSuccess extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n errorMessage: null,\r\n paymentIntent: null,\r\n isSaving: false,\r\n activityBooking: null,\r\n appliedVoucher: null\r\n }; \r\n }\r\n \r\n componentDidMount() {\r\n\r\n const clientSecret = new URLSearchParams(window.location.search).get(\r\n \"payment_intent_client_secret\"\r\n );\r\n\r\n if (clientSecret) {\r\n this.checkStatus(clientSecret);\r\n } else {\r\n this.saveBooking();\r\n }\r\n\r\n }\r\n \r\n renderGrid() {\r\n \r\n return (\r\n
\r\n\r\n {this.state.errorMessage\r\n ?\r\n
\r\n
\r\n {this.state.errorMessage}\r\n
\r\n\r\n this.props.history.push({ pathname: '/activities' }) } >\r\n Book Another Activity\r\n \r\n
\r\n :\r\n
\r\n\r\n
\r\n
\r\n

Thank you for your booking.

\r\n

You will receive an email confirmation shortly with your booking information\r\n and instructions for attending this activity.

\r\n
\r\n
\r\n
\r\n
\r\n\r\n

\r\n Booking Details\r\n

\r\n
    \r\n
  • \r\n
    \r\n
    Booking ref
    \r\n \r\n {this.state.activityBooking.activityBookingId}\r\n
    \r\n
  • \r\n
  • \r\n
    \r\n
    Start date:
    \r\n \r\n {this.state.activityBooking.startDate}\r\n \r\n
    \r\n
  • \r\n\r\n
\r\n\r\n

\r\n Charges\r\n

\r\n
    \r\n\r\n {this.state.activityBooking.activityCharges.map(record =>\r\n
    \r\n {record.quantity != null &&\r\n
  • \r\n
    \r\n
    {record.quantity} x {record.name}
    \r\n
    \r\n £{record.gross}\r\n
  • \r\n }\r\n
    \r\n )}\r\n\r\n
  • \r\n
    \r\n
    Total
    \r\n\r\n
    \r\n £\r\n {this.state.activityBooking.activityCharges.map(item => item.gross).reduce((prev, curr) => prev + curr, 0)}\r\n \r\n
  • \r\n
\r\n
    \r\n

    \r\n Payments\r\n

    \r\n \r\n {this.state.paymentIntent &&\r\n
  • \r\n
    \r\n
    \r\n \r\n {new Date(this.state.paymentIntent.created * 1000)}\r\n \r\n\r\n
    \r\n
    \r\n {this.state.paymentIntent.payment_method_types[0]}\r\n £\r\n {this.state.paymentIntent.amount / 100}\r\n \r\n
  • \r\n }\r\n \r\n
  • \r\n
    \r\n
    Total Payments
    \r\n\r\n
    £{this.state.paymentIntent? (this.state.paymentIntent.amount / 100) : 0 }\r\n
  • \r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n }\r\n\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n \r\n let contents = this.state.loading\r\n ?\r\n
\r\n \r\n
\r\n \r\n : this.renderGrid();\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n //table 3 rows, 1 column\r\n \r\n );\r\n\r\n }\r\n\r\n async checkStatus(clientSecret) {\r\n \r\n \r\n const key = \"pk_live_Uz255eHdHPOfMw4MS66vJ8CP003fN66jv4\"; //\"pk_test_OP6Wy7qkx0N8MHUSzryp6XVh\"; \r\n const stripe = await loadStripe(key);\r\n const { paymentIntent } = await stripe.retrievePaymentIntent(clientSecret);\r\n \r\n this.setState({ paymentIntent: paymentIntent });\r\n\r\n switch (paymentIntent.status) {\r\n case \"succeeded\":\r\n this.saveBooking();\r\n break;\r\n case \"processing\":\r\n this.showMessage(\"Your payment is processing.\");\r\n break;\r\n case \"requires_payment_method\":\r\n this.showMessage(\"Your payment was not successful, please try again.\");\r\n break;\r\n default:\r\n this.showMessage(\"Something went wrong.\");\r\n break;\r\n }\r\n\r\n \r\n }\r\n\r\n async showMessage(msg) {\r\n this.setState({ errorMessage: msg , loading: false});\r\n }\r\n\r\n async saveBooking() {\r\n\r\n const sessionId = localStorage.getItem(\"sessionId\");\r\n const savedSessionId = localStorage.getItem(\"savedSessionId\");\r\n\r\n if (sessionId === savedSessionId) {\r\n this.setState({ errorMessage: 'A booking with same data has already been saved. Did you reload the page?', loading: false });\r\n return false;\r\n }\r\n \r\n\r\n let bookingModel = JSON.parse(localStorage.getItem(\"bookingModel\"));\r\n const bookedDetails = JSON.parse(localStorage.getItem(\"bookedDetails\"));\r\n const appliedVoucher = JSON.parse(localStorage.getItem(\"appliedVoucher\"));\r\n const nonResidentModel = JSON.parse(localStorage.getItem(\"nonResidentModel\"));\r\n \r\n const vouchers = [];\r\n if (appliedVoucher) { \r\n vouchers.push(appliedVoucher);\r\n }\r\n\r\n if (!bookingModel) \r\n bookingModel = nonResidentModel;\r\n \r\n const payments = [];\r\n if (this.state.paymentIntent && this.state.paymentIntent.amount) {\r\n payments.push({\r\n amount: this.state.paymentIntent.amount / 100,\r\n paymentType: \"stripe\",\r\n name: bookingModel.firstName + ' ' + bookingModel.surname ,\r\n address1: bookingModel.address1,\r\n address2: bookingModel.address2,\r\n postcode: bookingModel.postcode,\r\n email: bookingModel.email,\r\n phone: bookingModel.phone,\r\n paymentGatewayRef: this.state.paymentIntent.id ,\r\n lastDigitsCard: '',\r\n paymentStatus: 'Confirmed'\r\n });\r\n } \r\n\r\n const payload = {\r\n accountId: bookingModel.accountId,\r\n bookingId: bookingModel.bookingId,\r\n firstName: bookingModel.firstName,\r\n surname: bookingModel.surname,\r\n address1: bookingModel.address1,\r\n address2: bookingModel.address2,\r\n town: bookingModel.town,\r\n county: bookingModel.county,\r\n postcode: bookingModel.postcode,\r\n emailAddress: bookingModel.email,\r\n phone: bookingModel.phone,\r\n activityTypeId: bookedDetails.activityTypeId,\r\n activitySessionId: bookedDetails.activitySessionId, \r\n startDate: bookedDetails.startDate,\r\n endTime: bookedDetails.endTime,\r\n charges: bookedDetails.orderedTickets,\r\n vouchers: vouchers,\r\n paymentIntentId: this.state.paymentIntent ? this.state.paymentIntent.id : '',\r\n payments: payments\r\n };\r\n \r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(payload)\r\n };\r\n\r\n const response = await fetch('booking/save-booking', options);\r\n const data = await response.json();\r\n\r\n if (data.activityBookingId > 0) {\r\n this.setState({\r\n loading: false,\r\n errorMessage: null,\r\n activityBooking: data,\r\n appliedVoucherAmount: appliedVoucher || 0\r\n });\r\n\r\n localStorage.setItem(\"savedSessionId\", sessionId);\r\n this.clearSessionFlowStates();\r\n\r\n } else {\r\n this.setState({\r\n loading: false,\r\n errorMessage: \"An error occurred in the saving of the booking.\" \r\n });\r\n }\r\n\r\n }\r\n\r\n // for non resident flow\r\n clearSessionFlowStates() {\r\n \r\n localStorage.removeItem(\"nonResidentModel\");\r\n localStorage.removeItem(\"bookedDetails\"); // ticket, qty, type, startdate endtime \r\n localStorage.removeItem(\"nonResidentValidFrom\");\r\n localStorage.removeItem(\"nonResidentValidTo\");\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Redirect } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './components/Home';\r\nimport { FetchData } from './components/FetchData';\r\nimport { Counter } from './components/Counter';\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport './custom.css'\r\nimport { ResidentLogin } from \"./components/ResidentLogin\";\r\nimport { BookedActivities } from \"./components/BookedActivities\";\r\nimport { Activities } from \"./components/Activities\";\r\nimport { ActivitySessions } from \"./components/ActivitySessions\";\r\nimport { BookingDetails } from \"./components/BookingDetails\";\r\nimport { ConfirmDetails } from \"./components/ConfirmDetails\";\r\nimport { Payment } from './components/Payment';\r\nimport { PaymentSuccess } from './components/PaymentSuccess';\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n constructor() {\r\n super();\r\n this.state = {\r\n isUserAuthenticated: null\r\n }; \r\n }\r\n \r\n\r\n componentDidMount() {\r\n let bookingModel = localStorage.getItem(\"bookingModel\");\r\n if (bookingModel) {\r\n this.setState({ isUserAuthenticated: true });\r\n } else {\r\n this.setState({ isUserAuthenticated: false });\r\n }\r\n \r\n }\r\n\r\n handleLogoutCallback = () => { \r\n this.setState({ isUserAuthenticated: false });\r\n localStorage.clear(); \r\n }\r\n\r\n handleLoginCallback = () => {\r\n this.setState({ isUserAuthenticated: true });\r\n }\r\n\r\n render() {\r\n \r\n return (\r\n \r\n {\r\n return (\r\n this.state.isUserAuthenticated ?\r\n :\r\n this.state.isUserAuthenticated === null ? 'Loading...' :\r\n \r\n )\r\n }}\r\n />\r\n\r\n \r\n \r\n \r\n\r\n }\r\n />\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://cra.link/PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://cra.link/PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://cra.link/PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch((error) => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then((registration) => {\r\n registration.unregister();\r\n })\r\n .catch((error) => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","const reportWebVitals = (onPerfEntry) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","//import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport * as serviceWorkerRegistration from './serviceWorkerRegistration';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://cra.link/PWA\r\nserviceWorkerRegistration.unregister();\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}