{"version":3,"sources":["theme/img/sweden.png","theme/img/united-kingdom.png","theme/img/france.png","backbone/GlobalSettings.ts","backbone/Language.tsx","components/base/Loading.tsx","webparts/api/GetUserApi.ts","webparts/api/BookingApi.ts","components/ModalBackButton.tsx","panels/InfoPanel.tsx","webparts/Global.tsx","components/base/SaveButton.tsx","webparts/UserProfile.tsx","components/ComponentDidMount.tsx","webparts/History.tsx","webparts/api/GetPriceApi.ts","components/ModifiedCollapseList.tsx","components/OfferTile.tsx","webparts/api/GetExtraServices.ts","webparts/components/LoginComponent.tsx","webparts/components/ExtraServiceOption.tsx","webparts/components/NetsPaymentComponent.tsx","webparts/api/BonusApi.ts","webparts/components/BookingReceiptInCarPaymentComponent.tsx","components/IcoMoon.tsx","webparts/components/BookingComponent.tsx","webparts/Booking.tsx","webparts/MyPages.tsx","index.js","backbone/AppCore.ts"],"names":["module","exports","GlobalAppsettings","Headers","Authorization","base64","api_key","method","headers","Accept","data","reCaptchaToken","token","t","sessionStorage","getItem","tokenHeader","undefined","body","JSON","stringify","console","info","BackEndBaseUrl","length","setItem","LanguageId","AppId","IsDevelopment","Language","text","id","langid","cache","localStorage","this","parse","search","val","forEach","element","key","toLowerCase","value","fetch","GetLocale","credentials","then","find","storedLocale","locale","moment","LanguageContext","React","Text","Consumer","props","state","edit","App","editLang","bind","msg","setState","lang","displayName","contextType","Loading","loading","style","className","white","role","children","UserApi","GetPostInit","response","json","userId","request","BookingApi","searchAddresses","ModalBackButton","name","onClick","InfoPanel","modal","showBackButton","close","modalPanelOpen","open","document","position","top","window","scrollY","scrollTo","parseInt","paid","a","getCurrentProfile","user","booking","userProfile","bookings","bookingId","cancelUnpaidBooking","cancelPaidBooking","showHeader","map","child","isOpen","contentClassName","modalClassName","onClosed","color","borderLeft","marginLeft","header","title","description","type","aria-label","aria-hidden","overflowY","overflowX","showCancelButton","cancelBookingHandler","display","flex","showCancelPaymentButton","showBackWithoutCancelBooking","Global","Fragment","cancelButtonLabel","height","Component","SaveButton","_title","_text","onSave","small","minWidth","saving","UserProfile","dirty","currentUser","email","mobile","allowMarketing","contact","consent","offerings","isError","showLogoutButton","loadUserProfile","customData","ReactNativeWebView","getParamsFromCurrentURL","GetApiHeaders","catch","reason","error","path","location","href","split","consentToPolicy","consentToMarketing","event","target","checked","removeItem","minHeight","for","placeholder","onChange","changeFirstName","disabled","changeEmail","changeMarketing","saveUserprofile","LogoutUser","ComponentDidMount","onMount","useEffect","History","checkIfDisabled","isReceiptSentModalOpen","checkIfButtonDisabled","isSendReceiptModalDisabled","CalculateDiscount","priceBeforeOffering","price","sum","result","toString","cleanDateTime","pickupTime","timeSplit","Date","month","translatedMonth","translateToSwe","day","hourMin","userProfileBooking","userProfileBookingExist","cancelButtonLoading","cancelDisabled","hideListItem","receiptModalText","userEmail","taxinetBookingId","history","bookingHistory","renderBookingExist","input","getElementById","logo","html2canvas","canvas","imgData","toDataURL","pdf","jsPDF","addImage","getBoundingClientRect","width","save","item","isSendReceiptButtonDisabled","displayPrice","priceInfo","fluid","src","SendReceipt","pickupPos","pickUpTime","format","dropOfPos","payment","paymentDetails","taxAmount","taxRate","netTotalAmount","toFixed","paymentMethod","basePrice","carRegNumber","taxinetBooking","list","Array","isInCarPayment","push","content","sm","view","currentBooking","setUserBooking","ExistingBooking","getUpdateCurrentProfile","updatedUser","currentUserBooking","buttonDisabled","cancelButtonDisabled","isPaid","isCanceled","isAfterTrip","justifyContent","alignItems","fontWeight","bookingNr","size","puTime","validTime","subtract","setTimeout","appUserId","newUserId","GetPriceApi","pickup","dropOff","numberOfPassengers","via","carType","extraServices","message","pickupTimeASAP","offeringId","ModifiedCollapseList","items","i","cursor","command","toggler","defaultOpen","OfferTile","priceLoading","offering","endDate","pickUpStartDate","pickUpEndDate","selected","isDisabled","isSameOrBefore","dateTime","setDate","getDate","year","ExtraServicesApi","success","Error","errorMessage","LoginComponent","recaptcha","refA","refB","refC","refD","handleChildrenMount","showCancelBookingButton","showBackAndRefresh","backspaceHandler","e","part","keyCode","codePart1","focusCodeInput","codePart2","codePart3","codePart4","validateCode","setCodeInputRef","codeInput","s","current","focus","mobileNum","mobileValid","isCodeSent","validUser","regexp","refsName","formEnter","checkLoginStatus","modalOpen","margin","renderLogin","backgroundColor","md","borderBottom","maxWidth","ref","siteKey","onVerify","sendCode","onError","alert","onSubmit","preventDefault","execute","xs","floating","valid","onMobileChange","fontSize","onKeyDown","maxLength","textAlign","onCodeChange","innerRef","isValid","firstDigit","charAt","numLength","phone","country","phoneNumber","validatePhoneNumber","log","has","get","SetToken","currentCode","code","codeDigit","test","mobileNumber","ExtraServiceIcons","CarOptionIcons","NetsPaymentComponent","netsId","netsUrl","useState","setShowBackBottom","publish","subscribe","handleMessageEvent","origin","addEventListener","data-back_state","BonusApi","BookingReceiptComponent","setBooking","createBookingReq","setCreateBookingReq","paymentId","setExtraServices","setOfferingTitle","setNrOfPersons","preliminaryIsOpen","setPreliminaryIsOpen","bookingClosedIsOpen","setBookingClosedIsOpen","confirmBookingIsOpen","setConfirmBookingIsOpen","alertMessage","setAlertMessage","isLoading","setIsLoading","setPickupTime","pickupASAP","setPickupASAP","setbookingSent","setSelected","bonusPoints","setBonusPoints","showBonus","setShowBonus","setBasePrice","originalPrice","setOriginalPrice","showOriginalPrice","setShowOriginalPrice","showExtraServiceCost","setShowExtraServiceCost","showAirportFee","setShowAirportFee","originShowOriginalPrice","setOriginShowOriginalPrice","setUserId","setAirportFee","bookingButtonDisabled","setBookingButtonDisabled","extraServiceNames","offeringTitle","numberOfPersons","priceSummaryData","airportFee","getBonus","cost","showAll","getBonusData","bonus","bonusTickets","ticketBonusPoints","ticketConsumedPoints","ticket","consumedPoints","administrationFee","confirmBookingHandler","CheckTaxinetBookingStatus","bookingValidation","statusMessage","bookingStatus","date","hour","minute","monthString","renderBonusContainer","updBookingReq","updBooking","activateBonus","bonusCashString","renderBooking","travelPrice","extraServicesPrice","Icon","icon","iconSet","iconDictionary","Stroller","mdiBabyCarriage","CarSeat","mdiCarChildSeat","BabySeat","mdiBaby","Pets","carIconDictionary","Normal","Combi","Minibus","_getIconSize","baseSize","ExtraServiceIcon","iconId","CarIcon","ExtraServiceOption","label","isCarOption","onPress","classNames","addonsCarType","carTypeName","priceType","BookingComponent","getExtraServices","Promise","all","getActiveExtraServices","services","onChangeCurrentOffering","offeringType","offeringPercent","offeringFixed","forceUpdate","getPrice","fromValid","toValid","getPriceRequestModel","GooglePlaceId","time","travelNow","userBookings","offeringDatePassedNow","offeringDate","toggleSelectedExtraService","serviceId","serviceName","selectedExtraServices","includes","filter","service","childSeatCost","babySeatCost","dateMin","dateMax","isDirty","travelLater","showFromResult","showToResult","priceStatus","lat","long","fromAddressWithPlaceId","googlePlaceId","addressDetails","addressFromDetails","toAddressWithPlaceId","addressToDetails","childTypeName","petTypeName","createBookingResponse","createBookingRequest","flightNumber","messageToDriver","existingBooking","extraServicesCost","isAirport","childSeatSet","babySeatSet","carTypeIndex","componentInitiated","getPriceRunning","fromInValid","toInValid","inValidFromMessage","inValidToMessage","buttonIsDisabled","lastSelectedDate","lastSelectedTime","inValidFlightMessage","createBooking","priceRequest","dateTimeString","dateTimeStringFormated","newDateTime","newDate","toLocaleString","newTime","newTimeSplitB","newTimeString","momenttz","tz","dateNow","newDateNow","dateNowPlusOneYear","setFullYear","getFullYear","newDateNowPlusOneYear","dateTimeSplit","googlePlaceIds","setCarType","getSearchAddresses","updatedAddressDetails","results","myArray","streetName","valueOf","address","addressInfo","getAddressNumber","currentData","prevState","dateTimeFormatedString","newCurrent","fromPlaceId","toPlaceId","nrOfPassengers","dateTimeFormated","dropoff","getPriceRequest","responsePriceInfo","additionalFee","fixedPrice","percent","Math","round","typeName","isConfirmed","checkUserBookings","toggle","selectTo","data-toggle","tag","invalid","onFromChange","autoComplete","onFromKeyDownHandler","container","paddingLeft","paddingRight","paddingTop","paddingBottom","positionFixed","onAddFromAddress","marginRight","checkIfUndefined","onToChange","onToKeyDownHandler","onAddToAddress","bsSize","onChangeFlightNumber","minLength","radioGroup","onClickTravelNow","onClickTravelLater","min","max","onDateChange","onTimeChange","getOptions","counter","startDate","fixedDiscount","openReceiptComponent","BookingReceiptInCarPaymentComponent","flightId","isWebCheckout","activeExtraServices","extraService","Categories","reduce","acc","category","Children","childrenExtraService","petsExtraService","Booking","from","to","timeMin","timeMax","showPrice","showBookBtn","searchFrom","searchTo","loadingBooking","verifyMobile","searchResult","addressResult","codeFirstDigit","codeSecondDigit","codeThirdDigit","codeFourthDigit","bookingTypes","isDateOpen","isTimeOpen","dateValid","dateInvalid","timeValid","timeInvalid","toISOString","borderColor","openBooking","isValidDateTime","MyPages","CalculateBonusPoints","bonusPointsTotal","bonusPointsOnExpirationDate","bonusPointsAfterExpirationDate","avaiblePoints","bonusExpirationDate","showUserBonuses","topTicket","closetExpirationDate","expirationDate","calendar","availablePoints","showLongTermBonus","array","calcBonusMeter","bonusPointsLongTerm","bonusPointsToUse","points","bonusBarStringValue","cleanBonusDateTime","activeTab","queryStartScreen","URLSearchParams","toLocaleLowerCase","onLogin","renderProfile","tabId","renderOfferings","setUser","renderOfferingList","renderBonuses","global","ReactDOM","render","userprofile","userprofile_history","mypages"],"mappings":"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","file":"static/js/main.e55e6fb7.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/sweden.6413fcd6.png\";","module.exports = __webpack_public_path__ + \"static/media/united-kingdom.6f382b2d.png\";","module.exports = __webpack_public_path__ + \"static/media/france.78e9f99b.png\";","import * as base64 from \"base-64\";\r\nimport * as React from \"react\";\r\n\r\nexport class GlobalAppsettings {\r\n protected static api_key: string = \"*l1^-;L^p1|G%956n_*Q520b\";\r\n static LanguageId: string = \"sv\";\r\n static AppId: string = \"tag.web.parts\";\r\n static tokenHeader: string = \"tx-ref-id\";\r\n\r\n static GetApiHeaders(): HeadersInit {\r\n return new Headers({\r\n Authorization: `Basic ${base64.encode(\r\n `API-TOKEN:${GlobalAppsettings.api_key}`\r\n )}`,\r\n \"Content-Type\": \"application/json\",\r\n \"access-control-allow-origin\": \"*\",\r\n });\r\n }\r\n\r\n static GetRequestInit(): RequestInit {\r\n return {\r\n // credentials: \"same-origin\",\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n };\r\n }\r\n\r\n static GetPostInit(data: any, reCaptchaToken?: string): RequestInit {\r\n let token = \"\";\r\n let t = sessionStorage.getItem(GlobalAppsettings.tokenHeader);\r\n // //console.log(\"token: \" + t);\r\n if (t != undefined) {\r\n token = t;\r\n let theader = GlobalAppsettings.tokenHeader;\r\n return {\r\n // credentials: \"same-origin\",\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n \"tx-ref-id\": token,\r\n \"re-captcha-token\": reCaptchaToken || \"\"\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n } else {\r\n console.info(\"get-post-init \" + GlobalAppsettings.BackEndBaseUrl);\r\n return {\r\n // credentials: \"same-origin\",\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n \"Access-Control-Request-Method\": \"POST\",\r\n \"Access-Control-Request-Headers\": \"tx-ref-id\",\r\n \"re-captcha-token\": reCaptchaToken || \"\"\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n }\r\n }\r\n\r\n static SetToken(token: string) {\r\n if (token.length > 0) {\r\n sessionStorage.setItem(GlobalAppsettings.tokenHeader, token);\r\n }\r\n }\r\n\r\n /**\r\n * Configuration\r\n *\r\n *\r\n */\r\n\r\n static IsDevelopment: boolean = false;\r\n\r\n // static BackEndBaseUrl: string = \"/\";\r\n\r\n //static BackEndBaseUrl: string = \"https://taxi-gbg-webparts-prod-stage.azurewebsites.net/\";\r\n\r\n static BackEndBaseUrl: string = \"https://taxi-gbg-webparts-prod.azurewebsites.net/\";\r\n \r\n // static BackEndBaseUrl: string = \"https://taxi-gbg-webparts-dev.azurewebsites.net/\";\r\n}\r\n","import * as App from 'pubsub-js';\r\nimport * as React from 'react';\r\nimport { GlobalAppsettings } from './GlobalSettings';\r\n\r\n/* Import Local for Sweden */\r\nimport 'moment/locale/se';\r\nimport moment from \"moment\";\r\nimport { UncontrolledButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\r\n\r\nimport lang_sv from '../theme/img/sweden.png'\r\nimport lang_eng from '../theme/img/united-kingdom.png'\r\nimport lang_usa from '../theme/img/united-states-of-america.png'\r\nimport lang_den from '../theme/img/denmark.png'\r\nimport lang_nor from '../theme/img/norway.png'\r\nimport lang_fin from '../theme/img/finland.png'\r\nimport lang_fr from '../theme/img/france.png'\r\nimport lang_sp from '../theme/img/spain.png'\r\n\r\n\r\nexport interface LanguageInfo {\r\n list: KeyWord[];\r\n id: string;\r\n langid: string;\r\n}\r\n\r\nexport interface KeyWord {\r\n key: string;\r\n value: string;\r\n}\r\n\r\nexport interface LanguageState {\r\n current?: LanguageInfo;\r\n}\r\n\r\nexport class Language {\r\n\r\n constructor() {\r\n var cache = localStorage.getItem(GlobalAppsettings.LanguageId);\r\n if (cache!=null)\r\n {\r\n this.text = JSON.parse(cache);\r\n console.info('Loaded Language from Cache');\r\n }\r\n }\r\n\r\n public static GetLocale(): string {\r\n\r\n let storedLocale = localStorage.getItem(GlobalAppsettings.AppId + \"-current-lang\");\r\n if (storedLocale!=null)\r\n {\r\n return storedLocale;\r\n }\r\n\r\n let locale = moment.locale();\r\n if (locale==='en') locale = 'en-US';\r\n if (locale==='se') locale = 'sv';\r\n \r\n localStorage.setItem(GlobalAppsettings.AppId + \"-current-lang\", locale);\r\n \r\n console.info('Get Locale' + locale);\r\n\r\n return locale;\r\n }\r\n\r\n private text?: KeyWord[];\r\n private id?: string;\r\n private langid?: string;\r\n\r\n public loadData(data: KeyWord[]) {\r\n this.text = data;\r\n localStorage.setItem(GlobalAppsettings.LanguageId,JSON.stringify(this.text));\r\n console.info('Saved Language to Cache');\r\n }\r\n\r\n private find(data: KeyWord[],search: string) {\r\n \r\n let val: string= search;\r\n if (search!==undefined && search!==null) {\r\n \r\n let found = false;\r\n \r\n data.forEach((element) => {\r\n if (element.key.toLowerCase()===search.toLowerCase()) {\r\n val = element.value;\r\n found=true;\r\n return val;\r\n } \r\n });\r\n\r\n if (!found) {\r\n // if (GlobalAppsettings.IsDevelopment) {\r\n // return ;\r\n // }\r\n // else {\r\n // return search;\r\n // }\r\n //his.AddMissingText(search);\r\n }\r\n }\r\n else\r\n {\r\n return 'empty.value';\r\n }\r\n return val;\r\n }\r\n\r\n private AddMissingText(text: string) {\r\n if (GlobalAppsettings.IsDevelopment) {\r\n fetch(GlobalAppsettings.BackEndBaseUrl + 'api/app/AddMissingKeyWord?text='+ text + '&lang=' + Language.GetLocale(),\r\n {credentials: \"same-origin\", method: 'post'})\r\n .then(data => {\r\n console.info(\"added keyword \" + text);\r\n });\r\n }\r\n }\r\n\r\n public Text(key: string): string {\r\n if (this.text!=undefined)\r\n {\r\n return this.find(this.text, key);\r\n }\r\n return \"-\"; //Default\r\n }\r\n\r\n public _text(key: string): React.ReactElement | string {\r\n if (this.text!=undefined)\r\n {\r\n return this.find(this.text, key);\r\n }\r\n return \"-\"; //Default\r\n }\r\n}\r\n\r\nexport const LanguageContext = React.createContext(new Language());\r\n\r\nexport const LanguageConsumer = LanguageContext.Consumer;\r\n\r\n\r\nexport interface LanguageProviderState {\r\n current: Language,\r\n edit_lang: boolean\r\n}\r\n\r\nexport interface LanguageProviderProps {\r\n}\r\n\r\nexport class LanguageProvider extends React.Component {\r\n constructor(props:LanguageProviderProps) {\r\n super(props);\r\n let cl: Language = new Language();\r\n this.state = { current: cl, edit_lang: false};\r\n }\r\n\r\n componentDidMount() {\r\n this.updateLanguage(Language.GetLocale());\r\n App.subscribe(\"language.update\",this.update.bind(this));\r\n App.subscribe('change-lang',this.changeLang.bind(this));\r\n }\r\n\r\n componentWillUnmount() {\r\n App.unsubscribe(\"language.update\");\r\n App.unsubscribe('change-lang');\r\n }\r\n\r\n private changeLang(msg:string, data?: any)\r\n {\r\n if (data!=undefined && data.lang!=undefined)\r\n {\r\n localStorage.setItem(GlobalAppsettings.AppId + \"-current-lang\", data.lang);\r\n \r\n fetch(GlobalAppsettings.BackEndBaseUrl + 'api/user/UpdateCurrentLang?lang='+ data.lang,\r\n {credentials: \"same-origin\"})\r\n .then(response => response.json() as Promise)\r\n .then(data => {\r\n //OK\r\n console.info(data);\r\n });\r\n this.updateLanguage(data.lang, true);\r\n }\r\n }\r\n\r\n private update(msg: string, lang: string) {\r\n var textdata = new Array();\r\n\r\n textdata.push({key: \"start.message\",value: \"element.value\"});\r\n textdata.push({key: \"engage.buttontext\",value: \"Test\"});\r\n textdata.push({key: \"button.close\",value: \"Stäng\"});\r\n\r\n let cl: Language = new Language();\r\n cl.loadData(textdata);\r\n \r\n this.setState({current: cl});\r\n }\r\n\r\n private updateLanguage(lang: string, reload: boolean = false) {\r\n console.info(\" updateLanguage -> \" + lang);\r\n fetch(GlobalAppsettings.BackEndBaseUrl + 'api/app/currentlanguage?lang='+ lang,\r\n {credentials: \"same-origin\"})\r\n .then(response => response.json() as Promise)\r\n .then(data => {\r\n var textdata = new Array();\r\n if (data.list !=undefined && data.list.length > 0)\r\n {\r\n data.list.map(element => {\r\n textdata.push({key: element.key,value: element.value});\r\n });\r\n let cl: Language = new Language();\r\n cl.loadData(textdata);\r\n this.setState({current: cl});\r\n \r\n if (reload) {\r\n window.location.reload(); \r\n }\r\n }\r\n else\r\n {\r\n console.info(\"No language entries returned for language \" + data.langid);\r\n }\r\n }).catch(reason => {\r\n // //console.log(reason);\r\n });\r\n }\r\n\r\n render() {\r\n let currentLang = lang_sv;\r\n \r\n switch (Language.GetLocale()) {\r\n case 'sv':\r\n currentLang = lang_sv;\r\n break;\r\n case 'en-US':\r\n currentLang = lang_eng;\r\n break;\r\n case 'fr':\r\n currentLang = lang_fr;\r\n break;\r\n }\r\n return (\r\n \r\n {this.props.children}\r\n {/* {this.renderMenu(currentLang)} */}\r\n \r\n );\r\n }\r\n\r\n private renderMenu(currentLang: string ) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n App.publish('change-lang',{lang:'sv'})}>{' '}Svenska\r\n App.publish('change-lang',{lang:'en-US'})}>{' '}English\r\n App.publish('change-lang',{lang:'fr'})}>{' '}Francais\r\n \r\n {GlobalAppsettings.IsDevelopment ? \r\n <>\r\n
\r\n {this.state.edit_lang ?<>\r\n {\r\n this.setState({edit_lang: false});\r\n App.publish('edit-lang',false);\r\n }}>\r\n {' '}Save Language\r\n : <>\r\n {\r\n this.setState({edit_lang: true});\r\n App.publish('edit-lang',true);\r\n }}>\r\n {' '}Edit Language\r\n }\r\n \r\n :<>}\r\n
\r\n
\r\n\r\n );\r\n }\r\n}\r\n\r\nexport interface TextState {\r\n edit: boolean\r\n text: string\r\n}\r\n\r\nexport interface TextProps {\r\n id: string\r\n}\r\n\r\nexport class Text extends React.Component {\r\n static displayName = 'lang';\r\n static contextType = LanguageContext;\r\n constructor(props: any) {\r\n super(props);\r\n \r\n this.state = {\r\n edit: false,\r\n text: this.props.id\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n App.subscribe('edit-lang',this.editLang.bind(this));\r\n }\r\n\r\n componentWillUnmount() {\r\n App.unsubscribe('edit-lang');\r\n }\r\n\r\n private editLang(msg: string, data: boolean) {\r\n console.info('edit-lang' + data);\r\n this.setState({edit: data});\r\n }\r\n\r\n private AddMissingText(text: string) {\r\n if (GlobalAppsettings.IsDevelopment) {\r\n fetch(GlobalAppsettings.BackEndBaseUrl + 'api/app/AddMissingKeyWord?text='+ text + '&lang=' + Language.GetLocale(),\r\n {credentials: \"same-origin\", method: 'post'})\r\n .then(data => {\r\n console.info(\"added keyword \" + text);\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return <>\r\n \r\n { lang => ( <>\r\n {this.state.edit ? <>\r\n {lang.Text(this.state.text)} - edit\r\n :<>\r\n {lang.Text(this.state.text)}\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 * as React from \"react\";\r\n\r\nimport \"./spinner.css\";\r\n\r\ninterface LoadingProps {\r\n loading?: boolean;\r\n style?: any;\r\n white?: boolean;\r\n}\r\n\r\nexport class Loading extends React.Component {\r\n constructor(props: LoadingProps) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n return (\r\n \r\n {this.props.loading ? (\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","import { ContentItem } from '../../api/Content';\r\nimport { GlobalAppsettings } from '../../backbone/GlobalSettings';\r\nimport { UserProfileResult } from '../types/UserProfile';\r\n\r\nexport interface UpdateUserRequest\r\n{\r\n userId : string | undefined\r\n}\r\n\r\nexport class UserApi\r\n{\r\n public static async getCurrentProfile()\r\n {\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/profile/CurrentProfile',\r\n GlobalAppsettings.GetPostInit(null))\r\n\r\n const data = (await response.json()) as UserProfileResult;\r\n\r\n return data\r\n\r\n }\r\n\r\n // backened get user profile with updates\r\n public static async getUserProfileWithUpdate(userId: string)\r\n {\r\n const request = {\r\n userId : userId\r\n } as UpdateUserRequest;\r\n\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/profile/UserProfileWithUpdate',\r\n GlobalAppsettings.GetPostInit(request))\r\n\r\n const data = (await response.json()) as UserProfileResult;\r\n\r\n return data\r\n }\r\n\r\n // temporary\r\n public static async getUpdateCurrentProfile(userId: string)\r\n {\r\n const request:UpdateUserRequest = {\r\n userId : userId\r\n } \r\n\r\n //const response = await fetch('https://taxi-gbg-mobile-prod.azurewebsites.net/api/profile/UserProfile',\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/profile/UserProfile',\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\" : \"application/json\",\r\n \"Authorization\" : \"Basic QVBJLVRPS0VOOnRlc3Q=\"\r\n },\r\n body: JSON.stringify(request)\r\n })\r\n const data = (await response.json()) as UserProfileResult;\r\n\r\n return data\r\n }\r\n\r\n public static async SendReceipt(\r\n request : string\r\n )\r\n {\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/profile/SendReceipt',\r\n GlobalAppsettings.GetPostInit(request))\r\n\r\n const data = (await response.json()) as boolean\r\n\r\n return data\r\n }\r\n\r\n}","import { ContentItem } from '../../api/Content';\r\nimport { GlobalAppsettings } from '../../backbone/GlobalSettings';\r\nimport { GetAddressResult } from '../types/Booking';\r\nimport { SearchAddresses } from '../types/SearchAddresses';\r\nimport { TaxinetBookingValidation, TaxinetBookingValidationResponse } from '../types/TaxinetBookingValidation';\r\n\r\nexport class BookingApi\r\n{\r\n public static async getSearchAddresses(\r\n searchAddresses : string\r\n )\r\n {\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/booking/SearchAddressesAtTaxinet',\r\n GlobalAppsettings.GetPostInit(searchAddresses))\r\n\r\n const data = (await response.json()) as SearchAddresses\r\n\r\n return data\r\n }\r\n\r\n public static async getAddressNumber(\r\n request : string\r\n )\r\n {\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/booking/GetAdressesFromTaxinet',\r\n GlobalAppsettings.GetPostInit(request))\r\n const data = (await response.json()) as GetAddressResult\r\n\r\n return data\r\n }\r\n\r\n public static async cancelUnpaidBooking(\r\n request : string\r\n )\r\n {\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/booking/CancelUnpaidBooking',\r\n GlobalAppsettings.GetPostInit(request))\r\n\r\n const data = (await response.json()) as boolean\r\n\r\n return data\r\n }\r\n\r\n public static async cancelPaidBooking(\r\n request : string\r\n )\r\n {\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/booking/CancelPaidBooking',\r\n GlobalAppsettings.GetPostInit(request))\r\n\r\n const data = (await response.json()) as boolean\r\n\r\n return data\r\n }\r\n\r\n\r\n\r\n\r\n public static async CheckTaxinetBookingStatus(\r\n request : TaxinetBookingValidation\r\n )\r\n {\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/booking/TaxinetBookingStatus',\r\n GlobalAppsettings.GetPostInit(request))\r\n const data = (await response.json()) as TaxinetBookingValidationResponse\r\n\r\n return data\r\n }\r\n \r\n\r\n\r\n\r\n\r\n\r\n // public static async CheckBookingValidationStatus(\r\n // pickup : string\r\n // )\r\n // {\r\n // const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/booking/CheckBookingValidationStatus',\r\n // GlobalAppsettings.GetPostInit(pickup))\r\n\r\n // const data = (await response.json()) as boolean\r\n\r\n // return data\r\n // }\r\n\r\n // public static async CheckBookingApplicationStatus()\r\n // {\r\n // const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/booking/CheckBookingApplicationStatus',\r\n // GlobalAppsettings.GetRequestInit())\r\n\r\n // const data = (await response.json()) as boolean\r\n\r\n // return data\r\n\r\n // }\r\n\r\n}\r\n\r\n","import React from \"react\";\r\n\r\nimport \"../webparts/styles/InfoPanel.css\";\r\n\r\ninterface Props {\r\n name: string;\r\n onClick: () => Promise | void;\r\n}\r\n\r\nconst ModalBackButton: React.FC = ({ name, onClick }) => {\r\n return (\r\n
\r\n\t\t\t
\r\n \t {name}\r\n\t\t\t
\r\n
\r\n );\r\n};\r\n\r\nexport default ModalBackButton;\r\n","import * as React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport * as App from \"pubsub-js\";\r\nimport { UserApi } from \"../webparts/api/GetUserApi\";\r\nimport { BookingApi } from \"../webparts/api/BookingApi\";\r\nimport ModalBackButton from \"../components/ModalBackButton\";\r\n\r\nimport \"../webparts/styles/InfoPanel.css\";\r\nimport \"./panel.css\";\r\n\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from \"reactstrap\";\r\n\r\nexport interface InfoPanelState {\r\n modal: boolean;\r\n showBackButton: boolean;\r\n}\r\n\r\nexport interface InfoPanelProps {\r\n title?: string;\r\n description?: string;\r\n header?: React.ReactNode;\r\n color?: string;\r\n cancelButtonLabel?: string;\r\n modalPanelOpen?: string;\r\n showHeader?: boolean;\r\n position?: string;\r\n onClosed?: () => void;\r\n showCancelButton?: boolean;\r\n showCancelPaymentButton?: boolean;\r\n showBackWithoutCancelBooking?: boolean;\r\n showBackAndRefresh?: boolean;\r\n}\r\n\r\nexport class InfoPanel extends React.Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n modal: false,\r\n showBackButton: false,\r\n };\r\n\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n public async componentDidMount() {\r\n if (this.props.modalPanelOpen != undefined)\r\n App.subscribe(this.props.modalPanelOpen, this.open.bind(this));\r\n }\r\n\r\n public componentWillUnmount() {\r\n App.unsubscribe(this.open.bind(this));\r\n }\r\n\r\n open() {\r\n //disabel scroll on body\r\n document.body.style.position = \"fixed\";\r\n document.body.style.top = `-${window.scrollY}px`;\r\n //Load data\r\n this.setState({\r\n modal: true,\r\n });\r\n }\r\n\r\n close() {\r\n this.setState({\r\n modal: false,\r\n });\r\n const scrollY = document.body.style.top;\r\n document.body.style.position = \"\";\r\n document.body.style.top = \"\";\r\n window.scrollTo(0, parseInt(scrollY || \"0\") * -1);\r\n }\r\n\r\n async cancelBookingHandler(paid : boolean) {\r\n const user = await UserApi.getCurrentProfile();\r\n const booking = user.userProfile.bookings[0];\r\n if(!booking) {\r\n this.close();\r\n return;\r\n }\r\n const bookingId = booking.bookingId;\r\n\r\n\r\n if(!paid)\r\n {\r\n const success = await BookingApi.cancelUnpaidBooking(bookingId);\r\n if(success)\r\n {\r\n }\r\n else{\r\n }\r\n this.close();\r\n }\r\n else\r\n {\r\n const success = await BookingApi.cancelPaidBooking(bookingId);\r\n if(success)\r\n {\r\n }\r\n else{\r\n }\r\n this.close();\r\n }\r\n \r\n }\r\n\r\n render() {\r\n let showHeader = true;\r\n\r\n if (this.props.showHeader != undefined) {\r\n showHeader = this.props.showHeader;\r\n }\r\n\r\n const childrenWithProp = React.Children.map(\r\n this.props.children,\r\n (child) => {\r\n if (React.isValidElement(child)) {\r\n return React.cloneElement(child, { onClick: this.close });\r\n }\r\n }\r\n );\r\n\r\n return (\r\n
\r\n \r\n {showHeader ? (\r\n
\r\n \r\n {this.props.header ? (\r\n this.props.header\r\n ) : (\r\n
\r\n

{this.props.title}

\r\n
{this.props.description}
\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 {/* {childrenWithProp} */}\r\n {this.props.children}\r\n \r\n
\r\n {(this.props.showCancelButton === undefined\r\n ? true\r\n : this.props.showCancelButton) && (\r\n \r\n this.cancelBookingHandler(false)}\r\n name=\"Tillbaka\"\r\n />\r\n\r\n
\r\n {/* */}\r\n \r\n )}\r\n
\r\n
\r\n {(this.props.showCancelPaymentButton === undefined\r\n ? true\r\n : this.props.showCancelPaymentButton) && (\r\n \r\n this.cancelBookingHandler(true)}\r\n name=\"Tillbaka\"\r\n />\r\n\r\n
\r\n {/* */}\r\n \r\n )}\r\n
\r\n
\r\n {(this.props.showBackWithoutCancelBooking === undefined\r\n ? true\r\n : this.props.showBackWithoutCancelBooking) && (\r\n \r\n this.close()}\r\n name=\"Tillbaka\"\r\n />\r\n\r\n
\r\n {/* */}\r\n \r\n )}\r\n
\r\n {/*
\r\n {(this.props.showBackAndRefresh === undefined\r\n ? true\r\n : this.props.showBackAndRefresh) && (\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, useReducer } from 'react';\r\nimport { Container, Button, Fade, Row, Col } from 'reactstrap';\r\n\r\nimport * as App from 'pubsub-js';\r\nimport { LanguageContext, Language } from '../backbone/Language';\r\nimport { GlobalAppsettings } from '../backbone/GlobalSettings';\r\nimport { Loading } from '../components/base/Loading';\r\nimport { InfoPanel } from '../panels/InfoPanel';\r\nimport { ContentPanel } from '../panels/ContentPanel';\r\n\r\nexport interface GlobalProps {\r\n\r\n}\r\n\r\nexport interface GlobalState {\r\n loading: boolean\r\n locale: string\r\n}\r\n\r\nexport class Global extends React.Component {\r\n static displayName = Global.name;\r\n static contextType = LanguageContext;\r\n\r\n constructor(props:GlobalProps) {\r\n super(props);\r\n\r\n this.state= {\r\n loading: false,\r\n locale: Language.GetLocale()\r\n }\r\n\r\n }\r\n\r\n componentDidMount() {\r\n \r\n }\r\n\r\n render () {\r\n\r\n return ( \r\n \r\n {lang => \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","import * as React from 'react';\r\nimport * as App from 'pubsub-js';\r\n\r\nimport { Button, Fade } from 'reactstrap';\r\n\r\nexport interface SaveButtonState {\r\n text: string,\r\n title: string\r\n}\r\n\r\nexport interface SaveButtonProps {\r\n title?: string,\r\n text?: string,\r\n saving: boolean,\r\n small?: boolean,\r\n pill?: boolean,\r\n onSave?: (()=> void)\r\n}\r\n\r\nexport class SaveButton extends React.Component {\r\n constructor(props:SaveButtonProps) {\r\n super(props);\r\n \r\n let _title = props.title!=undefined ? props.title: '';\r\n let _text= props.text!=undefined ? props.text: '';\r\n\r\n this.state = {\r\n title: _title,\r\n text: _text\r\n };\r\n }\r\n\r\n private onClick() {\r\n\r\n if (this.props.onSave!=undefined) this.props.onSave();\r\n }\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n","import React, { Component, useReducer } from \"react\";\r\nimport {\r\n Container,\r\n Button,\r\n Fade,\r\n Row,\r\n Col,\r\n Form,\r\n FormGroup,\r\n Label,\r\n Input,\r\n} from \"reactstrap\";\r\n\r\nimport * as App from \"pubsub-js\";\r\nimport { LanguageContext, Language } from \"../backbone/Language\";\r\nimport { GlobalAppsettings } from \"../backbone/GlobalSettings\";\r\nimport { Loading } from \"../components/base/Loading\";\r\nimport { InfoPanel } from \"../panels/InfoPanel\";\r\nimport { ContentPanel } from \"../panels/ContentPanel\";\r\n\r\nimport { User } from \"./api/User\";\r\nimport { SaveButton } from \"../components/base/SaveButton\";\r\nimport { UrlHelper } from \"../backbone/UrlHelper\";\r\nimport \"./styles/UserProfileStyle.css\";\r\n\r\nexport interface UserProfileProps {\r\n customData?: string;\r\n}\r\n\r\nexport interface UserProfileState {\r\n loading: boolean;\r\n dirty: boolean;\r\n saving: boolean;\r\n currentUser?: User.UserProfile;\r\n showLogoutButton: boolean;\r\n}\r\n\r\n\r\n\r\nexport class UserProfile extends React.Component<\r\n UserProfileProps,\r\n UserProfileState\r\n> {\r\n static displayName = UserProfile.name;\r\n static contextType = LanguageContext;\r\n\r\n constructor(props: UserProfileProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: true,\r\n saving: false,\r\n dirty: false,\r\n currentUser: {\r\n id: \"\",\r\n bookings: [],\r\n email: \"\",\r\n mobile: \"\",\r\n name: \"\",\r\n allowMarketing: true,\r\n contact: {\r\n consent: true,\r\n },\r\n offerings: [],\r\n isError: false,\r\n },\r\n showLogoutButton: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.loadUserProfile(this.props.customData);\r\n if(!window.ReactNativeWebView){\r\n this.setState({showLogoutButton: true}) \r\n }\r\n }\r\n\r\n loadUserProfile(customData?: string) {\r\n let id = undefined;\r\n\r\n if (customData!=undefined)\r\n {\r\n id = customData;\r\n }\r\n else\r\n {\r\n id = this.getParamsFromCurrentURL();\r\n }\r\n \r\n if (id == undefined) return;\r\n\r\n const request = {\r\n userId: id,\r\n };\r\n\r\n fetch(GlobalAppsettings.BackEndBaseUrl + \"api/profile/UserProfile\", {\r\n method: \"POST\",\r\n headers: GlobalAppsettings.GetApiHeaders(),\r\n body: JSON.stringify(request),\r\n credentials: \"same-origin\",\r\n })\r\n .then((response) => response.json() as Promise)\r\n .then((data) => {\r\n this.setState({ loading: false, currentUser: data.userProfile });\r\n })\r\n .catch((reason) => {\r\n console.error(reason);\r\n });\r\n }\r\n\r\n getParamsFromCurrentURL(): string | undefined {\r\n try {\r\n var path = window.location.href.split(\"?userId=\");\r\n\r\n if (path.length > 1) {\r\n var id = path[path.length - 1];\r\n return id;\r\n } else {\r\n return undefined;\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n saveUserprofile() {\r\n var user = this.state.currentUser;\r\n if (user != undefined) {\r\n this.setState({ saving: true });\r\n\r\n const request = {\r\n //userId: \"80c95bce-2993-44ef-98d4-ffeefc3b0153\",\r\n userId: this.state.currentUser?.id,\r\n name: this.state.currentUser?.name,\r\n email: this.state.currentUser?.email,\r\n consentToPolicy: this.state.currentUser?.contact.consent,\r\n consentToMarketing: this.state.currentUser?.allowMarketing,\r\n };\r\n\r\n fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/profile/UpdateUserProfile\",\r\n {\r\n method: \"POST\",\r\n headers: GlobalAppsettings.GetApiHeaders(),\r\n body: JSON.stringify(request),\r\n credentials: \"same-origin\",\r\n }\r\n )\r\n .then((response) => response.json() as Promise)\r\n .then((data) => {\r\n this.setState({ loading: false, saving: false, dirty: false });\r\n })\r\n .catch((reason) => {\r\n console.error(reason);\r\n this.setState({ loading: false, saving: false });\r\n });\r\n }\r\n }\r\n\r\n changeFirstName(event: any) {\r\n var user = this.state.currentUser;\r\n if (user != undefined) {\r\n user.name = event.target.value;\r\n this.setState({ dirty: true, currentUser: user });\r\n }\r\n }\r\n\r\n changeEmail(event: any) {\r\n var user = this.state.currentUser;\r\n if (user != undefined) {\r\n user.email = event.target.value;\r\n this.setState({ dirty: true, currentUser: user });\r\n }\r\n }\r\n\r\n changeMarketing(event: any) {\r\n var user = this.state.currentUser;\r\n if (user != undefined) {\r\n user.allowMarketing = event.target.checked;\r\n this.setState({ dirty: true, currentUser: user });\r\n }\r\n }\r\n\r\n changePolicy(event: any) {\r\n var user = this.state.currentUser;\r\n if (user != undefined) {\r\n user.contact.consent = event.target.checked;\r\n this.setState({ dirty: true, currentUser: user });\r\n }\r\n }\r\n\r\n LogoutUser() {\r\n sessionStorage.removeItem('tx-ref-id');\r\n window.location = \"https://www.taxigoteborg.se/\" as any;\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {(lang) => (\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.state.dirty ? (\r\n \r\n this.saveUserprofile()}\r\n />\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n
\r\n this.LogoutUser()}\r\n >\r\n Logga ut\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, { useEffect } from \"react\";\r\n\r\ninterface IProps {\r\n onMount: () => void;\r\n}\r\n\r\nconst ComponentDidMount: React.FC = ({ onMount }) => {\r\n useEffect(() => {\r\n onMount();\r\n }, []);\r\n\r\n return null;\r\n};\r\n\r\nexport default ComponentDidMount;\r\n","import React, { Component, useReducer } from \"react\";\r\nimport {\r\n Container,\r\n Button,\r\n Fade,\r\n Row,\r\n Col,\r\n Form,\r\n Modal,\r\n ModalBody,\r\n ModalFooter,\r\n} from \"reactstrap\";\r\n\r\nimport * as App from \"pubsub-js\";\r\nimport { LanguageContext, Language } from \"../backbone/Language\";\r\nimport { GlobalAppsettings } from \"../backbone/GlobalSettings\";\r\nimport { Loading } from \"../components/base/Loading\";\r\nimport { InfoPanel } from \"../panels/InfoPanel\";\r\nimport { ContentPanel } from \"../panels/ContentPanel\";\r\n\r\nimport { User } from \"./api/User\";\r\nimport { SaveButton } from \"../components/base/SaveButton\";\r\nimport { UrlHelper } from \"../backbone/UrlHelper\";\r\nimport { CollapseList, CollapseListItem } from \"../components/CollapseList\";\r\n\r\nimport moment from \"moment\";\r\n\r\nimport { jsPDF } from \"jspdf\";\r\nimport html2canvas from \"html2canvas\";\r\nimport { display } from \"html2canvas/dist/types/css/property-descriptors/display\";\r\n\r\nimport \"./styles/History.css\";\r\nimport { UserApi } from \"./api/GetUserApi\";\r\nimport { BookingInfo, UserProfileResult } from \"./types/UserProfile\";\r\nimport ComponentDidMount from \"../components/ComponentDidMount\";\r\nimport { BookingApi } from \"./api/BookingApi\";\r\nimport { mdiTransitSkip } from \"@mdi/js\";\r\n// import { result } from \"lodash\";\r\n\r\nexport interface HistoryProps {\r\n customData?: string;\r\n}\r\n\r\nexport interface HistoryState {\r\n loading: boolean;\r\n currentUser?: User.UserProfile;\r\n history?: User.Booking[];\r\n currentBooking?: User.Booking;\r\n userProfile: UserProfileResult | null;\r\n userProfileBooking: BookingInfo | null;\r\n userProfileBookingExist: boolean;\r\n cancelButtonLoading: boolean;\r\n cancelDisabled: boolean;\r\n hideListItem: boolean;\r\n isReceiptSentModalOpen: boolean;\r\n receiptModalText: string;\r\n userEmail: string;\r\n isSendReceiptModalDisabled: boolean;\r\n taxinetBookingId: string;\r\n}\r\n\r\nexport class History extends React.Component {\r\n static displayName = History.name;\r\n static contextType = LanguageContext;\r\n\r\n constructor(props: HistoryProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: true,\r\n currentUser: {\r\n id: \"\",\r\n bookings: [],\r\n email: \"\",\r\n mobile: \"\",\r\n name: \"\",\r\n allowMarketing: true,\r\n contact: {\r\n consent: true,\r\n },\r\n offerings: [],\r\n isError: false,\r\n },\r\n userProfile: null,\r\n userProfileBooking: null,\r\n userProfileBookingExist: false,\r\n cancelButtonLoading: false,\r\n cancelDisabled: false,\r\n hideListItem: false,\r\n isReceiptSentModalOpen: false,\r\n receiptModalText: \"Kollar efter befintlig e-epostadress...\",\r\n userEmail: \"\",\r\n isSendReceiptModalDisabled: false,\r\n taxinetBookingId: \"\"\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.loadUserProfile(this.props.customData);\r\n }\r\n\r\n loadUserProfile(customData?: string) {\r\n let id = undefined;\r\n\r\n if (customData != undefined) {\r\n id = customData;\r\n } else {\r\n id = this.getParamsFromCurrentURL();\r\n }\r\n\r\n const request = {\r\n userId: id,\r\n };\r\n\r\n fetch(GlobalAppsettings.BackEndBaseUrl + \"api/profile/UserProfile\", {\r\n method: \"POST\",\r\n headers: GlobalAppsettings.GetApiHeaders(),\r\n body: JSON.stringify(request),\r\n credentials: \"same-origin\",\r\n })\r\n .then((response) => response.json() as Promise)\r\n .then((data) => {\r\n this.setState({\r\n loading: false,\r\n currentUser: data.userProfile,\r\n history: data.bookingHistory,\r\n });\r\n })\r\n .catch((reason) => {\r\n });\r\n }\r\n\r\n getParamsFromCurrentURL(): string | undefined {\r\n try {\r\n var path = window.location.href.split(\"?userId=\");\r\n\r\n if (path.length > 1) {\r\n var id = path[path.length - 1];\r\n return id;\r\n } else {\r\n return undefined;\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
{this.renderBookingExist()}
\r\n
\r\n

\r\n För information om tidigare bokningar hänvisar vi till kundservice.\r\n

\r\n {window.open(\"https://taxigoteborg.se/kundservice\", \"_blank\");}}\r\n >\r\n Kundservice\r\n \r\n
\r\n {/* \r\n {(lang) => (\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.renderReciept(this.state.currentBooking)}\r\n
\r\n \r\n
\r\n )}\r\n
*/}\r\n
\r\n );\r\n }\r\n\r\n share() {\r\n //this.printDocument();\r\n // if (navigator.share) {\r\n // navigator.share({\r\n // title: 'Taxi Göteborg Kvitto',\r\n // // files:\r\n // }).then(() => {\r\n // })\r\n // .catch(console.error);\r\n // } else {\r\n // // fallback\r\n // }\r\n }\r\n\r\n printDocument() {\r\n const input = document.getElementById(\"divToPrint\");\r\n const logo = document.getElementById(\"taxi-logo\") as HTMLImageElement;\r\n if (input != null)\r\n html2canvas(input).then((canvas) => {\r\n const imgData = canvas.toDataURL(\"image/png\");\r\n const pdf = new jsPDF(\"p\", \"px\", \"A4\", true);\r\n\r\n pdf.addImage(logo, 20, 10, 100, 100);\r\n\r\n pdf.addImage(\r\n imgData,\r\n \"PNG\",\r\n 20,\r\n 120,\r\n input.getBoundingClientRect().width / 2,\r\n input.getBoundingClientRect().height / 2\r\n );\r\n pdf.save(\"download.pdf\");\r\n });\r\n }\r\n\r\n checkIfDisabled = () => {\r\n if (this.state.isReceiptSentModalOpen) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n checkIfButtonDisabled = () => {\r\n if (this.state.isSendReceiptModalDisabled) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n private renderReciept(item: User.Booking | undefined) {\r\n const isSendReceiptButtonDisabled = this.checkIfDisabled();\r\n const isSendReceiptModalDisabled = this.checkIfButtonDisabled();\r\n //lukas\r\n if (item != undefined) {\r\n let displayPrice = item.priceInfo.price + 12; // item.payment.administationFeeInfo.administrationFee;\r\n if (item.priceInfo.price === 0) {\r\n displayPrice = item.priceInfo.price;\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

Kvitto

\r\n \r\n \r\n this.SendReceipt(item.id, this.state.currentUser?.id)\r\n }\r\n disabled={isSendReceiptButtonDisabled}\r\n // onClick={() => this.share()}\r\n >\r\n Skicka kvitto\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n

\r\n Från: {item.pickupPos.title}
\r\n \r\n {moment(item.pickUpTime).format(\"YYYY-MM-DD HH:mm\")}\r\n \r\n

\r\n

\r\n Till: {item.dropOfPos.title}
\r\n

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

Pris: {displayPrice} kr

\r\n \r\n Varav moms: {item.payment.paymentDetails.taxAmount + 0.68} kr (\r\n {item.payment.paymentDetails.taxRate}%)\r\n \r\n
\r\n \r\n Netto: {(item.payment.paymentDetails.netTotalAmount - 0.68 + 12).toFixed(2) /* item.payment.administationFeeInfo.administrationTaxAmount + item.payment.administationFeeInfo.administrationFee*/} kr\r\n \r\n
\r\n \r\n Betalningsmedel:{\" \"}\r\n {item.payment.paymentDetails.paymentMethod}\r\n \r\n
\r\n
\r\n
\r\n {this.CalculateDiscount(\r\n item.priceInfo.basePrice,\r\n item.priceInfo.price\r\n )}\r\n
\r\n
\r\n \r\n Registreringsnummer: {item.carRegNumber}\r\n \r\n
\r\n
\r\n \r\n Bokningsnummer: {item.taxinetBooking.taxinetBookingId}\r\n \r\n
\r\n
\r\n {/*
\r\n \r\n Betalningsreferens:{\" \"}\r\n {item.payment.paymentProviderInfo.paymentId}\r\n \r\n
\r\n
\r\n Bokningsreferens: {item.id}\r\n
\r\n
*/}\r\n
\r\n \r\n
\r\n \r\n \r\n

Tack för att du reser med oss!

\r\n \r\n
\r\n \r\n \r\n \r\n \r\n Taxi Göteborg Ekonomisk Förening, företagsnummer\r\n 757200-4351\r\n \r\n
\r\n
\r\n kundservice@taxigoteborg.se +46 (0)31-650000\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n {this.state.receiptModalText}\r\n \r\n \r\n this.setState({ isReceiptSentModalOpen: false })\r\n }\r\n disabled={isSendReceiptModalDisabled}\r\n >\r\n OK\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n private getBookings(\r\n bookings: User.Booking[] | undefined,\r\n lang: Language\r\n ): CollapseListItem[] {\r\n var list: CollapseListItem[] = new Array();\r\n\r\n if (bookings != undefined) {\r\n bookings.forEach((item) => {\r\n if (item.isInCarPayment == undefined || !item.isInCarPayment) {\r\n let displayPrice = item.priceInfo.price + 12; // item.payment.administationFeeInfo.administrationFee;\r\n if (item.priceInfo.price === 0) {\r\n displayPrice = item.priceInfo.price;\r\n }\r\n var count = 0;\r\n count++;\r\n list.push({\r\n title: (\r\n \r\n {item.dropOfPos.title}\r\n \r\n {moment(item.pickUpTime).format(\"YYYY-MM-DD HH:mm\")}\r\n \r\n \r\n ),\r\n content: (\r\n \r\n

Från: {item.pickupPos.title}

\r\n

Pris: {displayPrice} kr

\r\n \r\n \r\n \r\n Betalat med {item.payment.paymentDetails.paymentMethod}\r\n \r\n \r\n \r\n this.view(item)}\r\n >\r\n Visa kvitto\r\n \r\n \r\n \r\n
\r\n ),\r\n isOpen: count == 1 ? true : false,\r\n });\r\n }\r\n });\r\n }\r\n\r\n return list;\r\n }\r\n\r\n view(item: User.Booking) {\r\n this.setState({ currentBooking: item });\r\n\r\n App.publish(\"view.reciept\", null);\r\n }\r\n\r\n private renderBookingExist(): React.ReactNode {\r\n return (\r\n
\r\n {\r\n this.setUserBooking();\r\n }}\r\n />\r\n <>{this.ExistingBooking()}\r\n
\r\n );\r\n }\r\n\r\n private async setUserBooking() {\r\n\r\n if (!window.ReactNativeWebView) {\r\n if (this.state.userProfile === null) {\r\n const user = await UserApi.getCurrentProfile();\r\n if (!user) return;\r\n const updatedUser = await UserApi.getUpdateCurrentProfile(\r\n user.userProfile.id\r\n );\r\n this.setState({ userEmail: updatedUser.userProfile.email });\r\n if (updatedUser.userProfile.bookings.length > 0) {\r\n const currentUserBooking = updatedUser.userProfile.bookings[0];\r\n\r\n // if(this.state.currentBooking != undefined)\r\n // {\r\n // const currentBooking = this.state.currentBooking;\r\n // const taxinetBookingInfo = currentBooking.taxinetBooking;\r\n // this.setState({ taxinetBookingId: taxinetBookingInfo.taxinetBookingId })\r\n // }\r\n\r\n // const taxinetBookingId : string = \"\";\r\n\r\n var buttonDisabled = this.cancelButtonDisabled(\r\n currentUserBooking.pickUpTime\r\n );\r\n this.setState({\r\n userProfileBooking: currentUserBooking,\r\n userProfile: updatedUser,\r\n cancelDisabled: buttonDisabled,\r\n });\r\n if (\r\n currentUserBooking !== null &&\r\n currentUserBooking.isPaid === true &&\r\n currentUserBooking.isCanceled === false &&\r\n currentUserBooking.isAfterTrip === false\r\n ) {\r\n this.setState({ userProfileBookingExist: true });\r\n }\r\n }\r\n }\r\n } else return;\r\n }\r\n\r\n private ExistingBooking() {\r\n // const userBookings = this.state.userProfile?.userProfile.bookings[0];\r\n return (\r\n
\r\n \r\n
\r\n \r\n

Aktuell bokning

\r\n
\r\n
\r\n
\r\n
Tid för avresa
\r\n \r\n {this.cleanDateTime(\r\n this.state.userProfileBooking?.pickUpTime\r\n )}\r\n \r\n
\r\n
\r\n
Från
\r\n \r\n {this.state.userProfileBooking?.pickupPos.title}\r\n \r\n
\r\n
\r\n
Till
\r\n \r\n {this.state.userProfileBooking?.dropOfPos.title}\r\n \r\n
\r\n
\r\n
Bokningsnummer
\r\n \r\n {this.state.userProfileBooking?.bookingNr}\r\n \r\n
\r\n
\r\n \r\n this.cancelPaidBooking(\r\n this.state.userProfileBooking?.bookingId\r\n )\r\n }\r\n >\r\n \r\n Avboka\r\n \r\n {/* Betalning */}\r\n \r\n
\r\n {/*
\r\n
Antal passagerare
\r\n \r\n 1-4 personer\r\n \r\n
*/}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n cancelButtonDisabled(pickupTime: string) {\r\n var puTime = moment(pickupTime);\r\n var validTime = moment(puTime).subtract(31, \"minutes\");\r\n var newDate = moment(new Date());\r\n\r\n if (newDate > validTime) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n async cancelPaidBooking(id: string | undefined) {\r\n this.setState({\r\n cancelButtonLoading: true,\r\n userProfileBookingExist: false,\r\n });\r\n\r\n if (id === undefined) return;\r\n const success = await BookingApi.cancelPaidBooking(id);\r\n if (success) {\r\n } else {\r\n }\r\n\r\n setTimeout(() => {\r\n this.setState({ cancelButtonLoading: false });\r\n\r\n window.location = \"https://www.taxigoteborg.se/?screen=mypages\" as any;\r\n }, 1000);\r\n }\r\n\r\n async SendReceipt(id: string | undefined, appUserId: string | undefined) {\r\n this.setState({ isReceiptSentModalOpen: true });\r\n \r\n let newUserId = \"\";\r\n \r\n if (id === undefined) return;\r\n this.setState({\r\n isSendReceiptModalDisabled: true,\r\n });\r\n\r\n if(appUserId != undefined) {newUserId = appUserId};\r\n if(appUserId == undefined)\r\n {\r\n const user = await UserApi.getCurrentProfile();\r\n if (!user) return;\r\n newUserId = user.userProfile.id;\r\n }\r\n \r\n const updatedUser = await UserApi.getUpdateCurrentProfile(\r\n newUserId\r\n );\r\n if (\r\n updatedUser.userProfile.email == \"\" ||\r\n updatedUser.userProfile.email == undefined\r\n ) {\r\n this.setState({\r\n receiptModalText:\r\n \"Vänligen kontrollera din e-postadress och försök igen\",\r\n isSendReceiptModalDisabled: false,\r\n });\r\n } else {\r\n this.setState({\r\n receiptModalText: \"Kvitto skickas\",\r\n isSendReceiptModalDisabled: false,\r\n userEmail: updatedUser.userProfile.email,\r\n });\r\n const success = await UserApi.SendReceipt(id);\r\n if(success){\r\n this.setState({receiptModalText : \"Kvittot har skickats\"})\r\n setTimeout(() => {\r\n this.setState({isReceiptSentModalOpen: false});\r\n }, 5000);\r\n }\r\n else{\r\n this.setState({receiptModalText : \"Kvittot kunde inte skickats\"})\r\n }\r\n }\r\n }\r\n\r\n CalculateDiscount = (priceBeforeOffering: number, price: number) => {\r\n let sum = priceBeforeOffering - price;\r\n let result = sum.toString();\r\n if (sum === 0) {\r\n return;\r\n }\r\n\r\n return (\r\n
\r\n

\r\n Rabatt
\r\n

\r\n \r\n {\"Avdraget: \" + result + \"kr\"}\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n cleanDateTime = (pickupTime: string | undefined) => {\r\n if (!pickupTime) return;\r\n\r\n const dateTime = new Date(Date.parse(pickupTime));\r\n\r\n const timeString = dateTime.toString();\r\n var timeSplit = timeString.split(\" \");\r\n\r\n var month = timeSplit[1];\r\n const translatedMonth = this.translateToSwe(month);\r\n\r\n const day = timeSplit[2];\r\n\r\n var hourMin = timeSplit[4].split(\":\");\r\n const hourMinString = hourMin[0] + \":\" + hourMin[1];\r\n\r\n const dateTimeString = day + \" \" + translatedMonth + \" \" + hourMinString;\r\n\r\n return dateTimeString;\r\n };\r\n\r\n translateToSwe = (month: string) => {\r\n if (month === \"Jan\") return \"januari\";\r\n if (month === \"Feb\") return \"februari\";\r\n if (month === \"Mar\") return \"mars\";\r\n if (month === \"Apr\") return \"april\";\r\n if (month === \"May\") return \"maj\";\r\n if (month === \"Jun\") return \"juni\";\r\n if (month === \"Jul\") return \"juli\";\r\n if (month === \"Aug\") return \"augusti\";\r\n if (month === \"Sep\") return \"september\";\r\n if (month === \"Oct\") return \"oktober\";\r\n if (month === \"Nov\") return \"november\";\r\n if (month === \"Dec\") return \"december\";\r\n else {\r\n return month;\r\n }\r\n };\r\n}\r\n","import { GlobalAppsettings } from '../../backbone/GlobalSettings';\r\nimport { GetPrice } from '../types/GetPrice';\r\n\r\nexport class GetPriceApi\r\n{\r\n public static async getPriceRequest(\r\n \r\n userId: string | null,\r\n pickUpTime: string,\r\n pickup: {\r\n title: string | null,\r\n lat: string | null,\r\n long: string | null,\r\n GooglePlaceId: string\r\n },\r\n dropOff: {\r\n title: string | null,\r\n lat: string | null,\r\n long: string | null,\r\n GooglePlaceId: string\r\n },\r\n numberOfPassengers: number | null,\r\n via: [\r\n {\r\n title: string | null,\r\n lat: string | null,\r\n long: string | null,\r\n GooglePlaceId: string | null\r\n }\r\n ] | null,\r\n carType: number,\r\n extraServices: [\r\n string | null\r\n ] | null,\r\n message: string | null,\r\n pickupTimeASAP: boolean | null,\r\n offeringId: string | null \r\n )\r\n {\r\n const request = {\r\n userId : userId,\r\n pickUpTime: pickUpTime,\r\n pickup: pickup,\r\n dropOff: dropOff,\r\n numberOfPassengers: numberOfPassengers,\r\n via: via,\r\n carType: carType,\r\n extraServices: extraServices,\r\n message: message,\r\n pickupTimeASAP: pickupTimeASAP,\r\n offeringId: offeringId\r\n }\r\n\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + 'api/booking/GetPrice',\r\n GlobalAppsettings.GetPostInit(request))\r\n\r\n const data = (await response.json()) as GetPrice\r\n\r\n return data\r\n }\r\n}","import * as App from \"pubsub-js\";\r\nimport * as React from \"react\";\r\nimport { UncontrolledCollapse } from \"reactstrap\";\r\n\r\nexport interface CollapseListProps {\r\n id: string;\r\n loading?: boolean;\r\n style?: any;\r\n items: CollapseListItem[];\r\n}\r\n\r\nexport interface CollapseListItem {\r\n title?: React.ReactNode;\r\n content?: React.ReactNode;\r\n command?: string;\r\n data?: any;\r\n isOpen?: boolean;\r\n}\r\n\r\nexport class ModifiedCollapseList extends React.Component<\r\n CollapseListProps,\r\n {}\r\n> {\r\n constructor(props: CollapseListProps) {\r\n super(props);\r\n }\r\n public render() {\r\n return (\r\n \r\n
\r\n {this.props.items.map((item, i) => {\r\n return (\r\n {\r\n if (item.command != undefined)\r\n App.publish(item.command, item.data);\r\n }}\r\n >\r\n
{item.title}
\r\n \r\n {item.content}\r\n \r\n
\r\n );\r\n })}\r\n
\r\n \r\n );\r\n }\r\n}\r\n","import classNames from \"classnames\";\r\nimport moment from \"moment\";\r\nimport React from \"react\";\r\nimport { Col, Row } from \"reactstrap\";\r\nimport \"../webparts/styles/Offering.css\";\r\nimport { Offering } from \"../webparts/types/UserProfile\";\r\n\r\ninterface Props {\r\n priceLoading: boolean;\r\n pickUpTime: string | undefined;\r\n offering: Offering;\r\n selected: boolean;\r\n onClick: () => void;\r\n}\r\n\r\nconst OfferTile: React.FC = ({\r\n priceLoading,\r\n pickUpTime,\r\n offering: { title, description, endDate, pickUpStartDate, pickUpEndDate },\r\n selected,\r\n onClick \r\n}) => {\r\n const translateToSwe = (month: string) => {\r\n if (month === \"Jan\") return \"januari\";\r\n if (month === \"Feb\") return \"februari\";\r\n if (month === \"Mar\") return \"mars\";\r\n if (month === \"Apr\") return \"april\";\r\n if (month === \"May\") return \"maj\";\r\n if (month === \"Jun\") return \"juni\";\r\n if (month === \"Jul\") return \"juli\";\r\n if (month === \"Aug\") return \"augusti\";\r\n if (month === \"Sep\") return \"september\";\r\n if (month === \"Oct\") return \"oktober\";\r\n if (month === \"Nov\") return \"november\";\r\n if (month === \"Dec\") return \"december\";\r\n else {\r\n return month;\r\n }\r\n };\r\n\r\n const cleanDateTime = (endDate: string) => {\r\n // if (endDate) return;\r\n\r\n var dateTime = new Date(Date.parse(endDate));\r\n dateTime.setDate(dateTime.getDate() - 1);\r\n\r\n const timeString = dateTime.toString();\r\n var timeSplit = timeString.split(\" \");\r\n\r\n var month = timeSplit[1];\r\n const translatedMonth = translateToSwe(month);\r\n\r\n const day = timeSplit[2];\r\n\r\n const year = timeSplit[3];\r\n\r\n var hourMin = timeSplit[4].split(\":\");\r\n const hourMinString = hourMin[0] + \":\" + hourMin[1];\r\n\r\n const dateTimeString =\r\n \"Giltigt t.o.m. den \" + day + \" \" + translatedMonth + \" \" + year;\r\n\r\n return dateTimeString;\r\n };\r\n\r\n const checkIfDisabled = (): boolean => {\r\n if (priceLoading)\r\n return true;\r\n\r\n if (pickUpTime === undefined)\r\n return false; \r\n \r\n return !(moment(pickUpStartDate).isSameOrBefore(pickUpTime)\r\n && moment(pickUpTime).isSameOrBefore(pickUpEndDate));\r\n };\r\n\r\n const isDisabled = checkIfDisabled();\r\n return (\r\n \r\n \r\n
\r\n

{title}

\r\n
{description}
\r\n
\r\n \r\n {selected ? \"Aktiverad\" : \"Använd erbjudande\"}\r\n
\r\n
\r\n
{cleanDateTime(endDate)}
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default OfferTile;\r\n","import { GlobalAppsettings } from \"../../backbone/GlobalSettings\";\r\nimport {\r\n ExtraService,\r\n GetActiveExtraServicesResponse,\r\n} from \"../types/ExtraService\";\r\nimport { GetPrice } from \"../types/GetPrice\";\r\n\r\nexport class ExtraServicesApi {\r\n public static async getActiveExtraServices(): Promise {\r\n const request = {};\r\n\r\n const response = await fetch(\r\n GlobalAppsettings.BackEndBaseUrl +\r\n \"api/extraService/GetActiveExtraServices\",\r\n GlobalAppsettings.GetPostInit(request)\r\n );\r\n\r\n const data = (await response.json()) as GetActiveExtraServicesResponse;\r\n\r\n if (!data.success) throw new Error(data.errorMessage);\r\n\r\n return data.extraServices;\r\n }\r\n}\r\n","import { first, keyBy } from \"lodash\";\r\nimport phone from \"phone\";\r\nimport * as App from \"pubsub-js\";\r\nimport * as React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport {\r\n Alert,\r\n Button,\r\n Col,\r\n Container,\r\n Fade,\r\n Form,\r\n FormGroup,\r\n Input,\r\n Label,\r\n Row,\r\n} from \"reactstrap\";\r\nimport { ContentItem } from \"../../api/Content\";\r\nimport { GlobalAppsettings } from \"../../backbone/GlobalSettings\";\r\nimport { LanguageContext } from \"../../backbone/Language\";\r\nimport { Loading } from \"../../components/base/Loading\";\r\nimport { InfoPanel } from \"../../panels/InfoPanel\";\r\nimport { ValidationInfo } from \"../MyPages\";\r\nimport { BaseResultResponse } from \"../types/BaseResultResponse\";\r\nimport \"../styles/Login.css\";\r\nimport ComponentDidMount from \"../../components/ComponentDidMount\";\r\nimport Recaptcha from 'react-recaptcha-that-works';\r\n\r\nexport interface LoginComponentState {\r\n loading: boolean;\r\n mobileValid: boolean;\r\n mobileNum: string;\r\n errorMessage?: string;\r\n codePart1: string;\r\n codePart2: string;\r\n codePart3: string;\r\n codePart4: string;\r\n isCodeSent: boolean;\r\n validUser: boolean;\r\n token?: string;\r\n regexp: any;\r\n refsName: string;\r\n codeInput?: string;\r\n formEnter: boolean;\r\n showBackButton: boolean;\r\n showCancelBookingButton: boolean;\r\n showBackWithoutCancelBooking: boolean;\r\n showBackAndRefresh: boolean;\r\n}\r\n\r\nexport interface ComponentOnChangeEvent {\r\n message: string;\r\n}\r\n\r\nexport interface LoginComponentProps {\r\n modalOpen: string;\r\n onChange?: (state: ComponentOnChangeEvent) => void;\r\n}\r\n\r\nexport class LoginComponent extends React.Component<\r\n LoginComponentProps,\r\n LoginComponentState\r\n> {\r\n static displayName = \"LoginComponent\";\r\n static contextType = LanguageContext;\r\n public recaptcha;\r\n\r\n refA: React.RefObject;\r\n refB: React.RefObject;\r\n refC: React.RefObject;\r\n refD: React.RefObject;\r\n\r\n constructor(props: LoginComponentProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n mobileNum: \"\",\r\n mobileValid: false,\r\n codePart1: \"\",\r\n codePart2: \"\",\r\n codePart3: \"\",\r\n codePart4: \"\",\r\n isCodeSent: false,\r\n validUser: false,\r\n regexp: /^[0-9\\b]+$/,\r\n refsName: \"\",\r\n formEnter: true,\r\n showBackButton: false,\r\n showCancelBookingButton: false,\r\n showBackWithoutCancelBooking: false,\r\n showBackAndRefresh: false,\r\n };\r\n\r\n this.refA = React.createRef();\r\n this.refB = React.createRef();\r\n this.refC = React.createRef();\r\n this.refD = React.createRef();\r\n\r\n this.checkLoginStatus = this.checkLoginStatus.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.checkLoginStatus();\r\n }\r\n\r\n checkLoginStatus() {\r\n fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/profile/checkloginstatus\",\r\n GlobalAppsettings.GetPostInit({})\r\n )\r\n .then((response) => response.json() as Promise)\r\n .then((data) => {\r\n if (data.success) {\r\n this.setState({\r\n loading: false,\r\n validUser: true,\r\n token: data.token,\r\n errorMessage: undefined,\r\n });\r\n if (this.props.onChange != undefined) {\r\n this.props.onChange({ message: data.token });\r\n }\r\n } else {\r\n this.setState({\r\n loading: false,\r\n validUser: false,\r\n errorMessage: data.errorMessage,\r\n });\r\n }\r\n })\r\n .catch((reason) => {\r\n this.setState({\r\n loading: false,\r\n validUser: false,\r\n errorMessage: \"Ett fel uppstod\",\r\n });\r\n });\r\n }\r\n\r\n handleChildrenMount = () => {\r\n React.Children.forEach(this.props.children, (child) => {\r\n if (!child) return;\r\n if (typeof child !== \"object\") return;\r\n\r\n if (\r\n typeof (\r\n child as\r\n | React.ReactElement>\r\n | React.ReactPortal\r\n ).type !== \"string\"\r\n )\r\n return;\r\n\r\n const state = (\r\n child as\r\n | React.ReactElement>\r\n | React.ReactPortal\r\n ).props[\"data-back_state\"];\r\n switch (state) {\r\n case \"hidden\":\r\n this.setState({\r\n showBackButton: false,\r\n showCancelBookingButton: false,\r\n showBackWithoutCancelBooking: false,\r\n showBackAndRefresh: false,\r\n });\r\n break;\r\n case \"cancel_booking\":\r\n this.setState({\r\n showBackButton: true,\r\n showCancelBookingButton: false,\r\n showBackWithoutCancelBooking: false,\r\n showBackAndRefresh: false,\r\n });\r\n break;\r\n case \"cancel_paid_booking\":\r\n this.setState({\r\n showBackButton: false,\r\n showCancelBookingButton: true,\r\n showBackWithoutCancelBooking: false,\r\n showBackAndRefresh: false,\r\n });\r\n break;\r\n case \"back_only\":\r\n this.setState({\r\n showBackButton: false,\r\n showCancelBookingButton: false,\r\n showBackWithoutCancelBooking: true,\r\n showBackAndRefresh: false,\r\n });\r\n break;\r\n case \"back_and_refresh\":\r\n this.setState({\r\n showBackButton: false,\r\n showCancelBookingButton: false,\r\n showBackWithoutCancelBooking: false,\r\n showBackAndRefresh: true,\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n };\r\n\r\n render() {\r\n // const childrenWithProp = React.Children.map(\r\n // this.props.children,\r\n // (child) => {\r\n // if (React.isValidElement(child)) {\r\n // return React.cloneElement(child);§\r\n // }\r\n // }\r\n // );\r\n return (\r\n \r\n \r\n {(lang) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.validUser === false ? (\r\n this.renderLogin()\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 \r\n \r\n );\r\n }\r\n\r\n private renderLogin() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n Logga in\r\n \r\n \r\n \r\n \r\n this.recaptcha = ref}\r\n siteKey={\"6LeXtHomAAAAALIQM9NNC1CRd5wvEVayQJ8SfNT-\"}\r\n onVerify={(token: string) => {\r\n this.sendCode(token);\r\n }}\r\n onError={(error: string) => {\r\n alert(\"reCAPTCHA misslyckades, vänligen försök igen\");\r\n }}\r\n size=\"invisible\"\r\n />\r\n
) => {\r\n e.preventDefault();\r\n\r\n this.recaptcha?.execute();\r\n }}>\r\n \r\n \r\n

Ange mobilnummer för att logga in:

\r\n \r\n
\r\n \r\n {/* */}\r\n \r\n
\r\n \r\n this.onMobileChange(event)}\r\n style={{ fontSize: \"1.5em\" }}\r\n onKeyDown={(e) => {\r\n this.setState({ formEnter: true })\r\n }}\r\n // onKeyDown={() => this.setState({ formEnter: true })}\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 Skicka kod\r\n \r\n
\r\n \r\n
\r\n \r\n
{\r\n e.preventDefault()\r\n\r\n this.validateCode()\r\n }}>\r\n {this.state.isCodeSent ? (\r\n <>\r\n \r\n \r\n

Ange koden som skickades till din mobil:

\r\n \r\n
\r\n \r\n \r\n {/* */}\r\n \r\n \r\n this.onCodeChange(1, event)}\r\n onKeyDown={(e) => this.backspaceHandler(e, 1)}\r\n innerRef={this.refA}\r\n >\r\n \r\n \r\n this.onCodeChange(2, event)}\r\n onKeyDown={(e) => this.backspaceHandler(e, 2)}\r\n innerRef={this.refB}\r\n >\r\n \r\n \r\n this.onCodeChange(3, event)}\r\n onKeyDown={(e) => this.backspaceHandler(e, 3)}\r\n innerRef={this.refC}\r\n >\r\n \r\n \r\n this.onCodeChange(4, event)}\r\n onKeyDown={(e) => this.backspaceHandler(e, 4)}\r\n innerRef={this.refD}\r\n >\r\n \r\n \r\n \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.validateCode()}\r\n >\r\n Logga in\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 private validatePhoneNumber() {\r\n var isValid: boolean = false;\r\n\r\n var firstDigit = this.state.mobileNum.charAt(0);\r\n var numLength = this.state.mobileNum.length;\r\n\r\n if (firstDigit === \"0\" && numLength === 10) {\r\n isValid = true;\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n private sendCode(reCaptchaToken: string): void {\r\n this.setState({ loading: true });\r\n\r\n const { isValid, phoneNumber } = phone(this.state.mobileNum, {\r\n country: \"se\",\r\n });\r\n\r\n var isValidPhoneNumber: boolean = false;\r\n\r\n isValidPhoneNumber = this.validatePhoneNumber();\r\n\r\n if (!isValidPhoneNumber) {\r\n this.setState({ loading: false });\r\n return;\r\n }\r\n\r\n fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/profile/login\",\r\n GlobalAppsettings.GetPostInit({\r\n mobile: phoneNumber,\r\n }, \r\n reCaptchaToken\r\n )\r\n ).then((response) => {\r\n console.info(\"Login ->\");\r\n response.headers.forEach(console.log);\r\n\r\n if (response.headers.has(GlobalAppsettings.tokenHeader)) {\r\n let token = response.headers.get(GlobalAppsettings.tokenHeader);\r\n console.info(token);\r\n if (token != undefined) GlobalAppsettings.SetToken(token);\r\n }\r\n\r\n var data = response.json() as Promise;\r\n data\r\n .then((data) => {\r\n if (data.success) {\r\n this.setState({\r\n loading: false,\r\n isCodeSent: true,\r\n errorMessage: undefined,\r\n });\r\n } else {\r\n this.setState({\r\n loading: false,\r\n isCodeSent: false,\r\n errorMessage: data.errorMessage,\r\n });\r\n }\r\n })\r\n .catch((reason) => {\r\n this.setState({\r\n loading: false,\r\n isCodeSent: false,\r\n errorMessage: \"Ett fel uppstod\",\r\n });\r\n });\r\n });\r\n }\r\n\r\n private validateCode(): void {\r\n this.setState({ loading: true });\r\n\r\n let currentCode =\r\n this.state.codePart1 +\r\n this.state.codePart2 +\r\n this.state.codePart3 +\r\n this.state.codePart4;\r\n\r\n fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/profile/validate\",\r\n GlobalAppsettings.GetPostInit({\r\n code: currentCode,\r\n })\r\n )\r\n .then((response) => response.json() as Promise)\r\n .then((data) => {\r\n if (data.success) {\r\n this.setState({\r\n loading: false,\r\n validUser: true,\r\n token: data.token,\r\n errorMessage: undefined,\r\n });\r\n if (this.props.onChange != undefined) {\r\n this.props.onChange({ message: data.token });\r\n }\r\n } else {\r\n this.setState({\r\n loading: false,\r\n validUser: false,\r\n errorMessage: data.errorMessage,\r\n });\r\n }\r\n })\r\n .catch((reason) => {\r\n this.setState({\r\n loading: false,\r\n validUser: false,\r\n errorMessage: \"Ett fel uppstod\",\r\n });\r\n });\r\n }\r\n\r\n backspaceHandler = (e: any, part: number) => {\r\n if (e.keyCode === 8)\r\n switch (part) {\r\n case 1:\r\n if (this.state.codePart1.length < 1) {\r\n this.focusCodeInput(this.refA);\r\n }\r\n break;\r\n case 2:\r\n if (this.state.codePart2.length < 1) {\r\n this.focusCodeInput(this.refA);\r\n }\r\n break;\r\n case 3:\r\n if (this.state.codePart3.length < 1) {\r\n this.focusCodeInput(this.refB);\r\n }\r\n break;\r\n case 4:\r\n if (this.state.codePart4.length < 1) {\r\n this.focusCodeInput(this.refC);\r\n }\r\n break;\r\n }\r\n\r\n\r\n else if(e.keyCode === 13){\r\n this.validateCode()\r\n }\r\n\r\n\r\n };\r\n\r\n setCodeInputRef = (e: any) => {\r\n if (!e) return;\r\n this.setState({ codeInput: e });\r\n };\r\n\r\n focusCodeInput = (s: React.RefObject) => {\r\n // const input = this.state.codeInput;\r\n if (!s.current) return;\r\n // input.focus();\r\n s.current.focus();\r\n };\r\n\r\n private onCodeChange(\r\n part: number,\r\n event: React.ChangeEvent\r\n ): void {\r\n let codeDigit = event.target.value;\r\n\r\n if (codeDigit === \"\" || this.state.regexp.test(codeDigit)) {\r\n switch (part) {\r\n case 1:\r\n this.setState({ codePart1: event.target.value });\r\n if (event.target.value.length > 0) {\r\n this.focusCodeInput(this.refB);\r\n }\r\n break;\r\n case 2:\r\n this.setState({ codePart2: event.target.value });\r\n if (event.target.value.length > 0) {\r\n this.focusCodeInput(this.refC);\r\n }\r\n break;\r\n case 3:\r\n this.setState({ codePart3: event.target.value });\r\n if (event.target.value.length > 0) {\r\n this.focusCodeInput(this.refD);\r\n }\r\n break;\r\n case 4:\r\n this.setState({ codePart4: event.target.value });\r\n if (event.target.value.length > 0) {\r\n this.focusCodeInput(this.refD);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private onMobileChange(event: React.ChangeEvent): void {\r\n let mobileNumber = event.target.value;\r\n if (\r\n mobileNumber === \"\" ||\r\n (this.state.regexp.test(mobileNumber) && mobileNumber.length < 11)\r\n ) {\r\n this.setState({ mobileNum: mobileNumber });\r\n }\r\n }\r\n}\r\n","import { mdiBaby, mdiBabyCarriage, mdiCarChildSeat } from \"@mdi/js\";\r\nimport { Icon as MdiIcon } from \"@mdi/react\";\r\nimport classNames from \"classnames\";\r\nimport React from \"react\";\r\nimport { Icon as IcoMoonIcon } from \"../../components/IcoMoon\";\r\n\r\nexport enum ExtraServiceIcons {\r\n Stroller = \"Stroller\",\r\n CarSeat = \"CarSeat\",\r\n Pets = \"Pets\",\r\n BabySeat = \"BabySeat\",\r\n}\r\n\r\nexport enum CarOptionIcons {\r\n Normal = \"Standard\",\r\n Combi = \"Kombi\",\r\n Minibus = \"Större\",\r\n}\r\n\r\nconst iconDictionary: {\r\n [id in ExtraServiceIcons]: string | undefined;\r\n} = {\r\n [ExtraServiceIcons.Stroller]: mdiBabyCarriage,\r\n [ExtraServiceIcons.CarSeat]: mdiCarChildSeat,\r\n [ExtraServiceIcons.BabySeat]: mdiBaby,\r\n [ExtraServiceIcons.Pets]: undefined,\r\n};\r\n\r\nconst carIconDictionary: {\r\n [id in CarOptionIcons]: string | undefined;\r\n} = {\r\n [CarOptionIcons.Normal]: \"taxi\",\r\n [CarOptionIcons.Combi]: \"taxi\",\r\n [CarOptionIcons.Minibus]: \"bus\",\r\n};\r\n\r\nconst _getIconSize = (size: number, baseSize: number = 1) => {\r\n return size / baseSize;\r\n};\r\n\r\nconst ExtraServiceIcon: React.FC<{ iconId: ExtraServiceIcons }> = ({\r\n iconId,\r\n}) => {\r\n const ICON_SIZE = 48;\r\n\r\n const icon = iconDictionary[iconId];\r\n\r\n if (icon) {\r\n return ;\r\n }\r\n\r\n return ;\r\n};\r\n\r\nconst CarIcon: React.FC<{ iconId: CarOptionIcons }> = ({ iconId }) => {\r\n const ICON_SIZE = 48;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\ntype Props =\r\n | {\r\n iconId: ExtraServiceIcons;\r\n label: string;\r\n isCarOption?: boolean;\r\n price: number;\r\n selected: boolean;\r\n description: string;\r\n onPress: () => void;\r\n }\r\n | {\r\n iconId: CarOptionIcons;\r\n label: string;\r\n isCarOption?: true;\r\n price?: undefined;\r\n selected: boolean;\r\n description: string;\r\n onPress: () => void;\r\n };\r\n\r\nconst ExtraServiceOption: React.FC = ({\r\n iconId,\r\n label,\r\n price,\r\n isCarOption = false,\r\n selected,\r\n description,\r\n onPress,\r\n}) => {\r\n return (\r\n \r\n
\r\n {isCarOption ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
{label}
\r\n
{description}
\r\n
\r\n {price !== undefined && (\r\n
{price} kr
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ExtraServiceOption;\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport App from \"pubsub-js\";\r\nimport { LanguageContext } from \"../../backbone/Language\";\r\nimport { LoginComponent } from \"./LoginComponent\";\r\nimport \"../styles/Payment.css\";\r\nimport { stringify } from \"querystring\";\r\nimport BookingReceiptComponent from \"./BookingReceiptComponent\";\r\n\r\n\r\nexport type NetsResponsePayload = {\r\n event : string,\r\n data : T,\r\n}\r\n\r\ninterface Props {\r\n netsId: string;\r\n}\r\n\r\nconst NetsPaymentComponent = ({ netsId }: Props) => {\r\n\r\n // const netsUrl : string = \"https://taxigoteborgwebpayment.z16.web.core.windows.net\"; //DEV\r\n const netsUrl : string = \"https://taxigbgpaymentprod.z16.web.core.windows.net\"; //PROD\r\n\r\n const [showBackButton, setShowBackBottom] = useState(true);\r\n\r\n const init = () => {\r\n App.subscribe(\"netsPayment\", (message: any, data: string) =>\r\n open(message, data)\r\n );\r\n };\r\n\r\n const open = (message: \"\", data: string) => {\r\n if (data != undefined) {\r\n App.publish(\"netsPaymentModal\", null);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n init();\r\n }, []);\r\n\r\n const handleMessageEvent = (message: MessageEvent) => {\r\n if (\r\n message.origin !==\r\n netsUrl\r\n //\"https://taxigbgpaymentprod.z16.web.core.windows.net\"\r\n )\r\n return;\r\n\r\n const data = JSON.parse(message.data) as NetsResponsePayload\r\n\r\n\r\n switch (data.event) {\r\n case \"payment-completed\":\r\n setShowBackBottom(false);\r\n setTimeout(() => {\r\n // window.location = \"https://taxi-gbg-homepage.webflow.io/?screen=mypages\" as any; //DEV\r\n window.location = \"https://www.taxigoteborg.se/?screen=mypages\" as any; //PROD\r\n }, 3000);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"message\", handleMessageEvent);\r\n }, []);\r\n\r\n //\"https://taxigbgpaymentprod.z16.web.core.windows.net/?paymentId=\" + netsId\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\nexport default NetsPaymentComponent;\r\n","import { BonusRequest, BonusResponse } from \"../types/Bonus\";\r\nimport { GlobalAppsettings } from \"../../backbone/GlobalSettings\";\r\n\r\nexport class BonusApi\r\n{\r\n public static async getBonusData(\r\n request : BonusRequest\r\n )\r\n {\r\n const response = await fetch(GlobalAppsettings.BackEndBaseUrl + \"api/booking/RetrieveBonusesForUser\", GlobalAppsettings.GetPostInit(request));\r\n\r\n const data = (await response.json()) as BonusResponse;\r\n\r\n return data;\r\n }\r\n}","import React, { useEffect, useState, useCallback } from \"react\";\r\nimport App from \"pubsub-js\";\r\nimport { LanguageContext } from \"../../backbone/Language\";\r\nimport { LoginComponent } from \"./LoginComponent\";\r\nimport {\r\n BookingReceiptData,\r\n CreateBookingRequest,\r\n} from \"../types/CreateBookingRequest\";\r\nimport {\r\n TaxinetBookingValidation,\r\n TaxinetBookingValidationResponse,\r\n} from \"../types/TaxinetBookingValidation\";\r\n\r\nimport {\r\n Button,\r\n Col,\r\n Form,\r\n Modal,\r\n ModalBody,\r\n ModalFooter,\r\n ModalHeader,\r\n Row,\r\n} from \"reactstrap\";\r\nimport { BonusRequest, BonusResponse } from \"../types/Bonus\";\r\nimport NetsPaymentComponent from \"./NetsPaymentComponent\";\r\nimport { GlobalAppsettings } from \"../../backbone/GlobalSettings\";\r\nimport { UserProfileResult } from \"../types/UserProfile\";\r\nimport { UserApi } from \"../api/GetUserApi\";\r\nimport { BonusApi } from \"../api/BonusApi\";\r\nimport { BookingApi } from \"../api/BookingApi\";\r\nimport \"../styles/BookingReceipt.css\";\r\nimport { Loading } from \"../../components/base/Loading\";\r\nimport { CreateBookingResponse } from \"../types/CreateBookingResponse\";\r\nimport { getFocusedRouteNameFromRoute } from \"@react-navigation/native\";\r\n\r\nconst BookingReceiptComponent = () => {\r\n const [booking, setBooking] = useState();\r\n const [createBookingReq, setCreateBookingReq] =\r\n useState();\r\n const [user, setUser] = useState();\r\n const [paymentId, setPaymentId] = useState(\"\");\r\n const [extraServices, setExtraServices] = useState([]);\r\n const [offeringTitle, setOfferingTitle] = useState(\"\");\r\n const [nrOfPersons, setNrOfPersons] = useState(\"\");\r\n const [preliminaryIsOpen, setPreliminaryIsOpen] = useState(false);\r\n const [bookingClosedIsOpen, setBookingClosedIsOpen] =\r\n useState(false);\r\n const [confirmBookingIsOpen, setConfirmBookingIsOpen] =\r\n useState(false);\r\n const [alertMessage, setAlertMessage] = useState(\"\");\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [pickupTime, setPickupTime] = useState(\"\");\r\n const [pickupASAP, setPickupASAP] = useState(false);\r\n const [bookingSent, setbookingSent] = useState(false);\r\n const [skipPayment, setSkipPayment] = useState(false);\r\n const [selected, setSelected] = useState(false);\r\n const [bonusPoints, setBonusPoints] = useState(0);\r\n const [showBonus, setShowBonus] = useState(false);\r\n const [bonusDisabled, setBonusDisabled] = useState(false);\r\n const [basePrice, setBasePrice] = useState(0);\r\n const [bookingId, setBookingId] = useState(\"\");\r\n const [originalPrice, setOriginalPrice] = useState(0);\r\n const [showOriginalPrice, setShowOriginalPrice] = useState(false);\r\n const [showExtraServiceCost, setShowExtraServiceCost] =\r\n useState(false);\r\n const [showAirportFee, setShowAirportFee] = useState(false);\r\n const [originShowOriginalPrice, setOriginShowOriginalPrice] =\r\n useState(false);\r\n const [userId, setUserId] = useState(\"\");\r\n const [airportFee, setAirportFee] = useState(0);\r\n const [bookingButtonDisabled, setBookingButtonDisabled] =\r\n useState(false);\r\n\r\n const init = () => {\r\n App.subscribe(\"bookingReceiptInCarPayment\", (message: any, data: any) =>\r\n open(message, data)\r\n );\r\n };\r\n\r\n const open = (message: \"\", data: BookingReceiptData) => {\r\n if (data !== undefined) {\r\n if (!data.data) return;\r\n if (data.data.pickUpTime === undefined) return;\r\n if (data.data.pickupTimeASAP === undefined) return;\r\n setBooking(data);\r\n setCreateBookingReq(data.data);\r\n setExtraServices(data.extraServiceNames);\r\n setOfferingTitle(data.offeringTitle);\r\n setNrOfPersons(data.numberOfPersons);\r\n setPickupTime(data.data.pickUpTime);\r\n setPickupASAP(data.data.pickupTimeASAP);\r\n setbookingSent(false);\r\n setSelected(false);\r\n setOriginalPrice(data.originalPrice);\r\n setShowOriginalPrice(data.showOriginalPrice);\r\n setOriginShowOriginalPrice(data.showOriginalPrice);\r\n setUserId(data.userId);\r\n\r\n if (data.extraServiceNames.length > 0) {\r\n setShowExtraServiceCost(true);\r\n }\r\n\r\n if (data.priceSummaryData.airportFee != 0) {\r\n setAirportFee(data.priceSummaryData.airportFee);\r\n setShowAirportFee(true);\r\n }\r\n\r\n // if (data.paymentId != null) {\r\n // setPaymentId(data.paymentId);\r\n // }\r\n\r\n if (data.price != undefined) {\r\n setBasePrice(data.price);\r\n getBonus(data.userId, data.price);\r\n }\r\n\r\n App.publish(\"bookingReceiptModal\", null);\r\n }\r\n };\r\n\r\n // const userHandler = () => {\r\n // fetch(\r\n // GlobalAppsettings.BackEndBaseUrl + \"api/profile/CurrentProfile\",\r\n // GlobalAppsettings.GetPostInit(null)\r\n // )\r\n // .then((response) => response.json() as Promise)\r\n // .then((data) => {\r\n // if (data.success) {\r\n // } else {\r\n // }\r\n // });\r\n // };\r\n\r\n // const userProfileHandler = async () => {\r\n // const profileResult = await UserApi.getCurrentProfile();\r\n // };\r\n\r\n useEffect(() => {\r\n init();\r\n }, []);\r\n\r\n const getBonus = async (userId: string, cost: number) => {\r\n var request: BonusRequest = {\r\n userId: userId,\r\n showAll: false,\r\n };\r\n\r\n var bonus = await BonusApi.getBonusData(request);\r\n\r\n //Got no bonus or cost is 0\r\n if (bonus.data.bonusTickets.length < 1 || cost == 0) {\r\n setShowBonus(false);\r\n } else {\r\n // calculate bonus\r\n var ticketBonusPoints: number = 0;\r\n var ticketConsumedPoints: number = 0;\r\n\r\n bonus.data.bonusTickets.forEach((ticket) => {\r\n ticketBonusPoints += ticket.bonusPoints;\r\n ticketConsumedPoints += ticket.consumedPoints;\r\n });\r\n\r\n var bonusPoints = ticketBonusPoints - ticketConsumedPoints;\r\n const administrationFee =\r\n booking?.priceSummaryData.administrationFee || 0;\r\n if (bonusPoints > cost + administrationFee) {\r\n bonusPoints = cost + administrationFee;\r\n }\r\n\r\n setBonusPoints(bonusPoints);\r\n setShowBonus(true);\r\n }\r\n };\r\n\r\n const openNetsPaymentComponent = async () => {\r\n setIsLoading(true);\r\n\r\n var paymentID: string = paymentId;\r\n var skipPaymentOk: boolean = skipPayment;\r\n\r\n\r\n if (!bookingSent) {\r\n await fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/booking/CreateBooking\",\r\n GlobalAppsettings.GetPostInit(createBookingReq)\r\n )\r\n .then((response) => {\r\n return response.json() as Promise;\r\n })\r\n .then((data) => {\r\n if (data.success) {\r\n // addBookingId\r\n var updBookingReq = createBookingReq;\r\n if (updBookingReq == undefined) return;\r\n updBookingReq.bookingId = data.booking.id;\r\n setCreateBookingReq(updBookingReq);\r\n\r\n if (data.skipPayment) {\r\n skipPaymentOk = true;\r\n // paymentID = \"\";\r\n // setPaymentId(\"\");\r\n setSkipPayment(true);\r\n setbookingSent(true);\r\n } else if (!data.paymentId) {\r\n console.error(\"Error: Check output from create-payment\");\r\n return;\r\n } else {\r\n paymentID = data.paymentId;\r\n setPaymentId(data.paymentId);\r\n setbookingSent(true);\r\n }\r\n } else if (!data.success && data.skipPayment) {\r\n skipPaymentOk = true;\r\n // paymentID = \"\";\r\n // setPaymentId(\"\");\r\n setSkipPayment(true);\r\n setbookingSent(true);\r\n } else {\r\n setIsLoading(false);\r\n return;\r\n }\r\n })\r\n .catch(() => {\r\n setIsLoading(false);\r\n return;\r\n });\r\n } else {\r\n await fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/booking/UpdateBooking\",\r\n GlobalAppsettings.GetPostInit(createBookingReq)\r\n )\r\n .then((response) => {\r\n return response.json() as Promise;\r\n })\r\n .then((data) => {\r\n if (data.success) {\r\n if (data.skipPayment) {\r\n skipPaymentOk = true;\r\n // paymentID = \"\";\r\n // setPaymentId(\"\");\r\n setSkipPayment(true);\r\n setbookingSent(true);\r\n } else if (!data.paymentId) {\r\n return;\r\n } else {\r\n paymentID = data.paymentId;\r\n setPaymentId(data.paymentId);\r\n setbookingSent(true);\r\n }\r\n } else if (!data.success && data.skipPayment) {\r\n skipPaymentOk = true;\r\n // paymentID = \"\";\r\n // setPaymentId(\"\");\r\n setSkipPayment(true);\r\n setbookingSent(true);\r\n } else {\r\n setIsLoading(false);\r\n return;\r\n }\r\n })\r\n .catch(() => {\r\n setIsLoading(false);\r\n return;\r\n });\r\n }\r\n //Validate if u can do booking\r\n var request = {\r\n pickupASAP: pickupASAP,\r\n pickupTime: pickupTime,\r\n } as TaxinetBookingValidation;\r\n const bookingValidation = await BookingApi.CheckTaxinetBookingStatus(\r\n request\r\n );\r\n setAlertMessage(bookingValidation.statusMessage);\r\n\r\n if (bookingValidation.bookingStatus === \"Preliminary\") {\r\n setConfirmBookingIsOpen(false);\r\n setPreliminaryIsOpen(true);\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n if (bookingValidation.bookingStatus === \"Closed\") {\r\n setConfirmBookingIsOpen(false);\r\n setBookingClosedIsOpen(true);\r\n setIsLoading(false);\r\n return;\r\n }\r\n setIsLoading(false);\r\n\r\n let data = { paymentId: paymentID };\r\n\r\n // if(skipPaymentOk === true)\r\n // {\r\n // window.location = \"https://taxi-gbg-homepage.webflow.io/?screen=mypages\" as any; //DEV\r\n // // window.location = \"https://www.taxigoteborg.se/?screen=mypages\" as any; //PROD\r\n // }\r\n // else\r\n // {\r\n // App.publish(\"netsPayment\", data);\r\n // }\r\n };\r\n\r\n const goToNets = () => {\r\n setPreliminaryIsOpen(false);\r\n let data = { paymentId: paymentId };\r\n\r\n // if(skipPayment === true)\r\n // {\r\n // window.location = \"https://taxi-gbg-homepage.webflow.io/?screen=mypages\" as any; //DEV\r\n // // window.location = \"https://www.taxigoteborg.se/?screen=mypages\" as any; //PROD\r\n // }\r\n // else\r\n // {\r\n // App.publish(\"netsPayment\", data);\r\n // }\r\n\r\n // App.publish(\"netsPayment\", data);\r\n };\r\n\r\n const confirmBookingHandler = async () => {\r\n setBookingButtonDisabled(true);\r\n\r\n //Validate if u can do booking\r\n var request = {\r\n pickupASAP: pickupASAP,\r\n pickupTime: pickupTime,\r\n } as TaxinetBookingValidation;\r\n const bookingValidation = await BookingApi.CheckTaxinetBookingStatus(\r\n request\r\n );\r\n setAlertMessage(bookingValidation.statusMessage);\r\n\r\n if (bookingValidation.bookingStatus === \"Closed\") {\r\n setConfirmBookingIsOpen(false);\r\n setBookingClosedIsOpen(true);\r\n setBookingButtonDisabled(false);\r\n setIsLoading(false);\r\n return;\r\n } else {\r\n let success: boolean = false;\r\n\r\n setPreliminaryIsOpen(false);\r\n setBookingButtonDisabled(true);\r\n\r\n await fetch(\r\n GlobalAppsettings.BackEndBaseUrl +\r\n \"api/booking/CreateBookingInCarPayment\",\r\n GlobalAppsettings.GetPostInit(createBookingReq)\r\n )\r\n .then((response) => {\r\n return response.json() as Promise;\r\n })\r\n .then((data) => {\r\n if (data.success) {\r\n success = true;\r\n } else {\r\n setIsLoading(false);\r\n setBookingButtonDisabled(false);\r\n return;\r\n }\r\n })\r\n .catch(() => {\r\n setIsLoading(false);\r\n setBookingButtonDisabled(false);\r\n return;\r\n });\r\n\r\n if (success) {\r\n window.location =\r\n // \"https://taxi-gbg-homepage.webflow.io/?screen=mypages\" as any; //DEV\r\n window.location = \"https://www.taxigoteborg.se/?screen=mypages\" as any; //PROD\r\n }\r\n }\r\n };\r\n\r\n const abortBookingHandler = () => {\r\n setConfirmBookingIsOpen(false);\r\n setBookingButtonDisabled(false);\r\n };\r\n\r\n const translateToSwe = (month: string) => {\r\n if (month === \"01\") return \"januari\";\r\n if (month === \"02\") return \"februari\";\r\n if (month === \"03\") return \"mars\";\r\n if (month === \"04\") return \"april\";\r\n if (month === \"05\") return \"maj\";\r\n if (month === \"06\") return \"juni\";\r\n if (month === \"07\") return \"juli\";\r\n if (month === \"08\") return \"augusti\";\r\n if (month === \"09\") return \"september\";\r\n if (month === \"10\") return \"oktober\";\r\n if (month === \"11\") return \"november\";\r\n if (month === \"12\") return \"december\";\r\n else {\r\n return month;\r\n }\r\n };\r\n\r\n const cleanDateTime = () => {\r\n if (!booking?.data?.pickUpTime) return;\r\n\r\n const pickuptime: string = booking?.data?.pickUpTime;\r\n\r\n const [date, time] = pickuptime.split(\"T\");\r\n\r\n const [hour, minute] = time.split(\":\");\r\n const [, month, day] = date.split(\"-\");\r\n\r\n const monthString = translateToSwe(month);\r\n\r\n return `${day} ${monthString} ${hour}:${minute}`;\r\n };\r\n\r\n const activateBonus = () => {\r\n if (!selected) {\r\n setSelected(true);\r\n\r\n var updBookingReq = createBookingReq;\r\n var updBooking = booking;\r\n if (updBookingReq == undefined) return;\r\n if (updBooking == undefined) return;\r\n updBookingReq.bonusPoints = bonusPoints;\r\n updBooking.price = basePrice - bonusPoints;\r\n\r\n setBooking(updBooking);\r\n setShowOriginalPrice(true);\r\n } else {\r\n setSelected(false);\r\n\r\n var updBookingReq = createBookingReq;\r\n var updBooking = booking;\r\n if (updBookingReq == undefined) return;\r\n if (updBooking == undefined) return;\r\n updBookingReq.bonusPoints = 0;\r\n updBooking.price = basePrice;\r\n\r\n setBooking(updBooking);\r\n setShowOriginalPrice(originShowOriginalPrice);\r\n }\r\n };\r\n\r\n const renderBonusContainer = () => {\r\n if (showBonus) {\r\n return (\r\n \r\n activateBonus()}\r\n >\r\n
Bonus
\r\n
\r\n
\r\n Aktivera resebonus på\r\n
\r\n
\r\n {bonusCashString()}\r\n
\r\n
\r\n
\r\n \r\n {selected ? \"Aktiverad\" : \"Använd bonus\"}\r\n
\r\n \r\n \r\n \r\n );\r\n } else {\r\n return;\r\n }\r\n };\r\n\r\n const bonusCashString = () => {\r\n const cashString: string = bonusPoints + \" \" + \"kr\";\r\n return cashString;\r\n };\r\n\r\n const renderBooking = () => {\r\n const discount = (booking?.price || 0) - originalPrice;\r\n return (\r\n
\r\n
\r\n \r\n

Sammanställning

\r\n
\r\n
\r\n
\r\n
Tid för avresa
\r\n \r\n {cleanDateTime()}\r\n \r\n
\r\n
\r\n
Från
\r\n \r\n {booking?.data?.pickup?.title}\r\n \r\n
\r\n
\r\n
Till
\r\n \r\n {booking?.data?.dropOff?.title}\r\n \r\n
\r\n
\r\n
Antal passagerare
\r\n \r\n {booking?.numberOfPersons}\r\n \r\n
\r\n \r\n
Meddelande
\r\n \r\n {booking?.data?.message}\r\n \r\n
\r\n 0\r\n ? \"receipt-details-exist-true\"\r\n : \"receipt-details-exist-false\"\r\n }\r\n >\r\n
Tillval
\r\n {extraServices.map((item, i) => (\r\n \r\n {item}\r\n \r\n ))}\r\n {/* \r\n 1-4 personer\r\n */}\r\n
\r\n {/* \r\n
Erbjudande
\r\n \r\n {offeringTitle}\r\n \r\n */}\r\n \r\n
\r\n {renderBonusContainer()}\r\n {/* \r\n activateBonus()}\r\n >\r\n
Bonus
\r\n
\r\n
\r\n Vill du sänka resekostnaden med\r\n
\r\n
\r\n {bonusCashString()}\r\n
\r\n
\r\n
\r\n \r\n {selected ? \"Aktiverad\" : \"Använd bonus\"}\r\n
\r\n
\r\n \r\n */}\r\n \r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n
Resekostnad:
\r\n
{booking?.priceSummaryData.travelPrice}
\r\n
\r\n {showExtraServiceCost && (\r\n
\r\n
Tillval:
\r\n
{booking?.priceSummaryData.extraServicesPrice}
\r\n
\r\n )}\r\n
\r\n
Administrationsavgift:
\r\n
{booking?.priceSummaryData.administrationFee}
\r\n
\r\n {showAirportFee && (\r\n
\r\n
Tillägg LDV:
\r\n
{booking?.priceSummaryData.airportFee}
\r\n
\r\n )}\r\n {showOriginalPrice && (\r\n
\r\n
Rabatt
\r\n
-{originalPrice}
\r\n
\r\n )}\r\n
\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n

Fastpris:

\r\n

\r\n {booking?.price || 0} kr\r\n

\r\n
\r\n \r\n
{originalPrice} kr
\r\n
\r\n \r\n \r\n \r\n this.bookAndPay()}\r\n onClick={() => setConfirmBookingIsOpen(true)}\r\n >\r\n \r\n Boka\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n {alertMessage}\r\n \r\n setConfirmBookingIsOpen(true)}\r\n >\r\n Boka\r\n \r\n setPreliminaryIsOpen(false)}\r\n >\r\n Avbryt\r\n \r\n \r\n \r\n \r\n \"{alertMessage}\"\r\n \r\n setBookingClosedIsOpen(false)}\r\n >\r\n OK\r\n \r\n \r\n \r\n \r\n \r\n Bokning med avresa {cleanDateTime()}. Du har väll inte missat att\r\n betalning nu sker i bilen?\r\n \r\n \r\n confirmBookingHandler()}\r\n disabled={bookingButtonDisabled}\r\n >\r\n Boka taxi\r\n \r\n abortBookingHandler()}\r\n disabled={bookingButtonDisabled}\r\n >\r\n Avbryt\r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return (\r\n \r\n \r\n {(lang) => (\r\n
\r\n \r\n {renderBooking()}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default BookingReceiptComponent;\r\n","import IcomoonReact from \"icomoon-react\";\r\nimport React from \"react\";\r\nimport iconSet from \"../assets/icomoon/selection.json\";\r\n\r\nexport const Icon: React.FC<{\r\n color?: string;\r\n size: string | number;\r\n icon: string;\r\n className?: string;\r\n}> = (props) => {\r\n const { color, size = \"100%\", icon, className = \"\" } = props;\r\n return (\r\n \r\n );\r\n};\r\n","import { mdiConsoleLine, mdiThermometerMinus } from \"@mdi/js\";\r\nimport { time } from \"console\";\r\n// import { delay, identity } from \"lodash\";\r\nimport moment from \"moment\";\r\nimport momenttz from \"moment-timezone\";\r\nimport * as App from \"pubsub-js\";\r\nimport * as React from \"react\";\r\nimport {\r\n Button,\r\n ButtonGroup,\r\n Col,\r\n Dropdown,\r\n DropdownMenu,\r\n DropdownToggle,\r\n Form,\r\n FormGroup,\r\n Input,\r\n Label,\r\n NavItem,\r\n Row,\r\n} from \"reactstrap\";\r\nimport { runInThisContext } from \"vm\";\r\nimport { GlobalAppsettings } from \"../../backbone/GlobalSettings\";\r\nimport { LanguageContext } from \"../../backbone/Language\";\r\nimport { Loading } from \"../../components/base/Loading\";\r\nimport { CollapseListItem } from \"../../components/CollapseList\";\r\nimport ComponentDidMount from \"../../components/ComponentDidMount\";\r\nimport { ModifiedCollapseList } from \"../../components/ModifiedCollapseList\";\r\nimport OfferTile from \"../../components/OfferTile\";\r\nimport { BookingApi } from \"../api/BookingApi\";\r\nimport { ExtraServicesApi } from \"../api/GetExtraServices\";\r\nimport { GetPriceApi } from \"../api/GetPriceApi\";\r\nimport { UserApi } from \"../api/GetUserApi\";\r\nimport \"../styles/ExtraServices.css\";\r\nimport \"../styles/FlightNumber.css\";\r\nimport {\r\n BookingInfo,\r\n BookingRequest,\r\n Place,\r\n ValidationInfo,\r\n} from \"../types/Booking\";\r\nimport {\r\n BookingReceiptData,\r\n CreateBookingRequest,\r\n} from \"../types/CreateBookingRequest\";\r\nimport { CreateBookingResponse } from \"../types/CreateBookingResponse\";\r\nimport { ExtraService } from \"../types/ExtraService\";\r\nimport { GetPriceRequestModel } from \"../types/GetPrice\";\r\nimport {\r\n AddressFromDetails,\r\n AddressToDetails,\r\n FromAddressWithPlaceId,\r\n ToAddressWithPlaceId,\r\n} from \"../types/SearchAddresses\";\r\nimport { OfferingType, UserProfileResult } from \"../types/UserProfile\";\r\nimport { UserProfile } from \"../UserProfile\";\r\n// import BookingReceiptComponent from \"./BookingReceiptComponent\";\r\nimport BookingReceiptInCarPaymentComponent from \"./BookingReceiptInCarPaymentComponent\";\r\nimport ExtraServiceOption, {\r\n CarOptionIcons,\r\n ExtraServiceIcons,\r\n} from \"./ExtraServiceOption\";\r\nimport { LoginComponent } from \"./LoginComponent\";\r\n\r\nconst addonsCarType = [\r\n {\r\n carTypeName: CarOptionIcons.Normal,\r\n priceType: \"FixedPrice\",\r\n description: \"1 - 4 personer\",\r\n checked: true,\r\n },\r\n {\r\n carTypeName: CarOptionIcons.Combi,\r\n priceType: \"FixedPrice\",\r\n description: \"1 - 4 personer\",\r\n checked: false,\r\n },\r\n {\r\n carTypeName: CarOptionIcons.Minibus,\r\n priceType: \"FixedPriceLargeVehicle\",\r\n description: \"1 - 8 personer\",\r\n checked: false,\r\n },\r\n];\r\n\r\nconst addonsChildren = [\r\n {\r\n childItemName: \"carSeat\",\r\n price: 100,\r\n checked: false,\r\n },\r\n {\r\n childItemName: \"babySeat\",\r\n price: 100,\r\n checked: false,\r\n },\r\n];\r\n\r\nconst addonsPet = [\r\n {\r\n petItemName: \"Pet\",\r\n checked: false,\r\n },\r\n];\r\n\r\nexport interface BookingComponentState {\r\n cursor: number;\r\n date: string;\r\n dateMin: string;\r\n dateMax: string;\r\n time: string;\r\n current?: BookingRequest;\r\n loading: boolean;\r\n token?: string;\r\n isDirty: boolean;\r\n validUser: boolean;\r\n travelNow: boolean;\r\n travelLater: boolean;\r\n priceLoading: boolean;\r\n errorMessage?: string;\r\n price?: number;\r\n getPriceRequestModel: GetPriceRequestModel;\r\n fromValid: boolean;\r\n toValid: boolean;\r\n showToResult: boolean;\r\n showFromResult: boolean;\r\n priceStatus: string;\r\n // from?: string;\r\n // to?: string;\r\n fromAddressWithPlaceId: FromAddressWithPlaceId;\r\n addressFromDetails: AddressFromDetails;\r\n toAddressWithPlaceId: ToAddressWithPlaceId;\r\n addressToDetails: AddressToDetails;\r\n carType: number;\r\n carTypeName: CarOptionIcons;\r\n childTypeName: string;\r\n petTypeName: string;\r\n createBookingResponse: CreateBookingResponse;\r\n createBookingRequest: CreateBookingRequest;\r\n extraServices: ExtraService[];\r\n extraServicesCost: number;\r\n selectedExtraServices: string[];\r\n flightNumber: string;\r\n messageToDriver: string;\r\n currentUser: UserProfileResult;\r\n offering: string;\r\n existingBooking: boolean;\r\n isAirport: boolean;\r\n numberOfPassengers: number;\r\n childSeatSet: boolean;\r\n childSeatCost: number;\r\n babySeatSet: boolean;\r\n babySeatCost: number;\r\n userProfile: UserProfileResult | null;\r\n extraServiceNames: string[];\r\n offeringType: number;\r\n offeringPercent: number;\r\n offeringFixed: number;\r\n offeringTitle: string;\r\n carTypeIndex: number;\r\n numberOfPersons: string;\r\n userId: string;\r\n componentInitiated: boolean;\r\n getPriceRunning: boolean;\r\n inValidFromMessage: string;\r\n inValidToMessage: string;\r\n fromInValid: boolean;\r\n toInValid: boolean;\r\n buttonIsDisabled: boolean;\r\n lastSelectedDate: string;\r\n lastSelectedTime: string;\r\n inValidFlightMessage: string;\r\n originalPrice: number;\r\n showOriginalPrice: boolean;\r\n administrationFee: number;\r\n airportFee: number;\r\n}\r\n\r\nexport interface BookingComponentProps {}\r\n\r\nexport class BookingComponent extends React.Component<\r\n BookingComponentProps,\r\n BookingComponentState\r\n> {\r\n static displayName = \"BookingComponent\";\r\n static contextType = LanguageContext;\r\n\r\n constructor(props: BookingComponentProps) {\r\n super(props);\r\n\r\n this.state = {\r\n cursor: 0,\r\n date: \"\",\r\n dateMin: \"\",\r\n dateMax: \"\",\r\n time: \"\",\r\n loading: false,\r\n isDirty: false,\r\n\r\n travelNow: true,\r\n travelLater: false,\r\n validUser: false,\r\n priceLoading: false,\r\n \r\n showFromResult: false,\r\n showToResult: false,\r\n fromValid: true,\r\n toValid: true,\r\n priceStatus: \"\",\r\n // from: \"\", //this.state.current?.pickup.title,\r\n // to: \"\", //this.state.current?.dropOff.title,\r\n price: 0, //this.state.current?.price,\r\n getPriceRequestModel: {\r\n userId: \"\",\r\n pickUpTime: \"\",\r\n pickup: {\r\n title: \"\",\r\n lat: \"\",\r\n long: \"\",\r\n GooglePlaceId: \"\",\r\n },\r\n dropOff: {\r\n title: \"\",\r\n lat: \"\",\r\n long: \"\",\r\n GooglePlaceId: \"\",\r\n },\r\n numberOfPassengers: 0,\r\n via: null,\r\n carType: 0,\r\n extraServices: null,\r\n message: null,\r\n pickupTimeASAP: true,\r\n offeringId: \"\",\r\n } as GetPriceRequestModel,\r\n fromAddressWithPlaceId: {\r\n id: \"\",\r\n googlePlaceId: \"\", //this.state.current?.pickup.GooglePlaceId,\r\n addressDetails: [],\r\n } as FromAddressWithPlaceId,\r\n addressFromDetails: { fromAddressWithPlaceId: [] } as AddressFromDetails,\r\n toAddressWithPlaceId: {\r\n id: \"\",\r\n googlePlaceId: \"\",\r\n addressDetails: [],\r\n } as ToAddressWithPlaceId,\r\n addressToDetails: { toAddressWithPlaceId: [] } as AddressToDetails,\r\n carType: 0,\r\n carTypeName: CarOptionIcons.Normal,\r\n childTypeName: \"Inget valt\",\r\n petTypeName: \"Inget valt\",\r\n createBookingResponse: { paymentId: \"\" } as CreateBookingResponse,\r\n createBookingRequest: {} as CreateBookingRequest,\r\n extraServices: [],\r\n selectedExtraServices: [],\r\n flightNumber: \"\",\r\n messageToDriver: \"\",\r\n currentUser: {} as UserProfileResult,\r\n offering: \"\",\r\n existingBooking: false,\r\n extraServicesCost: 0,\r\n isAirport: false,\r\n numberOfPassengers: 1,\r\n childSeatSet: false,\r\n childSeatCost: 0,\r\n babySeatSet: false,\r\n babySeatCost: 0,\r\n userProfile: null,\r\n extraServiceNames: [],\r\n offeringType: 3,\r\n offeringPercent: 0,\r\n offeringFixed: 0,\r\n offeringTitle: \"\",\r\n carTypeIndex: 0,\r\n numberOfPersons: \"1-4 personer\",\r\n userId: \"\",\r\n componentInitiated: false,\r\n getPriceRunning: false,\r\n fromInValid: false,\r\n toInValid: false,\r\n inValidFromMessage: \"\",\r\n inValidToMessage: \"\",\r\n buttonIsDisabled: false,\r\n lastSelectedDate: \"\",\r\n lastSelectedTime: \"\",\r\n inValidFlightMessage: \"\",\r\n originalPrice: 0,\r\n showOriginalPrice: false,\r\n administrationFee: 0,\r\n airportFee: 0,\r\n };\r\n\r\n this.open = this.open.bind(this);\r\n this.createBooking = this.createBooking.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.forceUpdate();\r\n\r\n App.subscribe(\"open.booking\", this.open);\r\n\r\n App.subscribe(\"bookingReceipt\", (message: any, data: any) =>\r\n setTimeout(() => {\r\n this.setState({\r\n priceLoading: false,\r\n buttonIsDisabled: false,\r\n });\r\n }, 500)\r\n );\r\n }\r\n\r\n open(msg: string, data: BookingInfo) {\r\n if (data != undefined) {\r\n let booking: BookingRequest = {\r\n pickUpTime: data.priceRequest.pickUpTime,\r\n pickup: {\r\n title: data.priceRequest.pickup.title,\r\n GooglePlaceId: data.priceRequest.pickup.GooglePlaceId,\r\n } as Place,\r\n dropOff: {\r\n title: data.priceRequest.dropOff.title,\r\n GooglePlaceId: data.priceRequest.dropOff.GooglePlaceId,\r\n } as Place,\r\n numberOfPassengers: 1,\r\n carType: 0,\r\n extraServices: [],\r\n message: \"\",\r\n pickupTimeASAP: data.travelNow,\r\n price: data.price + data.administrationFee + data.airportFee,\r\n administrationFee: data.administrationFee,\r\n airportFee: data.airportFee\r\n };\r\n\r\n\r\n var dateTimeString: string = \"\";\r\n var dateTimeStringFormated: string = \"\";\r\n if (!data.travelNow) {\r\n dateTimeString = data.priceRequest.pickUpTime;\r\n const dateTimeSplit = data.priceRequest.pickUpTime.split(\"T\");\r\n const date = dateTimeSplit[0];\r\n const time = dateTimeSplit[1];\r\n\r\n dateTimeString = date + \"T\" + time;\r\n dateTimeStringFormated = momenttz(dateTimeString).tz(\"Europe/Stockholm\", true).format();\r\n\r\n this.setState({\r\n date : data.date,\r\n time : data.time,\r\n travelNow: false,\r\n travelLater: true,\r\n extraServices: [],\r\n selectedExtraServices: [],\r\n offering: \"\",\r\n lastSelectedDate: data.date,\r\n lastSelectedTime: data.time,\r\n administrationFee: data.administrationFee\r\n });\r\n } else {\r\n let newDateTime = new Date();\r\n const newDate = newDateTime.toLocaleString().split(\" \")[0];\r\n const newTime = newDateTime.toLocaleString().split(\" \")[1];\r\n const newTimeSplitA = newTime.split(\".\")[0];\r\n const newTimeSplitB = newTimeSplitA.split(\":\");\r\n const newTimeString = newTimeSplitB[0] + \":\" + newTimeSplitB[1];\r\n\r\n dateTimeString = newDate + \"T\" + newTime;\r\n dateTimeStringFormated = momenttz(dateTimeString).tz(\"Europe/Stockholm\", true).format();\r\n\r\n this.setState({\r\n date: newDate,\r\n time: newTimeString,\r\n lastSelectedDate: newDate,\r\n lastSelectedTime: newTimeString,\r\n travelNow: true,\r\n travelLater: false,\r\n extraServices: [],\r\n selectedExtraServices: [],\r\n offering: \"\",\r\n extraServiceNames: [],\r\n messageToDriver: \"\",\r\n flightNumber: \"\",\r\n administrationFee: data.administrationFee\r\n });\r\n\r\n // Validate date\r\n const dateNow = new Date();\r\n const newDateNow = moment(dateNow).format(\"YYYY-MM-DD\");\r\n const dateNowPlusOneYear: Date = new Date(\r\n dateNow.setFullYear(dateNow.getFullYear() + 1)\r\n );\r\n const newDateNowPlusOneYear =\r\n moment(dateNowPlusOneYear).format(\"YYYY-MM-DD\");\r\n this.setState({\r\n dateMin: newDateNow,\r\n dateMax: newDateNowPlusOneYear,\r\n inValidFlightMessage: (data.isAirport) ? \"Vänligen ange flightnummer.\" : \"\"\r\n });\r\n //\r\n }\r\n\r\n \r\n\r\n booking.pickUpTime = dateTimeStringFormated;\r\n\r\n let googlePlaceIds = this.state.getPriceRequestModel;\r\n if (googlePlaceIds === undefined) return;\r\n googlePlaceIds.pickup.GooglePlaceId = booking.pickup.GooglePlaceId;\r\n googlePlaceIds.dropOff.GooglePlaceId = booking.dropOff.GooglePlaceId;\r\n googlePlaceIds.pickup.title = booking.pickup.title;\r\n googlePlaceIds.dropOff.title = booking.dropOff.title;\r\n\r\n this.setState({\r\n current: booking,\r\n getPriceRequestModel: googlePlaceIds,\r\n isAirport: data.isAirport,\r\n childSeatCost: 0,\r\n babySeatCost: 0,\r\n administrationFee: booking.administrationFee\r\n });\r\n\r\n this.setState({ componentInitiated: true });\r\n\r\n App.publish(\"open.booking.modal\", null);\r\n\r\n setTimeout(() => {\r\n this.setCarType(\"Standard\");\r\n }, 1);\r\n }\r\n }\r\n\r\n getExtraServices = async () => {\r\n const [services, user] = await Promise.all([\r\n ExtraServicesApi.getActiveExtraServices(),\r\n UserApi.getCurrentProfile(),\r\n ]);\r\n\r\n this.setState({ currentUser: user, extraServices: services });\r\n };\r\n\r\n createBooking() {\r\n fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/booking/CreateBooking\",\r\n GlobalAppsettings.GetPostInit(this.state.current)\r\n )\r\n .then((response) => response.json() as Promise)\r\n .then((data) => {\r\n if (data.success) {\r\n this.setState({\r\n loading: false,\r\n validUser: true,\r\n isDirty: true,\r\n token: data.token,\r\n errorMessage: undefined,\r\n });\r\n } else {\r\n this.setState({\r\n loading: false,\r\n validUser: false,\r\n errorMessage: data.errorMessage,\r\n });\r\n }\r\n\r\n App.publish(\"open.booking.modal\", null);\r\n })\r\n .catch((reason) => {\r\n this.setState({\r\n loading: false,\r\n validUser: false,\r\n errorMessage: \"Ett fel uppstod\",\r\n });\r\n });\r\n }\r\n\r\n selectTo(e: boolean): void {\r\n this.setState({ showToResult: e });\r\n this.setState({ showFromResult: e });\r\n }\r\n\r\n async onFromChange(event: React.ChangeEvent) {\r\n const { value } = event.target;\r\n\r\n let data = this.state.current;\r\n if (data === undefined) return;\r\n data.pickup.title = value;\r\n\r\n this.setState({\r\n current: data,\r\n fromInValid: false,\r\n inValidFromMessage: \"\",\r\n });\r\n\r\n if (value.length > 2) {\r\n const response = await BookingApi.getSearchAddresses(value);\r\n let updatedAddressDetails = {} as AddressFromDetails;\r\n\r\n response.results.forEach((element) => {\r\n const myArray = element.streetName.split(\",\");\r\n let fromAddressWithPlaceId = {\r\n id: new Date().valueOf().toString(),\r\n googlePlaceId: element.googlePlaceId,\r\n addressDetails: myArray,\r\n } as FromAddressWithPlaceId;\r\n if (!updatedAddressDetails.fromAddressWithPlaceId) {\r\n updatedAddressDetails.fromAddressWithPlaceId = [];\r\n }\r\n updatedAddressDetails.fromAddressWithPlaceId.push(\r\n fromAddressWithPlaceId\r\n );\r\n });\r\n this.setState({\r\n addressFromDetails: updatedAddressDetails,\r\n });\r\n\r\n this.setState({\r\n showFromResult: true,\r\n fromValid: false,\r\n });\r\n }\r\n\r\n if (value.length < 3) {\r\n this.setState({\r\n showFromResult: false,\r\n fromValid: false,\r\n });\r\n }\r\n }\r\n\r\n async onToChange(event: React.ChangeEvent) {\r\n const { value } = event.target;\r\n\r\n let data = this.state.current;\r\n if (data === undefined) return;\r\n data.dropOff.title = value;\r\n\r\n this.setState({\r\n current: data,\r\n toInValid: false,\r\n inValidToMessage: \"\",\r\n });\r\n\r\n if (value.length > 2) {\r\n const response = await BookingApi.getSearchAddresses(value);\r\n let updatedAddressDetails = {} as AddressToDetails;\r\n\r\n response.results.forEach((element) => {\r\n const myArray = element.streetName.split(\",\");\r\n let toAddressWithPlaceId = {\r\n id: new Date().valueOf().toString(),\r\n googlePlaceId: element.googlePlaceId,\r\n addressDetails: myArray,\r\n } as ToAddressWithPlaceId;\r\n if (!updatedAddressDetails.toAddressWithPlaceId) {\r\n updatedAddressDetails.toAddressWithPlaceId = [];\r\n }\r\n updatedAddressDetails.toAddressWithPlaceId.push(toAddressWithPlaceId);\r\n });\r\n this.setState({\r\n addressToDetails: updatedAddressDetails,\r\n });\r\n\r\n this.setState({\r\n showToResult: true,\r\n toValid: false,\r\n });\r\n }\r\n\r\n if (value.length < 3) {\r\n this.setState({\r\n showToResult: false,\r\n toValid: false,\r\n });\r\n }\r\n }\r\n\r\n async onAddFromAddress(address: string, addressInfo: FromAddressWithPlaceId) {\r\n const addressDetails = await BookingApi.getAddressNumber(\r\n addressInfo.googlePlaceId\r\n );\r\n\r\n let currentData = this.state.current;\r\n if (currentData === undefined) return;\r\n currentData.pickup.title = address;\r\n this.setState({ current: currentData, showFromResult: false });\r\n\r\n let data = this.state.getPriceRequestModel;\r\n data.pickup.GooglePlaceId = addressInfo.googlePlaceId;\r\n data.pickup.title = address;\r\n this.setState({ getPriceRequestModel: data });\r\n\r\n if (addressDetails.type !== \"Street\") {\r\n this.setState({ fromValid: true });\r\n } else if (addressDetails.type === \"Street\") {\r\n this.setState({\r\n inValidFromMessage: \"Vänligen ange gatunummer.\",\r\n fromInValid: true,\r\n });\r\n }\r\n\r\n this.getPrice(\r\n this.state.offering,\r\n true,\r\n this.state.toValid,\r\n addressInfo.googlePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n if (\r\n addressInfo.googlePlaceId === \"ChIJa4Q3VAH6T0YRs4SWJS82YCQ\" ||\r\n addressInfo.googlePlaceId === \"ChIJHUFIwyGMT0YRm1LHNlZoCnE\" ||\r\n addressInfo.googlePlaceId === \"ChIJvQ0uGk6KT0YRmxmx-827XhA\"\r\n ) {\r\n this.setState({ isAirport: true });\r\n } else {\r\n this.setState({ isAirport: false });\r\n }\r\n }\r\n\r\n async onAddToAddress(address: string, addressInfo: ToAddressWithPlaceId) {\r\n const addressDetails = await BookingApi.getAddressNumber(\r\n addressInfo.googlePlaceId\r\n );\r\n\r\n let currentData = this.state.current;\r\n if (currentData === undefined) return;\r\n currentData.dropOff.title = address;\r\n this.setState({ current: currentData, showToResult: false });\r\n\r\n let data = this.state.getPriceRequestModel;\r\n data.dropOff.GooglePlaceId = addressInfo.googlePlaceId;\r\n data.dropOff.title = address;\r\n this.setState({ getPriceRequestModel: data });\r\n\r\n if (addressDetails.type !== \"Street\") {\r\n this.setState({ toValid: true });\r\n } else if (addressDetails.type === \"Street\") {\r\n this.setState({\r\n inValidToMessage: \"Vänligen ange gatunummer.\",\r\n toInValid: true,\r\n });\r\n }\r\n\r\n this.getPrice(\r\n this.state.offering,\r\n this.state.fromValid,\r\n true,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n addressInfo.googlePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n }\r\n\r\n async onFromKeyDownHandler(e: any) {\r\n const { cursor, addressFromDetails } = this.state;\r\n\r\n let currentData = this.state.current;\r\n if (currentData === undefined) return;\r\n\r\n if (!addressFromDetails?.fromAddressWithPlaceId) return;\r\n else {\r\n if (e.keyCode === 38 && cursor > 0) {\r\n this.setState((prevState) => ({\r\n cursor: prevState.cursor - 1,\r\n }));\r\n } else if (\r\n e.keyCode === 40 &&\r\n cursor < addressFromDetails.fromAddressWithPlaceId.length - 1\r\n ) {\r\n this.setState((prevState) => ({\r\n cursor: prevState.cursor + 1,\r\n }));\r\n } else if (e.keyCode === 13) {\r\n const address = addressFromDetails.fromAddressWithPlaceId[cursor];\r\n\r\n const addressDetails = await BookingApi.getAddressNumber(\r\n address.googlePlaceId\r\n );\r\n\r\n currentData.pickup.title =\r\n address.addressDetails[0] + \",\" + address.addressDetails[1];\r\n\r\n this.setState({\r\n showFromResult: false,\r\n current: currentData,\r\n });\r\n\r\n let data = this.state.getPriceRequestModel;\r\n data.pickup.GooglePlaceId = address.googlePlaceId;\r\n data.pickup.title =\r\n address.addressDetails[0] + \",\" + address.addressDetails[1];\r\n this.setState({ getPriceRequestModel: data });\r\n\r\n if (addressDetails.type !== \"Street\") {\r\n this.setState({ fromValid: true });\r\n } else if (addressDetails.type === \"Street\") {\r\n this.setState({\r\n inValidFromMessage: \"Vänligen ange gatunummer.\",\r\n fromInValid: true,\r\n });\r\n }\r\n\r\n this.getPrice(\r\n this.state.offering,\r\n true,\r\n this.state.toValid,\r\n address.googlePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n\r\n if (\r\n address.googlePlaceId === \"ChIJa4Q3VAH6T0YRs4SWJS82YCQ\" ||\r\n address.googlePlaceId === \"ChIJHUFIwyGMT0YRm1LHNlZoCnE\" ||\r\n address.googlePlaceId === \"ChIJvQ0uGk6KT0YRmxmx-827XhA\"\r\n ) {\r\n this.setState({ isAirport: true });\r\n } else {\r\n this.setState({ isAirport: false });\r\n }\r\n }\r\n }\r\n this.forceUpdate();\r\n }\r\n\r\n async onToKeyDownHandler(e: any) {\r\n const { cursor, addressToDetails } = this.state;\r\n\r\n let currentData = this.state.current;\r\n if (currentData === undefined) return;\r\n\r\n if (!addressToDetails?.toAddressWithPlaceId) return;\r\n else {\r\n if (e.keyCode === 38 && cursor > 0) {\r\n this.setState((prevState) => ({\r\n cursor: prevState.cursor - 1,\r\n }));\r\n } else if (\r\n e.keyCode === 40 &&\r\n cursor < addressToDetails.toAddressWithPlaceId.length - 1\r\n ) {\r\n this.setState((prevState) => ({\r\n cursor: prevState.cursor + 1,\r\n }));\r\n } else if (e.keyCode === 13) {\r\n const address = addressToDetails.toAddressWithPlaceId[cursor];\r\n\r\n const addressDetails = await BookingApi.getAddressNumber(\r\n address.googlePlaceId\r\n );\r\n\r\n currentData.dropOff.title =\r\n address.addressDetails[0] + \",\" + address.addressDetails[1];\r\n\r\n this.setState({\r\n showToResult: false,\r\n current: currentData,\r\n });\r\n\r\n let data = this.state.getPriceRequestModel;\r\n data.dropOff.GooglePlaceId = address.googlePlaceId;\r\n data.dropOff.title =\r\n address.addressDetails[0] + \",\" + address.addressDetails[1];\r\n this.setState({ getPriceRequestModel: data });\r\n\r\n if (addressDetails.type !== \"Street\") {\r\n this.setState({ toValid: true });\r\n } else if (addressDetails.type === \"Street\") {\r\n this.setState({\r\n inValidToMessage: \"Vänligen ange gatunummer.\",\r\n toInValid: true,\r\n });\r\n }\r\n\r\n this.getPrice(\r\n this.state.offering,\r\n this.state.fromValid,\r\n true,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n address.googlePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n }\r\n }\r\n }\r\n\r\n onDateChange(event: any) {\r\n this.setState({ \r\n date: event.target.value,\r\n lastSelectedDate: event.target.value\r\n });\r\n\r\n const dateNow = new Date();\r\n const newDateNow = moment(dateNow).format(\"YYYY-MM-DD\");\r\n const dateNowPlusOneYear: Date = new Date(\r\n dateNow.setFullYear(dateNow.getFullYear() + 1)\r\n );\r\n const newDateNowPlusOneYear =\r\n moment(dateNowPlusOneYear).format(\"YYYY-MM-DD\");\r\n this.setState({ dateMin: newDateNow, dateMax: newDateNowPlusOneYear, offering: \"\" });\r\n\r\n this.getPrice(\r\n \"\",\r\n this.state.fromValid,\r\n this.state.toValid,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n event.target.value,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n }\r\n\r\n onTimeChange(event: any) {\r\n this.setState({ \r\n time: event.target.value, \r\n lastSelectedTime: event.target.value,\r\n offering: \"\" \r\n });\r\n\r\n this.getPrice(\r\n \"\",\r\n this.state.fromValid,\r\n this.state.toValid,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n event.target.value,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n }\r\n\r\n \r\n onChangeFlightNumber(event : React.ChangeEvent)\r\n {\r\n const { value } = event.target;\r\n\r\n if(this.state.isAirport && value === \"\"){\r\n this.setState({flightNumber: value, inValidFlightMessage: \"Vänligen ange flightnummer.\"})\r\n }\r\n else{\r\n this.setState({flightNumber: value, inValidFlightMessage: \"\" })\r\n }\r\n\r\n this.getPrice(\r\n this.state.offering,\r\n this.state.fromValid,\r\n true,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n }\r\n\r\n onClickTravelNow() {\r\n this.setState({ travelNow: true, travelLater: false, offering: \"\" });\r\n\r\n this.getPrice(\r\n \"\",\r\n this.state.fromValid,\r\n this.state.toValid,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n true\r\n );\r\n }\r\n\r\n onClickTravelLater() {\r\n if (this.state.current === undefined) return;\r\n\r\n // if(this.state.priceLoading === true) return;\r\n\r\n const dateTimeString = this.state.lastSelectedDate + \"T\" + this.state.lastSelectedTime;\r\n const dateTimeFormated = momenttz(dateTimeString).tz(\"Europe/Stockholm\", true).format();\r\n const dateTimeFormatedString = dateTimeFormated.toString();\r\n let newCurrent = this.state.current;\r\n newCurrent.pickUpTime = dateTimeFormatedString; \r\n\r\n this.setState({ \r\n travelNow: false,\r\n travelLater: true, \r\n offering: \"\",\r\n date: this.state.lastSelectedDate,\r\n time: this.state.lastSelectedTime,\r\n current: {...newCurrent}\r\n });\r\n\r\n this.getPrice(\r\n \"\",\r\n this.state.fromValid,\r\n this.state.toValid,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.lastSelectedDate,\r\n this.state.lastSelectedTime,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n false\r\n );\r\n }\r\n\r\n async getPrice(\r\n offeringId: string,\r\n fromValid: boolean,\r\n toValid: boolean,\r\n fromPlaceId: string,\r\n toPlaceId: string,\r\n date: string,\r\n time: string,\r\n nrOfPassengers: number,\r\n carType: number,\r\n travelNow: boolean\r\n ) {\r\n if (this.state.componentInitiated) {\r\n this.setState({ priceLoading: true, getPriceRunning: true});\r\n }\r\n\r\n let currentData = this.state.current;\r\n if (currentData === undefined) return;\r\n\r\n if (fromValid === true && toValid === true) {\r\n if (travelNow === false) {\r\n if (date !== \"\" && time !== \"\") {\r\n const dateTimeString = date + \"T\" + time;\r\n const dateTimeFormated = momenttz(dateTimeString).tz(\"Europe/Stockholm\",true).format();\r\n const dateTimeFormatedString = dateTimeFormated.toString();\r\n\r\n const pickup = {\r\n title: null,\r\n lat: null,\r\n long: null,\r\n GooglePlaceId: fromPlaceId,\r\n };\r\n const dropoff = {\r\n title: null,\r\n lat: null,\r\n long: null,\r\n GooglePlaceId: toPlaceId,\r\n };\r\n const response = await GetPriceApi.getPriceRequest(\r\n null,\r\n dateTimeFormatedString,\r\n pickup,\r\n dropoff,\r\n nrOfPassengers,\r\n null,\r\n carType,\r\n null,\r\n null,\r\n false,\r\n null\r\n );\r\n\r\n if (!response) return;\r\n const responsePriceInfo = response.price;\r\n\r\n if (responsePriceInfo.additionalFee != null) \r\n {\r\n if (this.state.isAirport) {\r\n this.setState({ airportFee: response.additionalFee });\r\n } else {\r\n this.setState({ airportFee: 0 });\r\n }\r\n }\r\n\r\n let data = this.state.current;\r\n if (data === undefined) return;\r\n data.price =\r\n response.fixedPrice +\r\n responsePriceInfo.additionalFee +\r\n this.state.childSeatCost +\r\n this.state.babySeatCost +\r\n this.state.administrationFee;\r\n\r\n this.setState({ originalPrice: data.price, showOriginalPrice: false })\r\n //offering calculation\r\n if (offeringId !== \"\") {\r\n if (this.state.offeringType === 0) {\r\n const percent = (100 - this.state.offeringPercent) / 100;\r\n data.price = Math.round((data.price + this.state.administrationFee) * percent);\r\n } else if (this.state.offeringType === 1) {\r\n data.price = Math.round((data.price + this.state.administrationFee) - this.state.offeringFixed);\r\n }\r\n this.setState({ showOriginalPrice: true })\r\n }\r\n\r\n if (data.price < 0) {\r\n data.price = 0;\r\n }\r\n\r\n data.pickUpTime = dateTimeFormatedString;\r\n this.setState({\r\n buttonIsDisabled: this.state.isAirport && this.state.flightNumber.length < 1,\r\n current: data,\r\n priceLoading: false,\r\n getPriceRunning: false\r\n });\r\n } else {\r\n return;\r\n }\r\n } else if (travelNow === true) {\r\n this.setState({ priceLoading: true, getPriceRunning: true });\r\n const dateTime = momenttz(new Date()).tz(\"Europe/Stockholm\", true).format().toString();\r\n\r\n const pickup = {\r\n title: null,\r\n lat: null,\r\n long: null,\r\n GooglePlaceId: fromPlaceId, //fromPlaceId,\r\n };\r\n const dropoff = {\r\n title: null,\r\n lat: null,\r\n long: null,\r\n GooglePlaceId: toPlaceId, //toPlaceId,\r\n };\r\n const response = await GetPriceApi.getPriceRequest(\r\n null,\r\n dateTime,\r\n pickup,\r\n dropoff,\r\n nrOfPassengers,\r\n null,\r\n carType,\r\n null,\r\n null,\r\n true,\r\n null\r\n );\r\n\r\n if (!response) return;\r\n\r\n const responsePriceInfo = response.price;\r\n\r\n if (responsePriceInfo.additionalFee != null) \r\n {\r\n if (this.state.isAirport) {\r\n this.setState({ airportFee: response.additionalFee });\r\n } else {\r\n this.setState({ airportFee: 0 });\r\n }\r\n }\r\n\r\n let data = this.state.current;\r\n if (data === undefined) return;\r\n data.pickUpTime = dateTime;\r\n data.price =\r\n response.fixedPrice +\r\n responsePriceInfo.additionalFee +\r\n this.state.childSeatCost +\r\n this.state.babySeatCost +\r\n this.state.administrationFee;\r\n\r\n this.setState({ originalPrice: data.price, showOriginalPrice: false })\r\n //offering calculation\r\n if (offeringId !== \"\") {\r\n if (this.state.offeringType === 0) {\r\n const percent = (100 - this.state.offeringPercent) / 100;\r\n data.price = Math.round(data.price * percent);\r\n } else if (this.state.offeringType === 1) {\r\n data.price = Math.round(data.price - this.state.offeringFixed);\r\n }\r\n this.setState({ showOriginalPrice: true })\r\n }\r\n\r\n if (data.price < 0) {\r\n data.price = 0;\r\n }\r\n\r\n this.setState({\r\n buttonIsDisabled: this.state.isAirport && this.state.flightNumber.length < 1,\r\n current: data,\r\n priceLoading: false,\r\n getPriceRunning: false,\r\n });\r\n }\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n setCarType(typeName: any) {\r\n var carType: number = 0;\r\n var nrOfPassengers: number = 0;\r\n addonsCarType.forEach((element) => {\r\n if (element.carTypeName === typeName) {\r\n element.checked = true;\r\n this.setState({ carTypeName: element.carTypeName });\r\n\r\n if (typeName === \"Standard\") {\r\n carType = 0;\r\n nrOfPassengers = 1;\r\n this.setState({\r\n carTypeIndex: 0,\r\n numberOfPersons: \"1-4 personer\",\r\n numberOfPassengers: 1,\r\n });\r\n } else if (typeName === \"Kombi\") {\r\n carType = 2;\r\n nrOfPassengers = 4;\r\n this.setState({\r\n carTypeIndex: 2,\r\n numberOfPersons: \"1-4 personer\",\r\n numberOfPassengers: 4,\r\n });\r\n } else {\r\n carType = 1;\r\n nrOfPassengers = 5;\r\n this.setState({\r\n carTypeIndex: 1,\r\n numberOfPersons: \"1-8 personer\",\r\n numberOfPassengers: 5,\r\n });\r\n }\r\n } else {\r\n element.checked = false;\r\n }\r\n });\r\n\r\n this.getPrice(\r\n this.state.offering,\r\n this.state.fromValid,\r\n this.state.toValid,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n nrOfPassengers,\r\n carType,\r\n this.state.travelNow\r\n );\r\n\r\n this.forceUpdate();\r\n }\r\n\r\n // setChildAddon(title: string, price: number) {\r\n // addonsChildren.forEach((item) => {\r\n // if (item.childItemName === title) {\r\n // if (item.checked === true) {\r\n // item.checked = false;\r\n // } else {\r\n // item.checked = true;\r\n // }\r\n // }\r\n // });\r\n\r\n // this.forceUpdate();\r\n // }\r\n\r\n // setPetAddon(title: string) {\r\n // addonsPet.forEach((item) => {\r\n // if (item.petItemName === title) {\r\n // if (item.checked === true) {\r\n // item.checked = false;\r\n // } else {\r\n // item.checked = true;\r\n // }\r\n // }\r\n // });\r\n\r\n // this.forceUpdate();\r\n // }\r\n\r\n checkIfUndefined(text: string) {\r\n if (text !== undefined) {\r\n return \", \" + text;\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n {/* {\r\n this.checkUserBookings();\r\n }}\r\n /> */}\r\n \r\n \r\n {(lang) => (\r\n
\r\n \r\n {this.state.existingBooking === false\r\n ? this.renderBooking(this.state.current)\r\n : this.renderBookingExist()}\r\n {/* {this.renderBooking(this.state.current)} */}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n );\r\n }\r\n onValidUser() {\r\n this.setState({ validUser: true });\r\n }\r\n\r\n // offeringType 0:Percent , 1:Fixed\r\n onChangeCurrentOffering = (\r\n offeringId: string,\r\n offeringType: OfferingType,\r\n offeringPercent: number,\r\n offeringFixed: number,\r\n offeringTitle: string\r\n ) => {\r\n if (this.state.offering === offeringId) {\r\n offeringId = \"\";\r\n this.setState({ offering: \"\", offeringTitle: \"\" });\r\n } else {\r\n this.setState({ offering: offeringId, offeringTitle: offeringTitle });\r\n if (offeringType === 0) {\r\n this.setState({ offeringType: 0, offeringPercent: offeringPercent });\r\n } else if (offeringType === 1) {\r\n this.setState({ offeringType: 1, offeringFixed: offeringFixed });\r\n }\r\n }\r\n\r\n this.forceUpdate();\r\n\r\n this.getPrice(\r\n offeringId,\r\n this.state.fromValid,\r\n this.state.toValid,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n };\r\n\r\n async checkUserBookings() {\r\n const user = await UserApi.getCurrentProfile();\r\n if (!user) return;\r\n const updatedUser = await UserApi.getUpdateCurrentProfile(\r\n user.userProfile.id\r\n );\r\n if (!updatedUser) return;\r\n if (updatedUser) {\r\n if (\r\n updatedUser.userProfile.bookings &&\r\n updatedUser.userProfile.bookings.length > 0\r\n ) {\r\n if (updatedUser.userProfile.bookings[0].isConfirmed === false) {\r\n var isCanceled = await BookingApi.cancelUnpaidBooking(\r\n updatedUser.userProfile.bookings[0].bookingId\r\n );\r\n if (isCanceled) {\r\n this.setState({ existingBooking: false });\r\n this.forceUpdate();\r\n return;\r\n }\r\n }\r\n this.setState({ existingBooking: true, userProfile: updatedUser });\r\n //this.forceUpdate();\r\n // return;\r\n return this.renderBookingExist();\r\n } else {\r\n this.setState({ existingBooking: false });\r\n this.forceUpdate();\r\n }\r\n } else {\r\n this.setState({ existingBooking: false });\r\n this.forceUpdate();\r\n }\r\n }\r\n\r\n private renderBookingExist(): React.ReactNode {\r\n return (\r\n
\r\n {\r\n this.checkUserBookings();\r\n }}\r\n />\r\n <>{this.ExistingBooking()}\r\n
\r\n );\r\n }\r\n\r\n translateToSwe = (month: string) => {\r\n if (month === \"Jan\") return \"januari\";\r\n if (month === \"Feb\") return \"februari\";\r\n if (month === \"Mar\") return \"mars\";\r\n if (month === \"Apr\") return \"april\";\r\n if (month === \"May\") return \"maj\";\r\n if (month === \"Jun\") return \"juni\";\r\n if (month === \"Jul\") return \"juli\";\r\n if (month === \"Aug\") return \"augusti\";\r\n if (month === \"Sep\") return \"september\";\r\n if (month === \"Oct\") return \"oktober\";\r\n if (month === \"Nov\") return \"november\";\r\n if (month === \"Dec\") return \"december\";\r\n else {\r\n return month;\r\n }\r\n };\r\n\r\n cleanDateTime = () => {\r\n const userBookings = this.state.userProfile?.userProfile.bookings[0];\r\n if (!userBookings?.pickUpTime) return;\r\n\r\n const dateTime = new Date(Date.parse(userBookings.pickUpTime));\r\n\r\n const timeString = dateTime.toString();\r\n var timeSplit = timeString.split(\" \");\r\n\r\n var month = timeSplit[1];\r\n const translatedMonth = this.translateToSwe(month);\r\n\r\n const day = timeSplit[2];\r\n\r\n var hourMin = timeSplit[4].split(\":\");\r\n const hourMinString = hourMin[0] + \":\" + hourMin[1];\r\n\r\n const dateTimeString = day + \" \" + translatedMonth + \" \" + hourMinString;\r\n\r\n return dateTimeString;\r\n };\r\n\r\n offeringDatePassedNow = (offeringDate: string) => {\r\n const dateTime = new Date(Date.parse(offeringDate));\r\n const dateTimeNow = new Date();\r\n if (dateTimeNow > dateTime) {\r\n return \"booking-component-offering-list-li-hide\";\r\n } else {\r\n return \"booking-component-offering-list-li\";\r\n }\r\n };\r\n\r\n ExistingBooking() {\r\n const userBookings = this.state.userProfile?.userProfile.bookings[0];\r\n return (\r\n
\r\n
\r\n
\r\n \r\n

Pågående bokning

\r\n
\r\n
\r\n
\r\n
Tid för avresa
\r\n \r\n {this.cleanDateTime()}\r\n \r\n
\r\n
\r\n
Från
\r\n \r\n {userBookings?.pickupPos.title}\r\n \r\n
\r\n
\r\n
Till
\r\n \r\n {userBookings?.dropOfPos.title}\r\n \r\n
\r\n
\r\n
Antal passagerare
\r\n \r\n 1-4 personer\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n

Fastpris:

\r\n

\r\n {(userBookings?.priceInfo.price || 0) + this.state.administrationFee} kr\r\n

\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n private renderBooking(current?: BookingRequest): React.ReactNode {\r\n const { cursor } = this.state;\r\n if (current != undefined) {\r\n //console.info(current);\r\n return (\r\n
\r\n {\r\n this.checkUserBookings();\r\n this.getExtraServices();\r\n // this.getPrice(\r\n // this.state.offering,\r\n // this.state.fromValid,\r\n // this.state.toValid,\r\n // this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n // this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n // this.state.date,\r\n // this.state.time,\r\n // this.state.numberOfPassengers,\r\n // this.state.carType\r\n // );\r\n }}\r\n />\r\n \r\n \r\n \r\n Boka resa\r\n \r\n \r\n \r\n
\r\n \r\n \r\n

Från:

\r\n this.selectTo(false)}\r\n isOpen={this.state.showFromResult}\r\n >\r\n \r\n this.onFromChange(event)}\r\n autoComplete=\"off\"\r\n // onFocus={() => this.onClickShowFromAddresses(true)}\r\n onKeyDown={this.onFromKeyDownHandler.bind(this)}\r\n />\r\n \r\n \r\n {this.state.addressFromDetails.fromAddressWithPlaceId?.map(\r\n (item, i) => {\r\n return (\r\n
\r\n \r\n this.onAddFromAddress(\r\n item.addressDetails[0] +\r\n \",\" +\r\n item.addressDetails[1],\r\n item\r\n )\r\n }\r\n className={\r\n cursor === i\r\n ? \"active search-address-dropdown-menu-row\"\r\n : \"not-active search-address-dropdown-menu-row\"\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n {item.addressDetails[0]}\r\n
\r\n
\r\n {item.addressDetails[1]}\r\n {this.checkIfUndefined(\r\n item.addressDetails[2]\r\n )}\r\n {this.checkIfUndefined(\r\n item.addressDetails[3]\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.inValidFromMessage}\r\n
\r\n \r\n \r\n

Till:

\r\n this.selectTo(false)}\r\n isOpen={this.state.showToResult}\r\n >\r\n \r\n this.onToChange(event)}\r\n autoComplete=\"off\"\r\n // onFocus={() => this.onClickShowToAddresses(true)}\r\n onKeyDown={this.onToKeyDownHandler.bind(this)}\r\n />\r\n \r\n \r\n {this.state.addressToDetails.toAddressWithPlaceId?.map(\r\n (item, i) => {\r\n return (\r\n
\r\n \r\n this.onAddToAddress(\r\n item.addressDetails[0] +\r\n \",\" +\r\n item.addressDetails[1],\r\n item\r\n )\r\n }\r\n className={\r\n cursor === i\r\n ? \"active search-address-dropdown-menu-row\"\r\n : \"not-active search-address-dropdown-menu-row\"\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n {item.addressDetails[0]}\r\n
\r\n
\r\n {item.addressDetails[1]}\r\n {this.checkIfUndefined(\r\n item.addressDetails[2]\r\n )}\r\n {this.checkIfUndefined(\r\n item.addressDetails[3]\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.inValidToMessage}\r\n
\r\n \r\n
\r\n \r\n \r\n this.onChangeFlightNumber(event)\r\n // this.setState({ flightNumber: event.target.value, inValidFlightMessage: \"\" })\r\n }\r\n autoComplete=\"off\"\r\n minLength={0}\r\n maxLength={10}\r\n value={this.state.flightNumber}\r\n placeholder=\"Flightnummer\"\r\n invalid={\r\n this.state.inValidFlightMessage !== \"\" ? true : false\r\n }\r\n />\r\n \r\n \r\n
\r\n {this.state.inValidFlightMessage}\r\n
\r\n \r\n \r\n \r\n \r\n this.onClickTravelNow()}\r\n // onClick={() =>\r\n // this.setState({ travelNow: true, travelLater: false })\r\n // }\r\n >\r\n Nu\r\n \r\n this.onClickTravelLater()}\r\n >\r\n Senare\r\n \r\n \r\n \r\n \r\n {this.state.travelLater ? (\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

Fastpris:

\r\n

{this.state.current?.price}

\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 {/* Offerings */}\r\n {this.state.currentUser?.userProfile?.offerings && (\r\n
    \r\n {this.state.currentUser.userProfile.offerings.map(\r\n (offering) => {\r\n if (\r\n offering.counter > 0 &&\r\n moment(offering.startDate).isSameOrBefore(\r\n new Date()\r\n ) &&\r\n moment(new Date()).isSameOrBefore(offering.endDate)\r\n ) {\r\n return (\r\n \r\n {/*
  • */}\r\n {\r\n this.onChangeCurrentOffering(\r\n offering.id,\r\n offering.offeringType,\r\n offering.percent,\r\n offering.fixedDiscount,\r\n offering.title\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({ messageToDriver: event.target.value })\r\n }\r\n value={this.state.messageToDriver}\r\n placeholder=\"Meddelande till förare\"\r\n maxLength={100}\r\n />\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n

Fastpris:

\r\n

\r\n {(this.state.current?.price || 0)} kr\r\n

\r\n
\r\n \r\n
\r\n {this.state.originalPrice} kr\r\n
\r\n
\r\n
\r\n \r\n \r\n this.openReceiptComponent()}\r\n // onClick={() => this.bookAndPay()}\r\n >\r\n \r\n Boka\r\n \r\n {/* Betalning */}\r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n\r\n payButtonMode() {\r\n if(this.state.buttonIsDisabled === true && this.state.inValidFlightMessage !== \"\") {\r\n return \"booking-component-pay-button-invalid-flight\";\r\n }\r\n if(this.state.buttonIsDisabled) {\r\n return \"booking-component-pay-button-disabled\";\r\n }\r\n else {\r\n return \"booking-component-pay-button\";\r\n }\r\n \r\n }\r\n\r\n async testGetUpdatedUser() {\r\n if (this.state.userId === \"\") {\r\n const userProfile = await UserApi.getCurrentProfile();\r\n this.setState({ userId: userProfile.userProfile.id });\r\n\r\n this.forceUpdate();\r\n }\r\n\r\n const updatedUser = await UserApi.getUpdateCurrentProfile(\r\n this.state.userId\r\n );\r\n }\r\n\r\n async openReceiptComponent() {\r\n if (this.state.buttonIsDisabled) return;\r\n\r\n this.setState({\r\n priceLoading:true,\r\n buttonIsDisabled:true\r\n })\r\n\r\n if (this.state.userId === \"\") {\r\n const userProfile = await UserApi.getCurrentProfile();\r\n this.setState({ userId: userProfile.userProfile.id });\r\n\r\n this.forceUpdate();\r\n }\r\n\r\n if (\r\n this.state.fromValid === true &&\r\n this.state.toValid === true &&\r\n this.state.getPriceRunning === false\r\n ) {\r\n this.setState({\r\n priceLoading: true,\r\n buttonIsDisabled: true,\r\n });\r\n\r\n\r\n // DateTime\r\n const dateTimeString = this.state.date + \"T\" + this.state.time;\r\n const dateTimeFormated = momenttz(dateTimeString).tz(\"Europe/Stockholm\",true).format();\r\n let dateTimeFormatedString = dateTimeFormated.toString() || undefined;\r\n\r\n if(this.state.travelNow === true)\r\n {\r\n dateTimeFormatedString = this.state.current?.pickUpTime;\r\n }\r\n \r\n let pickup : Place = {\r\n title: this.state.getPriceRequestModel.pickup.title,\r\n lat: \"\",\r\n long: \"\",\r\n GooglePlaceId: this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n };\r\n let dropoff : Place = {\r\n title: this.state.getPriceRequestModel.dropOff.title,\r\n lat: \"\",\r\n long: \"\",\r\n GooglePlaceId: this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n };\r\n\r\n let data : CreateBookingRequest = {\r\n bookingId: \"\",\r\n userId: this.state.userId,\r\n pickUpTime: dateTimeFormatedString, //this.state.current?.pickUpTime,\r\n pickup: pickup,\r\n dropOff: dropoff,\r\n numberOfPassengers: this.state.numberOfPassengers,\r\n via: [],\r\n carType: this.state.carTypeIndex,\r\n extraServices: this.state.selectedExtraServices,\r\n message: this.state.messageToDriver,\r\n pickupTimeASAP: this.state.travelNow,\r\n offeringId: this.state.offering,\r\n flightId: this.state.flightNumber,\r\n bonusPoints: 0,\r\n isWebCheckout: true,\r\n };\r\n\r\n const activeExtraServices = this.state.extraServices.filter((service) => this.state.selectedExtraServices.includes(service.id));\r\n let extraServicesPrice =0;\r\n for (const extraService of activeExtraServices) {\r\n extraServicesPrice += extraService.price;\r\n }\r\n\r\n const travelPrice = this.state.originalPrice - extraServicesPrice - this.state.administrationFee - this.state.airportFee;\r\n const administrationFee = this.state.administrationFee;\r\n \r\n let booking : BookingReceiptData = {\r\n data: data,\r\n price: this.state.current?.price,\r\n offeringTitle: this.state.offeringTitle,\r\n extraServiceNames: this.state.extraServiceNames,\r\n numberOfPersons: this.state.numberOfPersons,\r\n userId: this.state.userId,\r\n originalPrice: this.state.originalPrice,\r\n showOriginalPrice: this.state.showOriginalPrice, \r\n priceSummaryData: {\r\n travelPrice,\r\n extraServicesPrice,\r\n administrationFee,\r\n airportFee : this.state.airportFee\r\n }\r\n };\r\n \r\n App.publish(\"bookingReceiptInCarPayment\", booking);\r\n // App.publish(\"bookingReceipt\", booking);\r\n this.setState({\r\n priceLoading: false,\r\n buttonIsDisabled: false,\r\n })\r\n }\r\n }\r\n\r\n bookAndPay() {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n toggleSelectedExtraService = (\r\n serviceId: string,\r\n cost: number,\r\n serviceName: string\r\n ) => {\r\n const exists = this.state.selectedExtraServices.includes(serviceId);\r\n if (exists) {\r\n this.setState({\r\n selectedExtraServices: this.state.selectedExtraServices.filter(\r\n (service) => service !== serviceId\r\n ),\r\n extraServiceNames: this.state.extraServiceNames?.filter(\r\n (service) => service !== serviceName\r\n ),\r\n });\r\n if (cost !== null || cost !== 0) {\r\n // var data = this.state.current;\r\n // if (data === undefined) return;\r\n // if (data.price === undefined) return;\r\n // data.price = data.price - cost;\r\n // this.setState({\r\n // current: data,\r\n // });\r\n if (serviceName === \"Bilbarnstol\") {\r\n this.setState({\r\n childSeatCost: 0,\r\n });\r\n }\r\n if (serviceName === \"Babyskydd\") {\r\n this.setState({ babySeatCost: 0 });\r\n }\r\n\r\n this.forceUpdate();\r\n\r\n this.getPrice(\r\n this.state.offering,\r\n this.state.fromValid,\r\n this.state.toValid,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n }\r\n } else {\r\n this.setState({\r\n selectedExtraServices: [...this.state.selectedExtraServices, serviceId],\r\n extraServiceNames: [...this.state.extraServiceNames, serviceName],\r\n });\r\n if (cost !== null || cost !== 0) {\r\n // var data = this.state.current;\r\n // if (data === undefined) return;\r\n // if (data.price === undefined) return;\r\n // data.price = data.price + cost;\r\n // this.setState({\r\n // current: data,\r\n // });\r\n\r\n if (serviceName === \"Bilbarnstol\") {\r\n this.setState({ childSeatCost: cost });\r\n }\r\n if (serviceName === \"Babyskydd\") {\r\n this.setState({ babySeatCost: cost });\r\n }\r\n\r\n this.forceUpdate();\r\n\r\n this.getPrice(\r\n this.state.offering,\r\n this.state.fromValid,\r\n this.state.toValid,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.numberOfPassengers,\r\n this.state.carType,\r\n this.state.travelNow\r\n );\r\n }\r\n }\r\n };\r\n\r\n getOptions(current: BookingRequest | undefined): CollapseListItem[] {\r\n var list: CollapseListItem[] = new Array();\r\n\r\n enum Categories {\r\n Children = \"Children\",\r\n Pets = \"Pets\",\r\n }\r\n\r\n interface ExtraServiceWithSelected extends ExtraService {\r\n selected: boolean;\r\n }\r\n\r\n const [childrenExtraService, petsExtraService] = this.state.extraServices\r\n\r\n .map((service) => ({\r\n ...service,\r\n selected: this.state.selectedExtraServices.includes(service.id),\r\n }))\r\n .reduce<[ExtraServiceWithSelected[], ExtraServiceWithSelected[]]>(\r\n (acc, service) => {\r\n switch (service.category) {\r\n case Categories.Children:\r\n acc[0].push(service);\r\n break;\r\n case Categories.Pets:\r\n acc[1].push(service);\r\n break;\r\n }\r\n\r\n return acc;\r\n },\r\n [[], []]\r\n );\r\n\r\n list.push({\r\n title:

Typ av bil

,\r\n isOpen: true,\r\n content: (\r\n
\r\n {addonsCarType.map((item) => {\r\n return (\r\n this.setCarType(item.carTypeName)}\r\n />\r\n );\r\n })}\r\n
\r\n ),\r\n });\r\n list.push({\r\n title:

Tillval barn

,\r\n isOpen: true,\r\n content: (\r\n
\r\n {childrenExtraService.map((item) => {\r\n return (\r\n \r\n this.toggleSelectedExtraService(\r\n item.id,\r\n item.price,\r\n item.name\r\n )\r\n }\r\n />\r\n );\r\n })}\r\n
\r\n ),\r\n });\r\n list.push({\r\n title:

Tillval djur

,\r\n isOpen: true,\r\n content: (\r\n
\r\n {petsExtraService.map((item) => {\r\n return (\r\n \r\n this.toggleSelectedExtraService(\r\n item.id,\r\n item.price,\r\n item.name\r\n )\r\n }\r\n />\r\n );\r\n })}\r\n
\r\n ),\r\n });\r\n\r\n return list;\r\n }\r\n}\r\n","import React, { Component, useReducer } from \"react\";\r\nimport {\r\n Container,\r\n Button,\r\n Fade,\r\n Row,\r\n Col,\r\n FormGroup,\r\n Input,\r\n Label,\r\n Form,\r\n Dropdown,\r\n DropdownToggle,\r\n DropdownMenu,\r\n ButtonGroup,\r\n} from \"reactstrap\";\r\n\r\nimport * as App from \"pubsub-js\";\r\nimport { LanguageContext, Language } from \"../backbone/Language\";\r\nimport { GlobalAppsettings } from \"../backbone/GlobalSettings\";\r\nimport { Loading } from \"../components/base/Loading\";\r\nimport { InfoPanel } from \"../panels/InfoPanel\";\r\nimport { ModalPanel } from \"../panels/ModalPanel\";\r\nimport { BookingApi } from \"./api/BookingApi\";\r\nimport { GetPriceApi } from \"./api/GetPriceApi\";\r\nimport momenttz from \"moment-timezone\";\r\n\r\nimport { BookingComponent } from \"./components/BookingComponent\";\r\n\r\nimport {\r\n SearchAddresses,\r\n AddressFromDetails,\r\n FromAddressWithPlaceId,\r\n SearchResult,\r\n AddressToDetails,\r\n ToAddressWithPlaceId,\r\n} from \"./types/SearchAddresses\";\r\nimport { TripValidateResponse } from \"./types/TripValidate\";\r\nimport {\r\n GetPrice,\r\n GetPriceRequestModel,\r\n PickupAddressInfo,\r\n} from \"./types/GetPrice\";\r\n// import { debounce, split } from \"lodash\";\r\nimport { CreateBookingResponse } from \"./types/CreateBookingResponse\";\r\nimport { CreateBookingRequest } from \"./types/CreateBookingRequest\";\r\n\r\nimport moment, { relativeTimeRounding } from \"moment\";\r\n\r\nimport { fontWeight } from \"html2canvas/dist/types/css/property-descriptors/font-weight\";\r\nimport { textAlign } from \"html2canvas/dist/types/css/property-descriptors/text-align\";\r\n\r\nimport \"./styles/Booking.css\";\r\nimport { BaseResultResponse } from \"./types/BaseResultResponse\";\r\nimport { ValidationUtils } from \"./utils/ValidationUtils\";\r\n\r\nexport interface BookingProps {\r\n customData: string;\r\n}\r\n\r\nexport interface BookingState {\r\n loading: boolean;\r\n loadingBooking: boolean;\r\n isDirty: boolean;\r\n fromValid: boolean;\r\n fromInValid: boolean;\r\n toValid: boolean;\r\n toInValid: boolean;\r\n from: string;\r\n to: string;\r\n time: string;\r\n timeMin: string;\r\n timeMax: string;\r\n date: string;\r\n dateMin: string;\r\n dateMax: string;\r\n priceLoading: boolean;\r\n showPrice: boolean;\r\n price: number;\r\n showBookBtn: boolean;\r\n showToResult: boolean;\r\n showFromResult: boolean;\r\n searchFrom: boolean;\r\n searchTo: boolean;\r\n travelNow: boolean;\r\n travelLater: boolean;\r\n validUser: boolean;\r\n verifyMobile: boolean;\r\n mobileValid: boolean;\r\n mobileNum: string;\r\n code: string;\r\n searchResult: SearchResult;\r\n addressResult: SearchAddresses;\r\n addressFromDetails: AddressFromDetails;\r\n fromAddressWithPlaceId: FromAddressWithPlaceId;\r\n addressToDetails: AddressToDetails;\r\n toAddressWithPlaceId: ToAddressWithPlaceId;\r\n cursor: number;\r\n getPriceRequestModel: GetPriceRequestModel;\r\n errorMessage: string;\r\n codeFirstDigit: string;\r\n codeSecondDigit: string;\r\n codeThirdDigit: string;\r\n codeFourthDigit: string;\r\n isAirport: boolean;\r\n inValidFromMessage: string;\r\n inValidToMessage: string;\r\n administrationFee: number;\r\n bookingTypes: string[];\r\n airportFee: number;\r\n isDateOpen: boolean;\r\n isTimeOpen: boolean;\r\n dateValid: boolean;\r\n dateInvalid: boolean;\r\n timeValid: boolean;\r\n timeInvalid: boolean;\r\n}\r\n\r\nexport class Booking extends React.Component {\r\n static displayName = Booking.name;\r\n static contextType = LanguageContext;\r\n\r\n constructor(props: BookingProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n isDirty: false,\r\n fromValid: false,\r\n fromInValid: false,\r\n toValid: false,\r\n toInValid: false,\r\n from: \"\",\r\n to: \"\",\r\n date: \"\",\r\n dateMin: \"\",\r\n dateMax: \"\",\r\n time: \"\",\r\n timeMin: \"\",\r\n timeMax: \"\",\r\n price: 0,\r\n priceLoading: false,\r\n showPrice: false,\r\n showBookBtn: true,\r\n showFromResult: false,\r\n showToResult: false,\r\n searchFrom: false,\r\n searchTo: false,\r\n travelNow: true,\r\n travelLater: false,\r\n loadingBooking: false,\r\n validUser: false,\r\n verifyMobile: false,\r\n mobileValid: false,\r\n mobileNum: \"\",\r\n code: \"\",\r\n searchResult: {} as SearchResult,\r\n addressResult: {\r\n success: false,\r\n errorMessage: \"\",\r\n results: [],\r\n } as SearchAddresses,\r\n addressFromDetails: { fromAddressWithPlaceId: [] } as AddressFromDetails,\r\n fromAddressWithPlaceId: {\r\n id: \"\",\r\n googlePlaceId: \"\",\r\n addressDetails: [],\r\n } as FromAddressWithPlaceId,\r\n addressToDetails: { toAddressWithPlaceId: [] } as AddressToDetails,\r\n toAddressWithPlaceId: {\r\n id: \"\",\r\n googlePlaceId: \"\",\r\n addressDetails: [],\r\n } as ToAddressWithPlaceId,\r\n cursor: 0,\r\n getPriceRequestModel: {\r\n userId: \"\",\r\n pickUpTime: \"\",\r\n pickup: { title: \"\", lat: \"\", long: \"\", GooglePlaceId: \"\" },\r\n dropOff: { title: \"\", lat: \"\", long: \"\", GooglePlaceId: \"\" },\r\n numberOfPassengers: 0,\r\n via: null,\r\n carType: 0,\r\n extraServices: null,\r\n message: null,\r\n pickupTimeASAP: true,\r\n offeringId: \"\",\r\n } as GetPriceRequestModel,\r\n errorMessage: \"\",\r\n codeFirstDigit: \"\",\r\n codeSecondDigit: \"\",\r\n codeThirdDigit: \"\",\r\n codeFourthDigit: \"\",\r\n isAirport: false,\r\n inValidFromMessage: \"\",\r\n inValidToMessage: \"\",\r\n administrationFee: 12,\r\n airportFee: 0,\r\n bookingTypes: [],\r\n isDateOpen: false,\r\n isTimeOpen: false,\r\n dateValid: false,\r\n dateInvalid: true,\r\n timeValid: false,\r\n timeInvalid: true,\r\n };\r\n }\r\n\r\n \r\n\r\n componentDidMount() {\r\n // Validate date\r\n const dateNow = new Date();\r\n const newDateNow = moment(dateNow).format(\"YYYY-MM-DD\");\r\n const dateNowPlusOneYear: Date = new Date(\r\n dateNow.setFullYear(dateNow.getFullYear() + 1)\r\n );\r\n const newDateNowPlusOneYear =\r\n moment(dateNowPlusOneYear).format(\"YYYY-MM-DD\");\r\n this.setState({ dateMin: newDateNow, dateMax: newDateNowPlusOneYear });\r\n\r\n let newDateTime = new Date();\r\n\r\n const newDateTimeLocaleString = newDateTime.toLocaleString();\r\n const newDateTimeISOString = newDateTime.toISOString();\r\n\r\n const newDate = newDateTime.toLocaleString().split(\" \")[0];\r\n const newTime = newDateTime.toLocaleString().split(\" \")[1];\r\n const newTimeSplitA = newTime.split(\".\")[0];\r\n const newTimeSplitB = newTimeSplitA.split(\":\");\r\n const newTimeString = newTimeSplitB[0] + \":\" + newTimeSplitB[1];\r\n\r\n this.forceUpdate();\r\n\r\n }\r\n\r\n async onFromChange(event: React.ChangeEvent) {\r\n const { value } = event.target;\r\n\r\n this.setState({\r\n from: value,\r\n fromInValid: false,\r\n inValidFromMessage: \"\",\r\n });\r\n\r\n if (value.length > 2) {\r\n const response = await BookingApi.getSearchAddresses(value);\r\n let updatedAddressDetails = {} as AddressFromDetails;\r\n\r\n response.results.forEach((element) => {\r\n const myArray = element.streetName.split(\",\");\r\n let fromAddressWithPlaceId = {\r\n id: new Date().valueOf().toString(),\r\n googlePlaceId: element.googlePlaceId,\r\n addressDetails: myArray,\r\n } as FromAddressWithPlaceId;\r\n if (!updatedAddressDetails.fromAddressWithPlaceId) {\r\n updatedAddressDetails.fromAddressWithPlaceId = [];\r\n }\r\n updatedAddressDetails.fromAddressWithPlaceId.push(\r\n fromAddressWithPlaceId\r\n );\r\n });\r\n this.setState({\r\n addressFromDetails: updatedAddressDetails,\r\n });\r\n\r\n this.setState({\r\n showFromResult: true,\r\n fromValid: false,\r\n });\r\n }\r\n\r\n if (value.length < 3) {\r\n this.setState({\r\n showFromResult: false,\r\n fromValid: false,\r\n });\r\n }\r\n }\r\n\r\n async onToChange(event: React.ChangeEvent) {\r\n const { value } = event.target;\r\n\r\n this.setState({\r\n to: value,\r\n toInValid: false,\r\n inValidToMessage: \"\",\r\n });\r\n\r\n if (value.length > 2) {\r\n const response = await BookingApi.getSearchAddresses(value);\r\n let updatedAddressDetails = {} as AddressToDetails;\r\n\r\n response.results.forEach((element) => {\r\n const myArray = element.streetName.split(\",\");\r\n let toAddressWithPlaceId = {\r\n id: new Date().valueOf().toString(),\r\n googlePlaceId: element.googlePlaceId,\r\n addressDetails: myArray,\r\n } as ToAddressWithPlaceId;\r\n if (!updatedAddressDetails.toAddressWithPlaceId) {\r\n updatedAddressDetails.toAddressWithPlaceId = [];\r\n }\r\n updatedAddressDetails.toAddressWithPlaceId.push(toAddressWithPlaceId);\r\n });\r\n this.setState({\r\n addressToDetails: updatedAddressDetails,\r\n });\r\n\r\n this.setState({\r\n showToResult: true,\r\n toValid: false,\r\n });\r\n }\r\n\r\n if (value.length < 3) {\r\n this.setState({\r\n showToResult: false,\r\n toValid: false,\r\n });\r\n }\r\n }\r\n\r\n onDateChange(event: any) {\r\n this.setState({ date: event.target.value });\r\n\r\n const dateNow = new Date();\r\n const newDateNow = moment(dateNow).format(\"YYYY-MM-DD\");\r\n const dateNowPlusOneYear: Date = new Date(\r\n dateNow.setFullYear(dateNow.getFullYear() + 1)\r\n );\r\n const newDateNowPlusOneYear =\r\n moment(dateNowPlusOneYear).format(\"YYYY-MM-DD\");\r\n this.setState({ dateMin: newDateNow, dateMax: newDateNowPlusOneYear, dateValid: true, dateInvalid: false });\r\n\r\n this.getPrice(\r\n this.state.fromValid,\r\n true,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n event.target.value,\r\n this.state.time,\r\n this.state.travelNow,\r\n true,\r\n this.state.timeValid\r\n );\r\n }\r\n\r\n onTimeChange(event: any) {\r\n this.setState({ time: event.target.value, timeValid: true, timeInvalid: false });\r\n\r\n this.getPrice(\r\n this.state.fromValid,\r\n true,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n event.target.value,\r\n this.state.travelNow,\r\n this.state.dateValid,\r\n true\r\n );\r\n }\r\n\r\n onMobileChange(event: any) {\r\n this.setState({ mobileNum: event.target.value, mobileValid: true });\r\n }\r\n\r\n onFirstDigitChange(e: any) {\r\n this.setState({ codeFirstDigit: e.target.value });\r\n }\r\n onSecondDigitChange(e: any) {\r\n this.setState({ codeSecondDigit: e.target.value });\r\n }\r\n onThirdDigitChange(e: any) {\r\n this.setState({ codeThirdDigit: e.target.value });\r\n }\r\n onFourthDigitChange(e: any) {\r\n this.setState({ codeFourthDigit: e.target.value });\r\n }\r\n\r\n async onAddFromAddress(address: string, addressInfo: FromAddressWithPlaceId) {\r\n this.setState({ from: address, showFromResult: false });\r\n\r\n const addressDetails = await BookingApi.getAddressNumber(\r\n addressInfo.googlePlaceId\r\n );\r\n\r\n let data = this.state.getPriceRequestModel;\r\n data.pickup.GooglePlaceId = addressInfo.googlePlaceId;\r\n data.pickup.title = address;\r\n this.setState({ getPriceRequestModel: data });\r\n\r\n if (addressDetails.type !== \"Street\") {\r\n this.setState({ fromValid: true, fromInValid: false });\r\n } else if (addressDetails.type === \"Street\") {\r\n this.setState({\r\n inValidFromMessage: \"Vänligen ange gatunummer.\",\r\n fromInValid: true,\r\n });\r\n }\r\n\r\n this.getPrice(\r\n true,\r\n this.state.toValid,\r\n addressInfo.googlePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.travelNow,\r\n this.state.dateValid,\r\n this.state.timeValid\r\n );\r\n\r\n if (\r\n addressInfo.googlePlaceId === \"ChIJa4Q3VAH6T0YRs4SWJS82YCQ\" ||\r\n addressInfo.googlePlaceId === \"ChIJHUFIwyGMT0YRm1LHNlZoCnE\" ||\r\n addressInfo.googlePlaceId === \"ChIJvQ0uGk6KT0YRmxmx-827XhA\"\r\n ) {\r\n this.setState({ isAirport: true });\r\n } else {\r\n this.setState({ isAirport: false });\r\n }\r\n }\r\n\r\n async onAddToAddress(address: string, addressInfo: ToAddressWithPlaceId) {\r\n this.setState({ to: address, showToResult: false });\r\n\r\n const addressDetails = await BookingApi.getAddressNumber(\r\n addressInfo.googlePlaceId\r\n );\r\n\r\n let data = this.state.getPriceRequestModel;\r\n data.dropOff.GooglePlaceId = addressInfo.googlePlaceId;\r\n data.dropOff.title = address;\r\n this.setState({ getPriceRequestModel: data });\r\n\r\n if (addressDetails.type !== \"Street\") {\r\n this.setState({ toValid: true });\r\n } else if (addressDetails.type === \"Street\") {\r\n this.setState({\r\n inValidToMessage: \"Vänligen ange gatunummer.\",\r\n toInValid: true,\r\n });\r\n }\r\n\r\n this.getPrice(\r\n this.state.fromValid,\r\n true,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n addressInfo.googlePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.travelNow,\r\n this.state.dateValid,\r\n this.state.timeValid\r\n );\r\n }\r\n\r\n async onFromKeyDownHandler(e: any) {\r\n const { cursor, addressFromDetails } = this.state;\r\n\r\n if (!addressFromDetails?.fromAddressWithPlaceId) return;\r\n else {\r\n if (e.keyCode === 38 && cursor > 0) {\r\n this.setState((prevState) => ({\r\n cursor: prevState.cursor - 1,\r\n }));\r\n } else if (\r\n e.keyCode === 40 &&\r\n cursor < addressFromDetails.fromAddressWithPlaceId.length - 1\r\n ) {\r\n this.setState((prevState) => ({\r\n cursor: prevState.cursor + 1,\r\n }));\r\n } else if (e.keyCode === 13) {\r\n const address = addressFromDetails.fromAddressWithPlaceId[cursor];\r\n\r\n const addressDetails = await BookingApi.getAddressNumber(\r\n address.googlePlaceId\r\n );\r\n this.setState({\r\n showFromResult: false,\r\n from: address.addressDetails[0] + \",\" + address.addressDetails[1],\r\n });\r\n\r\n let data = this.state.getPriceRequestModel;\r\n data.pickup.GooglePlaceId = address.googlePlaceId;\r\n data.pickup.title =\r\n address.addressDetails[0] + \",\" + address.addressDetails[1];\r\n this.setState({ getPriceRequestModel: data });\r\n\r\n if (addressDetails.type !== \"Street\") {\r\n this.setState({ fromValid: true });\r\n } else if (addressDetails.type === \"Street\") {\r\n this.setState({\r\n inValidFromMessage: \"Vänligen ange gatunummer.\",\r\n fromInValid: true,\r\n });\r\n }\r\n this.getPrice(\r\n true,\r\n this.state.toValid,\r\n address.googlePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.travelNow,\r\n this.state.dateValid,\r\n this.state.timeValid\r\n );\r\n\r\n if (\r\n address.googlePlaceId === \"ChIJa4Q3VAH6T0YRs4SWJS82YCQ\" ||\r\n address.googlePlaceId === \"ChIJHUFIwyGMT0YRm1LHNlZoCnE\" ||\r\n address.googlePlaceId === \"ChIJvQ0uGk6KT0YRmxmx-827XhA\"\r\n ) {\r\n this.setState({ isAirport: true });\r\n } else {\r\n this.setState({ isAirport: false });\r\n }\r\n }\r\n }\r\n }\r\n\r\n async onToKeyDownHandler(e: any) {\r\n const { cursor, addressToDetails } = this.state;\r\n\r\n if (!addressToDetails?.toAddressWithPlaceId) return;\r\n else {\r\n if (e.keyCode === 38 && cursor > 0) {\r\n this.setState((prevState) => ({\r\n cursor: prevState.cursor - 1,\r\n }));\r\n } else if (\r\n e.keyCode === 40 &&\r\n cursor < addressToDetails.toAddressWithPlaceId.length - 1\r\n ) {\r\n this.setState((prevState) => ({\r\n cursor: prevState.cursor + 1,\r\n }));\r\n } else if (e.keyCode === 13) {\r\n const address = addressToDetails.toAddressWithPlaceId[cursor];\r\n\r\n const addressDetails = await BookingApi.getAddressNumber(\r\n address.googlePlaceId\r\n );\r\n this.setState({\r\n showToResult: false,\r\n to: address.addressDetails[0] + \",\" + address.addressDetails[1],\r\n });\r\n\r\n let data = this.state.getPriceRequestModel;\r\n data.dropOff.GooglePlaceId = address.googlePlaceId;\r\n data.dropOff.title =\r\n address.addressDetails[0] + \",\" + address.addressDetails[1];\r\n this.setState({ getPriceRequestModel: data });\r\n\r\n if (addressDetails.type !== \"Street\") {\r\n this.setState({ toValid: true });\r\n } else if (addressDetails.type === \"Street\") {\r\n this.setState({\r\n inValidToMessage: \"Vänligen ange gatunummer.\",\r\n toInValid: true,\r\n });\r\n }\r\n this.getPrice(\r\n this.state.fromValid,\r\n true,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n address.googlePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n this.state.travelNow,\r\n this.state.dateValid,\r\n this.state.timeValid\r\n );\r\n }\r\n }\r\n }\r\n\r\n onClickShowFromAddresses(e: boolean) {\r\n this.setState({\r\n showFromResult: e,\r\n });\r\n }\r\n\r\n onClickShowToAddresses(e: boolean) {\r\n this.setState({\r\n showToResult: e,\r\n });\r\n }\r\n\r\n\r\n onClickTravelNow(){\r\n this.setState({ travelNow: true, travelLater: false })\r\n\r\n this.getPrice(\r\n this.state.fromValid,\r\n this.state.toValid,\r\n this.state.getPriceRequestModel.pickup.GooglePlaceId,\r\n this.state.getPriceRequestModel.dropOff.GooglePlaceId,\r\n this.state.date,\r\n this.state.time,\r\n true,\r\n true,\r\n true\r\n );\r\n }\r\n\r\n\r\n async getPrice(\r\n fromValid: boolean,\r\n toValid: boolean,\r\n fromPlaceId: string,\r\n toPlaceId: string,\r\n date: string,\r\n time: string,\r\n travelNow: boolean,\r\n dateValid: boolean,\r\n timeValid: boolean,\r\n ) {\r\n if (this.state.fromValid && this.state.toValid) {\r\n this.setState({ priceLoading: true });\r\n\r\n if (fromValid === true && toValid === true) {\r\n if (travelNow === false) {\r\n if (date !== \"\" && time !== \"\" && dateValid === true && timeValid === true) {\r\n\r\n const dateTimeString = date + \"T\" + time;\r\n const dateTimeFormated = momenttz(dateTimeString)\r\n .tz(\"Europe/Stockholm\", true)\r\n .format();\r\n const dateTimeFormatedString = dateTimeFormated.toString();\r\n const pickup = {\r\n title: null,\r\n lat: null,\r\n long: null,\r\n GooglePlaceId: fromPlaceId,\r\n };\r\n const dropoff = {\r\n title: null,\r\n lat: null,\r\n long: null,\r\n GooglePlaceId: toPlaceId,\r\n };\r\n const response = await GetPriceApi.getPriceRequest(\r\n null,\r\n dateTimeFormatedString,\r\n pickup,\r\n dropoff,\r\n 3,\r\n null,\r\n 0,\r\n null,\r\n null,\r\n false,\r\n null\r\n );\r\n\r\n const priceRequest = this.state.getPriceRequestModel;\r\n priceRequest.pickUpTime = dateTimeFormatedString;\r\n\r\n if (!response) return;\r\n this.setState({\r\n price: response.fixedPrice,\r\n priceLoading: false,\r\n getPriceRequestModel: priceRequest,\r\n });\r\n const responsePriceInfo = response.price;\r\n if (responsePriceInfo.additionalFee != null) {\r\n if (this.state.isAirport) {\r\n this.setState({ airportFee: response.additionalFee });\r\n } else {\r\n this.setState({ airportFee: 0 });\r\n }\r\n }\r\n\r\n if (this.state.bookingTypes.length == 0) {\r\n if (responsePriceInfo.bookingTypes != undefined)\r\n this.setState({\r\n bookingTypes: responsePriceInfo.bookingTypes,\r\n });\r\n }\r\n } else {\r\n return;\r\n }\r\n } else if (travelNow === true) {\r\n this.setState({ priceLoading: true });\r\n const dateTime = new Date();\r\n const dateTimeFormated = momenttz(dateTime)\r\n .tz(\"Europe/Stockholm\", true)\r\n .format();\r\n const dateTimeString = dateTimeFormated.toString();\r\n const pickup = {\r\n title: null,\r\n lat: null,\r\n long: null,\r\n GooglePlaceId: fromPlaceId,\r\n };\r\n const dropoff = {\r\n title: null,\r\n lat: null,\r\n long: null,\r\n GooglePlaceId: toPlaceId,\r\n };\r\n const response = await GetPriceApi.getPriceRequest(\r\n null,\r\n dateTimeString,\r\n pickup,\r\n dropoff,\r\n 3,\r\n null,\r\n 0,\r\n null,\r\n null,\r\n true,\r\n null\r\n );\r\n const priceRequest = this.state.getPriceRequestModel;\r\n priceRequest.pickUpTime = dateTimeString;\r\n\r\n if (!response) return;\r\n this.setState({\r\n price: response.fixedPrice,\r\n priceLoading: false,\r\n getPriceRequestModel: priceRequest,\r\n });\r\n const responsePriceInfo = response.price;\r\n if (responsePriceInfo.additionalFee != null) {\r\n if (this.state.isAirport) {\r\n this.setState({ airportFee: response.additionalFee });\r\n } else {\r\n this.setState({ airportFee: 0 });\r\n }\r\n }\r\n\r\n if (this.state.bookingTypes.length == 0) {\r\n if (responsePriceInfo.bookingTypes != undefined)\r\n this.setState({\r\n bookingTypes: responsePriceInfo.bookingTypes,\r\n });\r\n }\r\n }\r\n } else {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n checkIfUndefined(text: string) {\r\n if (text !== undefined) {\r\n return \", \" + text;\r\n }\r\n }\r\n\r\n onSendMobileNumber() {\r\n fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/Trip/Login\",\r\n GlobalAppsettings.GetPostInit({ mobile: this.state.mobileNum })\r\n )\r\n .then((response) => response.json() as Promise)\r\n .then((data) => {\r\n this.setState({ errorMessage: data.errorMessage });\r\n })\r\n .catch((reason) => {});\r\n }\r\n\r\n onValidateLogin() {\r\n const code =\r\n this.state.codeFirstDigit +\r\n this.state.codeSecondDigit +\r\n this.state.codeThirdDigit +\r\n this.state.codeFourthDigit;\r\n\r\n fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/Trip/Validate\",\r\n GlobalAppsettings.GetPostInit({ code: code })\r\n )\r\n .then((response) => response.json() as Promise)\r\n .then((data) => {\r\n this.setState({ errorMessage: data.errorMessage });\r\n })\r\n .catch((reason) => {});\r\n }\r\n\r\n render() {\r\n const { cursor } = this.state;\r\n\r\n return (\r\n \r\n {(lang) => (\r\n \r\n \r\n
\r\n \r\n \r\n \r\n Boka taxi\r\n \r\n \r\n \r\n \r\n \r\n this.selectTo(false)}\r\n isOpen={this.state.showFromResult}\r\n >\r\n \r\n this.onFromChange(event)}\r\n autoComplete=\"off\"\r\n // onFocus={() => this.onClickShowFromAddresses(true)}\r\n onKeyDown={this.onFromKeyDownHandler.bind(this)}\r\n />\r\n \r\n \r\n {this.state.addressFromDetails.fromAddressWithPlaceId?.map(\r\n (item, i) => {\r\n return (\r\n
\r\n \r\n this.onAddFromAddress(\r\n item.addressDetails[0] +\r\n \",\" +\r\n item.addressDetails[1],\r\n item\r\n )\r\n }\r\n className={\r\n cursor === i\r\n ? \"active search-address-dropdown-menu-row\"\r\n : \"not-active search-address-dropdown-menu-row\"\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n {item.addressDetails[0]}\r\n
\r\n
\r\n {item.addressDetails[1]}\r\n {this.checkIfUndefined(\r\n item.addressDetails[2]\r\n )}\r\n {this.checkIfUndefined(\r\n item.addressDetails[3]\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.inValidFromMessage}\r\n
\r\n \r\n \r\n this.selectTo(false)}\r\n isOpen={this.state.showToResult}\r\n >\r\n \r\n this.onToChange(event)}\r\n autoComplete=\"off\"\r\n // onFocus={() => this.onClickShowToAddresses(true)}\r\n onKeyDown={this.onToKeyDownHandler.bind(this)}\r\n />\r\n \r\n \r\n {this.state.addressToDetails.toAddressWithPlaceId?.map(\r\n (item, i) => {\r\n return (\r\n
\r\n \r\n this.onAddToAddress(\r\n item.addressDetails[0] +\r\n \",\" +\r\n item.addressDetails[1],\r\n item\r\n )\r\n }\r\n className={\r\n cursor === i\r\n ? \"active search-address-dropdown-menu-row\"\r\n : \"not-active search-address-dropdown-menu-row\"\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n {item.addressDetails[0]}\r\n
\r\n
\r\n {item.addressDetails[1]}\r\n {this.checkIfUndefined(\r\n item.addressDetails[2]\r\n )}\r\n {this.checkIfUndefined(\r\n item.addressDetails[3]\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.inValidToMessage}\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n this.onClickTravelNow()}\r\n // onClick={() =>\r\n // this.setState({ travelNow: true, travelLater: false })\r\n // }\r\n >\r\n Nu\r\n \r\n \r\n this.setState({\r\n travelNow: false,\r\n travelLater: true,\r\n isDateOpen: true,\r\n })\r\n }\r\n >\r\n Senare\r\n \r\n \r\n \r\n \r\n {this.state.travelLater ? (\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.state.showBookBtn ? (\r\n
\r\n this.openBooking()}\r\n >\r\n {this.state.priceLoading ? (\r\n Hämtar pris\r\n ) : (\r\n <>\r\n )}\r\n \r\n Boka till fastpris\r\n \r\n {this.state.price +\r\n this.state.administrationFee +\r\n this.state.airportFee}{\" \"}\r\n kr\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 openBooking(): void {\r\n let isValidDateTime : boolean = true;\r\n if(this.state.travelLater === true)\r\n {\r\n if(this.state.dateValid !== true || this.state.timeValid !== true)\r\n {\r\n isValidDateTime = false;\r\n }\r\n }\r\n\r\n if (\r\n this.state.fromValid === true &&\r\n this.state.toValid === true &&\r\n this.state.priceLoading === false &&\r\n this.state.price > 0 &&\r\n isValidDateTime === true\r\n ) {\r\n let booking = {\r\n to: this.state.toAddressWithPlaceId,\r\n from: this.state.fromAddressWithPlaceId,\r\n date: this.state.date,\r\n time: this.state.time,\r\n travelNow: this.state.travelNow,\r\n travelLater: this.state.travelLater,\r\n price: this.state.price,\r\n priceRequest: this.state.getPriceRequestModel,\r\n isAirport: this.state.isAirport,\r\n administrationFee: this.state.administrationFee,\r\n airportFee: this.state.airportFee,\r\n };\r\n\r\n this.setState({\r\n to: \"\",\r\n from: \"\",\r\n date: \"\",\r\n time: \"\",\r\n travelNow: true,\r\n travelLater: false,\r\n fromValid: false,\r\n toValid: false,\r\n price: 0,\r\n airportFee: 0,\r\n });\r\n\r\n App.publish(\"open.booking\", booking);\r\n }\r\n }\r\n\r\n selectTo(e: boolean): void {\r\n this.setState({ showToResult: e });\r\n this.setState({ showFromResult: e });\r\n }\r\n}\r\n","import React, { Component, useReducer } from \"react\";\r\nimport {\r\n Container,\r\n Button,\r\n Fade,\r\n Row,\r\n Col,\r\n Form,\r\n Nav,\r\n NavItem,\r\n NavLink,\r\n TabContent,\r\n TabPane,\r\n} from \"reactstrap\";\r\n\r\nimport * as App from \"pubsub-js\";\r\nimport { LanguageContext, Language } from \"../backbone/Language\";\r\nimport { GlobalAppsettings } from \"../backbone/GlobalSettings\";\r\nimport { Loading } from \"../components/base/Loading\";\r\nimport { InfoPanel } from \"../panels/InfoPanel\";\r\nimport { ContentPanel } from \"../panels/ContentPanel\";\r\nimport { User } from \"./api/User\";\r\n\r\nimport { BaseResultResponse } from \"./types/BaseResultResponse\";\r\nimport { LoginComponent } from \"./components/LoginComponent\";\r\nimport { UserProfile } from \"./UserProfile\";\r\nimport { History } from \"./History\";\r\nimport \"./styles/MyPages.css\";\r\nimport \"./styles/Bonus.css\";\r\nimport { nonWhiteSpace } from \"html2canvas/dist/types/css/syntax/parser\";\r\nimport { UserApi } from \"./api/GetUserApi\";\r\nimport { BookingInfo, UserProfileResult } from \"./types/UserProfile\";\r\nimport ComponentDidMount from \"../components/ComponentDidMount\";\r\nimport OfferTile from \"../components/OfferTile\";\r\nimport moment from \"moment\";\r\nimport { BonusApi } from \"./api/BonusApi\";\r\nimport { mdiConsoleNetworkOutline, mdiThermometerMinus } from \"@mdi/js\";\r\nimport { BonusRequest, BonusResponse } from \"./types/Bonus\";\r\n// import { NumericDictionaryIterator } from \"lodash\";\r\n\r\nexport interface MyPagesProps {\r\n customData: string;\r\n}\r\n\r\nexport interface MyPagesState {\r\n loading: boolean;\r\n locale: string;\r\n isDirty: boolean;\r\n validUser: boolean;\r\n saving: boolean;\r\n userId?: string;\r\n currentUser?: User.UserProfile;\r\n errorMessage?: string;\r\n activeTab: string;\r\n userProfile: UserProfileResult | null;\r\n userProfileBooking: BookingInfo | null;\r\n userProfileBookingExist: boolean;\r\n bonusPointsToUse: number;\r\n bonusPointsLongTerm: number;\r\n showLongTermBonus: boolean;\r\n avaiblePoints: number;\r\n bonusExpirationDate: string;\r\n bonusBarStringValue: string;\r\n showUserBonuses: boolean;\r\n expirationDate: string;\r\n}\r\n\r\nexport interface ValidationInfo extends BaseResultResponse {\r\n token: string;\r\n}\r\n\r\nexport class MyPages extends React.Component {\r\n static displayName = MyPages.name;\r\n static contextType = LanguageContext;\r\n\r\n constructor(props: MyPagesProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n isDirty: false,\r\n saving: false,\r\n validUser: false,\r\n activeTab: \"1\",\r\n locale: Language.GetLocale(),\r\n userProfile: null,\r\n userProfileBooking: null,\r\n userProfileBookingExist: false,\r\n bonusPointsToUse: 0,\r\n bonusPointsLongTerm: 0,\r\n showLongTermBonus: false,\r\n avaiblePoints: 0,\r\n bonusExpirationDate: \"\",\r\n bonusBarStringValue: \"\",\r\n showUserBonuses: false,\r\n expirationDate: \"\",\r\n };\r\n this.loadUserProfile = this.loadUserProfile.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n let queryStartScreen = params.get(\"screen\");\r\n if (queryStartScreen !== null) {\r\n queryStartScreen = queryStartScreen.toLocaleLowerCase();\r\n }\r\n\r\n if (queryStartScreen === \"mypages\") {\r\n setTimeout(() => {\r\n App.publish(\"open.mypages\", null);\r\n this.setState({ activeTab: \"2\" });\r\n }, 500);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {(lang) => (\r\n <>\r\n App.publish(\"open.mypages\", null)}\r\n >\r\n Mina sidor\r\n \r\n\r\n this.onLogin(message)}\r\n >\r\n {this.renderProfile()}\r\n \r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n onLogin(message: any): void {\r\n console.info(message);\r\n this.loadUserProfile();\r\n }\r\n renderProfile() {\r\n return (\r\n
\r\n \r\n \r\n \r\n Mina sidor\r\n \r\n \r\n \r\n
\r\n \r\n \r\n this.setState({ activeTab: \"1\" })}\r\n className=\"heading textunderline m-3\"\r\n style={{\r\n borderBottom:\r\n this.state.activeTab === \"1\" ? \"3px solid #ffcb05\" : \"none\",\r\n maxWidth: \"96px\",\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n Min profil\r\n \r\n \r\n \r\n this.setState({ activeTab: \"2\" })}\r\n // onClick={() => {\r\n // window.open(\"https://taxigoteborg.se/kundservice\", \"_blank\");\r\n // }}\r\n className=\"heading textunderline m-3\"\r\n style={{\r\n borderBottom:\r\n this.state.activeTab === \"2\" ? \"3px solid #ffcb05\" : \"none\",\r\n maxWidth: \"148px\",\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n Mina resor\r\n \r\n \r\n \r\n this.setState({ activeTab: \"3\" })}\r\n className=\"heading textunderline m-3\"\r\n style={{\r\n borderBottom:\r\n this.state.activeTab === \"3\" ? \"3px solid #ffcb05\" : \"none\",\r\n maxWidth: \"148px\",\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n Kampanjer\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.userId ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n {/* <>\r\n {this.renderBookingExist()}\r\n \r\n <> */}\r\n {this.state.userId ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n {/* */}\r\n \r\n \r\n {this.renderOfferings()}\r\n {/* {this.state.userId ? (\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 private renderOfferings(): React.ReactNode {\r\n return (\r\n
\r\n {\r\n this.setUser();\r\n }}\r\n />\r\n <>{this.renderOfferingList()}\r\n <>{this.renderBonuses()}\r\n
\r\n );\r\n }\r\n\r\n private renderOfferingList() {\r\n return (\r\n
\r\n
\r\n {/* Offerings */}\r\n {this.state.userProfile?.userProfile.offerings && (\r\n
    \r\n {this.state.userProfile?.userProfile.offerings.map((offering) => {\r\n return (\r\n
  • \r\n \r\n
    \r\n
    \r\n

    {offering.title}

    \r\n
    \r\n {offering.description}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {\"Giltigt t.o.m. den \"+this.cleanDateTime(offering.endDate)}\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 private renderBonuses() {\r\n if(this.state.showUserBonuses == true)\r\n {\r\n return (\r\n
\r\n

Bonus

\r\n
\r\n
\r\n
\r\n
Bonus att använda fram till
\r\n
{this.cleanBonusDateTime(this.state.expirationDate)}
\r\n
\r\n
{this.state.bonusPointsToUse} kr
\r\n
Därefter {this.state.bonusPointsLongTerm} kr
\r\n
\r\n
\r\n
\r\n
\r\n
Kommande bonus
\r\n
50 kr
\r\n
\r\n
{this.state.avaiblePoints}
\r\n
/1000 poäng
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {1000 - this.state.avaiblePoints} poäng till nästa bonus\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n else if(this.state.showUserBonuses == false)\r\n {\r\n return (\r\n
\r\n

Bonus

\r\n
\r\n
\r\n
Kommande bonus
\r\n
50 kr
\r\n
\r\n
{this.state.avaiblePoints}
\r\n
/1000 poäng
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {1000 - this.state.avaiblePoints} poäng till nästa bonus\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n else return;\r\n }\r\n\r\n private async setUser() {\r\n var userId : string = \"\";\r\n if(this.state.userProfile?.userProfile != undefined)\r\n {\r\n userId = this.state.userProfile?.userProfile.id;\r\n }\r\n\r\n if (!window.ReactNativeWebView) {\r\n if (this.state.userProfile === null) {\r\n const user = await UserApi.getCurrentProfile();\r\n if (!user) return;\r\n const updatedUser = await UserApi.getUpdateCurrentProfile(\r\n user.userProfile.id\r\n );\r\n this.setState({ userProfile: updatedUser });\r\n userId = user.userProfile.id;\r\n }\r\n\r\n // load in in bonuses\r\n var request : BonusRequest = {\r\n userId : userId,\r\n showAll: false\r\n };\r\n var bonus = await BonusApi.getBonusData(request);\r\n\r\n if(bonus != null)\r\n {\r\n this.CalculateBonusPoints(bonus);\r\n\r\n if(bonus.data.bonusTickets.length === 0 && bonus.data.availablePoints === 0)\r\n {\r\n var meterLength : number = (0/1000) * 100;\r\n \r\n var bonusBarStringValue : string = meterLength.toString() + \"%\";\r\n this.setState({ bonusBarStringValue : bonusBarStringValue });\r\n }\r\n }\r\n } else return;\r\n }\r\n\r\n private CalculateBonusPoints = (bonus : BonusResponse) => {\r\n var bonusPointsTotal: number = 0;\r\n var bonusPointsOnExpirationDate: number = 0;\r\n var bonusPointsAfterExpirationDate: number = 0;\r\n var avaiblePoints: number = 0;\r\n var bonusExpirationDate: string = \"\";\r\n\r\n if (bonus.data.bonusTickets != null && bonus.data.bonusTickets.length > 0) {\r\n\r\n this.setState({ showUserBonuses : true });\r\n\r\n const topTicket = bonus.data.bonusTickets[0];\r\n\r\n const closetExpirationDate = moment(\r\n topTicket.expirationDate,\r\n \"YYYY-MM-DD\"\r\n );\r\n const expirationDateFormated = moment(closetExpirationDate)\r\n .subtract(0, \"days\")\r\n .calendar();\r\n\r\n\r\n bonusExpirationDate = expirationDateFormated.toString();\r\n bonus.data.bonusTickets.forEach((ticket) => {\r\n const expirationDate = moment(ticket.expirationDate, \"YYYY-MM-DD\");\r\n const expirationDateString = expirationDate.toString() + \"T00:00+02:00\"\r\n\r\n if (expirationDate > closetExpirationDate) {\r\n bonusPointsAfterExpirationDate +=\r\n ticket.bonusPoints - ticket.consumedPoints;\r\n } else {\r\n bonusPointsOnExpirationDate +=\r\n ticket.bonusPoints - ticket.consumedPoints;\r\n }\r\n });\r\n\r\n avaiblePoints = bonus.data.availablePoints;\r\n bonusPointsTotal =\r\n bonusPointsAfterExpirationDate + bonusPointsOnExpirationDate;\r\n\r\n if(bonusPointsAfterExpirationDate == 0)\r\n {\r\n this.setState({ showLongTermBonus : false });\r\n }\r\n else\r\n {\r\n this.setState({ showLongTermBonus : true });\r\n }\r\n\r\n var expirationDate : string = \"\";\r\n if(topTicket.expirationDate != undefined)\r\n {\r\n expirationDate = topTicket.expirationDate?.toString();\r\n var array = expirationDate.split(\"T\");\r\n expirationDate = array[0]+\"T00:00:00+02:00\" \r\n }\r\n\r\n\r\n this.calcBonusMeter(avaiblePoints);\r\n this.setState({\r\n bonusPointsLongTerm: bonusPointsAfterExpirationDate,\r\n bonusPointsToUse: bonusPointsTotal,\r\n avaiblePoints: avaiblePoints,\r\n bonusExpirationDate: bonusExpirationDate,\r\n expirationDate: expirationDate,\r\n });\r\n }\r\n \r\n else{\r\n this.setState({\r\n avaiblePoints: bonus.data.availablePoints\r\n })\r\n }\r\n\r\n }\r\n\r\n private calcBonusMeter = (points : number) => {\r\n\r\n var meterLength : number = (points/1000) * 100;\r\n\r\n var bonusBarStringValue : string = meterLength.toString() + \"%\";\r\n this.setState({ bonusBarStringValue : bonusBarStringValue });\r\n\r\n }\r\n\r\n private translateToSwe = (month: string) => {\r\n if (month === \"Jan\") return \"januari\";\r\n if (month === \"Feb\") return \"februari\";\r\n if (month === \"Mar\") return \"mars\";\r\n if (month === \"Apr\") return \"april\";\r\n if (month === \"May\") return \"maj\";\r\n if (month === \"Jun\") return \"juni\";\r\n if (month === \"Jul\") return \"juli\";\r\n if (month === \"Aug\") return \"augusti\";\r\n if (month === \"Sep\") return \"september\";\r\n if (month === \"Oct\") return \"oktober\";\r\n if (month === \"Nov\") return \"november\";\r\n if (month === \"Dec\") return \"december\";\r\n else {\r\n return month;\r\n }\r\n };\r\n\r\n private cleanDateTime = (endDate: string | undefined) => {\r\n if(endDate === undefined) return;\r\n\r\n var dateTime = new Date(Date.parse(endDate));\r\n dateTime.setDate(dateTime.getDate() - 1);\r\n\r\n const timeString = dateTime.toString();\r\n var timeSplit = timeString.split(\" \");\r\n\r\n var month = timeSplit[1];\r\n const translatedMonth = this.translateToSwe(month);\r\n\r\n const day = timeSplit[2];\r\n\r\n const year = timeSplit[3];\r\n\r\n const dateTimeString =\r\n day + \" \" + translatedMonth + \" \" + year;\r\n\r\n return dateTimeString;\r\n };\r\n\r\n private cleanBonusDateTime = (endDate: string | undefined) => {\r\n if(endDate === undefined) return;\r\n\r\n var dateTime = new Date(Date.parse(endDate));\r\n dateTime.setDate(dateTime.getDate());\r\n\r\n const timeString = dateTime.toString();\r\n var timeSplit = timeString.split(\" \");\r\n\r\n var month = timeSplit[1];\r\n const translatedMonth = this.translateToSwe(month);\r\n\r\n const day = timeSplit[2];\r\n\r\n const year = timeSplit[3];\r\n\r\n const dateTimeString =\r\n day + \" \" + translatedMonth + \" \" + year;\r\n\r\n return dateTimeString;\r\n };\r\n\r\n loadUserProfile() {\r\n this.setState({ loading: true });\r\n\r\n fetch(\r\n GlobalAppsettings.BackEndBaseUrl + \"api/profile/CurrentProfile\",\r\n GlobalAppsettings.GetPostInit({})\r\n )\r\n .then((response) => response.json() as Promise)\r\n .then((data) => {\r\n console.info(\"currentProfile ->\" + data.userProfile.id);\r\n this.setState({\r\n loading: false,\r\n currentUser: data.userProfile,\r\n userId: data.userProfile.id,\r\n });\r\n })\r\n .catch((reason) => {\r\n console.error(reason);\r\n this.setState({ loading: false });\r\n });\r\n }\r\n}\r\n","/* Polyfills for ie-11 */\r\nimport \"react-app-polyfill/ie11\";\r\nimport \"react-app-polyfill/stable\";\r\n\r\n//import 'bootstrap/dist/css/bootstrap.css';\r\nimport \"./theme/bootstrap-wo-typograph.css\"; //typograph removed\r\n// * Fonts */\r\nimport \"./theme/fonts.css\";\r\n//** Local App css */\r\nimport \"./theme/site.css\";\r\n\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { AppCore } from \"./backbone/AppCore\";\r\nimport { Global } from \"./webparts/Global\";\r\nimport { UserProfile } from \"./webparts/UserProfile\";\r\nimport { History } from \"./webparts/History\";\r\nimport { Booking } from \"./webparts/Booking\";\r\n\r\nimport { LanguageProvider } from \"./backbone/Language\";\r\nimport { MyPages } from \"./webparts/MyPages\";\r\n\r\nconst appCore = new AppCore();\r\n\r\nconst global = document.getElementById(\"global\");\r\nif (global != undefined) ReactDOM.render(, global);\r\n\r\nconst userprofile = document.getElementById(\"userprofile\");\r\nif (userprofile != undefined) ReactDOM.render(, userprofile);\r\n\r\nconst userprofile_history = document.getElementById(\"userprofile-history\");\r\nif (userprofile_history != undefined)\r\n ReactDOM.render(, userprofile_history);\r\n\r\n\r\n\r\nconst booking = document.getElementById(\"booking-widget\");\r\nif (booking != undefined) ReactDOM.render(, booking);\r\n\r\nconst mypages = document.getElementById(\"my-pages\");\r\nif (mypages != undefined) ReactDOM.render(, mypages);\r\n\r\n\r\n","import * as App from 'pubsub-js';\r\nimport * as React from 'react';\r\nimport { GlobalAppsettings } from './GlobalSettings';\r\n\r\n\r\nexport class AppCore {\r\n\r\n constructor() {\r\n\r\n\r\n }\r\n\r\n}"],"sourceRoot":""}