{"version":3,"sources":["temp/config.js","lib/routerUtils.ts","components/Layouts/Error.tsx","components/Layouts/NotFound.tsx","components/Layouts/PreloadImages.tsx","components/Layouts/MainContainer.tsx","components/Layouts/LayoutFactory.tsx","components/Header/NavBarContainer.tsx","Tracker.tsx","Layout.tsx","uniform/personalization/getCountryFromContext.js","uniform/personalization/resolveListPersonalization.js","components/mtwo.js","uniform/personalization/algoliaScoredCondition.js","componentFactory.tsx","lib/RouteDataManager.tsx","lib/ComponentFactoryProvider.tsx","AppRoot.tsx","index.tsx","lib/languageResolvers.ts","lib/dataFetcher.ts","lib/routeStateManager.ts","lib/AppStateProvider.tsx","lib/accessibilityStateManager.ts","lib/getPropertyByPath.ts","lib/userSettingsStateManager.ts"],"names":["module","exports","routePatterns","matchRoute","route","result","some","pattern","match","matchPath","path","params","Error","_ref","_ref$error","error","_ref$errorMessage","errorMessage","React","createElement","concat","toString","NotFoundContent","en","fields","title","value","description","ctaLabel","ctaLink","href","anchor","linktype","class","querystring","id","colourTheme","url","backgroundColor","themeName","ar","NotFound","context","langauge","language","props","SystemMessageBanner","preloadImages","rootRoute","placeholders","slice","links","component","get","forEach","item","_item","_slicedToArray","componentName","getImage","components","getComponents","object","searchKey","objects","key","hasOwnProperty","push","imgSrc","HeaderMediaTSXSizes","mobile","desktop","apply","rel","as","media","console","info","getOriginUrl","origin","endsWith","renderProperties","prefix","queryString","properties","parts","split","i","length","pair","property","decodeURIComponent","content","withRouter","location","pageTitle","resolvePageTitle","pageDescription","desc","resolveMetaDescription","pageImage","resolveMetaImage","pageUrl","ogTitle","ogDescription","ogImage","twitterTitle","twitterDescription","_React$useState","useState","_React$useState2","firstLoad","setFirstLoad","_React$useState3","_React$useState4","articleListSchema","setArticleListSchema","_React$useState5","_React$useState6","FAQStructuredData","setFAQStructuredData","itemId","templateName","tealium","browserLanguage","navigator","utagsDataString","utagsDataObj","Hjson","parse","utag_data","_objectSpread","page_id","page_name","page_language","template","pillar","content_type","persona","page_location","page_title","page_path","pathname","page_browser_language","session_country","includes","replace","trim","session_country_code","warn","useEffect","wind","window","document","getElementById","innerHTML","startIndex","indexOf","data","cust_id","getLatestUserCookie","then","userCookie","access_token","apiGlobal","appState","fetchData","options","method","body","JSON","stringify","query","authToken","ddd","userProfile","email","encrEmail","SHA256","name","utag","utag_cfg_ovrd","noview","view","moduels","scrolledto25","scrollTimer","scrollTimer2","timer","timerLogged","timerLogged2","scrolledto50","scrolledto75","scrolledto100","timer20Finsihed","timer50Finsihed","desktopHeights","NeighborhoodsMap","Map","Curators","Itineraries","ContactCard","VisaRequirementsWizard","EditableListiclePOIs","EditableListicleEvents","ListiclePOIs","ListicleEvents","ListicleMedia","ItineraryOverview","Tags","CookiePolicy","TestimonialQuote","PracticalInformation","MediaGrid","Footer","CuratorItineraries","CuratorPOIs","CuratorEvents","DetailsCardService","MediaVideo","Timeline","MediaCarousel","SocialSharing","TestimonialMultipleMedia","TestimonialMedia","WizardTraining","DownloadSingle","AutoDownload","MediaAndCopy","AudioPlayer","FunFactsContainer","FunFactItem","Partners","ItineraryFoodBreak","TravelDeals","CuratorSection","BottomNavigation","ItineraryBottomNavigation","TimelineNavigation","UserGeneratedContent","CuratorMatcher","MediaImage360","ProfileCards","GeneralCardIcon","GeneralCardIconMultiple","GeneralCardImage","GeneralCardImageMultiple","scrollEvent","undefined","canUseDOM","deviceType","clientWidth","setTimeout","bodyHeightOnLoad","clientHeight","map","isHaveStructedData","createStructedData","poiLength","total_window_height","log","clearTimeout","scrollPercentRounded","scrollPercent","scrollY","innerHeight","Math","round","el","top","offsetTop","left","offsetLeft","width","offsetWidth","height","offsetHeight","offsetParent","pageYOffset","pageXOffset","innerWidth","isInViewport","querySelector","addEventListener","removeEventListener","listOfPossibleTypes","itemsForItemList","filter","dataSource","index","position","classList","add","remove","useAppStateContext","theme","themePrimary","themePrimaryActive","themeGreyscale","fontVariable","languageName","isDubaiFont","cssVars","shadowDOM","variables","getColorByTheme","Fragment","Helmet","darkMode","src","imageSrc","queryStr","clearedQueryStr","join","removeImageResolution","injectImageResolution","alternateUrls","alternateUrl","lang","hrefLang","getAlternateUrls","getXDefault","type","Placeholder","rendering","r","scriptContent","dangerouslySetInnerHTML","__html","renderArticleListSchema","items","StructuredData","createStructuredItem","question","answer","acceptedAnswer","text","mainEntity","arguments","LayoutFactory","routeData","routeError","MainContainer","sitecoreContextData","NavBarContainer","_useAppStateContext","actions","navbar","dictionary","dictionaryVenues","commonDictionary","activeLanguage","languageCode","analytics","breadcrumbAnalytics","searchAnalytics","mainNav","removeVenueFromShortlistAnalytics","shareYourShortlistAnalytics","requestProposalAnalytics","yourShortlistedBottomAnalytics","yourShortlistedTopAnalytics","interactionWithVenueRPFormAnalytics","mainNavItems","primaryBrandLogo","primaryBrandLogoLink","secondaryBrandLogo","secondaryBrandLogoLink","accountLinks","menuLinks","venueShortlistVisible","setVenueShortlistVisible","Function","venueShortlists","transparentNavigation","accessibilitySettings","targetItem","selectedContrastValue","selectedFontSize","readSpeakerScriptPath","process","onContrastOptionSelected","option","changeContrast","onFontSizeSelected","fontSize","changeFontSize","languageSelector","currentPath","routePath","topNav","accessibilitySettingsTitle","globalLinks","activeLanguageName","breadcrumb","mobileLabel","search","login","NavigationBar","Tracker","getLogger","sitecoreContext","isTrackerInitialized","setIsTrackerInitialized","useSitecoreTracker","clientSideRouting","onInitialized","logger","scripts","optimize","doTracking","source","debug","CloseIcon","xmlns","fill","stroke","d","FooterContainer","loadable","setDarkMode","isDarkModeForThisPage","message","Date","toISOString","Layout","isPersonalised","appLocation","useLocation","isEmptyLayout","mainHeight","setMainHeight","alertBanner","covidHeaderAnalytics","showAlertBanner","setShowAlertBanner","isInIframe","setIsInIframe","_React$useState7","_React$useState8","currentRoute","setCurrentRoute","ctx","useContext","UniformContext","btnLabel","getGlobalDictionaryTerm","c3","gdpr","getCookieValues","consent","current_country","setPersonalisation","personalisation","self","LocalStorageDarkModeValue","DarkModeJssParamValue","_step","_iterator","_createForOfIteratorHelper","s","n","done","_component$params","innerKey","_step2","innerComponents","_iterator2","_innerComponent$param","err","e","f","getDarkModeSwitcherShow","SitecorePersonalizationContextProvider","contextData","personalizationMode","sitecoreSiteName","config","jssAppName","sitecoreApiKey","rtl","SkipContentButtons","className","onClick","tealiumClickFunc","aria-label","tabIndex","style","minHeight","Switch","routePattern","Route","ScrollToTop","offset","HappinessMeterWidget","formUrl","getCountryFromContext","_sitecoreContext$head","_sitecoreContext$head2","country_code","edgescape","headers","akamai","countryArchetypeCondition","resolveCountry","getValues","mappings","resolveListPersonalization","intents","targetItems","identifier","handler","country","archetypeConditions","children","mapping","tags","tag","_tag$name","condition","_regeneratorRuntime","t","Object","prototype","o","defineProperty","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","call","h","y","GeneratorFunction","GeneratorFunctionPrototype","p","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","resolve","__await","callInvokeWithMethodAndArg","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","catch","delegateYield","buildTagField","field","score","fieldFilter","loadCategoryAlgoliaResults","matchedCategories","matchedCount","queryPieces","category","fallbackCondition","algoliasearch","initIndex","sumOrFiltersScores","getRankingInfo","facetFilters","_toConsumableArray","response","hits","sort","b","_rankingInfo","filters","MTwo","memo","_useState","_useState2","results","setResults","_fields$data","datasource","contextItem","conditions","allValues","Array","isArray","conditionValues","_asyncToGenerator","_callee","_context","refreshTracking","_usePersonalizedList","usePersonalizedList","list","weight","rule","matches","find","personalizedList","scoredResult","set","AccordionFAQ","AccordionGeneric","AccordionSteps","GeneralCardCompleteRound","GeneralCardIconCards","GeneralCardImageCards","RichText","OfferAndDeal","TabsHorizontal","StickyFooter","OfferAndDealDetails","OffersAndDealsTopPicks","HighlightBanner","SurpriseWizard","CategoryTiles","TabsCarouselComponentListing","WizardCategories","NewsPRs","SectionIntro","CategoriesChildren","CategoriesSiblings","Tabs","MultipleQuoteTestimonial","CuratorHeader","HeaderArticle1","HeaderCarousel","HeaderGenericPrimaryLeisure","HeaderGenericSecondary","HeaderGenericTertiary","HeaderListingPage","HeaderListingPagePersonalizable","HeaderMedia","WhatsonHeader","InsightsHeader","ItineraryCoverHeader","ItineraryDayViewHeader","PersonalizablePrimaryHeader","POIHeader","TimelineNavigationCompact","AnnouncementBanner","AnchorItem","AnchorList","Loader","CardMultiple","CodeSnippet","CommonPageContainer","GenericPageContainer","DynamicPopup","EventsWidget","HeaderForActivationPage","IdentifyTravelers","ListingServicesHeader","DeleteAccount","MainText","ManagedWidget","MultifunctionalCards","PopularCuisines","RedirectToReturnUrl","RestaurantsHeadingAndContentBlock","RichTextBubble","ScrollToBlock","SearchRestaurants","SurpriseMeForm","UnbelievableSummerDeals","EsiWhen","EsiChoose","EsiInclude","EsiOtherwise","EsiNullComponent","EsiForEach","EsiAssign","EsiText","EsiScript","EsiNoOutput","nonPersonalizableComponents","allowed","Personalizer","getPersonalizer","getPersonalizedProps","componentFactory","has","doNotPersonalize","RouteDataManager","resolvedRoute","resolvedLanguage","routerContext","resolveRouterRoute","__RouterContext","routeParams","sitecoreRoute","fromSSR","clearSSRFlag","fetchRoute","ComponentFactoryContextProvider","createContext","ComponentFactoryReactContext","Provider","scrollTo","AppRoot","Router","isShowCaptchaProvider","setIsShowCaptchaProvider","initializeAccessibilitySettings","contrast","pageEditing","volume","identityPath","configuration","globalApi","clientId","assign","videosList","changeThemeFunction","fetchUserSettings","fetchVideosList","getLikes","videoIds","setLike","videoId","setVideoTimestamp","timestamp","setVideoVolumeFunction","captchaKey","DtcmUiComponentsSitecoreContext","GoogleReCaptchaProvider","reCaptchaKey","container","parameters","badge","initialState","ssrRawJson","ssrState","matchedRoute","resolveRoutePath","resolveLanguageFromContextData","defaultLanguage","defaultLanguageName","resolveLanguageFromConfig","resolveLanguage","resolveAccessibilitySettings","userSettings","resolveUserSettings","isUserLoggedIn","navbarData","footer","downloadBox","newsletterForm","footerWeatherWidget","accessWidget","resolveInitialAppState","rootElement","ReactDOM","hydrate","render","AppStateProvider","routerProps","BrowserRouter","renderApp","dataFetcher","requestOptions","requestProps","fetch","status","statusText","json","reducer","state","action","routeDataLoading","payload","dispatch","formattedRoute","startsWith","ensureLeadingSlash","fetchOptions","layoutServiceConfig","host","sitecoreApiHost","querystringParams","sc_lang","sc_apikey","fetcher","dataApi","fetchRouteData","getRouteData","sitecoreData","sitecore","currentState","AppStateContext","reducers","routeStateReducer","accessibilityStateReducer","userSettingsStateReducer","reduce","_withDispatchLog","useReducerResult","getState","withDispatchLog","useReducer","initState","_withDispatchLog2","actionResult","createAsyncCapableActions","likeVideoFunction","setContrast","setFontSize","fontSizeClasses","_classList","storageManager","getContrast","defaultContrast","getFontSize","defaultFontSize","getItem","setItem","localStorage","obj","propPath","defaultValue","getPropertyByPath","userSettingsFetcher","requestURL","cookieToken","getUserCookie","myHeaders","Headers","append","parsedCookie","cookie","Cookies","like","itemResponse","findIndex","itemVideoList","redirect","res","videos","videoList","getVideosList","element","currentVideoIndex","setVideosList","videoLikeValue","likes","parseInt","settings","setVolume","getDarkMode","Number","getVolume"],"mappings":"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","file":"static/js/main.6f2c568f.chunk.js","sourcesContent":["/* eslint-disable */\n// Do not edit this file, it is auto-generated at build time!\n// See scripts/bootstrap.js to modify the generation of this file.\nmodule.exports = {\n \"sitecoreApiKey\": \"{71FEFFB9-6CAA-4009-9F5C-EEAA63F3A94C}\",\n \"sitecoreApiHost\": \"\",\n \"jssAppName\": \"Leisure\",\n \"defaultLanguage\": \"en\",\n \"defaultLanguageName\": \"English\",\n \"defaultFontSize\": \"z100\",\n \"defaultContrast\": \"theme1\"\n};","import { matchPath, match } from 'react-router-dom';\r\n\r\n// support languages in the URL prefix\r\n// e.g. /fr-FR/path, or /en/path, or /path\r\nexport const routePatterns = [\r\n '/:lang([a-z]{2}-[A-Z]{2})/:sitecoreRoute*',\r\n '/:lang([a-z]{2})/:sitecoreRoute*',\r\n '/:sitecoreRoute*',\r\n];\r\n\r\nexport interface RouteParams {\r\n sitecoreRoute?: string;\r\n lang?: string;\r\n}\r\n\r\n// use react-router-dom to find the route matching the incoming URL\r\n// then return its match params\r\n// we are using .some() as a way to loop with a short circuit (so that we stop evaluating route patterns after the first match)\r\nexport const matchRoute = (route: string): match | null => {\r\n if (!route) {\r\n return null;\r\n }\r\n\r\n let result = null;\r\n\r\n routePatterns.some((pattern) => {\r\n const match = matchPath(route, { path: pattern });\r\n if (match && match.params) {\r\n result = match;\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n return result;\r\n};\r\n","import React from 'react';\r\n\r\nexport function Error({ error = {}, errorMessage = 'An error occurred: ' }) {\r\n return
{`${errorMessage}${error.toString()}`}
;\r\n}\r\n","import React from 'react';\r\nimport { SystemMessageBanner } from '@dtcm/ui-components';\r\n\r\nconst NotFoundContent: any = {\r\n en: {\r\n fields: {\r\n title: {\r\n value: 'Sorry, we couldn’t find that page',\r\n },\r\n description: {\r\n value: 'Please recheck the URL or return to the homepage.',\r\n },\r\n ctaLabel: {\r\n value: 'Return to home page',\r\n },\r\n ctaLink: {\r\n value: {\r\n href: '/',\r\n anchor: '',\r\n linktype: 'internal',\r\n class: '',\r\n title: '',\r\n querystring: '',\r\n id: '{A98A98BD-AF22-5239-A16E-DEEF268ED6A4}',\r\n },\r\n },\r\n colourTheme: {\r\n id: '3f7e5570-cd7e-46da-94e7-d9267e7791d1',\r\n url: '/SiteSettings/Theme/Colors/theme-1',\r\n fields: {\r\n backgroundColor: {\r\n value: '#0067b9',\r\n },\r\n themeName: {\r\n value: 'theme-1',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ar: {\r\n fields: {\r\n title: {\r\n value: 'عذراً، الصفحة التي تُحاول الوصول إليها غير مُتاحة حاليّاً',\r\n },\r\n description: {\r\n value: 'الرجاء التحقّق من الرابط أو العودة إلى الصفحة الرئيسيّة',\r\n },\r\n ctaLabel: {\r\n value: 'العوده للصفحة الرئيسية',\r\n },\r\n ctaLink: {\r\n value: {\r\n href: '/',\r\n anchor: '',\r\n linktype: 'internal',\r\n class: '',\r\n title: '',\r\n querystring: '',\r\n id: '{A98A98BD-AF22-5239-A16E-DEEF268ED6A4}',\r\n },\r\n },\r\n colourTheme: {\r\n id: '3f7e5570-cd7e-46da-94e7-d9267e7791d1',\r\n url: '/SiteSettings/Theme/Colors/theme-1',\r\n fields: {\r\n backgroundColor: {\r\n value: '#0067b9',\r\n },\r\n themeName: {\r\n value: 'theme-1',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport interface NotFoundProps {\r\n context: {\r\n language: string;\r\n };\r\n}\r\n\r\nexport const NotFound: React.FunctionComponent = ({ context }) => {\r\n const langauge = context && context.language ? context.language : 'en';\r\n const props = NotFoundContent[langauge];\r\n return ;\r\n};\r\n","import { get } from '../../lib/getPropertyByPath';\r\nimport React from 'react';\r\n\r\nexport const preloadImages = (rootRoute: any) => {\r\n // preload header images go within the first two components usually\r\n const route = rootRoute.placeholders['leisure-root'].slice(0, 5);\r\n\r\n function getComponents(object: Record, searchKey: string, value: string | number): object[] {\r\n let objects: object[] = [];\r\n\r\n for (let key in object) {\r\n if (!object.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n\r\n if (typeof object[key] === 'object') {\r\n objects = objects.concat(getComponents(object[key], searchKey, value));\r\n } else if (key === searchKey && object[key] === value || key === searchKey && value === '') {\r\n objects.push(object);\r\n }\r\n }\r\n\r\n return objects;\r\n }\r\n\r\n const links: any[] = [];\r\n\r\n const images = [\r\n [\r\n 'PersonalizablePrimaryHeader',\r\n (component: object) => get(\r\n component,\r\n 'fields.data.item.personalizableImage.jss.value.src',\r\n get(component, 'fields.data.item.fallbackImage.jss.value.src')\r\n )\r\n ],\r\n [\r\n 'HeaderMedia',\r\n (component: object) => get(component, 'fields.data.item.image.jss.value.src')\r\n ],\r\n [\r\n 'HeaderCarousel',\r\n (component: object) => get(component, 'fields.data.item.children.0.image.jss.value.src')\r\n ]\r\n ];\r\n\r\n images.forEach((item: any) => {\r\n const [componentName, getImage] = item;\r\n const components = getComponents(route, 'componentName', componentName);\r\n\r\n if (!components[0]) {\r\n return;\r\n }\r\n\r\n // preload only for the first screen\r\n const imgSrc = getImage(components[0]);\r\n\r\n if (imgSrc) {\r\n const HeaderMediaTSXSizes = {\r\n mobile: '&cw=397&ch=397',\r\n desktop: '&cw=1556&ch=690'\r\n };\r\n\r\n links.push(...[\r\n ,\r\n \r\n ]);\r\n } else {\r\n console.info(`image is not found for ${componentName} component`);\r\n }\r\n });\r\n\r\n return links;\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\r\nimport Helmet from 'react-helmet';\r\nimport { Placeholder } from '@sitecore-jss/sitecore-jss-react';\r\nimport { get, canUseDOM } from '../../lib/getPropertyByPath';\r\nimport { useAppStateContext } from '../../lib/AppStateProvider';\r\nimport Hjson from 'hjson';\r\nimport cssVars from 'css-vars-ponyfill';\r\nimport { getLatestUserCookie } from '@dtcm/ui-components/dist/components/Login/user_session';\r\nimport { fetchData } from '@dtcm/ui-components/dist/utils/fetchData';\r\nimport { getColorByTheme } from '@dtcm/ui-components/dist/utils/index';\r\nimport { SHA256 } from '@dtcm/ui-components/dist/utils/sha256';\r\nimport { preloadImages } from './PreloadImages';\r\n\r\nexport interface MainContainerProps extends RouteComponentProps {\r\n context: {\r\n origin: string;\r\n language: string;\r\n tealium: {\r\n originUrl: string;\r\n environment: string;\r\n };\r\n canonical: string;\r\n };\r\n route: {\r\n name: string;\r\n itemId: string;\r\n templateName: string;\r\n fields: {\r\n browserTitle: {\r\n value: string;\r\n };\r\n };\r\n };\r\n}\r\nconst isInViewport = (el: any) => {\r\n if (!el) {\r\n return false;\r\n }\r\n var top = el.offsetTop;\r\n var left = el.offsetLeft;\r\n var width = el.offsetWidth;\r\n var height = el.offsetHeight;\r\n\r\n while (el.offsetParent) {\r\n el = el.offsetParent;\r\n top += el.offsetTop;\r\n left += el.offsetLeft;\r\n }\r\n\r\n return (\r\n top < window.pageYOffset + window.innerHeight &&\r\n left < window.pageXOffset + window.innerWidth &&\r\n top + height > window.pageYOffset &&\r\n left + width > window.pageXOffset\r\n );\r\n};\r\n\r\nconst resolvePageTitle = (route: any) => {\r\n let pageTitle = get(route, 'fields.browserTitle.value');\r\n if (!pageTitle || pageTitle === '$name') {\r\n pageTitle = get(route, 'fields.Title.value');\r\n }\r\n return pageTitle;\r\n};\r\n\r\nconst resolveMetaDescription = (route: any) => {\r\n let desc = get(route, 'fields.metaDescription.value');\r\n if (!desc) {\r\n desc = get(route, 'fields.Intro Text.value');\r\n }\r\n return desc;\r\n};\r\nconst resolveMetaImage = (route: any) => {\r\n let desc = get(route, 'fields.Fallback image.value.src', '');\r\n\r\n return desc;\r\n};\r\n\r\nconst getOriginUrl = (context: any) => {\r\n let origin = get(context, 'origin');\r\n if (origin.endsWith('/')) {\r\n origin += '/';\r\n }\r\n return origin;\r\n};\r\n\r\n/*const resolveCanonicalUrl = (context: any, location: any) => {\r\n const path = location && location.pathname ? location.pathname : '/';\r\n return `${getOriginUrl(context)}${path}`;\r\n};\r\n*/\r\nconst renderProperties = (prefix: string, queryString: string) => {\r\n if (!queryString) {\r\n return null;\r\n }\r\n if (!prefix) {\r\n return null;\r\n }\r\n const properties = [];\r\n const parts = queryString.split('&');\r\n for (let i = 0; i < parts.length; i++) {\r\n const pair = parts[i].split('=');\r\n properties.push(\r\n \r\n );\r\n }\r\n\r\n return properties;\r\n};\r\n\r\nconst getAlternateUrls = (context: any) => {\r\n const alternateUrls = get(context, 'alternateUrls');\r\n if (!alternateUrls) {\r\n return null;\r\n }\r\n const alternateUrlTags = alternateUrls.map((alternateUrl: any) => (\r\n \r\n ));\r\n // alternateUrlTags.push(\r\n // \r\n // );\r\n return alternateUrlTags;\r\n};\r\n\r\nconst getXDefault = (context: any) => {\r\n const alternateUrls = get(context, 'alternateUrls');\r\n if (!alternateUrls) {\r\n return null;\r\n }\r\n const alternateUrlTags = alternateUrls.map((alternateUrl: any) => {\r\n if (alternateUrl.lang === 'en') {\r\n return (\r\n \r\n );\r\n } else {\r\n return '';\r\n }\r\n });\r\n\r\n return alternateUrlTags;\r\n};\r\n\r\nconst MainContainer: React.FunctionComponent = ({ route, location, context }) => {\r\n const pageTitle = resolvePageTitle(route);\r\n const pageDescription = resolveMetaDescription(route);\r\n const pageImage = context.origin + resolveMetaImage(route).split('?')[0];\r\n const pageUrl = get(context, 'canonical');\r\n const ogTitle = get(route, 'fields.og-title.value');\r\n const ogDescription = get(route, 'fields.og-description.value');\r\n const ogImage = get(route, 'fields.og-image.value.src');\r\n const twitterTitle = get(route, 'fields.twitter-title.value');\r\n const twitterDescription = get(route, 'fields.twitter-description.value');\r\n const [firstLoad, setFirstLoad] = React.useState(true);\r\n const [articleListSchema, setArticleListSchema] = React.useState('');\r\n const [FAQStructuredData, setFAQStructuredData] = React.useState();\r\n\r\n const { itemId, templateName } = route;\r\n const { language, tealium } = context;\r\n const browserLanguage = typeof navigator !== 'undefined' ? navigator.language : '';\r\n\r\n const utagsData = get(context, 'utags.script', '');\r\n const utagsDataString = utagsData.split('utag_data = ')[1];\r\n\r\n const utagsDataObj = Hjson.parse(utagsDataString);\r\n\r\n const utag_data = {\r\n ...utagsDataObj,\r\n page_id: itemId,\r\n page_name: templateName,\r\n page_language: language,\r\n template: templateName,\r\n pillar: get(route, 'fields.pillar.value'),\r\n content_type: get(route, 'fields.contentType.value'),\r\n persona: get(route, 'fields.persona.value'),\r\n page_location: pageUrl,\r\n page_title: pageTitle,\r\n page_path: location.pathname,\r\n page_browser_language: browserLanguage,\r\n session_country: get(context, 'utags.script', '').includes('session_country')\r\n ? get(context, 'utags.script', '')\r\n .split('session_country:')[1]\r\n .replace(/[\\W_]+/g, ' ')\r\n .trim()\r\n : '',\r\n session_country_code: get(context, 'utags.script', '').includes('session_country_code')\r\n ? get(context, 'utags.script', '')\r\n .split('session_country_code:')[1]\r\n .split(',')[0]\r\n .replace(/[\\W_]+/g, ' ')\r\n .trim()\r\n : '',\r\n };\r\n if (!tealium) {\r\n console.warn('tealium settings are not provided');\r\n }\r\n\r\n useEffect(() => {\r\n const wind = window as any;\r\n if (wind) {\r\n wind.utag_data = {\r\n ...wind.utag_data,\r\n ...utag_data,\r\n };\r\n }\r\n // if cust_id absent in global varible\r\n if (!get(wind, 'utag_data.cust_id')) {\r\n const utag_data = document.getElementById('utag_data');\r\n if (utag_data && utag_data.innerHTML) {\r\n const startIndex = utag_data.innerHTML.indexOf('{');\r\n const data = Hjson.parse(utag_data.innerHTML.slice(startIndex));\r\n // if cust_id exist in html but absent in global variable - just set it, otherwise - get from cookie\r\n if (data.cust_id) {\r\n wind.utag_data.cust_id = data.cust_id;\r\n } else {\r\n getLatestUserCookie().then((userCookie: any) => {\r\n if (userCookie.access_token) {\r\n const apiGlobal =\r\n get(appState, 'sitecoreContextData.configuration.globalApi.apiGlobal') ||\r\n 'https://apiqa.testvisitdubai.com';\r\n fetchData({\r\n path: `${apiGlobal}/graphql/user`,\r\n options: {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n query: `{ userProfile { email } }`,\r\n }),\r\n },\r\n authToken: userCookie.access_token,\r\n }).then((data: any) => {\r\n const { email: ddd } = data.data.userProfile;\r\n const encrEmail = SHA256(ddd);\r\n if (wind && wind.utag_data) {\r\n wind.utag_data.cust_id = encrEmail;\r\n }\r\n const utag_data = document.getElementById('utag_data');\r\n if (utag_data && utag_data.innerHTML) {\r\n const startIndex = utag_data.innerHTML.indexOf('{');\r\n const data = Hjson.parse(utag_data.innerHTML.slice(startIndex));\r\n data.cust_id = encrEmail;\r\n utag_data.innerHTML = `var utag_data = ${JSON.stringify(data)}`;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }, [route.name]);\r\n\r\n useEffect(() => {\r\n const wind = window as any;\r\n const utag = wind.utag;\r\n\r\n if (wind && utag) {\r\n utag.data = {\r\n ...utag.data,\r\n ...utag_data,\r\n };\r\n wind.utag_data = {\r\n ...wind.utag_data,\r\n ...utag_data,\r\n };\r\n\r\n wind.utag.utag_cfg_ovrd = wind.utag.utag_cfg_ovrd || {}; // Make sure we don't kill a previous decleration of the object\r\n wind.utag.utag_cfg_ovrd.noview = true;\r\n if (!firstLoad) {\r\n utag.view(wind.utag_data);\r\n } else {\r\n setFirstLoad(false);\r\n }\r\n }\r\n }, [route.name]);\r\n\r\n useEffect(() => {\r\n const moduels = get(route, 'placeholders.leisure-root', []);\r\n let scrolledto25 = false;\r\n let scrollTimer: any = 0;\r\n let scrollTimer2: any = 0;\r\n let timer: any = 0;\r\n\r\n let timerLogged = false;\r\n let timerLogged2 = false;\r\n let scrolledto50 = false;\r\n let scrolledto75 = false;\r\n let scrolledto100 = false;\r\n\r\n let timer20Finsihed = false;\r\n let timer50Finsihed = false;\r\n const desktopHeights: any = {\r\n NeighborhoodsMap: {\r\n desktop: 1150,\r\n mobile: 850,\r\n },\r\n Map: {\r\n desktop: 790,\r\n mobile: 709,\r\n },\r\n Curators: {\r\n desktop: 810,\r\n mobile: 780,\r\n },\r\n Itineraries: {\r\n desktop: 610,\r\n mobile: 811,\r\n },\r\n ContactCard: {\r\n desktop: 740,\r\n mobile: 991,\r\n },\r\n VisaRequirementsWizard: {\r\n desktop: 260,\r\n mobile: 441,\r\n },\r\n EditableListiclePOIs: {\r\n desktop: 1050,\r\n mobile: 798,\r\n },\r\n EditableListicleEvents: {\r\n desktop: 1050,\r\n mobile: 611,\r\n },\r\n ListiclePOIs: {\r\n desktop: 1050,\r\n mobile: 670,\r\n },\r\n ListicleEvents: {\r\n desktop: 1050,\r\n mobile: 611,\r\n },\r\n ListicleMedia: {\r\n desktop: 950,\r\n mobile: 652,\r\n },\r\n ItineraryOverview: {\r\n desktop: 450,\r\n mobile: 585,\r\n },\r\n Tags: {\r\n desktop: 140,\r\n mobile: 178,\r\n },\r\n CookiePolicy: {\r\n desktop: 120,\r\n mobile: 250,\r\n },\r\n TestimonialQuote: {\r\n desktop: 400,\r\n mobile: 468,\r\n },\r\n PracticalInformation: {\r\n desktop: 780,\r\n mobile: 679,\r\n },\r\n MediaGrid: {\r\n desktop: 1000,\r\n mobile: 2040,\r\n },\r\n Footer: {\r\n desktop: 600,\r\n mobile: 1050,\r\n },\r\n CuratorItineraries: {\r\n desktop: 684,\r\n mobile: 816,\r\n },\r\n CuratorPOIs: {\r\n desktop: 681,\r\n mobile: 770,\r\n },\r\n CuratorEvents: {\r\n desktop: 450,\r\n mobile: 604,\r\n },\r\n DetailsCardService: {\r\n desktop: 369,\r\n mobile: 585,\r\n },\r\n MediaVideo: {\r\n desktop: 740,\r\n mobile: 350,\r\n },\r\n\r\n Timeline: {\r\n desktop: 763,\r\n mobile: 587,\r\n },\r\n MediaCarousel: {\r\n desktop: 795,\r\n mobile: 380,\r\n },\r\n SocialSharing: {\r\n desktop: 126,\r\n mobile: 146,\r\n },\r\n TestimonialMultipleMedia: {\r\n desktop: 414,\r\n mobile: 663,\r\n },\r\n TestimonialMedia: {\r\n desktop: 414,\r\n mobile: 663,\r\n },\r\n WizardTraining: {\r\n desktop: 654,\r\n mobile: 562,\r\n },\r\n DownloadSingle: {\r\n desktop: 242,\r\n mobile: 231,\r\n },\r\n AutoDownload: {\r\n desktop: 104,\r\n mobile: 104,\r\n },\r\n\r\n MediaAndCopy: {\r\n desktop: 456,\r\n mobile: 677,\r\n },\r\n\r\n AudioPlayer: {\r\n desktop: 136,\r\n mobile: 136,\r\n },\r\n FunFactsContainer: {\r\n desktop: 342,\r\n mobile: 507,\r\n },\r\n FunFactItem: {\r\n desktop: 342,\r\n mobile: 507,\r\n },\r\n Partners: {\r\n desktop: 270,\r\n mobile: 273,\r\n },\r\n ItineraryFoodBreak: {\r\n desktop: 360,\r\n mobile: 427,\r\n },\r\n TravelDeals: {\r\n desktop: 590,\r\n mobile: 894,\r\n },\r\n CuratorSection: {\r\n desktop: 1130,\r\n mobile: 1180,\r\n },\r\n BottomNavigation: {\r\n desktop: 224,\r\n mobile: 288,\r\n },\r\n ItineraryBottomNavigation: {\r\n desktop: 224,\r\n mobile: 288,\r\n },\r\n TimelineNavigation: {\r\n desktop: 542,\r\n mobile: 582,\r\n },\r\n UserGeneratedContent: {\r\n desktop: 358,\r\n mobile: 358,\r\n },\r\n CuratorMatcher: {\r\n desktop: 715,\r\n mobile: 743,\r\n },\r\n\r\n MediaImage360: {\r\n desktop: 780,\r\n mobile: 347,\r\n },\r\n\r\n ProfileCards: {\r\n desktop: 786,\r\n mobile: 766,\r\n },\r\n GeneralCardIcon: {\r\n desktop: 335,\r\n mobile: 315,\r\n },\r\n GeneralCardIconMultiple: {\r\n desktop: 494,\r\n mobile: 365,\r\n },\r\n GeneralCardImage: {\r\n desktop: 554,\r\n mobile: 571,\r\n },\r\n GeneralCardImageMultiple: {\r\n desktop: 738,\r\n mobile: 751,\r\n },\r\n };\r\n let scrollEvent: any = undefined;\r\n\r\n if (canUseDOM) {\r\n const deviceType = document.body.clientWidth <= 767 ? 'mobile' : 'desktop';\r\n timer = setTimeout(() => {\r\n let bodyHeightOnLoad = document.body.clientHeight + desktopHeights.Footer[deviceType];\r\n moduels.map((module: any) => {\r\n if (isHaveStructedData(module) && module.componentName === 'PracticalInformation') {\r\n setFAQStructuredData(createStructedData(module));\r\n }\r\n\r\n if (moduels.length === 1) {\r\n bodyHeightOnLoad = document.body.clientHeight;\r\n }\r\n if (module.componentName === 'ItineraryPOIsOverview') {\r\n const poiLength = get(module, 'fields.data.item.pois.values.length');\r\n bodyHeightOnLoad += desktopHeights.ListiclePOIs[deviceType] * poiLength;\r\n }\r\n\r\n if (desktopHeights[module.componentName]) {\r\n bodyHeightOnLoad += desktopHeights[module.componentName][deviceType];\r\n }\r\n });\r\n const wind = window as any;\r\n if (wind) {\r\n wind.utag_data = {\r\n ...wind.utag_data,\r\n ...utag_data,\r\n total_window_height: `${bodyHeightOnLoad}`,\r\n };\r\n }\r\n console.log('bodyHeightOnLoad', bodyHeightOnLoad);\r\n clearTimeout(scrollTimer);\r\n clearTimeout(scrollTimer2);\r\n let scrollPercentRounded = 0;\r\n\r\n scrollEvent = () => {\r\n let scrollTop = window.scrollY;\r\n let docHeight = bodyHeightOnLoad;\r\n let winHeight = window.innerHeight;\r\n let scrollPercent = scrollTop / (docHeight - winHeight);\r\n scrollPercentRounded = Math.round(scrollPercent * 100);\r\n\r\n if (scrollPercentRounded >= 25) {\r\n if (!scrolledto25) {\r\n scrolledto25 = true;\r\n\r\n if (get(window, 'SC_Scoll_Function')) {\r\n get(window, 'SC_Scoll_Function')('25');\r\n }\r\n if (timer20Finsihed) {\r\n if (get(window, 'SC_Scoll_Time_Function1')) {\r\n get(window, 'SC_Scoll_Time_Function1')(scrollPercentRounded, '20');\r\n }\r\n }\r\n }\r\n }\r\n if (scrollPercentRounded >= 50) {\r\n if (!scrolledto50) {\r\n scrolledto50 = true;\r\n\r\n if (get(window, 'SC_Scoll_Function')) {\r\n get(window, 'SC_Scoll_Function')('50');\r\n }\r\n\r\n if (timer50Finsihed) {\r\n if (get(window, 'SC_Scoll_Time_Function1')) {\r\n get(window, 'SC_Scoll_Time_Function1')(\r\n scrollPercentRounded > 100 ? 100 : scrollPercentRounded,\r\n '30'\r\n );\r\n }\r\n }\r\n\r\n // clearTimeout(scrollTimer);\r\n }\r\n }\r\n if (scrollPercentRounded >= 75) {\r\n if (!scrolledto75) {\r\n scrolledto75 = true;\r\n\r\n if (get(window, 'SC_Scoll_Function')) {\r\n get(window, 'SC_Scoll_Function')('75');\r\n }\r\n }\r\n }\r\n\r\n if (isInViewport(document.querySelector('.footer__bottom'))) {\r\n if (!scrolledto100) {\r\n scrolledto100 = true;\r\n\r\n if (get(window, 'SC_Scoll_Function')) {\r\n get(window, 'SC_Scoll_Function')('100');\r\n }\r\n }\r\n }\r\n };\r\n\r\n scrollTimer = setTimeout(() => {\r\n timer20Finsihed = true;\r\n if (!timerLogged) {\r\n if (scrolledto25) {\r\n timer20Finsihed = false;\r\n if (get(window, 'SC_Scoll_Time_Function1')) {\r\n get(window, 'SC_Scoll_Time_Function1')(scrollPercentRounded, '20');\r\n }\r\n\r\n timerLogged = true;\r\n clearTimeout(scrollTimer);\r\n }\r\n } else {\r\n clearTimeout(scrollTimer);\r\n }\r\n }, 20 * 1000);\r\n scrollTimer2 = setTimeout(() => {\r\n timer50Finsihed = true;\r\n if (!timerLogged2) {\r\n if (scrolledto50) {\r\n timer50Finsihed = false;\r\n if (get(window, 'SC_Scoll_Time_Function1')) {\r\n get(window, 'SC_Scoll_Time_Function1')(\r\n scrollPercentRounded > 100 ? 100 : scrollPercentRounded,\r\n '30'\r\n );\r\n }\r\n timerLogged2 = true;\r\n clearTimeout(scrollTimer2);\r\n }\r\n } else {\r\n clearTimeout(scrollTimer2);\r\n }\r\n }, 30 * 1000);\r\n window.addEventListener('scroll', scrollEvent);\r\n }, 3000);\r\n }\r\n return () => {\r\n window.removeEventListener('scroll', scrollEvent);\r\n clearTimeout(timer);\r\n\r\n clearTimeout(scrollTimer);\r\n clearTimeout(scrollTimer2);\r\n };\r\n }, [route.name]);\r\n\r\n useEffect(() => {\r\n if ((route && route.templateName === 'Article') || 'Article Listicle Page') {\r\n const listOfPossibleTypes = [\r\n 'EditableListicleEvents',\r\n 'EditableListiclePOIs',\r\n 'ListicleEvents',\r\n 'ListiclePOIs',\r\n 'ListicleMedia',\r\n ];\r\n const itemsForItemList = get(route, 'placeholders.leisure-root', []).filter(\r\n (item: any) => listOfPossibleTypes.includes(item.componentName) && item.dataSource\r\n );\r\n\r\n if (itemsForItemList.length) {\r\n setArticleListSchema(\r\n JSON.stringify(\r\n itemsForItemList.map((item: any, index: number) => ({\r\n '@type': 'ListItem',\r\n position: index + 1,\r\n name: get(item, 'fields.data.item.title.jss.value'),\r\n }))\r\n )\r\n );\r\n } else {\r\n setArticleListSchema('');\r\n }\r\n }\r\n\r\n return () => {\r\n setArticleListSchema('');\r\n };\r\n }, [route.name]);\r\n\r\n useEffect(() => {\r\n if (canUseDOM) {\r\n if (get(route, 'fields.headTransparent.value')) {\r\n document.body.classList.add('nav--transparent');\r\n } else {\r\n document.body.classList.remove('nav--transparent');\r\n }\r\n }\r\n }, [route.name]);\r\n\r\n const isDubaiFont = () => {\r\n const languageName = get(appState, 'language.languageCode', 'en');\r\n const isDubaiFont = [\r\n 'en',\r\n 'ar',\r\n 'fr',\r\n 'da',\r\n 'de',\r\n 'fi',\r\n 'it',\r\n 'no',\r\n 'pt',\r\n 'es',\r\n 'sv',\r\n ].some((value: string) => value === languageName);\r\n\r\n return isDubaiFont;\r\n };\r\n\r\n const { appState } = useAppStateContext();\r\n\r\n const theme = get(appState, 'sitecoreContextData.themesOfPage') || {};\r\n const themePrimary = get(theme, 'primary') || '';\r\n const themePrimaryActive = get(theme, 'primary_active') || '';\r\n const themeGreyscale = get(theme, 'greyscale.item1') || '';\r\n const fontVariable = isDubaiFont() ? \"'Dubai', 'Arial', sans-serif\" : 'Calibri, sans-serif';\r\n\r\n // #0067B9 --site-color-2\r\n cssVars({\r\n shadowDOM: true,\r\n variables: {\r\n '--site-color': '#035E88',\r\n '--site-color-2': `${themePrimaryActive ? themePrimaryActive : '#004565'}`,\r\n '--main-color': `${themePrimary ? themePrimary : '#035E88'}`,\r\n '--main-color-text': `${getColorByTheme(themePrimary ? themePrimary : '#035E88')}`,\r\n '--main-color--active-2': '#006699',\r\n '--main-color--active': `${themePrimaryActive ? themePrimaryActive : '#004565'}`,\r\n '--greyscale': `${themeGreyscale ? themeGreyscale : '#505050'}`,\r\n '--site-font-family': `${fontVariable}`,\r\n },\r\n });\r\n\r\n const removeImageResolution = (src: string) => {\r\n const queryStr = src.split('?')[1];\r\n const clearedQueryStr = queryStr\r\n ? queryStr\r\n .split('&')\r\n .filter((item) => item.indexOf('h=') != 0 && item.indexOf('w=') != 0)\r\n .join('&')\r\n : '';\r\n\r\n return src.split('?')[0] + '?' + clearedQueryStr;\r\n };\r\n\r\n const injectImageResolution = (src: string, width: string | number, height: string | number): string => {\r\n const imageSrc = removeImageResolution(src);\r\n return `${imageSrc}${imageSrc.match(/\\?/) ? '&' : '?'}cw=${width}&ch=${height}`;\r\n };\r\n\r\n const renderArticleListSchema = () => {\r\n const scriptContent = `{\"@context\": \"https://schema.org\",\"@type\": \"ItemList\",\"itemListElement\": ${\r\n articleListSchema || []\r\n }}`;\r\n return \r\n \r\n {FAQStructuredData ? (\r\n \r\n ) : (\r\n ''\r\n )}\r\n \r\n \r\n \r\n {articleListSchema ? renderArticleListSchema() : null}\r\n \r\n );\r\n};\r\n\r\nexport default withRouter(MainContainer);\r\n\r\nconst isHaveStructedData = (module: any) => {\r\n const items =\r\n get(module, 'fields.data.datasource.faqs') ||\r\n get(module, 'fields.data.item.items.targetItems') ||\r\n get(module, 'fields.data.item.children', []);\r\n return !!items.length;\r\n};\r\n\r\nconst createStructedData = (module: any) => {\r\n const items =\r\n get(module, 'fields.data.datasource.faqs') ||\r\n get(module, 'fields.data.item.items.targetItems') ||\r\n get(module, 'fields.data.item.children', []);\r\n\r\n return StructuredData(\r\n items.map((item: any) =>\r\n createStructuredItem(\r\n get(item, 'title.field.value') || get(item, 'title.jss.value'),\r\n get(item, 'description.field.value') || get(item, 'description.jss.value')\r\n )\r\n )\r\n );\r\n};\r\n\r\nconst createStructuredItem = (question: string, answer: string) => {\r\n return {\r\n '@type': 'Question',\r\n name: question,\r\n acceptedAnswer: {\r\n '@type': 'Answer',\r\n text: answer.replace(/(<([^>]+)>)/gi, ''),\r\n },\r\n };\r\n};\r\n\r\nconst StructuredData = (mainEntity: Array = []) => {\r\n return {\r\n '@context': 'https://schema.org',\r\n '@type': 'FAQPage',\r\n mainEntity: mainEntity,\r\n };\r\n};\r\n","import React from 'react';\r\nimport { useAppStateContext } from '../../lib/AppStateProvider';\r\nimport { Error } from './Error';\r\nimport { NotFound } from './NotFound';\r\nimport MainContainer from './MainContainer';\r\n\r\nexport function LayoutFactory() {\r\n const { appState } = useAppStateContext();\r\n\r\n const { routeData, routeError } = appState;\r\n\r\n if (routeError) {\r\n return ;\r\n }\r\n\r\n if (routeData) {\r\n return ;\r\n }\r\n\r\n // no route data for the current route in Sitecore - show not found component.\r\n // Note: this is client-side only 404 handling. Server-side 404 handling is the responsibility\r\n // of the server being used (i.e. node-headless-ssr-proxy and Sitecore intergrated rendering know how to send 404 status codes).\r\n return ;\r\n}\r\n","import React from 'react';\r\nimport { NavigationBar, NavigationBarProps } from '@dtcm/ui-components';\r\nimport { useAppStateContext } from '../../lib/AppStateProvider';\r\nimport { get } from '../../lib/getPropertyByPath';\r\n\r\nexport const NavBarContainer = () => {\r\n const { appState, actions } = useAppStateContext();\r\n\r\n if (!appState.navbar || get(appState, 'dictionary.viewBag.isEmptyLayout', false)) {\r\n return null;\r\n }\r\n\r\n const dictionary = get(appState, 'navbarData');\r\n const dictionaryVenues = get(appState, 'dictionary.viewBag.navbar.venueFormsDictionary');\r\n const commonDictionary = get(appState, 'dictionary.viewBag.navbar.commonDictionary');\r\n\r\n const activeLanguage = {\r\n languageCode: get(appState, 'language.languageCode'),\r\n languageName: get(appState, 'language.languageName'),\r\n };\r\n\r\n // Map data received from Sitecore to props expected by NavBar component.\r\n // Also provide functions to handle actions triggered within the NavBar.\r\n\r\n const props: NavigationBarProps = {\r\n activeLanguage,\r\n analytics: get(appState, 'analytics'),\r\n breadcrumbAnalytics: get(appState, 'sitecoreContextData.breadcrumbAnalytics'),\r\n searchAnalytics: get(appState, 'sitecoreContextData.searchAnalytics'),\r\n mainNav: {\r\n removeVenueFromShortlistAnalytics: get(appState, 'dictionary.viewBag.navbar.removeVenueFromShortlistAnalytics'),\r\n shareYourShortlistAnalytics: get(appState, 'dictionary.viewBag.navbar.shareYourShortlistAnalytics'),\r\n requestProposalAnalytics: get(appState, 'dictionary.viewBag.navbar.requestProposalAnalytics'),\r\n yourShortlistedBottomAnalytics: get(appState, 'dictionary.viewBag.navbar.yourShortlistedBottomAnalytics'),\r\n yourShortlistedTopAnalytics: get(appState, 'dictionary.viewBag.navbar.yourShortlistedTopAnalytics'),\r\n interactionWithVenueRPFormAnalytics: get(appState, 'dictionary.viewBag.navbar.interactionWithVenueRPFormAnalytics'),\r\n mainNavItems: get(appState, 'navbar.mainNavItems'),\r\n primaryBrandLogo: get(appState, 'navbar.logoImage'),\r\n primaryBrandLogoLink: get(appState, 'navbar.primaryBrandLogoLink'),\r\n secondaryBrandLogo: get(appState, 'navbar.secondLogoImage'),\r\n secondaryBrandLogoLink: get(appState, 'navbar.secondaryBrandLogoLink'),\r\n accountLinks: get(appState, 'navbar.accountLinks'),\r\n menuLinks: get(appState, 'navbar.menuLinks'),\r\n venueShortlistVisible: false,\r\n setVenueShortlistVisible: Function,\r\n venueShortlists: [],\r\n transparentNavigation: get(appState, 'routeData.fields.headTransparent.value'),\r\n },\r\n\r\n dictionary: {\r\n dictionary,\r\n dictionaryVenues,\r\n },\r\n accessibilitySettings: {\r\n targetItem: get(appState, 'navbar.accessibilitySettings.targetItem'),\r\n selectedContrastValue: appState.selectedContrastValue,\r\n selectedFontSize: appState.selectedFontSize,\r\n readSpeakerScriptPath: `${process.env.PUBLIC_URL}/assets/scripts`,\r\n onContrastOptionSelected: (option:any) => actions.changeContrast(option),\r\n onFontSizeSelected: (fontSize: any) => actions.changeFontSize(fontSize),\r\n },\r\n languageSelector: {\r\n targetItem: get(appState, 'navbar.languageSelector.targetItem'),\r\n activeLanguage,\r\n currentPath: appState.routePath,\r\n },\r\n topNav: {\r\n accessibilitySettingsTitle: get(appState, 'navbar.accessibilitySettings.targetItem.title.value', ''),\r\n globalLinks: get(appState, 'navbar.globalLinks'),\r\n activeLanguageName: activeLanguage.languageName,\r\n },\r\n breadcrumb: {\r\n mobileLabel: get(appState, 'navbar.mobileBreadcrumbLabel.value.value'),\r\n },\r\n search: {\r\n targetItem: get(appState, 'navbar.search.targetItem'),\r\n dictionary: commonDictionary\r\n\r\n },\r\n login: {\r\n title: 'Login',\r\n },\r\n transparentNavigation: get(appState, 'routeData.fields.headTransparent.value'),\r\n };\r\n\r\n return ;\r\n};\r\n","\r\nimport React, { useEffect } from 'react';\r\nimport { useAppStateContext } from './lib/AppStateProvider';\r\nimport { useSitecoreTracker } from '@uniformdev/tracking-react';\r\nimport { doTracking } from '@uniformdev/optimize-js';\r\n\r\nexport const Tracker: React.FunctionComponent = (props: any) => {\r\n const { route, getLogger } = props;\r\n const { appState } = useAppStateContext();\r\n const sitecoreContext = appState.sitecoreContextData;\r\n const [isTrackerInitialized, setIsTrackerInitialized] = React.useState(false);\r\n\r\n\r\n useSitecoreTracker(sitecoreContext, {\r\n clientSideRouting: true,\r\n onInitialized: () => {\r\n setIsTrackerInitialized(true);\r\n },\r\n type: 'jss',\r\n logger: getLogger('tracker'),\r\n scripts: {\r\n optimize: `/dist/leisure/uniform.optimize.min.js`,\r\n },\r\n });\r\n useEffect(() => {\r\n const shouldNotTrack =\r\n !route ||\r\n isTrackerInitialized !== true ||\r\n !sitecoreContext ||\r\n route.itemId !== route.itemId;\r\n if (shouldNotTrack) {\r\n return;\r\n }\r\n\r\n doTracking({\r\n source: 'sitecore',\r\n data: sitecoreContext,\r\n debug: true,\r\n });\r\n }, [route, isTrackerInitialized, sitecoreContext]);\r\n return(\r\n null\r\n )\r\n\r\n}\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { Route, Switch, useLocation } from 'react-router-dom';\r\nimport Helmet from 'react-helmet';\r\nimport loadable from 'react-loadable-visibility/loadable-components';\r\nimport { routePatterns } from './lib/routerUtils';\r\nimport { LayoutFactory } from './components/Layouts/LayoutFactory';\r\nimport { useAppStateContext } from './lib/AppStateProvider';\r\nimport { NavBarContainer } from './components/Header/NavBarContainer';\r\nimport { HappinessMeterWidget, ScrollToTop, tealiumClickFunc } from '@dtcm/ui-components';\r\nimport { get } from './lib/getPropertyByPath';\r\nimport config from '../src/temp/config';\r\nimport { UniformContext } from '@uniformdev/react';\r\nimport { Placeholder } from '@sitecore-jss/sitecore-jss-react';\r\nimport { SitecorePersonalizationContextProvider } from '@uniformdev/personalize-react';\r\n//import { doTracking } from '@uniformdev/optimize-js';\r\nimport { Tracker } from './Tracker';\r\nimport {getGlobalDictionaryTerm} from \"@dtcm/ui-components/dist/utils\";\r\nimport {SkipContentButtons} from \"@dtcm/ui-components\";\r\n\r\nconst COOKIES_ENABLED_COUNTRY_CODES =\r\n'DE|AT|BE|HR|CY|CZ|DK|EE|FI|FR|GR|HU|IE|IT|LV|LT|LU|MT|NL|PL|PT|RO|SK|SI|ES|SE|GB|IS|LI|NO|BG';\r\n\r\nconst CloseIcon = () => \r\n \r\n;\r\n\r\n/*const getCookie = (name: string) => {\r\n const value = `; ${document.cookie}`;\r\n const parts = value.split(`; ${name}=`);\r\n // @ts-ignore\r\n return parts && parts.length === 2 && parts.pop().split(';').shift();\r\n}*/\r\nconst FooterContainer: any = loadable(\r\n () => import(/* webpackChunkName: \"FooterContainer\" */ './components/Footer/FooterContainer')\r\n);\r\n\r\n/*\r\n APP LAYOUT\r\n This is where the app's HTML \"shell\" should be defined.\r\n\r\n All routes share this root layout by default,\r\n but components added to inner placeholders are route-specific.\r\n*/\r\nconst setDarkMode = (value: boolean = false, isDarkModeForThisPage: boolean) => {\r\n if (typeof window !== 'undefined')\r\n if (value && isDarkModeForThisPage) {\r\n document.querySelector('body')!.classList.add('dark');\r\n } else {\r\n document.querySelector('body')!.classList.remove('dark');\r\n }\r\n};\r\n\r\nexport interface LayoutProps {\r\n route: {\r\n name: string;\r\n itemId: string;\r\n };\r\n}\r\n\r\nconst Layout: React.FunctionComponent = (props: any) => {\r\n const { route } = props;\r\n const { appState, actions } = useAppStateContext();\r\n\r\n\r\n const sitecoreContext = appState.sitecoreContextData;\r\n sitecoreContext.itemId = get(route, 'itemId');\r\n const languageCode = get(appState, 'language.languageCode', '');\r\n const {isPersonalised} = appState;\r\n const appLocation = useLocation();\r\n const isEmptyLayout = get(appState, 'dictionary.viewBag.isEmptyLayout', false);\r\n // @ts-ignore\r\n const [mainHeight, setMainHeight] = React.useState('600px');\r\n const alertBanner = get(sitecoreContext, 'configuration.alertBanner');\r\n const covidHeaderAnalytics = get(appState, 'dictionary.viewBag.navbar.covidHeaderAnalytics')\r\n\r\n const [showAlertBanner, setShowAlertBanner] = React.useState(true);\r\n const [isInIframe, setIsInIframe] = React.useState(true);\r\n\r\n const [currentRoute, setCurrentRoute] = React.useState();\r\n //const [isTrackerInitialized, setIsTrackerInitialized] = React.useState(false);\r\n const ctx = useContext(UniformContext);\r\n const btnLabel: string = getGlobalDictionaryTerm(sitecoreContext, 'closeAnnouncementBannerLabel') || \"Close announcement banner\";\r\n\r\n useEffect(() => {\r\n if (appLocation.pathname.indexOf('thank-you') > -1) {\r\n setMainHeight('100px');\r\n }\r\n if (appLocation.search.indexOf('debug=true') <= -1) {\r\n // tslint:disable-next-line:no-empty\r\n window['console']['log'] = () => {};\r\n }\r\n }, [appLocation]);\r\n\r\n useEffect(() => {\r\n if (!ctx.logger) {\r\n ctx.logger = getLogger('context');\r\n }\r\n if (typeof window !== 'undefined') {\r\n const wind = window as any;\r\n const c3 = wind.utag && wind.utag.gdpr && wind.utag.gdpr.getCookieValues().c3\r\n const consent = wind.utag && wind.utag.gdpr && wind.utag.gdpr.getCookieValues().consent\r\n if((consent && c3) || (wind.current_country != '' && COOKIES_ENABLED_COUNTRY_CODES.indexOf(wind.current_country) == -1)) {\r\n\r\n actions.setPersonalisation(true)\r\n } else {\r\n actions.setPersonalisation(false)\r\n\r\n }\r\n wind.personalisation = () => {\r\n console.log('SOMEONE CALL PERSONALISATION FROM UTAG')\r\n actions.setPersonalisation(true)\r\n\r\n }\r\n\r\n setIsInIframe(window.self !== window.top);\r\n\r\n }\r\n }, []);\r\n // const DUBAI_PRESENTS_TEMPLATES_LIST = [\r\n // 'Video Details Page',\r\n // 'Video Hub Page',\r\n // 'Episode Details Page',\r\n // 'Videos Listing Page',\r\n // 'Sections Intro Page',\r\n // 'Multiple Days Itinerary Page',\r\n // ];\r\n // const templateName = get(route, 'templateName');\r\n function getDarkModeSwitcherShow(placeholders: any): boolean {\r\n for (let key in placeholders) {\r\n const components = placeholders[key];\r\n for (let component of components) {\r\n if (component.params?.['Dark Mode Switcher Show'] == '1') {\r\n return true;\r\n }\r\n if (component.placeholders) {\r\n for (let innerKey in component.placeholders) {\r\n const innerComponents = component.placeholders[innerKey];\r\n for (let innerComponent of innerComponents) {\r\n if (innerComponent.params?.['Dark Mode Switcher Show'] == '1') {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n\r\n useEffect(() => {\r\n setCurrentRoute(route);\r\n }, [route]);\r\n useEffect(() => {\r\n const LocalStorageDarkModeValue = appState.darkMode;\r\n\r\n const DarkModeJssParamValue =\r\n get(props, \"route.placeholders\") &&\r\n getDarkModeSwitcherShow(get(props, \"route.placeholders\"));\r\n\r\n LocalStorageDarkModeValue\r\n ? setDarkMode(true, DarkModeJssParamValue)\r\n : setDarkMode(false, DarkModeJssParamValue);\r\n }, [route, appState]);\r\n\r\n /*useEffect(() => {\r\n const shouldNotTrack =\r\n !currentRoute ||\r\n isTrackerInitialized !== true ||\r\n !sitecoreContext ||\r\n currentRoute.itemId !== route.itemId;\r\n if (shouldNotTrack) {\r\n return;\r\n }\r\n\r\n doTracking({\r\n source: 'sitecore',\r\n data: sitecoreContext,\r\n debug: true,\r\n });\r\n }, [currentRoute, isTrackerInitialized, sitecoreContext]);*/\r\n\r\n\r\n // TODO: this code conflicts with personalization during rehydration resulting in lost personalized content\r\n // needs further review\r\n\r\n // useEffect(() => {\r\n // setTimeout(() => {\r\n // setMainHeight('0');\r\n // }, 1000);\r\n // }, []);\r\n\r\n return (\r\n \r\n \r\n {/* react-helmet enables setting contents, like title and OG meta tags */}\r\n {isPersonalised ? : null}\r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n\r\n {alertBanner && alertBanner.text && showAlertBanner && !isInIframe ? (\r\n
\r\n
\r\n
\r\n
\r\n {\r\n tealiumClickFunc(covidHeaderAnalytics, window.location.href);\r\n }}\r\n dangerouslySetInnerHTML={{\r\n __html: get(appState, 'sitecoreContextData.configuration.alertBanner.text'),\r\n }}\r\n >
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n ) : null}\r\n \r\n
\r\n \r\n {!isEmptyLayout &&\r\n get(appState, 'sitecoreContextData.configuration.globalAnnouncementBanner.text') && (\r\n
\r\n
\r\n
\r\n
\r\n \r\n )}\r\n \r\n \r\n {routePatterns.map((routePattern) => (\r\n \r\n ))}\r\n \r\n {!isEmptyLayout && }\r\n {languageCode === 'en' && (\r\n \r\n )}\r\n
\r\n \r\n {/*\r\n We need to provide content for the loading placeholder used for the footer. This ensures\r\n that the dynamic loading script triggers for the Footer component. Without any content, it\r\n seems that the IntersectionObserver never intersects with the Footer component and therefore\r\n the dynamic loading script doesn't load the component.\r\n\r\n NOTE: most components will not need content in order for dynamic loading to work. The Footer\r\n seems to be more of an edge case.\r\n */}\r\n \r\n
\r\n\r\n \r\n );\r\n};\r\n\r\nfunction getLogger(name: string) {\r\n return {\r\n debug: (message: string, data: any) => {\r\n console.log(new Date().toISOString() + ` [DEBUG] [${name}] ` + message, data);\r\n },\r\n info: (message: string, data: any) => {\r\n console.log(new Date().toISOString() + ` [INFO] [${name}] ` + message, data);\r\n },\r\n warn: (message: string, data: any) => {\r\n console.log(new Date().toISOString() + ` [WARN] [${name}] ` + message, data);\r\n },\r\n error: (message: string, data: any) => {\r\n console.log(new Date().toISOString() + ` [ERROR] [${name}] ` + message, data);\r\n },\r\n };\r\n}\r\n\r\nexport default Layout;\r\n","export const getCountryFromContext = (sitecoreContext) => {\r\n let country_code;\r\n const edgescape = sitecoreContext?.headers?.akamai?.edgescape;\r\n if (edgescape) {\r\n const segments = edgescape.split(\",\");\r\n segments.forEach((pair) => {\r\n pair = pair.split(\"=\");\r\n switch (pair[0]) {\r\n case \"country_code\":\r\n country_code = pair[1];\r\n break;\r\n default:\r\n }\r\n });\r\n }\r\n return country_code;\r\n};\r\n","import { getCountryFromContext } from \"./getCountryFromContext\";\r\n\r\n// Condition for handling the `country` archetype.\r\nfunction countryArchetypeCondition(sitecoreContext) {\r\n // This should be used to extract the country from the Sitecore context\r\n // that is provided by Akamai.\r\n const resolveCountry = () => {\r\n return getCountryFromContext(sitecoreContext);\r\n };\r\n\r\n // Return matches from the country the user is tagged with.\r\n const getValues = ({ mappings, sitecoreContext }) => {\r\n const country = resolveCountry(sitecoreContext);\r\n return mappings[country] || [];\r\n };\r\n\r\n // Expose a way to retrieve the values from this condition.\r\n return {\r\n getValues,\r\n };\r\n}\r\n\r\n// A collection of all Archetypes we support.\r\nconst archetypeConditions = (sitecoreContext) => {\r\n return {\r\n country: countryArchetypeCondition(sitecoreContext),\r\n };\r\n};\r\n\r\nexport const resolveListPersonalization = (() => {\r\n return (intents, sitecoreContext) => {\r\n // Iterate all of the personalization rules applied\r\n const conditions = intents?.targetItems\r\n .map((i) => {\r\n // The identifier value for this Archetype, this matches the value in the\r\n // `archetypeConditions` object.\r\n const identifier = i.identifier.value;\r\n\r\n // Check if we have a handler\r\n let handler = archetypeConditions(sitecoreContext)[identifier];\r\n\r\n // If not, warn and just return null.\r\n if (!handler) {\r\n console.warn(\r\n `personalization handler for ${identifier} not defined.`\r\n );\r\n return null;\r\n }\r\n\r\n // Extract all of the mappings for this Archetype which is a mapping between a\r\n // string value and a tag.\r\n const mappings = {};\r\n i.children.forEach((mapping) => {\r\n const { value, tags } = mapping;\r\n mappings[value?.value] = tags.targetItems.map(\r\n (tag) => tag?.name?.value\r\n );\r\n });\r\n\r\n // Return the identifier/handler/mappings for this condition\r\n return {\r\n identifier: identifier,\r\n handler,\r\n mappings,\r\n };\r\n })\r\n .filter((condition) => condition); // Filter nulls from unsupported!\r\n\r\n return conditions;\r\n };\r\n})();\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useAppStateContext } from '../lib/AppStateProvider';\r\n\r\nimport { resolveListPersonalization } from '../uniform/personalization/resolveListPersonalization';\r\nimport { algoliaScoredCondition } from '../uniform/personalization/algoliaScoredCondition';\r\nimport { getCountryFromContext } from '../uniform/personalization/getCountryFromContext';\r\n\r\nimport { usePersonalizedList } from '@uniformdev/personalize-react';\r\nimport algoliasearch from 'algoliasearch';\r\n\r\nconst ALGOLIA_APPID = 'V3CV7A7CMC';\r\nconst ALGOLIA_APIKEY = '35a59b61c1577464818fdb267015c3d2';\r\nconst ALGOLIA_INDEXNAME = 'vd_en';\r\n\r\n// Responsible for building a single tag field filter with an\r\n// optional score value.\r\nconst buildTagField = (field, value, score) => {\r\n let fieldFilter = `${field}:${value}`;\r\n\r\n if (score) {\r\n fieldFilter += ``;\r\n }\r\n\r\n return fieldFilter;\r\n};\r\n\r\nconst loadCategoryAlgoliaResults = (matchedCategories) => {\r\n return new Promise((resolve) => {\r\n // The field that contains tags to match against\r\n const tagField = 'tags';\r\n\r\n // How many matches the user has, plus one because the default\r\n // score for Algolia is 1 on a match so boost above that slightly.\r\n const matchedCount = matchedCategories.length + 1;\r\n\r\n // Build pieces that will be passed and OR'ed together by Algolia\r\n const queryPieces = matchedCategories.map((category, index) => {\r\n const filter = buildTagField(tagField, category, matchedCount - index);\r\n return filter;\r\n });\r\n\r\n // Build a fallback condition so we don't filter out anything from queries.\r\n const fallbackCondition = buildTagField(tagField, '-tag');\r\n\r\n // Init the client and index.\r\n const client = algoliasearch(ALGOLIA_APPID, ALGOLIA_APIKEY);\r\n const index = client.initIndex(ALGOLIA_INDEXNAME);\r\n\r\n // Perform a search using the condition\r\n index\r\n .search('', {\r\n sumOrFiltersScores: true, // This tells Algolia to add the filter tag scores together so we get a \"total\" weight\r\n getRankingInfo: true, // Used to sort client side, highest scored item likely will not be at the top.\r\n facetFilters: ['type:Article', [...queryPieces, fallbackCondition]], // Query filters.\r\n })\r\n .then((response) => {\r\n // Extract the results and do a pass of sorting clientside.\r\n const { hits } = response;\r\n hits.sort((a, b) => b._rankingInfo.filters - a._rankingInfo.filters);\r\n resolve(hits);\r\n });\r\n });\r\n};\r\n\r\nconst MTwo = React.memo(function ({ fields, route }) {\r\n // State placeholder for results that should be personalized.\r\n const [results, setResults] = useState([]);\r\n const { appState } = useAppStateContext();\r\n const sitecoreContext = appState?.sitecoreContextData;\r\n\r\n const country_code = getCountryFromContext(sitecoreContext);\r\n\r\n // Extract required fields from the integrated query.\r\n const {\r\n data: {\r\n datasource: { intents },\r\n contextItem,\r\n },\r\n } = fields;\r\n\r\n // Resolve used conditions based on what is selected with the integrated query\r\n const conditions = resolveListPersonalization(intents, sitecoreContext);\r\n\r\n // Holder for all condition values\r\n const allValues = [];\r\n\r\n // Iterate all conditions and determine what the current user is tagged with.\r\n conditions &&\r\n Array.isArray(conditions) &&\r\n conditions.forEach((condition) => {\r\n const { handler, mappings } = condition;\r\n\r\n const conditionValues = handler.getValues({\r\n mappings,\r\n sitecoreContext,\r\n });\r\n\r\n if (conditionValues) {\r\n allValues.push(...conditionValues);\r\n }\r\n });\r\n\r\n // Used to fetch results from Algolia based on the conditions.\r\n useEffect(() => {\r\n (async () => {\r\n const hits = await loadCategoryAlgoliaResults(allValues || []);\r\n setResults(hits);\r\n refreshTracking();\r\n })();\r\n }, []);\r\n\r\n // Personalize the results list from Algolia\r\n const { personalizedList, refreshTracking } = usePersonalizedList({\r\n rendering: contextItem,\r\n route,\r\n list: results,\r\n conditions: [algoliaScoredCondition(allValues)],\r\n });\r\n\r\n return (\r\n <>\r\n

Personalization for {country_code}

\r\n
    \r\n {personalizedList &&\r\n personalizedList.map((scoredResult) => {\r\n const { item } = scoredResult;\r\n return (\r\n
  • \r\n {item.title} (Score: {item._rankingInfo.filters},{' '}\r\n Tags: {item.tags.join(', ')})\r\n
  • \r\n );\r\n })}\r\n
\r\n \r\n );\r\n});\r\n\r\nexport default MTwo;\r\n","export const algoliaScoredCondition = (matchedCategories) => {\r\n return {\r\n weight: 1, // No weighting on this field, pass as a param if there are multiple conditions and this field should be weighted above or below others.\r\n rule: ({ item }) => {\r\n // Algolia results have a tag field, it's a string array.\r\n const tags = item.tags || [];\r\n \r\n // Determine which tags the current item matches\r\n const matches = matchedCategories.find(tag => {\r\n return tags.indexOf(tag) > -1;\r\n })\r\n \r\n // Just return the Algolia score here and any item matches.\r\n return {\r\n score: item._rankingInfo.filters,\r\n matches\r\n }\r\n }\r\n }\r\n}","import loadable from 'react-loadable-visibility/loadable-components';\r\nimport {\r\n EsiChoose,\r\n EsiInclude,\r\n EsiOtherwise,\r\n EsiWhen,\r\n EsiNullComponent,\r\n EsiForEach,\r\n EsiAssign,\r\n EsiText,\r\n EsiScript,\r\n EsiNoOutput,\r\n} from '@uniformdev/esi-jss-react';\r\n// @ts-ignore\r\nimport MTwo from './components/mtwo';\r\nimport { getPersonalizedProps } from '@uniformdev/esi-jss-react';\r\nimport { getPersonalizer } from '@uniformdev/personalize-react';\r\n\r\n// Do not modify anything within the `` comments.\r\n// The content within those comments is automatically generated by\r\n// the `/scripts/generate-component-factory.js` script.\r\n\r\n// \n\n\nimport {\nAccordionFAQ,\nAccordionGeneric,\nAccordionSteps,\nSystemMessageBanner,\nGeneralCardCompleteRound,\nGeneralCardIconCards,\nGeneralCardImageCards,\nRichText,\nOfferAndDeal,\nTabsHorizontal,\nStickyFooter,\nOfferAndDealDetails,\nOffersAndDealsTopPicks,\nHighlightBanner,\nCurators,\nSurpriseWizard,\nCategoryTiles,\nTabsCarouselComponentListing,\nWizardCategories,\nNewsPRs,\nSectionIntro,\nCategoriesChildren,\nCategoriesSiblings,\nTabs,\nMultipleQuoteTestimonial,\nCuratorHeader,\nHeaderArticle1,\nHeaderCarousel,\nHeaderGenericPrimaryLeisure,\nHeaderGenericSecondary,\nHeaderGenericTertiary,\nHeaderListingPage,\nHeaderListingPagePersonalizable,\nHeaderMedia,\nWhatsonHeader,\nInsightsHeader,\nItineraryCoverHeader,\nItineraryDayViewHeader,\nPersonalizablePrimaryHeader,\nPOIHeader,\nTimelineNavigationCompact,\nAnnouncementBanner,\nAnchorItem,\nAnchorList,\nLoader,\nCardMultiple,\nCodeSnippet,\nCommonPageContainer,\nGenericPageContainer,\nDynamicPopup,\nEventsWidget,\nHeaderForActivationPage,\nIdentifyTravelers,\nListingServicesHeader,\nDeleteAccount,\nMainText,\nManagedWidget,\nMultifunctionalCards,\nPopularCuisines,\nRedirectToReturnUrl,\nRestaurantsHeadingAndContentBlock,\nRichTextBubble,\nScrollToBlock,\nSearchRestaurants,\nSkipContentButtons,\nSurpriseMeForm,\nUnbelievableSummerDeals\n} from '@dtcm/ui-components';\n\nconst components = new Map();\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('AccordionCombo', loadable(() => import(/* webpackChunkName: \"AccordionCombo\" */'@dtcm/ui-components/dist/components/01_AccordionCombo/AccordionCombo')))\ncomponents.set('AccordionFAQ', AccordionFAQ);\ncomponents.set('AccordionGeneric', AccordionGeneric);\ncomponents.set('AccordionSteps', AccordionSteps);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Articles', loadable(() => import(/* webpackChunkName: \"Articles\" */'@dtcm/ui-components/dist/components/02_Articles/Articles')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ArticlesFeatureCarousel', loadable(() => import(/* webpackChunkName: \"ArticlesFeatureCarousel\" */'@dtcm/ui-components/dist/components/02_ArticlesFeatureCarousel/ArticlesFeatureCarousel')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CuratorArticles', loadable(() => import(/* webpackChunkName: \"CuratorArticles\" */'@dtcm/ui-components/dist/components/02_CuratorArticles/CuratorArticles')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('AnchorNavigation', loadable(() => import(/* webpackChunkName: \"AnchorNavigation\" */'@dtcm/ui-components/dist/components/03_AnchorNavigation/AnchorNavigation')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('AudioPlayer', loadable(() => import(/* webpackChunkName: \"AudioPlayer\" */'@dtcm/ui-components/dist/components/04_Audio/AudioPlayer')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('BannerLarge', loadable(() => import(/* webpackChunkName: \"BannerLarge\" */'@dtcm/ui-components/dist/components/05_BannerLarge/BannerLarge')))\ncomponents.set('SystemMessageBanner', SystemMessageBanner);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('BannerSmall', loadable(() => import(/* webpackChunkName: \"BannerSmall\" */'@dtcm/ui-components/dist/components/05_BannerSmall/BannerSmall')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('HeatMap', loadable(() => import(/* webpackChunkName: \"HeatMap\" */'@dtcm/ui-components/dist/components/06_HeatMap/HeatMap')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Table', loadable(() => import(/* webpackChunkName: \"Table\" */'@dtcm/ui-components/dist/components/06_Table/Table')))\ncomponents.set('GeneralCardCompleteRound', GeneralCardCompleteRound);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('GeneralCardIcon', loadable(() => import(/* webpackChunkName: \"GeneralCardIcon\" */'@dtcm/ui-components/dist/components/07_GeneralCardIcon/GeneralCardIcon')))\ncomponents.set('GeneralCardIconCards', GeneralCardIconCards);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('GeneralCardIconMultiple', loadable(() => import(/* webpackChunkName: \"GeneralCardIconMultiple\" */'@dtcm/ui-components/dist/components/07_GeneralCardIconMultiple/GeneralCardIconMultiple')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('GeneralCardImage', loadable(() => import(/* webpackChunkName: \"GeneralCardImage\" */'@dtcm/ui-components/dist/components/07_GeneralCardImage/GeneralCardImage')))\ncomponents.set('GeneralCardImageCards', GeneralCardImageCards);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('GeneralCardImageMultiple', loadable(() => import(/* webpackChunkName: \"GeneralCardImageMultiple\" */'@dtcm/ui-components/dist/components/07_GeneralCardImageMultiple/GeneralCardImageMultiple')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('SubcategoriesCompleteMultiple', loadable(() => import(/* webpackChunkName: \"SubcategoriesCompleteMultiple\" */'@dtcm/ui-components/dist/components/07_SubcategoriesCompleteMultiple/SubcategoriesCompleteMultiple')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ContactCard', loadable(() => import(/* webpackChunkName: \"ContactCard\" */'@dtcm/ui-components/dist/components/08_ContactCard/ContactCard')))\ncomponents.set('RichText', RichText);\ncomponents.set('OfferAndDeal', OfferAndDeal);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ListingOffersAndDeals', loadable(() => import(/* webpackChunkName: \"ListingOffersAndDeals\" */'@dtcm/ui-components/dist/components/102_ListingOffersAndDeals/ListingOffersAndDeals')))\ncomponents.set('TabsHorizontal', TabsHorizontal);\ncomponents.set('StickyFooter', StickyFooter);\ncomponents.set('OfferAndDealDetails', OfferAndDealDetails);\ncomponents.set('OffersAndDealsTopPicks', OffersAndDealsTopPicks);\ncomponents.set('HighlightBanner', HighlightBanner);\ncomponents.set('Curators', Curators);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ProfileCards', loadable(() => import(/* webpackChunkName: \"ProfileCards\" */'@dtcm/ui-components/dist/components/10_ProfileCards/ProfileCards')))\ncomponents.set('SurpriseWizard', SurpriseWizard);\ncomponents.set('CategoryTiles', CategoryTiles);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CTAVariation', loadable(() => import(/* webpackChunkName: \"CTAVariation\" */'@dtcm/ui-components/dist/components/113_CTAVariation/CTAVariation')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('InteractiveBanner', loadable(() => import(/* webpackChunkName: \"InteractiveBanner\" */'@dtcm/ui-components/dist/components/113_InteractiveBanner/InteractiveBanner')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('InteractiveMap', loadable(() => import(/* webpackChunkName: \"InteractiveMap\" */'@dtcm/ui-components/dist/components/114_InteractiveMap/InteractiveMap')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('OverlayTiles', loadable(() => import(/* webpackChunkName: \"OverlayTiles\" */'@dtcm/ui-components/dist/components/114_OverlayTiles/OverlayTiles')))\ncomponents.set('TabsCarouselComponentListing', TabsCarouselComponentListing);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('StepCards', loadable(() => import(/* webpackChunkName: \"StepCards\" */'@dtcm/ui-components/dist/components/126_StepCards/StepCards')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ComparisonTable', loadable(() => import(/* webpackChunkName: \"ComparisonTable\" */'@dtcm/ui-components/dist/components/129_ComparisonTable/ComparisonTable')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Download', loadable(() => import(/* webpackChunkName: \"Download\" */'@dtcm/ui-components/dist/components/12_Download/Download')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('DownloadSingle', loadable(() => import(/* webpackChunkName: \"DownloadSingle\" */'@dtcm/ui-components/dist/components/12_DownloadSingle/DownloadSingle')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('SectionDetail', loadable(() => import(/* webpackChunkName: \"SectionDetail\" */'@dtcm/ui-components/dist/components/133_SectionDetails/SectionDetail')))\ncomponents.set('WizardCategories', WizardCategories);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('FeatureCardsList', loadable(() => import(/* webpackChunkName: \"FeatureCardsList\" */'@dtcm/ui-components/dist/components/135_FeatureCardsList/FeatureCardsList')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CuratorEvents', loadable(() => import(/* webpackChunkName: \"CuratorEvents\" */'@dtcm/ui-components/dist/components/15_CuratorEvents/CuratorEvents')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Events', loadable(() => import(/* webpackChunkName: \"Events\" */'@dtcm/ui-components/dist/components/15_Events/Events')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('EventsFeatureCarousel', loadable(() => import(/* webpackChunkName: \"EventsFeatureCarousel\" */'@dtcm/ui-components/dist/components/15_EventsFeatureCarousel/EventsFeatureCarousel')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('EloquaForm', loadable(() => import(/* webpackChunkName: \"EloquaForm\" */'@dtcm/ui-components/dist/components/19_EloquaForm/EloquaForm')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CTABlock', loadable(() => import(/* webpackChunkName: \"CTABlock\" */'@dtcm/ui-components/dist/components/20_CTABlock/CTABlock')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('FunFactsContainer', loadable(() => import(/* webpackChunkName: \"FunFactsContainer\" */'@dtcm/ui-components/dist/components/21_FunFactsContainer/FunFactsContainer')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('FunFactItem', loadable(() => import(/* webpackChunkName: \"FunFactItem\" */'@dtcm/ui-components/dist/components/21_FunFactsItem/FunFactItem')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CuratorItineraries', loadable(() => import(/* webpackChunkName: \"CuratorItineraries\" */'@dtcm/ui-components/dist/components/26_CuratorItineraries/CuratorItineraries')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Itineraries', loadable(() => import(/* webpackChunkName: \"Itineraries\" */'@dtcm/ui-components/dist/components/26_Itineraries/Itineraries')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('MediaCarousel', loadable(() => import(/* webpackChunkName: \"MediaCarousel\" */'@dtcm/ui-components/dist/components/28_MediaCarousel/MediaCarousel')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('MediaGrid', loadable(() => import(/* webpackChunkName: \"MediaGrid\" */'@dtcm/ui-components/dist/components/28_MediaGrid/MediaGrid')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('MediaImage', loadable(() => import(/* webpackChunkName: \"MediaImage\" */'@dtcm/ui-components/dist/components/28_MediaImage/MediaImage')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('MediaImage360', loadable(() => import(/* webpackChunkName: \"MediaImage360\" */'@dtcm/ui-components/dist/components/28_MediaImage360/MediaImage360')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('MediaVideo', loadable(() => import(/* webpackChunkName: \"MediaVideo\" */'@dtcm/ui-components/dist/components/28_MediaVideo/MediaVideo')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('VideoTile', loadable(() => import(/* webpackChunkName: \"VideoTile\" */'@dtcm/ui-components/dist/components/28_VideoTile/VideoTile')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Login', loadable(() => import(/* webpackChunkName: \"Login\" */'@dtcm/ui-components/dist/components/30_NavigationBar/Login')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('NewsCarousel', loadable(() => import(/* webpackChunkName: \"NewsCarousel\" */'@dtcm/ui-components/dist/components/31_NewsCarousel/NewsCarousel')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('NewsInsights', loadable(() => import(/* webpackChunkName: \"NewsInsights\" */'@dtcm/ui-components/dist/components/31_NewsInsights/NewsInsights')))\ncomponents.set('NewsPRs', NewsPRs);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('NewsletterFormSection', loadable(() => import(/* webpackChunkName: \"NewsletterFormSection\" */'@dtcm/ui-components/dist/components/32_NewsletterForm/NewsletterFormSection')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Partners', loadable(() => import(/* webpackChunkName: \"Partners\" */'@dtcm/ui-components/dist/components/33_Partners/Partners')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CuratorPOIs', loadable(() => import(/* webpackChunkName: \"CuratorPOIs\" */'@dtcm/ui-components/dist/components/34_CuratorPOIs/CuratorPOIs')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('POIs', loadable(() => import(/* webpackChunkName: \"POIs\" */'@dtcm/ui-components/dist/components/34_POIs/POIs')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('PracticalInformation', loadable(() => import(/* webpackChunkName: \"PracticalInformation\" */'@dtcm/ui-components/dist/components/35_PracticalInformation/PracticalInformation')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CTAsList', loadable(() => import(/* webpackChunkName: \"CTAsList\" */'@dtcm/ui-components/dist/components/36_CTAsList/CTAsList')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('QuickLinks', loadable(() => import(/* webpackChunkName: \"QuickLinks\" */'@dtcm/ui-components/dist/components/36_QuickLinks/QuickLinks')))\ncomponents.set('SectionIntro', SectionIntro);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('DetailsCardService', loadable(() => import(/* webpackChunkName: \"DetailsCardService\" */'@dtcm/ui-components/dist/components/44_DetailsCardService/DetailsCardService')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Deals', loadable(() => import(/* webpackChunkName: \"Deals\" */'@dtcm/ui-components/dist/components/44_TravelDeals/Deals')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ListingTradeEvents', loadable(() => import(/* webpackChunkName: \"ListingTradeEvents\" */'@dtcm/ui-components/dist/components/44_TravelDeals/ListingTradeEvents')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ListingVendors', loadable(() => import(/* webpackChunkName: \"ListingVendors\" */'@dtcm/ui-components/dist/components/44_TravelDeals/ListingVendors')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TravelDeals', loadable(() => import(/* webpackChunkName: \"TravelDeals\" */'@dtcm/ui-components/dist/components/44_TravelDeals/TravelDeals')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('SocialSharing', loadable(() => import(/* webpackChunkName: \"SocialSharing\" */'@dtcm/ui-components/dist/components/45_SocialSharing/SocialSharing')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Statistics', loadable(() => import(/* webpackChunkName: \"Statistics\" */'@dtcm/ui-components/dist/components/46_Statistics/Statistics')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('StatisticsBigNumbers', loadable(() => import(/* webpackChunkName: \"StatisticsBigNumbers\" */'@dtcm/ui-components/dist/components/46_StatisticsBigNumbers/StatisticsBigNumbers')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('StatisticsComparative', loadable(() => import(/* webpackChunkName: \"StatisticsComparative\" */'@dtcm/ui-components/dist/components/46_StatisticsComparative/StatisticsComparative')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('StatisticsContainer', loadable(() => import(/* webpackChunkName: \"StatisticsContainer\" */'@dtcm/ui-components/dist/components/46_StatisticsContainer/StatisticsContainer')))\ncomponents.set('CategoriesChildren', CategoriesChildren);\ncomponents.set('CategoriesSiblings', CategoriesSiblings);\ncomponents.set('Tabs', Tabs);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TabsWithAccordion', loadable(() => import(/* webpackChunkName: \"TabsWithAccordion\" */'@dtcm/ui-components/dist/components/49_TabsWithAccordion/TabsWithAccordion')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Tags', loadable(() => import(/* webpackChunkName: \"Tags\" */'@dtcm/ui-components/dist/components/50_Tags/Tags')))\ncomponents.set('MultipleQuoteTestimonial', MultipleQuoteTestimonial);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TestimonialCarousel', loadable(() => import(/* webpackChunkName: \"TestimonialCarousel\" */'@dtcm/ui-components/dist/components/51_TestimonialCarousel/TestimonialCarousel')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TestimonialMedia', loadable(() => import(/* webpackChunkName: \"TestimonialMedia\" */'@dtcm/ui-components/dist/components/51_TestimonialMedia/TestimonialMedia')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TestimonialMultipleMedia', loadable(() => import(/* webpackChunkName: \"TestimonialMultipleMedia\" */'@dtcm/ui-components/dist/components/51_TestimonialMultipleMedia/TestimonialMultipleMedia')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TestimonialQuote', loadable(() => import(/* webpackChunkName: \"TestimonialQuote\" */'@dtcm/ui-components/dist/components/51_TestimonialQuote/TestimonialQuote')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TestimonialStatement', loadable(() => import(/* webpackChunkName: \"TestimonialStatement\" */'@dtcm/ui-components/dist/components/51_TestimonialStatement/TestimonialStatement')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('UserGeneratedContent', loadable(() => import(/* webpackChunkName: \"UserGeneratedContent\" */'@dtcm/ui-components/dist/components/53_UserGeneratedContent/UserGeneratedContent')))\ncomponents.set('CuratorHeader', CuratorHeader);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('EventHeader', loadable(() => import(/* webpackChunkName: \"EventHeader\" */'@dtcm/ui-components/dist/components/57_EventHeader/EventHeader')))\ncomponents.set('HeaderArticle1', HeaderArticle1);\ncomponents.set('HeaderCarousel', HeaderCarousel);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('HeaderContextImage', loadable(() => import(/* webpackChunkName: \"HeaderContextImage\" */'@dtcm/ui-components/dist/components/57_HeaderContextImage/HeaderContextImage')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('HeaderGenericLegislation', loadable(() => import(/* webpackChunkName: \"HeaderGenericLegislation\" */'@dtcm/ui-components/dist/components/57_HeaderGenericLegislation/HeaderGenericLegislation')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('HeaderGenericPrimary', loadable(() => import(/* webpackChunkName: \"HeaderGenericPrimary\" */'@dtcm/ui-components/dist/components/57_HeaderGenericPrimary/HeaderGenericPrimary')))\ncomponents.set('HeaderGenericPrimaryLeisure', HeaderGenericPrimaryLeisure);\ncomponents.set('HeaderGenericSecondary', HeaderGenericSecondary);\ncomponents.set('HeaderGenericTertiary', HeaderGenericTertiary);\ncomponents.set('HeaderListingPage', HeaderListingPage);\ncomponents.set('HeaderListingPagePersonalizable', HeaderListingPagePersonalizable);\ncomponents.set('HeaderMedia', HeaderMedia);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('HeaderMedia360', loadable(() => import(/* webpackChunkName: \"HeaderMedia360\" */'@dtcm/ui-components/dist/components/57_HeaderMedia360/HeaderMedia360')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('HeaderPressRelease', loadable(() => import(/* webpackChunkName: \"HeaderPressRelease\" */'@dtcm/ui-components/dist/components/57_HeaderPressRelease/HeaderPressRelease')))\ncomponents.set('WhatsonHeader', WhatsonHeader);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('HeroPrimary', loadable(() => import(/* webpackChunkName: \"HeroPrimary\" */'@dtcm/ui-components/dist/components/57_HeroPrimary/HeroPrimary')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('HeroSecondary', loadable(() => import(/* webpackChunkName: \"HeroSecondary\" */'@dtcm/ui-components/dist/components/57_HeroSecondary/HeroSecondary')))\ncomponents.set('InsightsHeader', InsightsHeader);\ncomponents.set('ItineraryCoverHeader', ItineraryCoverHeader);\ncomponents.set('ItineraryDayViewHeader', ItineraryDayViewHeader);\ncomponents.set('PersonalizablePrimaryHeader', PersonalizablePrimaryHeader);\ncomponents.set('POIHeader', POIHeader);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ServicesHeader', loadable(() => import(/* webpackChunkName: \"ServicesHeader\" */'@dtcm/ui-components/dist/components/57_ServicesHeader/ServicesHeader')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('MediaAndCopy', loadable(() => import(/* webpackChunkName: \"MediaAndCopy\" */'@dtcm/ui-components/dist/components/58_MediaAndCopy/MediaAndCopy')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Map', loadable(() => import(/* webpackChunkName: \"Map\" */'@dtcm/ui-components/dist/components/60_Map/Map')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('NeighborhoodsMap', loadable(() => import(/* webpackChunkName: \"NeighborhoodsMap\" */'@dtcm/ui-components/dist/components/60_NeighborhoodsMap/NeighborhoodsMap')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('BottomNavigation', loadable(() => import(/* webpackChunkName: \"BottomNavigation\" */'@dtcm/ui-components/dist/components/61_BottomNavigation/BottomNavigation')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ItineraryBottomNavigation', loadable(() => import(/* webpackChunkName: \"ItineraryBottomNavigation\" */'@dtcm/ui-components/dist/components/61_ItineraryBottomNavigation/ItineraryBottomNavigation')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Timeline', loadable(() => import(/* webpackChunkName: \"Timeline\" */'@dtcm/ui-components/dist/components/62_Timeline/Timeline')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CuratorMatcher', loadable(() => import(/* webpackChunkName: \"CuratorMatcher\" */'@dtcm/ui-components/dist/components/65_CuratorMatcher/CuratorMatcher')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('VisaRequirementsWizard', loadable(() => import(/* webpackChunkName: \"VisaRequirementsWizard\" */'@dtcm/ui-components/dist/components/65_VisaRequirementsWizard/VisaRequirementsWizard')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('WizardTraining', loadable(() => import(/* webpackChunkName: \"WizardTraining\" */'@dtcm/ui-components/dist/components/65_WizardTraining/WizardTraining')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ItineraryOverview', loadable(() => import(/* webpackChunkName: \"ItineraryOverview\" */'@dtcm/ui-components/dist/components/68_ItineraryOverview/ItineraryOverview')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ItineraryPOIsOverview', loadable(() => import(/* webpackChunkName: \"ItineraryPOIsOverview\" */'@dtcm/ui-components/dist/components/68_ItineraryPOIsOverview/ItineraryPOIsOverview')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TimelineNavigation', loadable(() => import(/* webpackChunkName: \"TimelineNavigation\" */'@dtcm/ui-components/dist/components/69_TimelineNavigation/TimelineNavigation')))\ncomponents.set('TimelineNavigationCompact', TimelineNavigationCompact);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ItineraryFoodBreak', loadable(() => import(/* webpackChunkName: \"ItineraryFoodBreak\" */'@dtcm/ui-components/dist/components/70_ItineraryFoods/ItineraryFoodBreak')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('AutoDownload', loadable(() => import(/* webpackChunkName: \"AutoDownload\" */'@dtcm/ui-components/dist/components/71_AutoDownload/AutoDownload')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('IndexList', loadable(() => import(/* webpackChunkName: \"IndexList\" */'@dtcm/ui-components/dist/components/75_IndexList/IndexList')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('EditableListicleEvents', loadable(() => import(/* webpackChunkName: \"EditableListicleEvents\" */'@dtcm/ui-components/dist/components/77_EditableListicleEvents/EditableListicleEvents')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('EditableListiclePOIs', loadable(() => import(/* webpackChunkName: \"EditableListiclePOIs\" */'@dtcm/ui-components/dist/components/77_EditableListiclePOIs/EditableListiclePOIs')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ListicleEvents', loadable(() => import(/* webpackChunkName: \"ListicleEvents\" */'@dtcm/ui-components/dist/components/77_ListicleEvents/ListicleEvents')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ListicleItem', loadable(() => import(/* webpackChunkName: \"ListicleItem\" */'@dtcm/ui-components/dist/components/77_ListicleItem/ListicleItem')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ListicleMedia', loadable(() => import(/* webpackChunkName: \"ListicleMedia\" */'@dtcm/ui-components/dist/components/77_ListicleMedia/ListicleMedia')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ListiclePOIs', loadable(() => import(/* webpackChunkName: \"ListiclePOIs\" */'@dtcm/ui-components/dist/components/77_ListiclePOIs/ListiclePOIs')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CuratorSection', loadable(() => import(/* webpackChunkName: \"CuratorSection\" */'@dtcm/ui-components/dist/components/78_CuratorSection/CuratorSection')))\ncomponents.set('AnnouncementBanner', AnnouncementBanner);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('WidgetCurrencyConverter', loadable(() => import(/* webpackChunkName: \"WidgetCurrencyConverter\" */'@dtcm/ui-components/dist/components/84_WidgetCurrencyConverter/WidgetCurrencyConverter')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('AccountNavigation', loadable(() => import(/* webpackChunkName: \"AccountNavigation\" */'@dtcm/ui-components/dist/components/AccountNavigation/AccountNavigation')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('AccountOverview', loadable(() => import(/* webpackChunkName: \"AccountOverview\" */'@dtcm/ui-components/dist/components/AccountOverview/AccountOverview')))\ncomponents.set('AnchorItem', AnchorItem);\ncomponents.set('AnchorList', AnchorList);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Form', loadable(() => import(/* webpackChunkName: \"Form\" */'@dtcm/ui-components/dist/components/atoms/Forms/Form')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('InteractiveGoogleMap', loadable(() => import(/* webpackChunkName: \"InteractiveGoogleMap\" */'@dtcm/ui-components/dist/components/atoms/InteractiveMap/InteractiveGoogleMap')))\ncomponents.set('Loader', Loader);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Video', loadable(() => import(/* webpackChunkName: \"Video\" */'@dtcm/ui-components/dist/components/atoms/Video/Video')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('BrightcoveVideoBanner', loadable(() => import(/* webpackChunkName: \"BrightcoveVideoBanner\" */'@dtcm/ui-components/dist/components/BrightcoveVideoBanner/index')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('BrightcoveVideoDetails', loadable(() => import(/* webpackChunkName: \"BrightcoveVideoDetails\" */'@dtcm/ui-components/dist/components/BrightcoveVideoDetails/index')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('BrightcoveVideoDetailsHeader', loadable(() => import(/* webpackChunkName: \"BrightcoveVideoDetailsHeader\" */'@dtcm/ui-components/dist/components/BrightcoveVideoDetailsHeader/index')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('BrightcoveVideos', loadable(() => import(/* webpackChunkName: \"BrightcoveVideos\" */'@dtcm/ui-components/dist/components/BrightcoveVideos/index')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('BrightcoveVideosHeader', loadable(() => import(/* webpackChunkName: \"BrightcoveVideosHeader\" */'@dtcm/ui-components/dist/components/BrightcoveVideosHeader/index')))\ncomponents.set('CardMultiple', CardMultiple);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Chart', loadable(() => import(/* webpackChunkName: \"Chart\" */'@dtcm/ui-components/dist/components/Chart/Chart')))\ncomponents.set('CodeSnippet', CodeSnippet);\ncomponents.set('CommonPageContainer', CommonPageContainer);\ncomponents.set('GenericPageContainer', GenericPageContainer);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('CookiePolicy', loadable(() => import(/* webpackChunkName: \"CookiePolicy\" */'@dtcm/ui-components/dist/components/CookiePolicy/CookiePolicy')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('DashboardHeader', loadable(() => import(/* webpackChunkName: \"DashboardHeader\" */'@dtcm/ui-components/dist/components/DashboardHeader/DashboardHeader')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('DynamicListingComponent', loadable(() => import(/* webpackChunkName: \"DynamicListingComponent\" */'@dtcm/ui-components/dist/components/DynamicListingComponent/DynamicListingComponent')))\ncomponents.set('DynamicPopup', DynamicPopup);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('EmiratesFlightWidget', loadable(() => import(/* webpackChunkName: \"EmiratesFlightWidget\" */'@dtcm/ui-components/dist/components/EmiratesFlightWidget/index')))\ncomponents.set('EventsWidget', EventsWidget);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('FlyDubaiWidget', loadable(() => import(/* webpackChunkName: \"FlyDubaiWidget\" */'@dtcm/ui-components/dist/components/FlyDubaiWidget/index')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('FrontendSystemRedirect', loadable(() => import(/* webpackChunkName: \"FrontendSystemRedirect\" */'@dtcm/ui-components/dist/components/FrontendSystemRedirect/FrontendSystemRedirect')))\ncomponents.set('HeaderForActivationPage', HeaderForActivationPage);\ncomponents.set('IdentifyTravelers', IdentifyTravelers);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Listing', loadable(() => import(/* webpackChunkName: \"Listing\" */'@dtcm/ui-components/dist/components/Listing/Listing')))\ncomponents.set('ListingServicesHeader', ListingServicesHeader);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ChangePassword', loadable(() => import(/* webpackChunkName: \"ChangePassword\" */'@dtcm/ui-components/dist/components/Login/ChangePassword')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TwitterRedirect', loadable(() => import(/* webpackChunkName: \"TwitterRedirect\" */'@dtcm/ui-components/dist/components/Login/components/TwitterRedirect')))\ncomponents.set('DeleteAccount', DeleteAccount);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('EditProfile', loadable(() => import(/* webpackChunkName: \"EditProfile\" */'@dtcm/ui-components/dist/components/Login/EditProfile')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Login', loadable(() => import(/* webpackChunkName: \"Login\" */'@dtcm/ui-components/dist/components/Login/Login')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('NewPassword', loadable(() => import(/* webpackChunkName: \"NewPassword\" */'@dtcm/ui-components/dist/components/Login/NewPassword')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Register', loadable(() => import(/* webpackChunkName: \"Register\" */'@dtcm/ui-components/dist/components/Login/Register')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('RegisterAuthentication', loadable(() => import(/* webpackChunkName: \"RegisterAuthentication\" */'@dtcm/ui-components/dist/components/Login/RegisterAuthentication')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('ResetPassword', loadable(() => import(/* webpackChunkName: \"ResetPassword\" */'@dtcm/ui-components/dist/components/Login/ResetPassword')))\ncomponents.set('MainText', MainText);\ncomponents.set('ManagedWidget', ManagedWidget);\ncomponents.set('MultifunctionalCards', MultifunctionalCards);\ncomponents.set('PopularCuisines', PopularCuisines);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('RecommendationListing', loadable(() => import(/* webpackChunkName: \"RecommendationListing\" */'@dtcm/ui-components/dist/components/RecommendationListing/RecommendationListing')))\ncomponents.set('RedirectToReturnUrl', RedirectToReturnUrl);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('RestaurantsCarousel', loadable(() => import(/* webpackChunkName: \"RestaurantsCarousel\" */'@dtcm/ui-components/dist/components/RestaurantsCarousel/RestaurantsCarousel')))\ncomponents.set('RestaurantsHeadingAndContentBlock', RestaurantsHeadingAndContentBlock);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('RestaurantsListing', loadable(() => import(/* webpackChunkName: \"RestaurantsListing\" */'@dtcm/ui-components/dist/components/RestaurantsListing/RestaurantsListing')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('RestaurantsNavigation', loadable(() => import(/* webpackChunkName: \"RestaurantsNavigation\" */'@dtcm/ui-components/dist/components/RestaurantsNavigation/RestaurantsNavigation')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('RestaurantsSmallBanner', loadable(() => import(/* webpackChunkName: \"RestaurantsSmallBanner\" */'@dtcm/ui-components/dist/components/RestaurantsSmallBanner/RestaurantsSmallBanner')))\ncomponents.set('RichTextBubble', RichTextBubble);\ncomponents.set('ScrollToBlock', ScrollToBlock);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Search', loadable(() => import(/* webpackChunkName: \"Search\" */'@dtcm/ui-components/dist/components/Search/Search')))\ncomponents.set('SearchRestaurants', SearchRestaurants);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('Sitemap', loadable(() => import(/* webpackChunkName: \"Sitemap\" */'@dtcm/ui-components/dist/components/Sitemap/Sitemap')))\ncomponents.set('SkipContentButtons', SkipContentButtons);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('SoftixThankYou', loadable(() => import(/* webpackChunkName: \"SoftixThankYou\" */'@dtcm/ui-components/dist/components/SoftixThankYou/SoftixThankYou')))\ncomponents.set('SurpriseMeForm', SurpriseMeForm);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TicketPurchase', loadable(() => import(/* webpackChunkName: \"TicketPurchase\" */'@dtcm/ui-components/dist/components/TicketPurchase/TicketPurchase')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TicketsPurchases', loadable(() => import(/* webpackChunkName: \"TicketsPurchases\" */'@dtcm/ui-components/dist/components/TicketsPurchases/TicketsPurchases')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('TopPicks', loadable(() => import(/* webpackChunkName: \"TopPicks\" */'@dtcm/ui-components/dist/components/TopPicks/TopPicks')))\ncomponents.set('UnbelievableSummerDeals', UnbelievableSummerDeals);\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('VenueBlock', loadable(() => import(/* webpackChunkName: \"VenueBlock\" */'@dtcm/ui-components/dist/components/VenueBlock/VenueBlock')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('VenueHeader', loadable(() => import(/* webpackChunkName: \"VenueHeader\" */'@dtcm/ui-components/dist/components/VenueHeader/VenueHeader')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('VenueKeyStats', loadable(() => import(/* webpackChunkName: \"VenueKeyStats\" */'@dtcm/ui-components/dist/components/VenueKeyStats/VenueKeyStats')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('VenueShortlist', loadable(() => import(/* webpackChunkName: \"VenueShortlist\" */'@dtcm/ui-components/dist/components/VenueShortlist/VenueShortlist')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('VenueTable', loadable(() => import(/* webpackChunkName: \"VenueTable\" */'@dtcm/ui-components/dist/components/VenueTable/VenueTable')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('WeatherWidget', loadable(() => import(/* webpackChunkName: \"WeatherWidget\" */'@dtcm/ui-components/dist/components/WeatherWidget/WeatherWidget')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('YourTicketsPurchases', loadable(() => import(/* webpackChunkName: \"YourTicketsPurchases\" */'@dtcm/ui-components/dist/components/YourTicketsPurchases/YourTicketsPurchases')))\n\n// NOTE: 'import' paths _must_ be static in order for webpack to be able to analyze them at build time.\ncomponents.set('YourTopPicks', loadable(() => import(/* webpackChunkName: \"YourTopPicks\" */'@dtcm/ui-components/dist/components/YourTopPicks/YourTopPicks')))\n\n// \r\ncomponents.set('HeaderGenericPrimary', HeaderGenericPrimaryLeisure);\r\n\r\ncomponents.set('GenericSecondaryHeader', HeaderGenericSecondary);\r\n\r\ncomponents.set('EsiWhen', EsiWhen);\r\ncomponents.set('EsiChoose', EsiChoose);\r\ncomponents.set('EsiInclude', EsiInclude);\r\ncomponents.set('EsiOtherwise', EsiOtherwise);\r\ncomponents.set('EsiNullComponent', EsiNullComponent);\r\ncomponents.set('EsiForEach', EsiForEach);\r\ncomponents.set('EsiAssign', EsiAssign);\r\ncomponents.set('EsiText', EsiText);\r\ncomponents.set('EsiScript', EsiScript);\r\ncomponents.set('EsiNoOutput', EsiNoOutput);\r\n\r\ncomponents.set('MTwo', MTwo);\r\n\r\nconst nonPersonalizableComponents = [\r\n 'EsiAssign',\r\n 'EsiChoose',\r\n 'EsiForEach',\r\n 'EsiInclude',\r\n 'EsiNoOutput',\r\n 'EsiNullComponent',\r\n 'EsiOtherwise',\r\n 'EsiScript',\r\n 'EsiText',\r\n 'EsiWhen',\r\n];\r\n\r\nfunction doNotPersonalize(componentName: string) {\r\n return nonPersonalizableComponents.indexOf(componentName) != -1;\r\n}\r\n\r\n//\r\n//The allowed array is a collection of component names\r\n//that support personalization. If the array is empty,\r\n//all components are supported. If the array has at\r\n//least one item, only the components whose names\r\n//match a value in the array are supported.\r\nconst allowed = ['PersonalizablePrimaryHeader'];\r\nconst Personalizer = getPersonalizer({ components, getPersonalizedProps, allowed });\r\n\r\nexport default function componentFactory(componentName: string) {\r\n const component = components.get(componentName);\r\n\r\n if (!components.has(componentName) && componentName.match(/Container$/)) {\r\n return components.get('CommonPageContainer');\r\n }\r\n\r\n if (doNotPersonalize(componentName)) {\r\n return component;\r\n }\r\n\r\n if(allowed.includes(componentName)){\r\n return Personalizer;\r\n }\r\n\r\n return component;\r\n}\r\n","import React, { useContext, useEffect, ReactElement } from 'react';\r\nimport { useAppStateContext } from './AppStateProvider';\r\nimport { __RouterContext, RouteComponentProps, match } from 'react-router';\r\nimport { matchRoute } from './routerUtils';\r\n\r\n// Component responsible for fetching route data if needed.\r\n// This could probably be converted to a hook.\r\nexport const RouteDataManager: React.FC = (props) => {\r\n const { appState, actions } = useAppStateContext();\r\n\r\n // Always assume that appState contains the correctly resolved language.\r\n // This assumption can be made because we do not provide client-side language switching.\r\n // Language switching requires a full page reload.\r\n const resolvedLanguage = appState.language;\r\n\r\n const routerContext = useContext(__RouterContext);\r\n const route = resolveRouterRoute(routerContext);\r\n const routeParams: {\r\n sitecoreRoute?: string;\r\n lang?: string;\r\n } = (route && route.params) || {};\r\n\r\n // routeParams take precedence over state\r\n // sitecoreRoute will only be populated if there is a value after `/` in the requested URL\r\n // appState.routePath is populated by server.js and index.js before initial render\r\n // appState.routePath is updated during route fetching\r\n\r\n // `sitecoreRoute` may be undefined when the current URL is `/` or\r\n // when the current URL starts with a language parameter, `/en-CA/`\r\n // If so, we need to \"resolve\" to the `/` path to ensure that\r\n // the `useEffect` below is triggered and route data is fetched.\r\n let resolvedRoute: string;\r\n if (\r\n !routeParams.sitecoreRoute &&\r\n route &&\r\n (route.url === '/' || route.url === `/${resolvedLanguage.languageCode}`)\r\n ) {\r\n resolvedRoute = '/';\r\n } else {\r\n resolvedRoute = routeParams.sitecoreRoute || appState.routePath;\r\n }\r\n\r\n // remember that useEffect fires after initial render (no matter what)\r\n // and then fires on subsequent renders if either resolvedRoute or resolvedLanguage has changed\r\n\r\n useEffect(\r\n () => {\r\n // If we have route data from SSR, no need to fetch.\r\n // At this point, we also clear the SSR flag from state so that subsequent renders\r\n // will fetch routeData if needed.\r\n // This approach feels hacky... but it works.\r\n if (appState.routeData && appState.routeData.fromSSR) {\r\n actions.clearSSRFlag();\r\n return;\r\n }\r\n\r\n actions.fetchRoute(resolvedRoute, resolvedLanguage.languageCode);\r\n },\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n [resolvedRoute, resolvedLanguage.languageCode]\r\n );\r\n\r\n // need to cast as ReactElement to satisfy TypeScript\r\n return props.children as ReactElement;\r\n};\r\n\r\n// When accessing `__RouterContext` from react-router, the location and history\r\n// properties of the context are correct, but the route parameters are not\r\n// initialized. Therefore, we call the `matchRoute` function on the router context\r\n// path to get the matched route parameters (i.e. `:sitecoreRoute`, `:lang`).\r\n// This will likely change in a future version of React Router, but this works\r\n// with the current version.\r\nfunction resolveRouterRoute(routerContext: RouteComponentProps): match | null {\r\n const matchedRoute = matchRoute(routerContext.location.pathname);\r\n return matchedRoute;\r\n}\r\n","import React from 'react';\r\nimport { ComponentFactoryReactContext } from '@sitecore-jss/sitecore-jss-react/dist/components/SitecoreContext';\r\nimport { ComponentFactory } from '@sitecore-jss/sitecore-jss-react/types/components/sharedTypes';\r\n\r\nexport { ComponentFactoryReactContext };\r\n\r\nconst ComponentFactoryContext = React.createContext(undefined);\r\n\r\nexport interface ComponentFactoryContextProps {\r\n componentFactory: ComponentFactory;\r\n}\r\n\r\nexport const useComponentFactory = () => {\r\n const context = React.useContext(ComponentFactoryContext);\r\n if (context === undefined) {\r\n throw new Error('useComponentFactory must be used within a ComponentFactoryContextProvider');\r\n }\r\n return context;\r\n};\r\n\r\nexport const ComponentFactoryContextProvider: React.FC = ({\r\n componentFactory,\r\n children,\r\n}) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\nimport Layout from './Layout';\r\nimport config from './temp/config';\r\nimport componentFactory from './componentFactory';\r\nimport { RouteDataManager } from './lib/RouteDataManager';\r\nimport { useAppStateContext } from './lib/AppStateProvider';\r\nimport { ComponentFactoryContextProvider } from './lib/ComponentFactoryProvider';\r\n// This context is required for @dtcm components to fetch context properly.\r\nimport { SitecoreContextReactContext as DtcmUiComponentsSitecoreContext } from '@dtcm/ui-components';\r\nimport { canUseDOM, get } from './lib/getPropertyByPath';\r\nimport { GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';\r\n\r\nconst ScrollToTop = () => {\r\n const { pathname } = useLocation();\r\n\r\n React.useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, [pathname]);\r\n\r\n return null;\r\n};\r\n// This is the main entry point of the app invoked by the renderer (server or client rendering).\r\nconst AppRoot = ({ Router }: { Router: any }) => {\r\n const { appState, actions } = useAppStateContext();\r\n const isEmptyLayout = get(appState, 'dictionary.viewBag.isEmptyLayout', false);\r\n const [isShowCaptchaProvider, setIsShowCaptchaProvider] = React.useState(false);\r\n // Accessibility settings require DOM manipulation, so initialize them after first mount/render.\r\n // `useEffect` will only fire once when providing an empty array as the second argument.\r\n useEffect(() => {\r\n actions.initializeAccessibilitySettings({\r\n contrast: appState.selectedContrastValue,\r\n fontSize: appState.selectedFontSize as any,\r\n });\r\n }, []);\r\n\r\n const sitecoreContextData: any = {\r\n route: null,\r\n rtl: false,\r\n config: config,\r\n pageEditing: false,\r\n origin: '',\r\n breadcrumb: [],\r\n isPersonalised: false,\r\n volume: 0,\r\n };\r\n\r\n if (appState.routeData && appState.sitecoreContextData) {\r\n const identityPath = appState.sitecoreContextData.configuration.globalApi.apiGlobal;\r\n const clientId = appState.sitecoreContextData.configuration.globalApi.clientId;\r\n sitecoreContextData.route = appState.routeData;\r\n\r\n Object.assign(sitecoreContextData, appState.sitecoreContextData, {\r\n isPersonalised: appState.isPersonalised,\r\n darkMode: appState.darkMode,\r\n volume: appState.volume,\r\n videosList: appState.videosList,\r\n selectedFontSize: appState.selectedFontSize,\r\n actions: {\r\n changeThemeFunction: (value: boolean) => actions.changeThemeFunction(value, identityPath),\r\n fetchUserSettings: () => actions.fetchUserSettings(identityPath),\r\n fetchVideosList: () => actions.fetchVideosList(identityPath),\r\n getLikes: ( videoIds: any) => actions.getLikes( videoIds, identityPath),\r\n setLike: ( videoId: any ) => actions.setLike( videoId, identityPath, clientId),\r\n setVideoTimestamp: (videoId: any, timestamp: number) =>\r\n actions.setVideoTimestamp(videoId, timestamp, identityPath, clientId),\r\n setVideoVolumeFunction: (value: number) =>\r\n actions.setVideoVolumeFunction(value, identityPath, clientId),\r\n },\r\n });\r\n }\r\n const captchaKey = get(sitecoreContextData, 'configuration.globalApi.recaptchaKey');\r\n const languageCode: string = get(sitecoreContextData, 'language');\r\n\r\n React.useEffect(() => {\r\n if (canUseDOM && captchaKey) {\r\n setIsShowCaptchaProvider(true);\r\n }\r\n }, [canUseDOM, captchaKey]);\r\n\r\n return (\r\n \r\n {!isEmptyLayout && }\r\n \r\n \r\n \r\n { isShowCaptchaProvider ?\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 AppRoot;\r\n","import './polyfills';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport AppRoot from './AppRoot';\r\nimport config from './temp/config';\r\nimport { resolveLanguageFromContextData, resolveLanguageFromConfig } from './lib/languageResolvers';\r\nimport { matchRoute } from './lib/routerUtils';\r\nimport { AppStateProvider, AppState } from './lib/AppStateProvider';\r\nimport { resolveAccessibilitySettings } from './lib/accessibilityStateManager';\r\nimport { LanguageDefinition } from '@dtcm/ui-components';\r\nimport { resolveUserSettings } from './lib/userSettingsStateManager';\r\n// import { loadableReady } from '@loadable/component';\r\n/* import json from './tempSsrJson.json'; */\r\n\r\n/* eslint-disable no-underscore-dangle */\r\n\r\n/*\r\n App Rendering\r\n*/\r\n\r\nrenderApp();\r\n\r\nfunction renderApp() {\r\n const initialState = resolveInitialAppState();\r\n\r\n // HTML element to place the app into\r\n const rootElement = document.getElementById('root');\r\n\r\n // Create the Router component that will be used for client-side routing.\r\n const Router: React.FC = (routerProps) => {routerProps.children};\r\n\r\n // when React initializes from a SSR-based initial state, you need to render with `hydrate` instead of `render`\r\n const renderFunction = initialState.routeData ? ReactDOM.hydrate : ReactDOM.render;\r\n\r\n // loadableReady(() => {\r\n renderFunction(\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n // });\r\n}\r\n\r\n/*\r\n SSR Data\r\n If we're running in a server-side rendering scenario,\r\n the server will provide JSON in the #__JSS_STATE__ element\r\n for us to acquire the initial state to run with on the client.\r\n\r\n This enables us to skip a network request to load up the layout data.\r\n We are emitting a quiescent script with JSON so that we can take advantage\r\n of JSON.parse()'s speed advantage over parsing full JS, and enable\r\n working without needing `unsafe-inline` in Content Security Policies.\r\n\r\n SSR is initiated from /server/server.js.\r\n*/\r\n\r\nfunction resolveInitialAppState() {\r\n const ssrRawJson = document.getElementById('__JSS_STATE__');\r\n const ssrState = ssrRawJson ? JSON.parse(ssrRawJson.innerHTML) : null;\r\n /* const ssrState = json; */\r\n\r\n const routePath = resolveRoutePath();\r\n\r\n /*\r\n Language Resolving\r\n Attempt to resolve the app language prior to rendering the app.\r\n */\r\n const language = resolveLanguage(ssrState);\r\n\r\n const accessibilitySettings = resolveAccessibilitySettings(config);\r\n const userSettings = resolveUserSettings();\r\n\r\n const appState: AppState = {\r\n routePath,\r\n language,\r\n routeData: null,\r\n sitecoreContextData: {},\r\n selectedContrastValue: accessibilitySettings.contrast,\r\n selectedFontSize: accessibilitySettings.fontSize,\r\n isUserLoggedIn: false,\r\n isPersonalised: false,\r\n darkMode: userSettings.darkMode,\r\n volume: userSettings.volume,\r\n videosList: userSettings.videosList\r\n };\r\n\r\n if (ssrState) {\r\n const {\r\n dictionary,\r\n navbar,\r\n navbarData,\r\n footer,\r\n downloadBox,\r\n newsletterForm,\r\n footerWeatherWidget,\r\n routeData,\r\n sitecoreContextData,\r\n analytics,\r\n accessWidget\r\n } = ssrState;\r\n\r\n return {\r\n ...appState,\r\n dictionary: dictionary,\r\n routeData: routeData || null,\r\n navbar,\r\n navbarData,\r\n footer,\r\n downloadBox,\r\n newsletterForm,\r\n footerWeatherWidget,\r\n sitecoreContextData,\r\n analytics,\r\n accessWidget\r\n } as AppState;\r\n }\r\n\r\n return appState;\r\n}\r\n\r\n// Resolve the current matched router path\r\nfunction resolveRoutePath() {\r\n const matchedRoute = matchRoute(window.location.pathname);\r\n const routeParams: { sitecoreRoute?: string } = (matchedRoute && matchedRoute.params) || {};\r\n return (routeParams && routeParams.sitecoreRoute) || '/';\r\n}\r\n\r\nfunction resolveLanguage(ssrState: any): LanguageDefinition {\r\n // If SSR data exists, we try to extract the language from that data.\r\n let language: LanguageDefinition =\r\n ssrState && ssrState.sitecoreContextData && resolveLanguageFromContextData(ssrState.sitecoreContextData);\r\n\r\n // If a language parameter is found in the route URL and the parameter has a different value\r\n // than specified in SSR data, use the parameter value. This shouldn't ever happen, but\r\n // anything is possible.\r\n const matchedRoute = matchRoute(window.location.pathname);\r\n if (\r\n matchedRoute &&\r\n matchedRoute.params &&\r\n matchedRoute.params.lang &&\r\n language &&\r\n language.languageCode !== matchedRoute.params.lang\r\n ) {\r\n // note: this will leave us in an incomplete state, i.e. languageName cannot be resolved from URL\r\n // again, this scenario shouldn't ever happen.\r\n language.languageCode = matchedRoute.params.lang;\r\n }\r\n\r\n // If no language could be found in SSR data or route URL, then fallback to the value defined in config.\r\n if (!language) {\r\n language = resolveLanguageFromConfig(config);\r\n }\r\n\r\n return language;\r\n}\r\n","import { LanguageDefinition } from '@dtcm/ui-components';\r\n\r\n// If we have a state, and that state has language data, return the language\r\nexport const resolveLanguageFromContextData = (\r\n sitecoreContextData?: { language?: string; languageName?: string } | undefined\r\n): LanguageDefinition => {\r\n if (!sitecoreContextData || !sitecoreContextData.language || !sitecoreContextData.languageName) {\r\n console.warn('context data is undefined or language is not defined in context data', sitecoreContextData);\r\n return {\r\n languageCode: '',\r\n languageName: '',\r\n };\r\n }\r\n return {\r\n languageCode: sitecoreContextData.language,\r\n languageName: sitecoreContextData.languageName,\r\n };\r\n};\r\nexport const resolveCountryFromContextData = (\r\n sitecoreContextData?: { utags?: any; } | undefined\r\n): any => {\r\n if (!sitecoreContextData || !sitecoreContextData.utags) {\r\n console.warn('context data is undefined or language is not defined in context data', sitecoreContextData);\r\n return {\r\n session_country: 'UAE',\r\n };\r\n }\r\n const country = sitecoreContextData && sitecoreContextData.utags && sitecoreContextData.utags.script \r\n ? sitecoreContextData.utags.script.split('session_country_code:')[1] ? \r\n sitecoreContextData.utags.script.split('session_country_code:')[1].split(',')[0]\r\n .replace(/[\\W_]+/g, ' ')\r\n .trim()\r\n : 'BE' : 'BE';\r\n\r\n return {\r\n session_country: country,\r\n };\r\n};\r\nexport const resolveLanguageFromConfig = (config: {\r\n defaultLanguage: string;\r\n defaultLanguageName: string;\r\n}): LanguageDefinition => {\r\n const values = {\r\n languageCode: '',\r\n languageName: '',\r\n };\r\n if (!config) {\r\n console.error('config is undefined');\r\n return values;\r\n }\r\n values.languageCode = config.defaultLanguage;\r\n values.languageName = config.defaultLanguageName;\r\n return values;\r\n};\r\n","/**\r\n * Implements a data fetcher using window.Fetch - replace with your favorite\r\n * library if you like. See HttpJsonFetcher type\r\n * in sitecore-jss library for implementation details/notes.\r\n * @param {string} url The URL to request; may include query string\r\n * @param {any} data Optional data to POST with the request.\r\n */\r\n\r\nexport function dataFetcher(url: string, data: any, requestOptions: any = {}): Promise {\r\n const requestProps: Partial = {\r\n method: data ? 'POST' : 'GET',\r\n //Setting content-type produces CORS-error \"Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.\"\r\n // headers: {\r\n // 'Content-Type': 'application/json',\r\n //},\r\n // note: needs to use `withCredentials: true` in order for Sitecore cookies to be included in CORS requests\r\n // which is necessary for analytics and such\r\n //credentials: 'include',\r\n body: JSON.stringify(data),\r\n ... requestOptions\r\n };\r\n\r\n // NOTE: if you plan to make layout service fetch calls during SSR, be sure\r\n // to polyfill fetch for Node.\r\n return fetch(url, requestProps).then((response) => {\r\n // JSS dataApi expects a response with the below signature.\r\n //debugger\r\n return {\r\n status: response.status,\r\n statusText: response.statusText,\r\n data: response.json(),\r\n };\r\n });\r\n}\r\n","import { dataApi } from '@sitecore-jss/sitecore-jss-react';\r\nimport { dataFetcher } from './dataFetcher';\r\nimport config from '../temp/config';\r\n\r\nexport interface State {\r\n routeData: any;\r\n routeDataLoading?: boolean;\r\n routePath: string;\r\n routeError?: Error;\r\n sitecoreContextData: any;\r\n}\r\n\r\nexport interface Action {\r\n type: string;\r\n payload: any;\r\n error?: Error;\r\n}\r\n\r\nexport function reducer(state: State, action: Action) {\r\n switch (action.type) {\r\n case 'clear-ssr-flag': {\r\n return { ...state, routeData: { ...state.routeData, fromSSR: false } };\r\n }\r\n case 'route-data-fetch-begin': {\r\n return { ...state, routeDataLoading: true, routePath: action.payload };\r\n }\r\n case 'route-data-fetch-success': {\r\n return {\r\n ...state,\r\n routeDataLoading: false,\r\n routeData: action.payload.routeData,\r\n sitecoreContextData: action.payload.sitecoreContextData,\r\n routeError: null,\r\n };\r\n }\r\n case 'route-data-fetch-404': {\r\n return {\r\n ...state,\r\n routeDataLoading: false,\r\n routeData: action.payload.routeData,\r\n sitecoreContextData: action.payload.sitecoreContextData,\r\n routeError: action.error,\r\n };\r\n }\r\n case 'route-data-fetch-error': {\r\n return {\r\n ...state,\r\n routeDataLoading: false,\r\n routeData: null,\r\n sitecoreContextData: null,\r\n routeError: action.error,\r\n };\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n}\r\n\r\nexport type FetchRouteFunction = (\r\n routePath: string,\r\n language: string\r\n) => (dispatch: any) => Promise | void;\r\n\r\nexport const fetchRoute: FetchRouteFunction = (routePath: string, language: string) => {\r\n return (dispatch: any) => {\r\n // Signal that we're about to start fetching data. Typically use this\r\n // to set loading state to `true`.\r\n dispatch({\r\n type: 'route-data-fetch-begin',\r\n payload: routePath,\r\n });\r\n\r\n getRouteData(routePath, language)\r\n .then((sitecoreData) => {\r\n dispatch({\r\n type: 'route-data-fetch-success',\r\n payload: {\r\n routeData: sitecoreData.sitecore.route,\r\n sitecoreContextData: sitecoreData.sitecore.context,\r\n },\r\n });\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n \r\n // 404 errors may contain context data to be used for rendering\r\n if (error.response && error.response.status === 404 && error.response.data) {\r\n dispatch({\r\n type: 'route-data-fetch-404',\r\n payload: {\r\n routeData: error.response.data.sitecore ? error.response.data.sitecore.route : null,\r\n sitecoreContextData: error.response.data.sitecore\r\n ? error.response.data.sitecore.context\r\n : { language },\r\n },\r\n error: null,\r\n });\r\n } else {\r\n dispatch({\r\n type: 'route-data-fetch-error',\r\n error,\r\n });\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport type ClearSSRFlagFunction = () => (dispatch: any) => Promise | void;\r\n\r\nexport const clearSSRFlag: ClearSSRFlagFunction = () => {\r\n return (dispatch: any) => {\r\n dispatch({ type: 'clear-ssr-flag' });\r\n };\r\n};\r\n\r\n/**\r\n * Gets route data from Sitecore. This data is used to construct the component layout for a JSS route.\r\n * @param {string} route Route path to get data for (e.g. /about)\r\n * @param {string} language Language to get route data in (content language, e.g. 'en')\r\n */\r\nfunction getRouteData(route: string, language: string) {\r\n const formattedRoute = ensureLeadingSlash(route);\r\n\r\n const fetchOptions = {\r\n layoutServiceConfig: { host: config.sitecoreApiHost },\r\n querystringParams: { sc_lang: language, sc_apikey: config.sitecoreApiKey },\r\n fetcher: dataFetcher,\r\n };\r\n\r\n return dataApi.fetchRouteData(formattedRoute, fetchOptions);\r\n}\r\n\r\nfunction ensureLeadingSlash(route: string) {\r\n const formattedRoute = !route.startsWith('/') ? `/${route}` : route;\r\n return formattedRoute;\r\n}\r\n","import React, { createContext, useReducer, PropsWithChildren } from 'react';\r\nimport {\r\n fetchRoute,\r\n clearSSRFlag,\r\n reducer as routeStateReducer,\r\n State as RouteState,\r\n FetchRouteFunction,\r\n ClearSSRFlagFunction,\r\n} from './routeStateManager';\r\nimport {\r\n State as AccessibilityState,\r\n changeContrast,\r\n changeFontSize,\r\n reducer as accessibilityStateReducer,\r\n ChangeContrastFunction,\r\n ChangeFontSizeFunction,\r\n initializeAccessibilitySettings,\r\n InitializeAccessibilitySettingsFunction,\r\n setPersonalisation,\r\n setPersonalisationFunction,\r\n\r\n} from './accessibilityStateManager';\r\nimport {\r\n State as UserSettingsState,\r\n reducer as userSettingsStateReducer,\r\n fetchUserSettings,\r\n FetchUserSettingsFunction,\r\n changeThemeFunction,\r\n ChangeThemeFunction,\r\n FetchVideoListFunction,\r\n fetchVideosList,\r\n getLikes,\r\n setLike,\r\n setVideoTimestamp,\r\n likeVideoFunction,\r\n setVideoVolumeFunction\r\n} from './userSettingsStateManager';\r\nimport { NavBarData } from './NavBarData';\r\nimport { LanguageDefinition } from '@dtcm/ui-components';\r\n\r\n// Create and export app state context for consumption in descendants.\r\nconst AppStateContext = createContext(undefined);\r\n\r\nexport const useAppStateContext = () => {\r\n const context = React.useContext(AppStateContext);\r\n if (context === undefined) {\r\n throw new Error('useAppStateContext must be used within a AppStateProvider');\r\n }\r\n return context;\r\n};\r\n\r\n// store the currentState outside of the current function closure so that we can provide\r\n// a `getState()` function to our actions that will actually return the current state\r\nlet currentState: AppState | undefined;\r\n\r\nexport function AppStateProvider({ initialState, children }: PropsWithChildren) {\r\n const reducer = mergeReducers([routeStateReducer, accessibilityStateReducer, userSettingsStateReducer]);\r\n const [state, dispatch] = withDispatchLog(useReducer(reducer, initialState, initState), () => currentState);\r\n\r\n currentState = state;\r\n\r\n const actions: AppStateActions = createAsyncCapableActions(\r\n {\r\n fetchRoute,\r\n clearSSRFlag,\r\n changeContrast,\r\n changeFontSize,\r\n initializeAccessibilitySettings,\r\n setPersonalisation,\r\n changeThemeFunction,\r\n fetchUserSettings,\r\n fetchVideosList,\r\n getLikes,\r\n setLike,\r\n setVideoTimestamp,\r\n likeVideoFunction,\r\n setVideoVolumeFunction\r\n },\r\n dispatch,\r\n () => currentState\r\n );\r\n\r\n return {children};\r\n}\r\n\r\nfunction initState(state: AppState) {\r\n // If we don't have SSR data, then set the loading flags to true so\r\n // that initial app rendering doesn't fail and will show loaders instead.\r\n if (!state.routeData || !state.routeData.fromSSR) {\r\n state.routeDataLoading = true;\r\n }\r\n return state;\r\n}\r\n\r\n// This function provides any actions that return a function with a `dispatch`\r\n// and `state` objects that those actions can then use. This allows for multiple\r\n// `dispatch` calls from an action or calling `dispatch` after async operations.\r\nfunction createAsyncCapableActions(actions: any, dispatch: any, getState: any) {\r\n Object.keys(actions).forEach((key) => {\r\n const action = actions[key];\r\n\r\n actions[key] = (...args: any[]) => {\r\n const actionResult = action(...args);\r\n if (typeof actionResult === 'function') {\r\n actionResult(dispatch, getState);\r\n } else {\r\n dispatch(actionResult);\r\n }\r\n };\r\n });\r\n\r\n return actions;\r\n}\r\n\r\n// Simple function that accepts an array of reducer functions and \"merges\" them\r\n// into a single function. The result from each reducer is passed to the next\r\n// reducer and the final output is the return value.\r\nfunction mergeReducers(reducers: any[]) {\r\n return (state: any, action: any) => {\r\n return reducers.reduce((result: any, reducer: any) => {\r\n result = reducer(result, action);\r\n return result;\r\n }, state);\r\n };\r\n}\r\n\r\n// This function basically wraps the `dispatch` function from a `useReducer`\r\n// call with a console logger to log all actions that are dispatched, along\r\n// with the updated state after the action is complete.\r\nfunction withDispatchLog(useReducerResult: any[], getState: any) {\r\n if (process.env.NODE_ENV === 'development') {\r\n return [\r\n useReducerResult[0],\r\n (...args: any[]) => {\r\n console.group('state action');\r\n console.log(`action '${args[0].type}'`, args[0]);\r\n\r\n useReducerResult[1](...args);\r\n\r\n console.log(`new state`, getState());\r\n console.groupEnd();\r\n },\r\n ];\r\n }\r\n return useReducerResult;\r\n}\r\n\r\nexport type AppState = RouteState &\r\n UserSettingsState &\r\n AccessibilityState & {\r\n isEmptyLayout?: boolean;\r\n navbar?: NavBarData;\r\n navbarData?: any;\r\n footer?: any;\r\n downloadBox?: any;\r\n newsletterForm?: any;\r\n footerWeatherWidget?: any;\r\n language: LanguageDefinition;\r\n // context may have other properties defined outside of what is specified in the UI components SitecoreContextProps\r\n sitecoreContextData: any;\r\n analytics?: any;\r\n accessWidget?: any;\r\n isUserLoggedIn:boolean;\r\n isPersonalised: boolean;\r\n };\r\n\r\nexport interface AppStateContextProps {\r\n appState: AppState;\r\n actions: AppStateActions;\r\n}\r\n\r\nexport interface AppStateProviderProps {\r\n initialState: AppState | undefined;\r\n}\r\n\r\nexport type AppStateActions = {\r\n fetchRoute: FetchRouteFunction;\r\n clearSSRFlag: ClearSSRFlagFunction;\r\n changeFontSize: ChangeFontSizeFunction;\r\n changeContrast: ChangeContrastFunction;\r\n initializeAccessibilitySettings: InitializeAccessibilitySettingsFunction;\r\n setPersonalisation: setPersonalisationFunction;\r\n changeThemeFunction: ChangeThemeFunction;\r\n fetchUserSettings: FetchUserSettingsFunction;\r\n fetchVideosList: FetchVideoListFunction;\r\n getLikes: FetchVideoListFunction;\r\n setVideoTimestamp: FetchVideoListFunction;\r\n setLike: FetchVideoListFunction;\r\n likeVideoFunction: (videoId: string) => void;\r\n setVideoVolumeFunction: (identityPath: number, value: number, clientId: string) => void;\r\n};\r\n","import { ContrastSwitchOption } from '@dtcm/ui-components';\r\n\r\nexport interface State {\r\n selectedFontSize: string;\r\n selectedContrastValue: string;\r\n isPersonalised: boolean | null;\r\n}\r\n\r\nexport interface Action {\r\n type: string;\r\n payload: any;\r\n error?: Error;\r\n}\r\n\r\nexport function reducer(state: State, action: Action) {\r\n switch (action.type) {\r\n case 'accessibility-settings-initialized': {\r\n return state;\r\n }\r\n case 'font-size-changed': {\r\n return { ...state, selectedFontSize: action.payload };\r\n }\r\n case 'contrast-value-changed': {\r\n return { ...state, selectedContrastValue: action.payload };\r\n }\r\n case 'pesonalisation-value-changed': {\r\n return { ...state, isPersonalised: action.payload };\r\n }\r\n\r\n default: {\r\n return state;\r\n }\r\n }\r\n}\r\n\r\n// This function is a bit superfluous, but allows us to centralize the actions\r\n// associated with adjusting accessibility settings.\r\nexport const initializeAccessibilitySettings: InitializeAccessibilitySettingsFunction = ({\r\n contrast,\r\n fontSize,\r\n}) => {\r\n return (dispatch: any) => {\r\n setContrast({ theme: { value: contrast }, title: { value: '' } });\r\n setFontSize(fontSize);\r\n dispatch({\r\n type: 'accessibility-settings-initialized',\r\n });\r\n };\r\n};\r\n\r\nexport type InitializeAccessibilitySettingsFunction = ({\r\n contrast,\r\n fontSize,\r\n}: {\r\n contrast: string;\r\n fontSize: FontSize;\r\n}) => void;\r\n\r\nexport type FontSize = 'z100' | 'z150' | 'z200';\r\n\r\nexport const fontSizeClasses = ['z100', 'z150', 'z200'];\r\n\r\nexport type ChangeFontSizeFunction = (\r\n fontSize: FontSize\r\n) => (dispatch: any, getState?: any) => Promise | void;\r\n\r\nexport const changeFontSize: ChangeFontSizeFunction = (fontSize: FontSize) => {\r\n return (dispatch: any) => {\r\n setFontSize(fontSize);\r\n\r\n dispatch({\r\n type: 'font-size-changed',\r\n payload: fontSize,\r\n });\r\n };\r\n};\r\n\r\nconst setFontSize = (fontSize: FontSize) => {\r\n if (typeof window !== 'undefined') {\r\n document.querySelector('html')!.classList.remove(...fontSizeClasses);\r\n document.querySelector('html')!.classList.add(fontSize);\r\n\r\n storageManager.setFontSize(fontSize);\r\n }\r\n};\r\n\r\nexport type ChangeContrastFunction = (\r\n option: ContrastSwitchOption\r\n) => (dispatch: any, getState?: any) => Promise | void;\r\n\r\nexport const changeContrast: ChangeContrastFunction = (option: ContrastSwitchOption) => {\r\n return (dispatch: any) => {\r\n setContrast(option);\r\n dispatch({\r\n type: 'contrast-value-changed',\r\n payload: option.theme.value,\r\n });\r\n };\r\n};\r\nexport type setPersonalisationFunction = (\r\n value: boolean\r\n) => (dispatch: any, getState?: any) => void;\r\n\r\nexport const setPersonalisation: setPersonalisationFunction = (value: boolean) => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: 'pesonalisation-value-changed',\r\n payload: value,\r\n });\r\n };\r\n};\r\nconst setContrast = (option: ContrastSwitchOption) => {\r\n if (typeof window !== 'undefined') {\r\n if (option.theme.value === 'theme1') {\r\n document.querySelector('body')!.classList.remove('contrast');\r\n } else if (option.theme.value === 'theme2') {\r\n document.querySelector('body')!.classList.add('contrast');\r\n }\r\n }\r\n\r\n storageManager.setContrast(option.theme.value);\r\n};\r\n\r\nexport function resolveAccessibilitySettings(config: any) {\r\n return {\r\n contrast: storageManager.getContrast() || config.defaultContrast,\r\n fontSize: storageManager.getFontSize() || config.defaultFontSize,\r\n };\r\n}\r\n\r\nexport const storageManager = {\r\n getFontSize: () => getItem('dtcm-font-size'),\r\n setFontSize: (value: string) => setItem('dtcm-font-size', value),\r\n getContrast: () => getItem('dtcm-contrast'),\r\n setContrast: (value: string) => setItem('dtcm-contrast', value),\r\n};\r\n\r\nexport function getItem(key: string) {\r\n if (typeof window !== 'undefined') {\r\n return window.localStorage.getItem(key);\r\n }\r\n return null;\r\n}\r\n\r\nexport function setItem(key: string, value: any) {\r\n if (typeof window !== 'undefined') {\r\n window.localStorage.setItem(key, value);\r\n }\r\n}\r\n","// Inspired by: https://stackoverflow.com/a/22129960/9324\r\n/**\r\n * Examples:\r\n * {\r\n * prop1: {\r\n * prop2: {\r\n * prop3: 'deep',\r\n * prop4: [\r\n * { prop5: 'deeper' }\r\n * ]\r\n * }\r\n * }\r\n * }\r\n * 'prop1.prop2.prop3' == 'deep'\r\n * 'prop1.prop2.prop4.0.prop5' == 'deeper'\r\n */\r\n\r\n// alias for lodash.get\r\nexport function get(obj: any, propPath: string, defaultValue?: any) {\r\n return getPropertyByPath(obj, propPath, defaultValue);\r\n}\r\n\r\nexport function getPropertyByPath(obj: any, propPath: string, defaultValue?: any) {\r\n return propPath.split('.').reduce((o, p) => (o && o[p]) || defaultValue, obj);\r\n}\r\nexport const canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);","import { dataFetcher } from './dataFetcher';\r\nimport Cookies from 'js-cookie';\r\nimport { getItem, setItem } from './accessibilityStateManager';\r\n\r\nconst userCookieName = 'user_session';\r\ninterface Videos {\r\n userId?: string;\r\n videoId: string;\r\n like?: boolean;\r\n likes: number;\r\n timestamp?: number;\r\n}\r\nexport interface State {\r\n\r\n darkMode: boolean;\r\n volume: number;\r\n videosList: Array;\r\n}\r\n\r\nexport interface Action {\r\n type: string;\r\n payload: any;\r\n error?: Error;\r\n}\r\n\r\nconst userSettingsFetcher = (requestURL: string, data: any) => {\r\n const cookieToken = getUserCookie();\r\n\r\n let myHeaders = new Headers();\r\n myHeaders.append('Content-Type', 'application/json');\r\n cookieToken && myHeaders.append('Authorization', `Bearer ${cookieToken.access_token}`);\r\n\r\n var requestOptions: any = {\r\n headers: myHeaders,\r\n //redirect: 'follow',\r\n };\r\n const requestProps: Partial = {\r\n method: data ? 'POST' : 'GET',\r\n\r\n body: JSON.stringify(data),\r\n ... requestOptions\r\n };\r\n\r\n\r\n return fetch(requestURL, requestProps).then((response) => {\r\n return {\r\n status: response.status,\r\n statusText: response.statusText,\r\n data: response.json(),\r\n };\r\n });\r\n\r\n}\r\n\r\nexport const getUserCookie = () => {\r\n let parsedCookie,\r\n status = false;\r\n\r\n const cookie = Cookies.get(userCookieName);\r\n\r\n if (cookie) {\r\n try {\r\n parsedCookie = JSON.parse(cookie || '');\r\n if (parsedCookie.access_token) {\r\n\r\n status = true;\r\n }\r\n\r\n } catch (e) { }\r\n }\r\n if (status) {\r\n return parsedCookie;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const reducer = (state: State, action: Action) => {\r\n switch (action.type) {\r\n\r\n case 'theme-changed': {\r\n return { ...state, darkMode: action.payload };\r\n }\r\n case 'video-like': {\r\n\r\n return {\r\n ...state,\r\n videosList: state.videosList.map(\r\n (item) => item.videoId == action.payload ? { ...item, like: action.payload }\r\n : item\r\n )\r\n };\r\n }\r\n case 'video-list': {\r\n return {\r\n ...state,\r\n videosList: action.payload\r\n };\r\n\r\n }\r\n case 'video-list-addItems': {\r\n\r\n return {\r\n ...state,\r\n videosList: [...state.videosList, ...action.payload.filter((itemResponse: any) => (\r\n state.videosList.findIndex((itemVideoList: any) => itemResponse.videoId == itemVideoList.videoId) == -1\r\n ))]\r\n\r\n };\r\n\r\n }\r\n case 'video-volume': {\r\n return { ...state, volume: action.payload };\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\nexport type FetchUserSettingsFunction = (\r\n identityPath: string\r\n) => (dispatch: any) => Promise | void;\r\n\r\nexport type FetchVideoListFunction = (\r\n identityPath: any,\r\n videoId?: any,\r\n videoIds?: any,\r\n clientId?: any,\r\n timestamp?: any,\r\n) => (dispatch: any) => (Promise | void);\r\n\r\nexport const fetchVideosList: FetchVideoListFunction = (identityPath: string) => {\r\n return () => {\r\n // Signal that we're about to start fetching data. Typically use this\r\n // to set loading state to `true`.\r\n const cookieToken = getUserCookie();\r\n\r\n let myHeaders = new Headers();\r\n\r\n myHeaders.append('Authorization', `Bearer ${cookieToken}`);\r\n myHeaders.append('Content-Type', 'application/json');\r\n\r\n var requestOptions: any = {\r\n method: 'POST',\r\n headers: myHeaders,\r\n //body: {},\r\n redirect: 'follow',\r\n };\r\n dataFetcher(`${identityPath}/graphql/video`, null, requestOptions)\r\n .then(() => {\r\n // console.log(data);\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n });\r\n };\r\n};\r\n/*eslint-disable */\r\nexport const getLikes: FetchVideoListFunction = (videoIds?: any, identityPath?: string) => {\r\n\r\n return (dispatch: any) => {\r\n\r\n const query = {\r\n query: `{ videos(ids:${JSON.stringify(videoIds)}){ userId, videoId, like, likes, timestamp }}`\r\n }\r\n\r\n\r\n userSettingsFetcher(`${identityPath}/graphql/video`, query)\r\n .then((data: any) => {\r\n data.data.then((res: any) => {\r\n const videos = res.data.videos;\r\n // @ts-ignore\r\n let videoList = storageManager.getVideosList() && JSON.parse(storageManager.getVideosList()) || [];\r\n\r\n videos.map((element: any) => {\r\n const currentVideoIndex = videoList.findIndex((item: any) => item.videoId == element.videoId);\r\n if(currentVideoIndex == -1) {\r\n videoList.push(element)\r\n } else {\r\n videoList[currentVideoIndex] = {\r\n ...videoList[currentVideoIndex],\r\n ...element\r\n }\r\n }\r\n });\r\n storageManager.setVideosList(videoList);\r\n dispatch({\r\n type: 'video-list',\r\n payload: videoList\r\n });\r\n })\r\n\r\n })\r\n .catch((error: any) => {\r\n console.log(error)\r\n })\r\n };\r\n};\r\n\r\n\r\n\r\nexport const setLike: FetchVideoListFunction = (videoId: any, identityPath: string) => {\r\n\r\n return (dispatch: any) => {\r\n let videoList = storageManager.getVideosList() && JSON.parse(storageManager.getVideosList()) || [];\r\n // @ts-ignore\r\n const cookieToken = getUserCookie();\r\n let videoLikeValue = true;\r\n videoList.some((v: any) => {\r\n if (v.videoId === videoId) {\r\n videoLikeValue = !v.like;\r\n v.like = !v.like;\r\n v.like ? v.likes++ : v.likes--;\r\n\r\n }\r\n\r\n });\r\n\r\n storageManager.setVideosList(videoList);\r\n dispatch({\r\n type: 'video-list',\r\n payload: videoList\r\n });\r\n if (cookieToken) {\r\n const query = {\r\n query: `mutation updateVideo{ like(videoId:${JSON.stringify(videoId)}, enabled:${JSON.stringify(videoLikeValue)}){userId,videoId,timestamp,like,likes}}`,\r\n variables: {}\r\n }\r\n\r\n userSettingsFetcher(`${identityPath}/graphql/video`, query)\r\n }\r\n\r\n };\r\n};\r\nexport const setVideoTimestamp: FetchVideoListFunction = (videoId?: string, timestamp?: any, identityPath?: number) => {\r\n\r\n return (dispatch: any) => {\r\n let videoList = storageManager.getVideosList() && JSON.parse(storageManager.getVideosList()) || [];\r\n // @ts-ignore\r\n const cookieToken = getUserCookie();\r\n videoList.some((v: any) => {\r\n if (v.videoId === videoId) {\r\n v.timestamp = timestamp;\r\n\r\n }\r\n\r\n });\r\n\r\n if (cookieToken) {\r\n storageManager.setVideosList(videoList);\r\n dispatch({\r\n type: 'video-list',\r\n payload: videoList\r\n });\r\n }\r\n if (cookieToken) {\r\n const query = {\r\n query: `mutation updateVideo{ timestamp(videoId:${JSON.stringify(videoId)}, value:${JSON.stringify(parseInt(timestamp))}){userId,videoId,timestamp,like,likes}}`,\r\n variables: {}\r\n }\r\n userSettingsFetcher(`${identityPath}/graphql/video`, query)\r\n }\r\n };\r\n};\r\n/*eslint-disable */\r\nexport const fetchUserSettings: FetchUserSettingsFunction = (identityPath: string) => {\r\n return (dispatch) => {\r\n // Signal that we're about to start fetching data. Typically use this\r\n // to set loading state to `true`.\r\n const cookieToken = getUserCookie();\r\n\r\n if (cookieToken) {\r\n const query = {\r\n query: `{ settings{ darkMode,\r\n volume}}`\r\n }\r\n\r\n // @ts-ignore\r\n // @ts-ignore\r\n\r\n userSettingsFetcher(`${identityPath}/graphql/video`, query)\r\n .then((data: any) => {\r\n\r\n data.data.then((res: any) => {\r\n storageManager.setDarkMode(res.data.settings.darkMode);\r\n storageManager.setVolume(res.data.settings.volume);\r\n dispatch({\r\n type: 'video-volume',\r\n payload: res.data.settings.volume,\r\n });\r\n dispatch({\r\n type: 'theme-changed',\r\n payload: res.data.settings.darkMode,\r\n });\r\n\r\n })\r\n })\r\n }\r\n };\r\n};\r\n\r\nexport type ChangeThemeFunction = (\r\n value: boolean,\r\n identityPath: string\r\n) => (dispatch: any, getState?: any) => Promise | void;\r\n\r\nexport const changeThemeFunction: ChangeThemeFunction = (value: boolean, identityPath: string) => {\r\n\r\n return (dispatch: any) => {\r\n const cookieToken = getUserCookie();\r\n storageManager.setDarkMode(value);\r\n dispatch({\r\n type: 'theme-changed',\r\n payload: value,\r\n });\r\n if (cookieToken) {\r\n\r\n const query = {\r\n query: `mutation updateSettings{ darkMode(enabled: ${value}){ darkMode,\r\n volume}}`,\r\n variables: {}\r\n }\r\n\r\n userSettingsFetcher(`${identityPath}/graphql/video`, query)\r\n\r\n }\r\n };\r\n\r\n};\r\nexport const likeVideoFunction = (videoId: string) => {\r\n return (dispatch: any) => {\r\n\r\n dispatch({\r\n type: 'video-like',\r\n payload: videoId,\r\n });\r\n };\r\n\r\n};\r\nexport const setVideoVolumeFunction = (value: number, identityPath: string) => {\r\n // @ts-ignore\r\n return (dispatch: any) => {\r\n storageManager.setVolume(value);\r\n dispatch({\r\n type: 'video-volume',\r\n payload: value,\r\n });\r\n const cookieToken = getUserCookie();\r\n if (cookieToken) {\r\n const query = {\r\n query: `mutation updateSettings{\r\n volume(value: ${value}) {userId, darkMode, volume}\r\n }`,\r\n variables: {}\r\n };\r\n\r\n userSettingsFetcher(`${identityPath}/graphql/video`, query)\r\n\r\n }\r\n };\r\n};\r\nexport const resolveUserSettings = () => {\r\n return {\r\n darkMode: storageManager.getDarkMode() === 'true',\r\n volume: Number(storageManager.getVolume()) || 0,\r\n videosList: storageManager.getVideosList() && JSON.parse(storageManager.getVideosList()) || []\r\n };\r\n};\r\nexport const storageManager = {\r\n getDarkMode: () => getItem('dtcm-dark-mode'),\r\n setDarkMode: (value: boolean) => { setItem('dtcm-dark-mode', value); },\r\n getVolume: () => getItem('dtcm-video-volume'),\r\n setVolume: (value: number) => setItem('dtcm-video-volume', value),\r\n getVideosList: () => getItem('dtcm-video-list') || '',\r\n setVideosList: (value: Array) => setItem('dtcm-video-list', JSON.stringify(value))\r\n};\r\n\r\n"],"sourceRoot":""}