{"version":3,"sources":["sharedHistory.ts","enums/gtm/GTMEventAction.ts","enums/gtm/GTMEventCategory.ts","utils/gtmEvents.ts","utils/validators.ts","components/PageSkeleton/index.tsx","components/ContentWrapper/index.tsx","enums/car/FuelType.ts","configs/common.ts","enums/ErrorReason.ts","enums/AutoCompleteValue.ts","enums/PriceLabel.ts","components/ResponsePageTemplate/styles.module.scss","api/index.tsx","enums/Feature.ts","components/ErrorPage/styles.module.scss","components/SuccessPage/styles.module.scss","utils/gtmHelper.ts","services/ConfigurationService.ts","utils/masks.ts","services/StoresService.ts","enums/car/GearType.ts","enums/service/ServiceDisabledReason.ts","common/GlobalConfig/styles.module.scss","components/SkeletonBase/styles.module.scss","components/SkeletonBase/index.tsx","configs/contentLoader.ts","enums/accessory/AccessoryDisabledReason.ts","hooks/useQueryParams.ts","common/WidgetLayoutProvider/styles.module.scss","components/ContentWrapper/styles.module.scss","components/PageSkeleton/styles.module.scss","configs/texts.ts","zoid-definitions/mockXprops.ts","common/WidgetLayoutProvider/index.tsx","icons/ErrorIcon/index.tsx","components/ResponsePageTemplate/index.tsx","components/ErrorPage/index.tsx","common/ErrorBoundary/index.tsx","common/GlobalConfig/index.tsx","providers/StoresProvider/filterStoresList.ts","providers/StoresProvider/useRequestStores.ts","api/stores.ts","providers/StoresProvider/index.tsx","icons/CheckmarkIcon/index.tsx","components/SuccessPage/index.tsx","pages/SupportPage/Status/index.tsx","pages/SupportPage/PermissionNotice/index.tsx","pages/SupportPage/index.tsx","api/supportRequests.ts","RoutingRules.tsx","App.tsx","index.tsx","enums/StepKey.ts","enums/routing/RouteUrl.ts","utils/routingHelpers.ts","configs/dataQa.ts","pages/SupportPage/styles.module.scss","utils/logger.ts","configs/environments.ts"],"names":["sharedHistory","window","xprops","isWidgetMode","createMemoryHistory","createBrowserHistory","listen","action","pathname","gtmHelper","emitPageView","scrollToWidget","GTMEventAction","GTMEventCategory","privacyPolicyUrl","clientPrivacyPolicyUrl","emitCarSearch","plateNumber","emitEvent","CarSearchForm","Submit","emitCarSearchFailed","Error","emitPredefinedCarSearch","CarSearchFromQueryParams","emitPredefinedCarSearchFailed","emitCarChange","Edit","emitFuelTypeClick","fuelType","CarFuelType","Click","emitGearTypeClick","gearType","CarGearType","emitCarInfoFormSubmit","CarInfoForm","emitStoreLookup","lookupType","zip","label","LookupType","Zip","StoreSearch","emitStoreLookupReset","Reset","emitNoStoresFound","radius","NoResults","emitStoreSearchLocationRequestFailed","error","StoreSearchLocationRequest","emitStoreSearchZipRequestFailed","StoreSearchZipRequest","emitSearchRadiusChange","StoreSearchRadius","Change","toString","emitStoresMapPinClick","StoresMapPin","emitStoreSelect","selectionMode","StoreForm","emitStoreChangeClick","emitToggleGlobalService","isSelected","serviceName","GlobalServices","Add","Remove","emitToggleLocalService","LocalServices","emitToggleCustomService","CustomService","emitServicesStepProceedButtonClick","Services","emitToggleAccessory","category","name","emitToggleAftermarketAccessory","AftermarketAccessories","emitToggleGlobalAccessory","GlobalAccessories","emitToggleLocalAccessory","LocalAccessories","emitAccessoriesStepProceedButtonClick","Accessories","emitFeatureSelect","feature","AppointmentFeature","Select","emitFeatureChangeClick","emitDateSelect","date","AppointmentDate","emitDateChangeClick","emitTimeSlotSelect","timeSlot","AppointmentTimeslot","emitTimeSlotChangeClick","emitAppointmentFormSubmit","AppointmentForm","emitPrivacyPolicyLinkClick","PrivacyPolicyLink","emitClientPrivacyPolicyLinkClick","ClientPrivacyPolicyLink","emitCustomerFormSubmit","CustomerForm","emitBookingSubmit","Booking","emitBookingSubmissionFailed","emitSupportFormSubmit","reason","SupportForm","emitSupportFormSubmissionFailed","emitStepChangeClick","stepKey","Step","emitConfirmationStepChangeClick","ConfirmationStep","emitToggleAccordion","isOpen","accordionKey","Accordion","Open","Close","emitPredefinedStoreCodesNotAvailable","storeCodes","PredefinedStoreCodes","MAX_ODOMETER_VALUE","MAX_MESSAGE_LENGTH","required","value","undefined","texts","validationErrors","max","maxValue","Number","maxChars","maxCharsLength","length","test","isZipValid","phoneValidation","phone","message","emailValidation","email","patternRegex","asciiRegex","combinedRegex","RegExp","source","baseTextFieldValidation","zipValidation","addressValidation","PageSkeleton","className","rest","classNames","styles","skeleton","width","height","rx","fill","y","ContentWrapper","children","content","FuelType","MAX_SELECTED_SERVICES","MAX_SELECTED_ACCESSORIES","MAX_MESSAGE_ROWS","ErrorReason","AutoCompleteValue","PriceLabel","module","exports","config","apiClient","axios","create","baseURL","paramsSerializer","params","stringify","arrayFormat","zipCodesClient","Feature","Event","defaultDimension","utmSource","utmMedium","utmCampaign","trackingClickId","trackingId","originalLocation","location","href","applicationName","currentDimension","init","GTM_ID","TagManager","initialize","gtmId","updateDimension","emitGTMEvent","dataLayer","dimension","event","CustomDimensionsUpdate","Default","eventLabel","eventCategory","eventAction","path","Pageview","VirtualPageviewPath","DEFAULT_CUSTOMER","firstName","lastName","city","address","ConfigurationService","_car","observable","_storeCode","_isPredefinedStoreCode","_globalServiceIds","_localServiceIds","_customService","_aftermarketAccessoryIds","_globalAccessoryIds","_localAccessoryIds","_customer","_feature","_date","_timeSlot","_isPrebooking","car","this","readOnly","storeCode","globalServiceIds","localServiceIds","customService","aftermarketAccessoryIds","globalAccessoryIds","localAccessoryIds","customer","isPrebooking","accessoryCount","Observable","select","bookingValues","isPredefinedStoreCode","resetStoreCode","get","set","ids","plateNumberMask","mask","phoneNumberMask","zipMask","StoresService","_storesList","_availableStores","_isStoresListPredefined","storesList","availableStores","storesMap","list","arrayToMap","subscribe","brand","filteredAvailableStores","filter","store","supportedBrands","includes","stores","GearType","ServiceDisabledReason","SkeletonBase","skeletonBase","speed","backgroundColor","AccessoryDisabledReason","useQueryParams","search","useLocation","parse","replace","parseBooleans","units","kilometers","moneyUnits","default","common","goBack","errorPage","title","description","successPage","prebookingFlowAlert","unknownVariantAlert","actions","submit","change","proceed","confirmBooking","controls","button","formatNumber","min","errors","entryPoint","fuelTypes","Diesel","Petrol","Hybrid","Electric","MildHybrid","gearTypes","Automatic","Manual","steps","StepKey","CarDetailsStep","selectionBoxLabel","fuelTypeLabel","gearBoxLabel","odometerLabel","SelectStoreStep","valueSelectedTitle","SelectServicesStep","selectedTitle","servicesCount","count","noServices","selected","remove","pricePrefix","lowerCasePricePrefix","SelectAccessoriesStep","accessoriesCount","noAccessories","AppointmentStep","featurePicker","datePicker","timeSlotPicker","PersonalInformationStep","privacyPolicy","toUpperCase","clientPrivacyPolicy","personalDataLink","OrderStep","sections","services","accessories","dateAndTime","personalInfo","afterEstimate","disclaimer","totalPrice","featureOptions","WaitAtServicePoint","notice","PickupLater","RentCar","errorReason","CarNotFound","NoAvailableStores","serviceCard","field","disabledReason","MaxExceeded","Included","priceLabel","From","FixedPrice","Max","Free","supportPage","permissionNotice","theme","selector","environment","fixedElementsSelectors","parentUrl","autoCalculateSpacers","Promise","resolve","scrollTo","options","a","behavior","top","WidgetLayoutProvider","isDesktop","useDeviceType","useEffect","document","documentElement","classList","add","widgetLayout","ErrorIcon","props","viewBox","version","xmlns","r","transform","fillRule","clipRule","d","ResponsePageTemplate","dataQaTitle","dataQaDescription","dataQaLogo","logoWrapperClassName","Logo","responsePage","logoWrapper","Typography","variant","component","ErrorPage","icon","iconWrapper","ErrorBoundary","state","hasError","info","logger","trackCriticalError","catcher","Component","cloudinaryConfig","cloudName","CLOUD_NAME","handleError","src","Logger","trackWarning","GlobalConfig","useMemo","filterStoresList","uniqueStoreCodes","Set","filteredStoresList","forEach","code","push","predefinedStoreCodes","useRequestStores","useState","isLoaded","setIsLoaded","data","setStoresList","filteredList","join","goToSupportPageRoute","isBackLinkDisabled","setIsPredefinedStoreCode","setStoreCode","setPredefinedStoresList","trackError","request","StoresProvider","CheckmarkIcon","SuccessPage","dataQa","success","logo","Status","Alert","severity","PermissionNotice","Link","target","size","onClick","customMaskConfig","lazy","messageValidation","permissionText","SupportPage","isSubmitting","setIsSubmitting","handleSubmit","useCallback","values","post","goToSuccessRoute","goToErrorRoute","BackLink","goToEntryPointPageRoute","backButton","FormProvider","onSubmit","form","status","support","warning","section","fieldRow","FormField","type","Target","Input","validate","autoComplete","FirstName","LastName","surname","shrinkLabel","Phone","Email","isMultiline","maxRows","permission","Button","EntryPoint","MainFlow","redirectUrl","getEntryPointPageRouteUrl","getEntryPointPageRoutePath","RoutingRules","fallback","history","exact","getMainFlowPageRoutePath","getErrorRoutePath","getSuccessRoutePath","getSupportPageRoutePath","to","App","render","getElementById","RouteUrl","Success","url","goToMainFlowPageRoute","Support","getSupportPageRouteUrl","plateNumberField","searchButton","mainFlow","gearTypeLabel","odometer","container","cardTitle","id","cardCampaignLabel","cardDescription","cardPrice","cardOldPrice","selectCardButton","cardContainer","customCardContainer","customCardButton","total","cardButton","features","activeDate","sectionTitle","step","sectionHeader","appInsights","trackValue","properties","severityLevel","route","SeverityLevel","Critical","trackException","trackTrace","console","Warning","warn","APP_INSIGHTS_INSTRUMENTATION_KEY","ApplicationInsights","instrumentationKey","loadAppInsights","trackInfo","Information","API_URL","process","GOOGLE_MAPS_API_KEY"],"mappings":"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","file":"main.67cf64525a90e30a04fb.js","sourcesContent":["import { Action, Location, createMemoryHistory, createBrowserHistory } from 'history';\n\nimport gtmHelper from '^utils/gtmHelper';\n\nconst sharedHistory = window.xprops.isWidgetMode ? createMemoryHistory() : createBrowserHistory();\n\nsharedHistory.listen(({ pathname }: Location, action: Action): Promise | void => {\n gtmHelper.emitPageView(pathname);\n\n if (action !== 'REPLACE') {\n void window.xprops.scrollToWidget();\n }\n});\n\nexport default sharedHistory;\n","enum GTMEventAction {\n Change = 'change',\n Submit = 'submit',\n Edit = 'edit',\n Click = 'click',\n Reset = 'reset',\n NoResults = 'no-results',\n Error = 'error',\n Add = 'add',\n Remove = 'remove',\n Select = 'select',\n Give = 'give',\n Revoke = 'revoke',\n Open = 'open',\n Close = 'close',\n}\n\nexport default GTMEventAction;\n","enum GTMEventCategory {\n CarSearchForm = 'car-search-form',\n CarSearchFromQueryParams = 'car-search-from-query-params',\n CarFuelType = 'car-fuel-type',\n CarGearType = 'car-gear-type',\n CarInfoForm = 'car-info-form',\n StoreSearch = 'store-search',\n StoreSearchLocationRequest = 'store-search-location-request',\n StoreSearchZipRequest = 'store-search-zip-request',\n StoreSearchRadius = 'store-search-radius',\n StoresMapPin = 'stores-map-pin',\n StoreForm = 'store-form',\n GlobalServices = 'global-services',\n LocalServices = 'local-services',\n CustomService = 'custom-service',\n Services = 'services',\n AftermarketAccessories = 'aftermarket-accessories',\n GlobalAccessories = 'global-accessories',\n LocalAccessories = 'local-accessories',\n Accessories = 'accessories',\n AppointmentFeature = 'appointment-feature',\n AppointmentDate = 'appointment-date',\n AppointmentTimeslot = 'appointment-time-slot',\n AppointmentForm = 'appointment-form',\n PrivacyPolicyLink = 'privacy-policy-link',\n ClientPrivacyPolicyLink = 'client-privacy-policy-link',\n CustomerForm = 'customer-form',\n Booking = 'booking',\n SupportForm = 'support-form',\n Step = 'step',\n ConfirmationStep = 'confirmation-step',\n Accordion = 'accordion',\n PredefinedStoreCodes = 'predefined-store-codes',\n}\n\nexport default GTMEventCategory;\n","import { LookupType, StoreSelectionMode, LookupRequestError } from '@interdan/store-selector';\n\nimport FuelType from '^enums/car/FuelType';\nimport GTMEventAction from '^enums/gtm/GTMEventAction';\nimport GTMEventCategory from '^enums/gtm/GTMEventCategory';\nimport GearType from '^enums/car/GearType';\nimport IGlobalService from '^types/service/IGlobalService';\nimport ILocalService from '^types/service/ILocalService';\nimport IAccessory from '^types/accessory/IAccessory';\nimport Feature from '^enums/Feature';\nimport StepKey from '^enums/StepKey';\nimport ErrorReason from '^enums/ErrorReason';\n\nimport gtmHelper from './gtmHelper';\n\nconst { privacyPolicyUrl, clientPrivacyPolicyUrl } = window.xprops;\n\nexport const emitCarSearch = (plateNumber: string): void =>\n gtmHelper.emitEvent(GTMEventCategory.CarSearchForm, GTMEventAction.Submit, plateNumber);\n\nexport const emitCarSearchFailed = (plateNumber: string): void =>\n gtmHelper.emitEvent(GTMEventCategory.CarSearchForm, GTMEventAction.Error, plateNumber);\n\nexport const emitPredefinedCarSearch = (plateNumber: string): void =>\n gtmHelper.emitEvent(GTMEventCategory.CarSearchFromQueryParams, GTMEventAction.Submit, plateNumber);\n\nexport const emitPredefinedCarSearchFailed = (plateNumber: string): void =>\n gtmHelper.emitEvent(GTMEventCategory.CarSearchFromQueryParams, GTMEventAction.Error, plateNumber);\n\nexport const emitCarChange = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.CarSearchForm, GTMEventAction.Edit);\n\nexport const emitFuelTypeClick = (fuelType: FuelType): void =>\n gtmHelper.emitEvent(GTMEventCategory.CarFuelType, GTMEventAction.Click, fuelType);\n\nexport const emitGearTypeClick = (gearType: GearType): void =>\n gtmHelper.emitEvent(GTMEventCategory.CarGearType, GTMEventAction.Click, gearType);\n\nexport const emitCarInfoFormSubmit = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.CarInfoForm, GTMEventAction.Submit);\n\nexport const emitStoreLookup = (lookupType: LookupType, zip?: string): void => {\n const label = lookupType === LookupType.Zip ? `${LookupType.Zip}, ${zip}` : lookupType;\n\n gtmHelper.emitEvent(GTMEventCategory.StoreSearch, GTMEventAction.Click, label);\n};\n\nexport const emitStoreLookupReset = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.StoreSearch, GTMEventAction.Reset);\n\nexport const emitNoStoresFound = (lookupType: LookupType, radius: number): void => {\n const label = `${lookupType}, ${radius}`;\n gtmHelper.emitEvent(GTMEventCategory.StoreSearch, GTMEventAction.NoResults, label);\n};\n\nexport const emitStoreSearchLocationRequestFailed = (error: LookupRequestError): void =>\n gtmHelper.emitEvent(GTMEventCategory.StoreSearchLocationRequest, GTMEventAction.Error, error);\n\nexport const emitStoreSearchZipRequestFailed = (zip: string): void =>\n gtmHelper.emitEvent(GTMEventCategory.StoreSearchZipRequest, GTMEventAction.Error, zip);\n\nexport const emitSearchRadiusChange = (radius: number): void =>\n gtmHelper.emitEvent(GTMEventCategory.StoreSearchRadius, GTMEventAction.Change, radius.toString());\n\nexport const emitStoresMapPinClick = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.StoresMapPin, GTMEventAction.Click);\n\nexport const emitStoreSelect = (selectionMode: StoreSelectionMode): void =>\n gtmHelper.emitEvent(GTMEventCategory.StoreForm, GTMEventAction.Submit, selectionMode);\n\nexport const emitStoreChangeClick = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.StoreForm, GTMEventAction.Edit);\n\nexport const emitToggleGlobalService = (isSelected: boolean, serviceName: IGlobalService['name']): void => (\n gtmHelper.emitEvent(\n GTMEventCategory.GlobalServices,\n isSelected\n ? GTMEventAction.Add\n : GTMEventAction.Remove,\n serviceName,\n )\n);\n\nexport const emitToggleLocalService = (isSelected: boolean, serviceName: ILocalService['name']): void => (\n gtmHelper.emitEvent(\n GTMEventCategory.LocalServices,\n isSelected\n ? GTMEventAction.Add\n : GTMEventAction.Remove,\n serviceName,\n )\n);\n\nexport const emitToggleCustomService = (isSelected: boolean): void => (\n gtmHelper.emitEvent(\n GTMEventCategory.CustomService,\n isSelected\n ? GTMEventAction.Add\n : GTMEventAction.Remove,\n )\n);\n\nexport const emitServicesStepProceedButtonClick = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.Services, GTMEventAction.Submit);\n\ntype TAccessoryCategory = (\n GTMEventCategory.AftermarketAccessories\n | GTMEventCategory.GlobalAccessories\n | GTMEventCategory.LocalAccessories\n);\n\nconst emitToggleAccessory = (category: TAccessoryCategory) => (isSelected: boolean, { name }: IAccessory): void => (\n gtmHelper.emitEvent(\n category,\n isSelected\n ? GTMEventAction.Add\n : GTMEventAction.Remove,\n name,\n )\n);\n\nexport const emitToggleAftermarketAccessory = emitToggleAccessory(GTMEventCategory.AftermarketAccessories);\n\nexport const emitToggleGlobalAccessory = emitToggleAccessory(GTMEventCategory.GlobalAccessories);\n\nexport const emitToggleLocalAccessory = emitToggleAccessory(GTMEventCategory.LocalAccessories);\n\nexport const emitAccessoriesStepProceedButtonClick = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.Accessories, GTMEventAction.Submit);\n\nexport const emitFeatureSelect = (feature: Feature): void =>\n gtmHelper.emitEvent(GTMEventCategory.AppointmentFeature, GTMEventAction.Select, feature);\n\nexport const emitFeatureChangeClick = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.AppointmentFeature, GTMEventAction.Edit);\n\nexport const emitDateSelect = (date: string): void =>\n gtmHelper.emitEvent(GTMEventCategory.AppointmentDate, GTMEventAction.Select, date);\n\nexport const emitDateChangeClick = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.AppointmentDate, GTMEventAction.Edit);\n\nexport const emitTimeSlotSelect = (timeSlot: string): void =>\n gtmHelper.emitEvent(GTMEventCategory.AppointmentTimeslot, GTMEventAction.Select, timeSlot);\n\nexport const emitTimeSlotChangeClick = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.AppointmentTimeslot, GTMEventAction.Edit);\n\nexport const emitAppointmentFormSubmit = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.AppointmentForm, GTMEventAction.Submit);\n\nexport const emitPrivacyPolicyLinkClick = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.PrivacyPolicyLink, GTMEventAction.Click, privacyPolicyUrl);\n\nexport const emitClientPrivacyPolicyLinkClick = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.ClientPrivacyPolicyLink, GTMEventAction.Click, clientPrivacyPolicyUrl);\n\nexport const emitCustomerFormSubmit = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.CustomerForm, GTMEventAction.Submit);\n\nexport const emitBookingSubmit = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.Booking, GTMEventAction.Submit);\n\nexport const emitBookingSubmissionFailed = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.Booking, GTMEventAction.Error);\n\nexport const emitSupportFormSubmit = (reason: ErrorReason): void =>\n gtmHelper.emitEvent(GTMEventCategory.SupportForm, GTMEventAction.Submit, reason);\n\nexport const emitSupportFormSubmissionFailed = (): void =>\n gtmHelper.emitEvent(GTMEventCategory.SupportForm, GTMEventAction.Error);\n\nexport const emitStepChangeClick = (stepKey: StepKey): void =>\n gtmHelper.emitEvent(GTMEventCategory.Step, GTMEventAction.Edit, stepKey);\n\nexport const emitConfirmationStepChangeClick = (stepKey: StepKey): void =>\n gtmHelper.emitEvent(GTMEventCategory.ConfirmationStep, GTMEventAction.Edit, stepKey);\n\nexport const emitToggleAccordion = (isOpen: boolean, accordionKey: string): void => (\n gtmHelper.emitEvent(\n GTMEventCategory.Accordion,\n isOpen ? GTMEventAction.Open : GTMEventAction.Close,\n accordionKey,\n )\n);\n\nexport const emitPredefinedStoreCodesNotAvailable = (storeCodes: string): void =>\n gtmHelper.emitEvent(GTMEventCategory.PredefinedStoreCodes, GTMEventAction.Error, storeCodes);\n","import { Validate } from 'react-hook-form';\n\nimport texts from '^configs/texts';\n\nexport const PHONE_NUMBER_LENGTH = 8;\n\nexport const MAX_ODOMETER_VALUE = 999999;\nexport const BASE_TEXT_FIELD_MAX_CHARS = 50;\nexport const MAX_EMAIL_LENGTH = 320;\nexport const MAX_MESSAGE_LENGTH = 300;\nexport const MAX_ADDRESS_LENGTH = 150;\nexport const ZIP_LENGTH = 4;\n\nexport const required = (value: string): string | undefined => value ? undefined : texts.validationErrors.required;\n\nexport const min = (minValue: number) => (value: string): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n const numberValue = Number(value);\n\n return numberValue >= minValue ? undefined : texts.validationErrors.min(minValue);\n};\n\nexport const max = (maxValue: number) => (value: string): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n const numberValue = Number(value);\n\n return numberValue <= maxValue ? undefined : texts.validationErrors.max(maxValue);\n};\n\nexport const maxChars = (maxCharsLength: number) => (value: string): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n return value.length <= maxCharsLength ? undefined : texts.validationErrors.maxChars(maxCharsLength);\n};\n\nexport const plateNumber = (value: string): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n return /^[A-Za-z0-9]{2,7}$/.test(value) ? undefined : texts.validationErrors.plateNumber;\n};\n\nexport const phone = (value: string): string | undefined => {\n const message = texts.validationErrors.phone;\n\n if (!value) {\n return undefined;\n }\n\n return value.length === PHONE_NUMBER_LENGTH ? undefined : message;\n};\n\nexport const email = (value: string = ''): string | undefined => {\n const message = texts.validationErrors.email;\n\n const patternRegex = /^(([^<>()[\\]\\\\.,;:\\s@\"]{1,64}(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".{1,64}\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const asciiRegex = /^[\\x20-\\x7F]*$/;\n /**\n * Using a positive lookahead assertion, we can test a value against both patterns in a single pass.\n */\n const combinedRegex= new RegExp(`^(?=${patternRegex.source})(?=${asciiRegex.source})`);\n\n return combinedRegex.test(value) ? undefined : message;\n};\n\nexport const isZipValid = (value: string = ''): boolean => value.length === ZIP_LENGTH;\n\nexport const zip = (value: string): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n return isZipValid(value) ? undefined : texts.validationErrors.zip;\n};\n\nexport const phoneValidation: Record = {\n required,\n phone,\n};\n\nexport const emailValidation: Record = {\n required,\n email,\n maxChars: maxChars(MAX_EMAIL_LENGTH),\n};\n\nexport const baseTextFieldValidation: Record = {\n required,\n maxChars: maxChars(BASE_TEXT_FIELD_MAX_CHARS),\n};\n\nexport const zipValidation: Record = {\n required,\n zip,\n};\n\nexport const addressValidation: Record = {\n required,\n maxChars: maxChars(MAX_ADDRESS_LENGTH),\n};\n\n","import { ReactElement } from 'react';\nimport classNames from 'classnames';\n\nimport SkeletonBase, { ISkeletonBaseProps } from '^components/SkeletonBase';\n\nimport styles from './styles.module.scss';\n\nexport interface IPageSkeletonProps extends ISkeletonBaseProps {}\n\nconst PageSkeleton = ({ className, ...rest }: IPageSkeletonProps): ReactElement => (\n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n);\n\nexport default PageSkeleton;\n","import { ReactElement, ReactNode } from 'react';\nimport classNames from 'classnames';\n\nimport styles from './styles.module.scss';\n\ninterface IContentWrapperProps {\n children: ReactNode;\n className?: string;\n}\n\nconst ContentWrapper = ({ children, className }: IContentWrapperProps): ReactElement => (\n
\n {children}\n
\n);\n\nexport default ContentWrapper;\n","enum FuelType {\n Petrol = 'petrol',\n Diesel = 'diesel',\n Electric = 'el',\n Hybrid = 'hybrid',\n MildHybrid = 'mildHybrid',\n}\n\nexport default FuelType;\n","export const MAX_SELECTED_SERVICES = 5;\nexport const MAX_SELECTED_ACCESSORIES = 5;\n\nexport const MAX_MESSAGE_ROWS = 5;\n","enum ErrorReason {\n CarNotFound = 'carNotFound',\n NoAvailableStores = 'noAvailableStores',\n}\n\nexport default ErrorReason;\n","enum AutoCompleteValue {\n FirstName = 'given-name',\n LastName = 'family-name',\n CompanyName = 'organization',\n Email = 'email',\n Phone = 'tel',\n Zip = 'postal-code',\n City = 'address-level2',\n Address = 'street-address',\n}\n\nexport default AutoCompleteValue;\n","enum PriceLabel {\n From = 'from',\n FixedPrice = 'fixedPrice',\n Max = 'max',\n Free = 'free',\n}\n\nexport default PriceLabel;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"responsePage\":\"styles_responsePage__2ZEpm\",\"logoWrapper\":\"styles_logoWrapper__1Xqso\",\"title\":\"styles_title__vyWA9\",\"description\":\"styles_description__xI1AK\"};","import axios, { AxiosRequestConfig, AxiosInstance } from 'axios';\nimport { stringify } from 'query-string';\n\nimport { API_URL as baseURL } from '^configs/environments';\n\nconst createBaseClient = (config?: AxiosRequestConfig): AxiosInstance => axios.create({\n baseURL,\n ...config,\n // `any` is used here due to lack of typing in axios\n paramsSerializer: (params: any): string => (\n stringify(params, {\n arrayFormat: 'none',\n })\n ),\n});\n\nconst apiClient = createBaseClient();\n\nconst zipBaseURL = 'https://api.zippopotam.us/DK';\n\nconst createZipClient = (): AxiosInstance => axios.create({\n baseURL: zipBaseURL,\n});\n\nexport const zipCodesClient = createZipClient();\n\nexport default apiClient;\n","enum Feature {\n WaitAtServicePoint = 'waitAtServicePoint',\n PickupLater = 'pickupLater',\n RentCar = 'rentCar',\n}\n\nexport default Feature;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"errorPage\":\"styles_errorPage__4lUSY\",\"iconWrapper\":\"styles_iconWrapper__6TfcA\",\"icon\":\"styles_icon__2SKc7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"successPage\":\"styles_successPage__1cRWo\",\"iconWrapper\":\"styles_iconWrapper__jbRkb\",\"icon\":\"styles_icon__155mD\"};","import TagManager from 'react-gtm-module';\n\nimport { GTM_ID } from '^configs/environments';\nimport IGTMEvent from '^types/gtm/IGTMEvent';\nimport GTMEventCategory from '^enums/gtm/GTMEventCategory';\nimport IGTMDimension from '^types/gtm/IGTMDimension';\nimport TGTMDataLayer from '^types/gtm/TGTMDataLayer';\n\nenum Event {\n Default = 'GAEvent',\n CustomDimensionsUpdate = 'CustomDimensionsUpdate',\n Pageview = 'pageview',\n}\n\nconst APPLICATION_NAME = 'ServiceBooker';\nconst defaultDimension: IGTMDimension = {\n utmSource: window.xprops.utmSource,\n utmMedium: window.xprops.utmMedium,\n utmCampaign: window.xprops.utmCampaign,\n trackingClickId: window.xprops.trackingClickId,\n trackingId: window.xprops.trackingId,\n originalLocation: window.location.href,\n applicationName: APPLICATION_NAME,\n};\n\nclass GTMHelper {\n private currentDimension: Partial = defaultDimension;\n\n public init = (): void => {\n if (!GTM_ID) {\n return;\n }\n\n TagManager.initialize({\n gtmId: GTM_ID,\n });\n\n this.updateDimension(defaultDimension);\n };\n\n private emitGTMEvent = (dataLayer: TGTMDataLayer): void => {\n TagManager.dataLayer({\n dataLayer,\n });\n };\n\n public updateDimension = (dimension: Partial): void => {\n this.currentDimension = {\n ...this.currentDimension,\n ...dimension,\n };\n\n this.emitGTMEvent({\n event: Event.CustomDimensionsUpdate,\n ...this.currentDimension,\n } as IGTMDimension);\n };\n\n public emitEvent = (category: GTMEventCategory, action: string, label: string = ''): void => {\n const dataLayer: IGTMEvent = {\n event: Event.Default,\n eventLabel: label,\n eventCategory: category,\n eventAction: action,\n ...this.currentDimension,\n };\n\n this.emitGTMEvent(dataLayer);\n };\n\n public emitPageView = (path: string): void => {\n this.emitGTMEvent({\n event: Event.Pageview,\n VirtualPageviewPath: path,\n ...this.currentDimension,\n } as TGTMDataLayer);\n };\n}\n\nexport default new GTMHelper();\n","/* eslint-disable max-lines */\nimport { Observable, WritableObservable, observable } from 'micro-observables';\n\nimport Feature from '^enums/Feature';\nimport IAccessory from '^types/accessory/IAccessory';\nimport ICar from '^types/car/ICar';\nimport IGlobalService from '^types/service/IGlobalService';\nimport ILocalService from '^types/service/ILocalService';\nimport IStore from '^types/store/IStore';\nimport ICustomer from '^types/customer/ICustomer';\nimport IConfigurationValues from '^types/order/IConfigurationValues';\n\nexport type TCar = ICar | null;\nexport type TStoreCode = IStore['code'] | null;\nexport type TFeature = Feature | null;\nexport type TCustomService = string | null;\n\nconst DEFAULT_CUSTOMER: ICustomer = {\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n zip: '',\n city: '',\n address: '',\n};\n\nclass ConfigurationService {\n private _car = observable(null);\n\n private _storeCode = observable(null);\n private _isPredefinedStoreCode: WritableObservable = observable(false);\n\n private _globalServiceIds = observable([]);\n private _localServiceIds = observable([]);\n private _customService = observable(null);\n\n private _aftermarketAccessoryIds = observable([]);\n private _globalAccessoryIds = observable([]);\n private _localAccessoryIds = observable([]);\n\n private _customer = observable(DEFAULT_CUSTOMER);\n\n private _feature = observable(null);\n private _date = observable('');\n private _timeSlot = observable('');\n\n private _isPrebooking = observable(false);\n\n public car = this._car.readOnly();\n\n public storeCode = this._storeCode.readOnly();\n\n public globalServiceIds = this._globalServiceIds.readOnly();\n public localServiceIds = this._localServiceIds.readOnly();\n public customService = this._customService.readOnly();\n\n public aftermarketAccessoryIds = this._aftermarketAccessoryIds.readOnly();\n public globalAccessoryIds = this._globalAccessoryIds.readOnly();\n public localAccessoryIds = this._localAccessoryIds.readOnly();\n\n public customer = this._customer.readOnly();\n\n public feature = this._feature.readOnly();\n public date = this._date.readOnly();\n public timeSlot = this._timeSlot.readOnly();\n\n public isPrebooking = this._isPrebooking.readOnly();\n\n public accessoryCount = Observable.select(\n [this.aftermarketAccessoryIds, this.globalAccessoryIds, this.localAccessoryIds],\n (\n aftermarketAccessoryIds: number[],\n globalAccessoryIds: number[],\n localAccessoryIds: number[],\n ): number =>\n aftermarketAccessoryIds.length + globalAccessoryIds.length + localAccessoryIds.length,\n );\n\n public bookingValues = Observable.select(\n [\n this._globalServiceIds,\n this._localServiceIds,\n this._customService,\n this._aftermarketAccessoryIds,\n this._globalAccessoryIds,\n this._localAccessoryIds,\n this._customer,\n this._isPrebooking,\n this._car,\n this._storeCode,\n this._feature,\n this._date,\n this._timeSlot,\n ],\n (\n globalServiceIds: IGlobalService['id'][], localServiceIds: ILocalService['id'][], customService: TCustomService,\n aftermarketAccessoryIds: IAccessory['id'][], globalAccessoryIds: IAccessory['id'][], localAccessoryIds: IAccessory['id'][],\n customer: ICustomer,\n isPrebooking: boolean,\n car: TCar,\n storeCode: TStoreCode,\n feature: TFeature,\n date: string,\n timeSlot: string,\n ): IConfigurationValues => ({\n globalServiceIds: globalServiceIds as number[],\n localServiceIds,\n customService,\n customer,\n aftermarketAccessoryIds,\n globalAccessoryIds,\n localAccessoryIds,\n isPrebooking,\n car: car as ICar,\n storeCode: storeCode as IStore['code'],\n feature: feature as Feature,\n date,\n timeSlot,\n }),\n );\n\n public isPredefinedStoreCode = this._isPredefinedStoreCode.readOnly();\n\n public setIsPredefinedStoreCode(value: boolean): void {\n this._isPredefinedStoreCode.set(value);\n }\n\n public setCar(value: NonNullable): void {\n this._car.set(value);\n }\n\n public resetCar(): void {\n this._car.set(null);\n }\n\n public setStoreCode(value: NonNullable): void {\n this._storeCode.set(value);\n }\n\n public resetStoreCode = (): void => {\n if (this.isPredefinedStoreCode.get()) {\n return;\n }\n\n this._storeCode.set(null);\n };\n\n public setGlobalServicesIds(ids: IGlobalService['id'][]): void {\n this._globalServiceIds.set(ids);\n }\n\n public setLocalServicesIds(ids: ILocalService['id'][]): void {\n this._localServiceIds.set(ids);\n }\n\n public resetServicesIds(): void {\n this._globalServiceIds.set([]);\n this._localServiceIds.set([]);\n }\n\n public setAftermarketAccessoryIds(ids: IAccessory['id'][]): void {\n this._aftermarketAccessoryIds.set(ids);\n }\n\n public setGlobalAccessoryIds(ids: IAccessory['id'][]): void {\n this._globalAccessoryIds.set(ids);\n }\n\n public setLocalAccessoryIds(ids: IAccessory['id'][]): void {\n this._localAccessoryIds.set(ids);\n }\n\n public resetAccessoryIds(): void {\n this._aftermarketAccessoryIds.set([]);\n this._globalAccessoryIds.set([]);\n this._localAccessoryIds.set([]);\n }\n\n public setFeature(value: Feature): void {\n this._feature.set(value);\n }\n\n public resetFeature(): void {\n this._feature.set(null);\n }\n\n public setCustomService(value: string | null): void {\n this._customService.set(value);\n }\n\n public resetCustomService(): void {\n this._customService.set('');\n }\n\n public setCustomer(value: ICustomer): void {\n this._customer.set(value);\n }\n\n public resetCustomer(): void {\n this._customer.set(DEFAULT_CUSTOMER);\n }\n\n public setIsPrebooking(value: boolean): void {\n this._isPrebooking.set(value);\n }\n\n public setDate(value: string): void {\n this._date.set(value);\n }\n\n public setTimeSlot(value: string): void {\n this._timeSlot.set(value);\n }\n\n public resetDate(): void {\n this._date.set('');\n }\n\n public resetTimeSlot(): void {\n this._timeSlot.set('');\n }\n}\n\nexport default new ConfigurationService();\n","import { AnyMaskedOptions } from 'imask';\n\nexport const plateNumberMask: AnyMaskedOptions[] = [\n {\n mask: 'aa 00 000',\n },\n {\n mask: /^[a-zA-Z0-9]{0,7}$/,\n },\n];\n\nexport const phoneNumberMask = '+45 00 00 00 00';\nexport const zipMask = '0000';\n","import { observable } from 'micro-observables';\nimport { arrayToMap } from '@interdan/public-ui';\n\nimport IStore from '^types/store/IStore';\nimport ICar from '^types/car/ICar';\n\ntype TStoresMap = Record;\n\nclass StoresService {\n private _storesList = observable([]);\n private _availableStores = observable([]);\n private _isStoresListPredefined = observable(false);\n\n public storesList = this._storesList.readOnly();\n public availableStores = this._availableStores.readOnly();\n\n public storesMap = this._storesList.select((list: IStore[]): TStoresMap => arrayToMap(list, 'code'));\n\n public filterStoresBasedOnCarBrand(brand: ICar['brand']): void {\n if (this._isStoresListPredefined.get()) {\n return;\n }\n\n const stores = this._storesList.get();\n const filteredAvailableStores = stores.filter((store: IStore): boolean => store.supportedBrands.includes(brand));\n this._availableStores.set(filteredAvailableStores);\n }\n\n public resetStores(): void {\n this._availableStores.set(this._storesList.get());\n }\n\n public setStoresList(stores: IStore[]): void {\n this._storesList.set(stores);\n }\n\n public setPredefinedStoresList(stores: IStore[]): void {\n this._storesList.set(stores);\n this._isStoresListPredefined.set(true);\n }\n\n public constructor() {\n this._storesList.subscribe((list: IStore[]): void => {\n this._availableStores.set(list);\n });\n }\n}\n\nexport default new StoresService();\n","enum GearType {\n Manual = 'manual',\n Automatic = 'automatic',\n}\n\nexport default GearType;\n","enum ServiceDisabledReason {\n MaxExceeded = 'maxExceeded',\n Included = 'included',\n}\n\nexport default ServiceDisabledReason;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"default\":\"styles_default__3ORCG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"skeleton\":\"styles_skeleton__5o9dm\",\"skeletonBase\":\"styles_skeletonBase__3ALFQ\"};","import { ReactElement, ReactNode } from 'react';\nimport ContentLoader, { IContentLoaderProps } from 'react-content-loader';\nimport classNames from 'classnames';\n\nimport { DEFAULT_SKELETON_ANIMATION_SPEED } from '^configs/contentLoader';\nimport ContentWrapper from '^components/ContentWrapper';\n\nimport styles from './styles.module.scss';\n\nexport interface ISkeletonBaseProps extends IContentLoaderProps {}\n\ninterface ISkeletonBaseFinalProps extends ISkeletonBaseProps {\n children: ReactNode | ReactNode[];\n}\n\nconst SkeletonBase = ({ className, children, ...rest }: ISkeletonBaseFinalProps): ReactElement => (\n \n \n {children}\n \n \n);\n\nexport default SkeletonBase;\n","export const DEFAULT_SKELETON_ANIMATION_SPEED = 0.75;\n","enum AccessoryDisabledReason {\n MaxExceeded = 'maxExceeded',\n}\n\nexport default AccessoryDisabledReason;\n","import { useLocation } from 'react-router-dom';\nimport { parse } from 'query-string';\n\nconst useQueryParams = (): QueryParams => {\n const { search } = useLocation();\n\n return parse(search.replace('?', ''), {\n parseBooleans: true,\n }) as unknown as QueryParams;\n};\n\nexport default useQueryParams;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"widgetLayout\":\"styles_widgetLayout__2D-5O\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"content\":\"styles_content__1HDPN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"skeleton\":\"styles_skeleton__1FfgR\"};","/* eslint-disable max-lines */\nimport { formatNumber } from '@interdan/public-ui';\n\nimport StepKey from '^enums/StepKey';\nimport ErrorReason from '^enums/ErrorReason';\nimport PriceLabel from '^enums/PriceLabel';\nimport FuelType from '^enums/car/FuelType';\nimport GearType from '^enums/car/GearType';\nimport ServiceDisabledReason from '^enums/service/ServiceDisabledReason';\nimport AccessoryDisabledReason from '^enums/accessory/AccessoryDisabledReason';\nimport { MAX_SELECTED_SERVICES, MAX_SELECTED_ACCESSORIES } from '^configs/common';\nimport Feature from '^enums/Feature';\n\nconst texts = {\n units: {\n kilometers: 'km',\n },\n moneyUnits: {\n default: 'kr.',\n },\n common: {\n goBack: 'Tilbage',\n errorPage: {\n title: 'Noget gik galt',\n description: 'Prøv igen senere',\n },\n successPage: {\n title: 'Succes',\n description: 'Din besked er blevet sendt. Vi vil kontakte dig snart',\n },\n prebookingFlowAlert: 'Din ordre er en forespørgsel. Vi vil ringe til dig og bekræfte dato og tidspunkt efter bookingen.',\n unknownVariantAlert: 'OBS! Din bilmodel er ikke i vores systemer. For at få den endelige pris, bedes du tage kontakt til værkstedet.',\n },\n actions: {\n submit: 'Indsend',\n change: 'Ændre',\n proceed: 'Fortsæt',\n confirmBooking: 'Bekræft booking',\n },\n controls: {\n button: {\n change: 'Ændre',\n },\n },\n validationErrors: {\n required: 'Udfyld venligst feltet',\n plateNumber: 'Forkert nummerplade',\n maxChars: (value: number): string => `Du kan maks. indtaste ${value} tegn`,\n max: (value: number): string => `Maks ${formatNumber(value)}`,\n min: (value: number): string => `Min ${formatNumber(value)}`,\n email: 'Forkert email',\n phone: 'Forkert telefonnummer',\n zip: 'Forkert postnummer',\n },\n errors: {\n default: 'Noget gik galt',\n },\n entryPoint: {\n title: 'Nummerplade',\n },\n fuelTypes: {\n [FuelType.Diesel]: 'Diesel',\n [FuelType.Petrol]: 'Benzin',\n [FuelType.Hybrid]: 'Plug-in hybrid',\n [FuelType.Electric]: 'El',\n [FuelType.MildHybrid]: 'Mild hybrid',\n },\n gearTypes: {\n [GearType.Automatic]: 'Automatisk',\n [GearType.Manual]: 'Manuelt',\n },\n steps: {\n [StepKey.CarDetailsStep]: {\n title: 'Din bil',\n selectionBoxLabel: 'Bilinformation',\n fuelTypeLabel: 'Brændstof',\n gearBoxLabel: 'Geartype',\n odometerLabel: 'Antal kørte kilometer, km',\n },\n [StepKey.SelectStoreStep]: {\n title: 'Vælg værksted',\n valueSelectedTitle: 'Valgt værksted',\n },\n [StepKey.SelectServicesStep]: {\n title: 'Vælg service',\n selectedTitle: 'Valgt service',\n servicesCount: (count: number): string => `${count} ${count > 1 ? 'services' : 'service'}`,\n noServices: 'Ingen service valgt',\n selected: 'Fjern',\n remove: 'Beskriv',\n pricePrefix: 'Fra',\n lowerCasePricePrefix: 'fra',\n },\n [StepKey.SelectAccessoriesStep]: {\n title: 'Populært tilvalg',\n selectedTitle: 'Valgt tilbehør',\n accessoriesCount: (count: number): string => `${count} Tilbehør`,\n noAccessories: 'Intet tilbehør valgt',\n },\n [StepKey.AppointmentStep]: {\n title: 'Dato & tid',\n featurePicker: {\n title: 'Afhentningsmuligheder',\n valueSelectedTitle: 'Vælg afhentningsmulighed',\n },\n datePicker: {\n title: 'Ønsket dato',\n valueSelectedTitle: 'Dato',\n },\n timeSlotPicker: {\n title: 'Ønsket tidspunkt',\n valueSelectedTitle: 'Tidspunkt',\n },\n },\n [StepKey.PersonalInformationStep]: {\n title: 'Kontaktinformation',\n privacyPolicy: (): string => (\n `Ved at klikke \"${texts.actions.proceed.toUpperCase()}\" bekræfter jeg, at jeg er indforstået med behandlingen af mine persondata i henhold til følgende `\n ),\n clientPrivacyPolicy: ' & det valgte værksteds ',\n personalDataLink: 'persondatapolitik',\n },\n [StepKey.OrderStep]: {\n title: 'Din ordreinformation',\n sections: {\n car: 'Din bil',\n store: 'Værksted',\n services: 'Service',\n accessories: 'Tilbehør',\n dateAndTime: 'Dato & tid',\n personalInfo: 'Kontaktinformation',\n },\n customService: {\n afterEstimate: 'Pris gives af værksted',\n },\n message: {\n label: 'Besked til værksted',\n },\n disclaimer: 'Vær opmærksom på at prisen er vejledende, og kan blive ændret af værkstedet i tilfælde af uforudsete komplikationer. Der tages forbehold for prisændringer og trykfejl.',\n totalPrice: 'Total pris fra',\n },\n },\n featureOptions: {\n [Feature.WaitAtServicePoint]: {\n title: 'Jeg ønsker at vente imens',\n notice: 'Kontakt venligst værkstedet, såfremt du ønsker et tidsestimat for dit værkstedsbesøg.',\n },\n [Feature.PickupLater]: {\n title: 'Jeg henter bilen senere på dagen',\n notice: 'Du er velkommen til at kontakte værkstedet og få oplyst en ventetid',\n },\n [Feature.RentCar]: {\n title: 'Jeg ønsker en lejebil',\n notice: 'Der kan være ekstra omkostninger forbundet med valg af lejebil',\n },\n },\n errorReason: {\n [ErrorReason.CarNotFound]: 'Vi beklager, men bilen er ikke fundet. Kontakt os venligst.',\n [ErrorReason.NoAvailableStores]: 'Det ønskede værksted kunne desværre ikke findes',\n },\n services: {\n customService: 'Anden service eller reparation',\n serviceCard: {\n customService: {\n description: 'Er skaden sket? Eller kan du ikke finde en Servicepakke der dækker din bils behov? Så vælg denne Service og skriv din kommentar i feltet. Bemærk prisen kan variere ift. bilens alder, km. stand mm',\n field: {\n label: 'Beskrivelse',\n },\n },\n disabledReason: {\n [ServiceDisabledReason.MaxExceeded]: `Du kan vælge ${MAX_SELECTED_SERVICES} forskellige service`,\n [ServiceDisabledReason.Included]: 'Inkluderet i andre valgte service',\n },\n },\n },\n accessories: {\n disabledReason: {\n [AccessoryDisabledReason.MaxExceeded]: `Du kan vælge ${MAX_SELECTED_ACCESSORIES} forskellige tilbehør`,\n },\n },\n priceLabel: {\n [PriceLabel.From]: 'Fra',\n [PriceLabel.FixedPrice]: 'Fast pris',\n [PriceLabel.Max]: 'Maks',\n [PriceLabel.Free]: 'Gratis',\n },\n customer: {\n firstName: 'Fornavn',\n lastName: 'Efternavn',\n phone: 'Telefon',\n email: 'E-mail',\n address: 'Adresse',\n zip: 'Postnr.',\n city: 'By',\n },\n supportPage: {\n permissionNotice: {\n privacyPolicy: (): string => `Ved at klikke \"${texts.actions.submit.toUpperCase()}\" bekræfter jeg, at jeg er indforstået med behandlingen af mine persondata i henhold til følgende`,\n personalDataLink: 'persondatapolitik',\n },\n message: 'Besked til forhandler',\n },\n};\n\nexport default texts;\n","if (!window.xprops) {\n window.xprops = {\n privacyPolicyUrl: 'https://policies.google.com/privacy',\n theme: 'peugeot',\n selector: '',\n environment: 'development',\n fixedElementsSelectors: [],\n isWidgetMode: false,\n parentUrl: window.location.href,\n autoCalculateSpacers: (): Promise => Promise.resolve(undefined),\n scrollTo: async (options: ScrollToOptions): Promise => window.scrollTo({\n ...options,\n behavior: 'smooth',\n }),\n scrollToWidget: async (): Promise => window.scrollTo({\n top: 0,\n behavior: 'smooth',\n }),\n };\n}\n\nexport {};\n","import { ReactElement, ReactNode, useEffect } from 'react';\nimport { useDeviceType } from '@interdan/public-ui';\n\nimport styles from './styles.module.scss';\n\nexport interface IWidgetLayoutProviderProps {\n children: ReactNode;\n}\n\nconst WidgetLayoutProvider = ({ children }: IWidgetLayoutProviderProps): ReactElement => {\n const { isDesktop } = useDeviceType();\n\n useEffect(\n (): (() => void) | void => {\n if (window.xprops.isWidgetMode) {\n document.documentElement.classList.add(styles.widgetLayout);\n }\n\n if (isDesktop) {\n return;\n }\n\n void window.xprops.autoCalculateSpacers();\n },\n [isDesktop],\n );\n\n return children as ReactElement; // Update if https://github.com/yannickcr/eslint-plugin-react/pull/2967 is merged\n};\n\nexport default WidgetLayoutProvider;\n","import { ReactElement } from 'react';\nimport { IIconProps } from '@interdan/public-ui';\n\nconst ErrorIcon = (props: IIconProps): ReactElement => (\n \n \n\n \n \n);\n\nexport default ErrorIcon;\n","import { ReactElement, ReactNode } from 'react';\nimport { Typography } from '@interdan/public-ui';\nimport classNames from 'classnames';\n\nimport ContentWrapper from '^components/ContentWrapper';\n\nimport styles from './styles.module.scss';\n\nexport interface IResponsePageTemplateProps {\n Logo: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n className?: string;\n logoWrapperClassName?: string;\n dataQaLogo?: string;\n dataQaDescription?: string;\n dataQaTitle?: string;\n}\n\nconst ResponsePageTemplate = ({ dataQaTitle, dataQaDescription, dataQaLogo, className, logoWrapperClassName, Logo, title, description }: IResponsePageTemplateProps): ReactElement => (\n \n \n {Logo}\n \n\n \n {title}\n \n\n {!!description && (\n \n {description}\n \n )}\n \n);\n\nexport default ResponsePageTemplate;\n","import { ReactElement } from 'react';\n\nimport texts from '^configs/texts';\nimport ErrorIcon from '^icons/ErrorIcon';\n\nimport ResponsePageTemplate from '../ResponsePageTemplate';\n\nimport styles from './styles.module.scss';\n\nconst ErrorPage = (): ReactElement => (\n }\n logoWrapperClassName={styles.iconWrapper}\n title={texts.common.errorPage.title}\n description={texts.common.errorPage.description}\n />\n);\n\nexport default ErrorPage;\n","import { Component, ReactNode } from 'react';\n\nimport logger from '^utils/logger';\nimport ErrorPage from '^components/ErrorPage';\n\nexport interface IErrorBoundaryProps {\n children: ReactNode;\n}\n\ninterface IErrorBoundaryState {\n hasError: boolean;\n}\n\nclass ErrorBoundary extends Component {\n public state: IErrorBoundaryState = {\n hasError: false,\n };\n\n public static getDerivedStateFromError(): IErrorBoundaryState {\n return {\n hasError: true,\n };\n }\n\n public componentDidCatch(error: Error, info: Record): void {\n logger.trackCriticalError(error, {\n info,\n catcher: 'ErrorBoundary',\n });\n }\n\n public render(): ReactNode {\n const { hasError } = this.state;\n const { children } = this.props;\n\n return hasError ? : children;\n }\n}\n\nexport default ErrorBoundary;\n","import { ReactElement, ReactNode, useMemo } from 'react';\nimport { GlobalConfig as GlobalConfigBase, ICloudinaryConfig } from '@interdan/public-ui';\n\nimport WidgetLayoutProvider from '^common/WidgetLayoutProvider';\nimport ErrorBoundary from '^common/ErrorBoundary';\nimport { CLOUD_NAME } from '^configs/environments';\nimport Logger from '^utils/logger';\n\nimport styles from './styles.module.scss';\n\nexport interface IGlobalConfigProps {\n children: ReactNode;\n}\n\nconst handleCloudinaryImageError = (src: string): void => {\n Logger.trackWarning(`Image (${src}) is not found`, {\n catcher: 'OptimizedImage.error',\n });\n};\n\nconst cloudinaryConfig: ICloudinaryConfig = {\n cloudName: CLOUD_NAME,\n handleError: handleCloudinaryImageError,\n};\n\nconst GlobalConfig = ({ children }: IGlobalConfigProps): ReactElement => {\n const theme = useMemo(\n (): string => {\n if (window.xprops.theme) {\n return styles[window.xprops.theme] || window.xprops.theme;\n }\n\n return styles.default;\n },\n [],\n );\n\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nexport default GlobalConfig;\n","import { arrayToMap } from '@interdan/public-ui';\n\nimport IStore from '^types/store/IStore';\n\nconst filterStoresList = (storesList: IStore[], storeCodes: IStore['code'][]): IStore[] => {\n if (storeCodes.length === 0) {\n return storesList;\n }\n\n const storesMap: Record = arrayToMap(storesList, 'code');\n const uniqueStoreCodes = [...new Set(storeCodes)];\n\n const filteredStoresList: IStore[] = [];\n\n uniqueStoreCodes.forEach((code: IStore['code']): void => {\n const store = storesMap[code];\n\n if (store) {\n filteredStoresList.push(store);\n }\n });\n\n return filteredStoresList;\n};\n\nexport default filterStoresList;\n","import { useEffect, useState } from 'react';\n\nimport StoresService from '^services/StoresService';\nimport { emitPredefinedStoreCodesNotAvailable } from '^utils/gtmEvents';\nimport { goToSupportPageRoute } from '^utils/routingHelpers';\nimport ErrorReason from '^enums/ErrorReason';\nimport { requestStoresList } from '^api/stores';\nimport logger from '^utils/logger';\nimport ConfigurationService from '^services/ConfigurationService';\n\nimport filterStoresList from './filterStoresList';\n\nconst predefinedStoreCodes = window.xprops.storeCodes || [];\n\nconst useRequestStores = (): boolean => {\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(\n (): void => {\n const request = async (): Promise => {\n try {\n const { data: { list } } = await requestStoresList();\n\n if (predefinedStoreCodes.length === 0) {\n StoresService.setStoresList(list);\n\n return;\n }\n\n const filteredList = filterStoresList(list, predefinedStoreCodes);\n\n if (filteredList.length === 0) {\n emitPredefinedStoreCodesNotAvailable(predefinedStoreCodes.join());\n\n goToSupportPageRoute({\n reason: ErrorReason.NoAvailableStores,\n isBackLinkDisabled: true,\n });\n\n return;\n }\n\n if (filteredList.length === 1) {\n const [{ code }] = filteredList;\n ConfigurationService.setIsPredefinedStoreCode(true);\n ConfigurationService.setStoreCode(code);\n }\n\n StoresService.setPredefinedStoresList(filteredList);\n } catch (err) {\n logger.trackError(err, {\n catcher: 'useRequestStores',\n });\n } finally {\n setIsLoaded(true);\n }\n };\n\n void request();\n },\n [],\n );\n\n return isLoaded;\n};\n\nexport default useRequestStores;\n","import { AxiosResponse } from 'axios';\n\nimport IApiListResponse from '^types/api/IApiListResponse';\nimport IStore from '^types/store/IStore';\n\nimport apiClient from '.';\n\nexport type TRequestStoresResponse = AxiosResponse>;\n\nexport const requestStoresList = (): Promise => (\n apiClient.get('/Stores')\n);\n","import { ReactElement, ReactNode } from 'react';\n\nimport PageSkeleton from '^components/PageSkeleton';\n\nimport useRequestStores from './useRequestStores';\n\ninterface IStoresProviderProps {\n children: ReactNode;\n}\n\nconst StoresProvider = ({ children }: IStoresProviderProps): ReactElement => {\n const isLoaded = useRequestStores();\n\n if (!isLoaded) {\n return (\n \n );\n }\n\n return children as ReactElement;\n};\n\nexport default StoresProvider;\n","import { ReactElement } from 'react';\nimport { IIconProps } from '@interdan/public-ui';\n\nconst CheckmarkIcon = (props: IIconProps): ReactElement => (\n \n \n \n);\n\nexport default CheckmarkIcon;\n","import { ReactElement } from 'react';\n\nimport texts from '^configs/texts';\nimport CheckmarkIcon from '^icons/CheckmarkIcon';\nimport dataQa from '^configs/dataQa';\n\nimport ResponsePageTemplate from '../ResponsePageTemplate';\n\nimport styles from './styles.module.scss';\n\nconst SuccessPage = (): ReactElement => (\n }\n logoWrapperClassName={styles.iconWrapper}\n title={texts.common.successPage.title}\n description={texts.common.successPage.description}\n dataQaTitle={dataQa.success.title}\n dataQaLogo={dataQa.success.logo}\n dataQaDescription={dataQa.success.description}\n />\n);\n\nexport default SuccessPage;\n","import React, { ReactElement } from 'react';\nimport { Alert } from '@interdan/public-ui';\n\nimport texts from '^configs/texts';\nimport ErrorReason from '^enums/ErrorReason';\n\ninterface IStatusProps {\n className?: string;\n reason?: ErrorReason;\n dataQa?: string;\n}\n\nconst Status = ({ reason, className, dataQa }: IStatusProps): ReactElement | null => (\n \n {reason ? texts.errorReason[reason] : texts.errors.default}\n \n);\n\nexport default Status;\n","import React, { ReactElement } from 'react';\nimport { Typography, Link } from '@interdan/public-ui';\n\nimport texts from '^configs/texts';\nimport { emitPrivacyPolicyLinkClick } from '^utils/gtmEvents';\n\ninterface IPermissionNoticeProps {\n className?: string;\n}\n\nconst { privacyPolicyUrl } = window.xprops;\nconst { privacyPolicy, personalDataLink } = texts.supportPage.permissionNotice;\n\nconst PermissionNotice = ({ className }: IPermissionNoticeProps): ReactElement | null => (\n \n {privacyPolicy()}\n\n {' '}\n\n \n {personalDataLink}\n \n \n);\n\nexport default PermissionNotice;\n","import React, { ReactElement, useCallback, useState } from 'react';\nimport { Validate } from 'react-hook-form/dist/types/validator';\nimport { Input, Button, FormProvider, FormField, BackLink, IInputProps } from '@interdan/public-ui';\n\nimport ISupportRequest from '^types/support/ISupportRequest';\nimport AutoCompleteValue from '^enums/AutoCompleteValue';\nimport texts from '^configs/texts';\nimport { MAX_MESSAGE_ROWS } from '^configs/common';\nimport { phoneNumberMask } from '^utils/masks';\nimport { createSupportRequest } from '^api/supportRequests';\nimport PageSkeleton from '^components/PageSkeleton';\nimport {\n goToSuccessRoute,\n goToErrorRoute,\n goToEntryPointPageRoute, ISupportPageRouteParams,\n} from '^utils/routingHelpers';\nimport logger from '^utils/logger';\nimport {\n maxChars,\n MAX_MESSAGE_LENGTH,\n baseTextFieldValidation,\n phoneValidation,\n emailValidation,\n} from '^utils/validators';\nimport useQueryParams from '^hooks/useQueryParams';\nimport { emitSupportFormSubmissionFailed, emitSupportFormSubmit } from '^utils/gtmEvents';\nimport dataQa from '^configs/dataQa';\nimport ContentWrapper from '^components/ContentWrapper';\n\nimport Status from './Status';\nimport PermissionNotice from './PermissionNotice';\nimport styles from './styles.module.scss';\n\nconst customMaskConfig: IInputProps['customMaskConfig'] = {\n mask: phoneNumberMask,\n lazy: false,\n};\n\nconst messageValidation: Record = {\n maxChars: maxChars(MAX_MESSAGE_LENGTH),\n};\n\nconst { privacyPolicy, personalDataLink } = texts.supportPage.permissionNotice;\nconst { privacyPolicyUrl } = window.xprops;\nconst permissionText = `${privacyPolicy()} ${personalDataLink} (${privacyPolicyUrl})`;\n\nconst SupportPage = (): ReactElement => {\n const { reason, isBackLinkDisabled } = useQueryParams();\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const handleSubmit = useCallback(\n async (values: ISupportRequest): Promise => {\n try {\n void window.xprops.scrollToWidget();\n\n setIsSubmitting(true);\n await createSupportRequest({\n reason,\n ...values,\n permissionText,\n });\n\n emitSupportFormSubmit(reason);\n\n goToSuccessRoute();\n } catch (error) {\n goToErrorRoute();\n\n emitSupportFormSubmissionFailed();\n\n logger.trackError(error, {\n catcher: 'SupportPage.handleSubmit',\n });\n } finally {\n setIsSubmitting(false);\n }\n },\n [reason],\n );\n\n if (isSubmitting) {\n return (\n \n );\n }\n\n return (\n \n
\n {!isBackLinkDisabled && (\n \n )}\n\n \n \n\n
\n
\n \n\n \n
\n\n
\n \n\n \n
\n\n
\n \n
\n
\n\n \n\n \n {texts.actions.submit}\n \n \n
\n
\n );\n};\n\nexport default SupportPage;\n","import ISupportRequest from '^types/support/ISupportRequest';\n\nimport apiClient from '.';\n\nexport const createSupportRequest = (data: ISupportRequest): Promise => (\n apiClient.post('/SupportRequests', data)\n);\n","import { ReactElement, lazy, Suspense } from 'react';\nimport { Switch, Router, Route, Redirect } from 'react-router-dom';\n\nimport ILazyComponent from '^types/common/ILazyComponent';\nimport {\n getEntryPointPageRoutePath, getEntryPointPageRouteUrl, getErrorRoutePath,\n getMainFlowPageRoutePath, getSuccessRoutePath, getSupportPageRoutePath,\n} from '^utils/routingHelpers';\nimport sharedHistory from '^sharedHistory';\nimport ErrorPage from '^components/ErrorPage';\nimport PageSkeleton from '^components/PageSkeleton';\nimport SuccessPage from '^components/SuccessPage';\nimport SupportPage from '^pages/SupportPage';\n\nconst EntryPoint = lazy((): Promise => import('^pages/EntryPoint'));\nconst MainFlow = lazy((): Promise => import('^pages/MainFlow'));\n\nconst { plateNumber } = window.xprops;\n\nconst redirectUrl = plateNumber\n ? getEntryPointPageRouteUrl({\n plateNumber,\n })\n : getEntryPointPageRoutePath();\n\nconst RoutingRules = (): ReactElement => (\n }>\n \n \n \n\n \n\n \n\n \n\n \n\n \n \n \n \n);\n\nexport default RoutingRules;\n\n","import { ReactElement } from 'react';\n\nimport GlobalConfig from '^common/GlobalConfig';\nimport StoresProvider from '^providers/StoresProvider';\n\nimport RoutingRules from './RoutingRules';\n\nconst App = (): ReactElement => (\n \n \n \n \n \n);\n\nexport default App;\n","import { StrictMode } from 'react';\nimport { render } from 'react-dom';\n\nimport '^zoid-definitions/mockXprops';\nimport logger from '^utils/logger';\nimport gtmHelper from '^utils/gtmHelper';\n\nimport App from './App';\n\nimport '^scss-global';\n\nlogger.init();\ngtmHelper.init();\n\nrender(\n \n \n ,\n document.getElementById('root'),\n);\n","enum StepKey {\n CarDetailsStep = 'carInfo',\n SelectStoreStep = 'store',\n SelectServicesStep = 'services',\n SelectAccessoriesStep = 'accessories',\n AppointmentStep = 'appointment',\n PersonalInformationStep = 'customerForm',\n OrderStep = 'confirmation',\n}\n\nexport default StepKey;\n","enum RouteUrl {\n EntryPoint = '/search',\n MainFlow = '/main-flow',\n Error = '/error',\n Success = '/success',\n Support = '/support',\n}\n\nexport default RouteUrl;\n","import { stringify } from 'query-string';\n\nimport ErrorReason from '^enums/ErrorReason';\nimport RouteUrl from '^enums/routing/RouteUrl';\nimport sharedHistory from '^sharedHistory';\n\nexport const getErrorRoutePath = (): string => RouteUrl.Error;\n\nexport const getSuccessRoutePath = (): string => RouteUrl.Success;\n\nexport const goToErrorRoute = (url: string = getErrorRoutePath()): void => {\n sharedHistory.push(url);\n};\n\nexport const goToSuccessRoute = (url: string = getSuccessRoutePath()): void => {\n sharedHistory.push(url);\n};\n\nexport interface IEntryPointPageRouteParams {\n plateNumber?: string;\n}\n\nexport const getEntryPointPageRoutePath = (): string => (\n `${RouteUrl.EntryPoint}`\n);\n\nexport const getEntryPointPageRouteUrl = ({ plateNumber }: IEntryPointPageRouteParams): string => `${getEntryPointPageRoutePath()}/?${stringify({\n plateNumber,\n})}`;\n\nexport const goToEntryPointPageRoute = (): void => (\n sharedHistory.push(getEntryPointPageRoutePath())\n);\n\nexport const getMainFlowPageRoutePath = (): string => (\n `${RouteUrl.MainFlow}`\n);\n\nexport const goToMainFlowPageRoute = (): void => (\n sharedHistory.push(getMainFlowPageRoutePath())\n);\n\nexport interface ISupportPageRouteParams {\n reason: ErrorReason;\n isBackLinkDisabled?: boolean;\n}\n\nexport const getSupportPageRoutePath = (): string => (\n `${RouteUrl.Support}`\n);\n\nexport const getSupportPageRouteUrl = ({ reason, isBackLinkDisabled }: ISupportPageRouteParams): string => (\n `${getSupportPageRoutePath()}/?${stringify({\n reason,\n isBackLinkDisabled,\n })}`\n);\n\nexport const goToSupportPageRoute = (params: ISupportPageRouteParams): void => (\n sharedHistory.push(getSupportPageRouteUrl(params))\n);\n","import StepKey from '^enums/StepKey';\n\nconst dataQa = {\n plateNumberField: 'plate-number-field',\n searchButton: 'search-button',\n goBack: 'back-button',\n support: {\n warning: 'support-warning',\n name: 'support-name',\n surname: 'support-surname',\n email: 'support-email',\n phone: 'support-phone',\n message: 'support-message',\n submit: 'support-submit',\n },\n success: {\n title: 'success-title',\n logo: 'success-logo',\n description: 'success-description',\n },\n mainFlow: {\n [StepKey.CarDetailsStep]: {\n title: 'carInfo-title',\n fuelTypeLabel: 'carInfo-fuel-type-label',\n fuelType: 'carInfo-fuel-type',\n gearType: 'carInfo-gear-type',\n gearTypeLabel: 'carInfo-gear-type-label',\n odometer: 'carInfo-odometer',\n submit: 'carInfo-submit',\n container: 'carInfo-container',\n },\n [StepKey.SelectStoreStep]: {\n title: 'selectStore-title',\n container: 'selectStore-container',\n },\n [StepKey.SelectServicesStep]: {\n title: 'selectService-title',\n container: 'selectService-container',\n cardTitle: (id: number): string => `selectService-card-title-${id}`,\n cardCampaignLabel: (id: number): string => `selectService-card-campaign-label-${id}`,\n cardDescription: (id: number): string => `selectService-card-description-${id}`,\n cardPrice: (id: number): string => `selectService-card-price-${id}`,\n cardOldPrice: (id: number): string => `selectService-card-old-price-${id}`,\n selectCardButton: (id: number): string => `selectService-card-select-button-${id}`,\n submit: 'selectService-submit',\n cardContainer: (id: number): string => `selectService-card-container-${id}`,\n customCardContainer: 'selectService-card-container-custom',\n customCardButton: 'selectService-card-button-custom',\n total: 'selectService-total',\n },\n [StepKey.SelectAccessoriesStep]: {\n title: 'selectAccessories-title',\n container: 'selectAccessories-container',\n cardContainer: (id: number): string => `selectAccessories-card-container-${id}`,\n cardTitle: (id: number): string => `selectAccessories-card-title-${id}`,\n cardDescription: (id: number): string => `selectAccessories-card-description-${id}`,\n cardButton: (id: number): string => `selectAccessories-card-button-${id}`,\n cardPrice: (id: number): string => `selectAccessories-card-price-${id}`,\n total: 'selectAccessories-total',\n submit: 'selectAccessories-submit',\n },\n [StepKey.AppointmentStep]: {\n title: 'appointmentStep-title',\n container: 'appointmentStep-container',\n features: 'appointmentStep-feature-',\n activeDate: 'appointmentStep-active-date',\n submit: 'appointmentStep-submit',\n },\n [StepKey.PersonalInformationStep]: {\n title: 'personalInformation-title',\n container: 'personalInformation-container',\n submit: 'personalInformation-submit',\n\n name: 'personalInformation-name',\n surname: 'personalInformation-surname',\n email: 'personalInformation-email',\n phone: 'personalInformation-phone',\n message: 'personalInformation-message',\n city: 'personalInformation-city',\n zip: 'personalInformation-zip',\n address: 'personalInformation-address',\n },\n\n [StepKey.OrderStep]: {\n title: 'orderStep-title',\n container: 'orderStep-container',\n submit: 'orderStep-submit',\n message: 'orderStep-message',\n totalPrice: 'orderStep-totalPrice',\n sectionTitle: (step: StepKey): string => `orderStep-section-title-${step}`,\n sectionHeader: (step: StepKey): string => `orderStep-section-header-${step}`,\n },\n },\n};\n\nexport default dataQa;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"supportPage\":\"styles_supportPage__2t66p\",\"backButton\":\"styles_backButton__3P4jz\",\"form\":\"styles_form__1tqNu\",\"status\":\"styles_status__1gh5I\",\"section\":\"styles_section__wp6KZ\",\"permission\":\"styles_permission__3Xbtm\",\"submit\":\"styles_submit__3xVVN\",\"fieldRow\":\"styles_fieldRow__M2FwL\"};","import { ApplicationInsights, SeverityLevel } from '@microsoft/applicationinsights-web';\n\nimport { APP_INSIGHTS_INSTRUMENTATION_KEY } from '^configs/environments';\nimport IAppInsightsCustomProperties from '^types/insights/IAppInsightsCustomProperties';\n\nclass Logger {\n private appInsights: ApplicationInsights | null = null;\n\n private trackValue = (value: any, properties: IAppInsightsCustomProperties, severityLevel: SeverityLevel): void => {\n if (this.appInsights) {\n properties.route = window.location.href;\n\n if (severityLevel === SeverityLevel.Critical || severityLevel === SeverityLevel.Error) {\n this.appInsights.trackException({\n properties,\n severityLevel,\n error: value,\n });\n\n return;\n }\n\n this.appInsights.trackTrace({\n properties,\n severityLevel,\n message: value,\n });\n\n return;\n }\n\n switch (severityLevel) {\n case SeverityLevel.Critical:\n case SeverityLevel.Error:\n console.error(value);\n break;\n\n case SeverityLevel.Warning:\n console.warn(value);\n break;\n\n default:\n console.info(value);\n break;\n }\n };\n\n public init = (): void => {\n if (this.appInsights || !APP_INSIGHTS_INSTRUMENTATION_KEY) {\n return;\n }\n\n this.appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: APP_INSIGHTS_INSTRUMENTATION_KEY,\n },\n });\n\n this.appInsights.loadAppInsights();\n };\n\n public trackError = (error: Error, properties: IAppInsightsCustomProperties): void => {\n this.trackValue(error, properties, SeverityLevel.Error);\n };\n\n public trackCriticalError = (error: Error, properties: IAppInsightsCustomProperties): void => {\n this.trackValue(error, properties, SeverityLevel.Critical);\n };\n\n public trackInfo = (message: string, properties: IAppInsightsCustomProperties): void => {\n this.trackValue(message, properties, SeverityLevel.Information);\n };\n\n public trackWarning = (message: string, properties: IAppInsightsCustomProperties): void => {\n this.trackValue(message, properties, SeverityLevel.Warning);\n };\n}\n\nexport default new Logger();\n","export const API_URL = process.env.SERVICE_BOOKER_NEXT_PUBLIC_FACE_API_URL || '';\nexport const APP_INSIGHTS_INSTRUMENTATION_KEY = process.env.SERVICE_BOOKER_NEXT_PUBLIC_FACE_APP_INSIGHTS_INSTRUMENTATION_KEY || '';\nexport const GTM_ID = process.env.SERVICE_BOOKER_NEXT_PUBLIC_FACE_GTM_ID || '';\nexport const CLOUD_NAME = process.env.SERVICE_BOOKER_NEXT_PUBLIC_FACE_CLOUD_NAME || '';\nexport const GOOGLE_MAPS_API_KEY = process.env.SERVICE_BOOKER_NEXT_PUBLIC_FACE_GOOGLE_MAPS_API_KEY || '';\nexport const WIDGET_URL = process.env.SERVICE_BOOKER_NEXT_PUBLIC_FACE_WIDGET_URL || '';\n"],"sourceRoot":""}