{"version":3,"sources":["components-common/Spinner/index.js","hooks/events.js","../../shared/src/utilities/ssr.js","temp/config.js","temp/componentFactory.js","lib/SitecoreContextFactory.js","dataFetcher.js","hooks/usePureDebouncedCallback.js","ConditionalStaticPlaceholder.js","Layout.js","NotFound.js","RouteHandler.js","ScrollToTop.js","AppRoot.js","lib/GraphQLClientFactory.js","i18n.js","index.js","../../shared/src/analytics/constants.js","../../shared/src/utilities/clearAnalyticsEvent.js","../../shared/src/analytics/useGlobalSearchClickAnalytics.js","../../shared/src/analytics/useGlobalSearchAnalytics.js","../../shared/src/analytics/useInternalPageViewAnalytics.js","../../shared/src/analytics/useInternalSearchAnalytics.js","../../shared/src/analytics/usePageLayoutAnalytics.js","../../shared/src/analytics/useScrollTracking.js","../../shared/src/analytics/useSearchFilterAnalytics.js","../../shared/src/analytics/useSearchResultClickAnalytics.js"],"names":["Spinner","className","useWindowEvent","event","callback","useEffect","window","addEventListener","removeEventListener","useWindowResizeEvent","module","exports","AdditionalContacts","loadable","fallback","AnchorLink","ArticleBlock","Breadcrumb","BrightcoveVideoExperience","CovidBanner","FAQAccordion","FooterExpandableNavList","FooterLanguagesNavList","FooterNavList","FooterSocialNavList","FVNUpContentBlock","GlobalFooter","GlobalPrimaryNav","GridLayout9NUpBlock","HeroBannerCarousel","HeroImage","Highlights","HomeArticleBlock","HomeBlock2Up","HomeFreeTextBlock","HomeStatsLayout","HorizontalTab","HorizontalTabTextAndImage","ImagesCarousel","JobListingCarousel","Link","LocationDetails","LocationInfoBlock","LocationSearch","PageNotFound","PageTitle","PersonnelBlock","PersonProfile","ProviderDetailsComponent","ProviderSearch","RegionsMap","RegionsProviderSearch","SendUsAnEmail","SimpleContentBlock","Sitemap","Stat","Stats3Up","StatsCarousel","StepProcess","StickyAnchorNavigation","TestimonialQuote","TextAndImageLeft","TextAndImageRight","TextAndImageRightFullColor","TextAndImageTop","TwoTwoLayoutTiles","VerticalTab","components","Map","componentFactory","componentName","get","set","SitecoreContextFactory","dataFetcher","url","data","axios","method","withCredentials","withSitecoreContext","sitecoreContext","contextKey","name","otherProps","placeholderData","route","childPlaceholder","getChildPlaceholder","some","rendering","interceptors","response","use","error","errorDescription","status","statusText","request","message","errorEvent","dataLayer","filter","item","ANALYTICS_EVENT","ERROR_HANDLING","length","push","errorInfo","description","fatal","Promise","reject","Layout","redirectDictionary","context","google_tag_manager","process","reset","itemId","t","useTranslation","canonicalUrl","canonicalDataLayer","JSON","parse","defaultValue","forEach","val","location","pathname","pathName","replace","extRedirect","err","console","usePageLayoutAnalytics","useScrollTracking","scrollThreshold","setScrollThreshold","gtmScrollEventCallback","delay","options","debounce","usePureDebouncedCallback","scrollTop","scrollY","bodyHeight","document","body","scrollHeight","windowHeight","innerHeight","scrollPercent","scrollPercentRounded","Math","round","Number","prevState","rel","href","fields","pageTitle","value","role","onClick","target","classList","contains","isAnchorTag","tagName","toLowerCase","isButton","attributes","gtmClickObject","CLICK","clickInfo","clickUrl","ANALYTICS_NULL_VALUES","NA_VALUE","clickElement","clickText","text","textContent","clickElementPosition","clickClass","id","NotFound","site","language","Fragment","ssrInitialState","RouteHandler","props","state","isFetching","notFound","routeData","defaultLanguage","config","sitecore","setSitecoreContext","componentIsMounted","languageIsChanging","updateLanguage","this","updateRouteData","sitecoreRoutePath","match","params","sitecoreRoute","startsWith","lang","setState","fetchOptions","layoutServiceConfig","host","sitecoreApiHost","querystringParams","sc_lang","sc_apikey","sitecoreApiKey","fetcher","dataApi","fetchRouteData","catch","getRouteData","then","newLanguage","i18n","changeLanguage","forceUpdate","previousProps","existingRoute","newRoute","isExperienceEditorActive","assign","React","ScrollToTop","useLocation","scrollTo","routePatterns","AppRoot","path","Router","graphQLClient","routeRenderFunction","client","contextFactory","map","routePattern","key","render","component","ssrState","renderFunction","ReactDOM","initLanguage","__JSS_STATE__","ssrRawJson","getElementById","innerHTML","hydrate","dictionary","initialGraphQLState","APOLLO_STATE","endpoint","ssr","initialCacheState","link","createPersistedQueryLink","concat","BatchHttpLink","uri","credentials","cache","InMemoryCache","fragmentMatcher","IntrospectionFragmentMatcher","introspectionQueryResultData","ApolloClient","ssrMode","ssrForceFetchDelay","restore","GraphQLClientFactory","graphQLEndpoint","resolve","debug","lng","fallbackLng","load","useCookie","keySeparator","interpolation","escapeValue","isInitialized","addResourceBundle","initReactI18next","init","dictionaryServicePath","jssAppName","backend","loadPath","parsedData","phrases","fetchBackend","loadableReady","rootElement","BrowserRouter","objectFitImages","ANALYTICS_CATEGORY_NAME","PROVIDER_PAGE","PROVIDER_RESULT_PAGE","LOCATION_PAGE","FAQ_PAGE","FAQ_RESULT_PAGE","LOCATION_RESULT_PAGE","CONDITION_PAGE","SPECIALTY_PAGE","SERVICE_PAGE","TREATMENT_PAGE","CONDITION_RESULT_PAGE","BLOG_PAGE","BLOG_RESULT_PAGE","GLOBAL_SEARCH_ALL","GLOBAL_SEARCH_PROVIDERS","GLOBAL_SEARCH_LOCATIONS","GLOBAL_SEARCH_SERVICES","GLOBAL_SEARCH_BLOGS","GLOBAL_SEARCH_OTHERS","ANALYTICS_SEARCH_TYPE","TYPED","POPULAR","TYPED_RECOMMENDED","ALL_CTSS","ALL_PROVIDER","ALL_LOCATION","ALL_BLOG","ANALYTICS_SORT_ORDER","MOST_RELEVANT","NO_SEARCH_TERM","ANALYTICS_RESOURCE_NAME","PROVIDER","LOCATIONS","CONDITION","TREATMENT","SPECIALTY","SERVICES","BLOG","OTHERS","FAQ","SEARCH_FILTER","INTERNAL_SEARCH","PAGE_VIEW","PAGE_SECTION_VIEW","SEARCH_RESULT_CLICK","SCROLL","GLOBAL_SEARCH","GLOBAL_SEARCH_RESULT_CLICK","ANALYTICS_VIEW","LIST","MAP","GLOBAL_DROPDOWN","ANALYTICS_PAGE_NAME","PAGE_NAME_LIST","PAGE_NAME_MAP","ANALYTICS_SITE_NAME","M_HEALTH_FAIRVIEW","FAIRVIEW","ANALYTICS_PAGE_HIERARCHY","HIERARCHY_PROVIDER","HIERARCHY_LOCATION","HIERARCHY_CONDITION","HIERARCHY_BLOG","HIERARCHY_FAQ","clearAnalyticEvent","eventToRemove","indexEvent","findIndex","gtmEventObject","splice","useGlobalSearchClickAnalytics","searchInfo","resourceDetails","searchPosition","customAnalyticObject","customAnalyticFields","clearAnalyticsEvent","gtmGlobalSearchResultClick","searchTerm","searchCategory","searchResultsCount","searchTermCategory","resourceInfo","clickedResult","defaultProps","useGlobalSearchAnalytics","currentPage","totalPages","query","gtmGlobalSearchResult","searchPageDetails","useInternalPageViewAnalytics","searchPageName","searchPageCategory","searchPageHierarchy","isResultPage","gtmPageViewObject","pageInfo","pageName","pageCategory","pageHierarchy","useInternalSearchAnalytics","filtersModel","resultsModel","searchParams","searchParamKeys","searchInternalCategory","termCategory","analyticView","sortOrder","useState","setIsResultPage","isLoading","isError","isStale","numResultsTotal","gtmInternalSearchResult","SEARCH_QUERY","ADDRESS_QUERY","currentPageNumber","searchSort","searchView","filterInfo","filterApplied","numFiltersApplied","getAppropriateSiteVersion","siteName","pageViewObject","siteInfo","environment","siteEnvironmentInfo","siteEnvironmentName","siteVersion","gaDataLayer","userInfo","loginStatus","userType","trim","dataLayerObjCopy","Array","obj","gtmScrollObject","scrollInfo","scrollDirection","scrollMilestone","useSearchFilterAnalytics","numResultTotal","numAppliedFilters","filtersApplied","isFilterApplied","gtmFilterSearchResult","SORT_ORDER","useSearchResultClickAnalytics","searchResultClickObject","searchClickCategory","analyticsView","gtmResultCard"],"mappings":"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","file":"static/js/main.5431a58c.chunk.js","sourcesContent":["import React from 'react';\r\nimport './Spinner.scss';\r\n\r\nconst Spinner = () => (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n);\r\n\r\nexport default Spinner;\r\n","import { useEffect } from 'react';\r\nimport { isClient } from '@fhs/shared/src/utilities/ssr';\r\n\r\nexport function useWindowEvent(event, callback) {\r\n useEffect(() => {\r\n if (!isClient()) {\r\n return undefined;\r\n }\r\n\r\n window.addEventListener(event, callback);\r\n return () => window.removeEventListener(event, callback);\r\n }, [event, callback]);\r\n}\r\n\r\nexport function useWindowResizeEvent(callback) {\r\n return useWindowEvent('resize', callback);\r\n}\r\n","export function isClient() {\r\n return typeof window === 'object';\r\n}\r\n","/* 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\": \"{53CFD9D0-9CA7-4B28-A6EE-E6EF2FF68761}\",\n \"sitecoreApiHost\": \"https://stcr-prd-cd.fairview.org\",\n \"jssAppName\": \"FairviewOrg\",\n \"defaultLanguage\": \"en\",\n \"graphQLEndpointPath\": \"/api/fv\",\n \"graphQLEndpoint\": \"https://stcr-prd-cd.fairview.org/api/fv?sc_apikey={53CFD9D0-9CA7-4B28-A6EE-E6EF2FF68761}\"\n};","/* eslint-disable */\n// Do not edit this file, it is auto-generated at build time!\n// See scripts/generate-component-factory.js to modify the generation of this file.\nimport React from 'react';\nimport loadable from '@loadable/component';\nconst AdditionalContacts = loadable(()=> import(/* webpackChunkName: \"AdditionalContacts\" */'../components-sitecore/AdditionalContacts'), {fallback:
});\nconst AnchorLink = loadable(()=> import(/* webpackChunkName: \"AnchorLink\" */'../components-sitecore/AnchorLink'), {fallback:
});\nconst ArticleBlock = loadable(()=> import(/* webpackChunkName: \"ArticleBlock\" */'../components-sitecore/ArticleBlock'), {fallback:
});\nconst Breadcrumb = loadable(()=> import(/* webpackChunkName: \"Breadcrumb\" */'../components-sitecore/Breadcrumb'), {fallback:
});\nconst BrightcoveVideoExperience = loadable(()=> import(/* webpackChunkName: \"BrightcoveVideoExperience\" */'../components-sitecore/BrightcoveVideoExperience/BrightcoveVideoExperience'), {fallback:
});\nconst CovidBanner = loadable(()=> import(/* webpackChunkName: \"CovidBanner\" */'../components-sitecore/CovidBanner/CovidBanner'), {fallback:
});\nconst FAQAccordion = loadable(()=> import(/* webpackChunkName: \"FAQAccordion\" */'../components-sitecore/FAQAccordion'), {fallback:
});\nconst FooterExpandableNavList = loadable(()=> import(/* webpackChunkName: \"FooterExpandableNavList\" */'../components-sitecore/FooterExpandableNavList'), {fallback:
});\nconst FooterLanguagesNavList = loadable(()=> import(/* webpackChunkName: \"FooterLanguagesNavList\" */'../components-sitecore/FooterLanguagesNavList'), {fallback:
});\nconst FooterNavList = loadable(()=> import(/* webpackChunkName: \"FooterNavList\" */'../components-sitecore/FooterNavList'), {fallback:
});\nconst FooterSocialNavList = loadable(()=> import(/* webpackChunkName: \"FooterSocialNavList\" */'../components-sitecore/FooterSocialNavList/FooterSocialNavList'), {fallback:
});\nconst FVNUpContentBlock = loadable(()=> import(/* webpackChunkName: \"FVNUpContentBlock\" */'../components-sitecore/FVNUpContentBlock'), {fallback:
});\nconst GlobalFooter = loadable(()=> import(/* webpackChunkName: \"GlobalFooter\" */'../components-sitecore/GlobalFooter'), {fallback:
});\nconst GlobalPrimaryNav = loadable(()=> import(/* webpackChunkName: \"GlobalPrimaryNav\" */'../components-sitecore/GlobalPrimaryNav/GlobalPrimaryNav'), {fallback:
});\nconst GridLayout9NUpBlock = loadable(()=> import(/* webpackChunkName: \"GridLayout9NUpBlock\" */'../components-sitecore/GridLayout9NUpBlock'), {fallback:
});\nconst HeroBannerCarousel = loadable(()=> import(/* webpackChunkName: \"HeroBannerCarousel\" */'../components-sitecore/HeroBannerCarousel/HeroBannerCarousel'), {fallback:
});\nconst HeroImage = loadable(()=> import(/* webpackChunkName: \"HeroImage\" */'../components-sitecore/HeroImage'), {fallback:
});\nconst Highlights = loadable(()=> import(/* webpackChunkName: \"Highlights\" */'../components-sitecore/Highlights'), {fallback:
});\nconst HomeArticleBlock = loadable(()=> import(/* webpackChunkName: \"HomeArticleBlock\" */'../components-sitecore/HomeArticleBlock'), {fallback:
});\nconst HomeBlock2Up = loadable(()=> import(/* webpackChunkName: \"HomeBlock2Up\" */'../components-sitecore/HomeBlock2Up'), {fallback:
});\nconst HomeFreeTextBlock = loadable(()=> import(/* webpackChunkName: \"HomeFreeTextBlock\" */'../components-sitecore/HomeFreeTextBlock'), {fallback:
});\nconst HomeStatsLayout = loadable(()=> import(/* webpackChunkName: \"HomeStatsLayout\" */'../components-sitecore/HomeStatsLayout'), {fallback:
});\nconst HorizontalTab = loadable(()=> import(/* webpackChunkName: \"HorizontalTab\" */'../components-sitecore/HorizontalTab/HorizontalTab'), {fallback:
});\nconst HorizontalTabTextAndImage = loadable(()=> import(/* webpackChunkName: \"HorizontalTabTextAndImage\" */'../components-sitecore/HorizontalTabTextAndImage/HorizontalTabTextAndImage'), {fallback:
});\nconst ImagesCarousel = loadable(()=> import(/* webpackChunkName: \"ImagesCarousel\" */'../components-sitecore/ImagesCarousel'), {fallback:
});\nconst JobListingCarousel = loadable(()=> import(/* webpackChunkName: \"JobListingCarousel\" */'../components-sitecore/JobListingCarousel/JobListingCarousel'), {fallback:
});\nconst Link = loadable(()=> import(/* webpackChunkName: \"Link\" */'../components-sitecore/Link'), {fallback:
});\nconst LocationDetails = loadable(()=> import(/* webpackChunkName: \"LocationDetails\" */'../components-sitecore/LocationDetails'), {fallback:
});\nconst LocationInfoBlock = loadable(()=> import(/* webpackChunkName: \"LocationInfoBlock\" */'../components-sitecore/LocationInfoBlock'), {fallback:
});\nconst LocationSearch = loadable(()=> import(/* webpackChunkName: \"LocationSearch\" */'../components-sitecore/LocationSearch'), {fallback:
});\nconst PageNotFound = loadable(()=> import(/* webpackChunkName: \"PageNotFound\" */'../components-sitecore/PageNotFound'), {fallback:
});\nconst PageTitle = loadable(()=> import(/* webpackChunkName: \"PageTitle\" */'../components-sitecore/PageTitle'), {fallback:
});\nconst PersonnelBlock = loadable(()=> import(/* webpackChunkName: \"PersonnelBlock\" */'../components-sitecore/PersonnelBlock'), {fallback:
});\nconst PersonProfile = loadable(()=> import(/* webpackChunkName: \"PersonProfile\" */'../components-sitecore/PersonProfile'), {fallback:
});\nconst ProviderDetailsComponent = loadable(()=> import(/* webpackChunkName: \"ProviderDetailsComponent\" */'../components-sitecore/ProviderDetailsComponent/ProviderDetailsComponent'), {fallback:
});\nconst ProviderSearch = loadable(()=> import(/* webpackChunkName: \"ProviderSearch\" */'../components-sitecore/ProviderSearch'), {fallback:
});\nconst RegionsMap = loadable(()=> import(/* webpackChunkName: \"RegionsMap\" */'../components-sitecore/RegionsMap'), {fallback:
});\nconst RegionsProviderSearch = loadable(()=> import(/* webpackChunkName: \"RegionsProviderSearch\" */'../components-sitecore/RegionsProviderSearch'), {fallback:
});\nconst SendUsAnEmail = loadable(()=> import(/* webpackChunkName: \"SendUsAnEmail\" */'../components-sitecore/SendUsAnEmail'), {fallback:
});\nconst SimpleContentBlock = loadable(()=> import(/* webpackChunkName: \"SimpleContentBlock\" */'../components-sitecore/SimpleContentBlock'), {fallback:
});\nconst Sitemap = loadable(()=> import(/* webpackChunkName: \"Sitemap\" */'../components-sitecore/Sitemap'), {fallback:
});\nconst Stat = loadable(()=> import(/* webpackChunkName: \"Stat\" */'../components-sitecore/Stat'), {fallback:
});\nconst Stats3Up = loadable(()=> import(/* webpackChunkName: \"Stats3Up\" */'../components-sitecore/Stats3Up'), {fallback:
});\nconst StatsCarousel = loadable(()=> import(/* webpackChunkName: \"StatsCarousel\" */'../components-sitecore/StatsCarousel'), {fallback:
});\nconst StepProcess = loadable(()=> import(/* webpackChunkName: \"StepProcess\" */'../components-sitecore/StepProcess/StepProcess'), {fallback:
});\nconst StickyAnchorNavigation = loadable(()=> import(/* webpackChunkName: \"StickyAnchorNavigation\" */'../components-sitecore/StickyAnchorNavigation'), {fallback:
});\nconst TestimonialQuote = loadable(()=> import(/* webpackChunkName: \"TestimonialQuote\" */'../components-sitecore/TestimonialQuote'), {fallback:
});\nconst TextAndImageLeft = loadable(()=> import(/* webpackChunkName: \"TextAndImageLeft\" */'../components-sitecore/TextAndImageLeft'), {fallback:
});\nconst TextAndImageRight = loadable(()=> import(/* webpackChunkName: \"TextAndImageRight\" */'../components-sitecore/TextAndImageRight'), {fallback:
});\nconst TextAndImageRightFullColor = loadable(()=> import(/* webpackChunkName: \"TextAndImageRightFullColor\" */'../components-sitecore/TextAndImageRightFullColor'), {fallback:
});\nconst TextAndImageTop = loadable(()=> import(/* webpackChunkName: \"TextAndImageTop\" */'../components-sitecore/TextAndImageTop'), {fallback:
});\nconst TwoTwoLayoutTiles = loadable(()=> import(/* webpackChunkName: \"TwoTwoLayoutTiles\" */'../components-sitecore/TwoTwoLayoutTiles'), {fallback:
});\nconst VerticalTab = loadable(()=> import(/* webpackChunkName: \"VerticalTab\" */'../components-sitecore/VerticalTab'), {fallback:
});\n\nconst components = new Map();\ncomponents.set('AdditionalContacts', AdditionalContacts);\ncomponents.set('AnchorLink', AnchorLink);\ncomponents.set('ArticleBlock', ArticleBlock);\ncomponents.set('Breadcrumb', Breadcrumb);\ncomponents.set('BrightcoveVideoExperience', BrightcoveVideoExperience);\ncomponents.set('CovidBanner', CovidBanner);\ncomponents.set('FAQAccordion', FAQAccordion);\ncomponents.set('FooterExpandableNavList', FooterExpandableNavList);\ncomponents.set('FooterLanguagesNavList', FooterLanguagesNavList);\ncomponents.set('FooterNavList', FooterNavList);\ncomponents.set('FooterSocialNavList', FooterSocialNavList);\ncomponents.set('FVNUpContentBlock', FVNUpContentBlock);\ncomponents.set('GlobalFooter', GlobalFooter);\ncomponents.set('GlobalPrimaryNav', GlobalPrimaryNav);\ncomponents.set('GridLayout9NUpBlock', GridLayout9NUpBlock);\ncomponents.set('HeroBannerCarousel', HeroBannerCarousel);\ncomponents.set('HeroImage', HeroImage);\ncomponents.set('Highlights', Highlights);\ncomponents.set('HomeArticleBlock', HomeArticleBlock);\ncomponents.set('HomeBlock2Up', HomeBlock2Up);\ncomponents.set('HomeFreeTextBlock', HomeFreeTextBlock);\ncomponents.set('HomeStatsLayout', HomeStatsLayout);\ncomponents.set('HorizontalTab', HorizontalTab);\ncomponents.set('HorizontalTabTextAndImage', HorizontalTabTextAndImage);\ncomponents.set('ImagesCarousel', ImagesCarousel);\ncomponents.set('JobListingCarousel', JobListingCarousel);\ncomponents.set('Link', Link);\ncomponents.set('LocationDetails', LocationDetails);\ncomponents.set('LocationInfoBlock', LocationInfoBlock);\ncomponents.set('LocationSearch', LocationSearch);\ncomponents.set('PageNotFound', PageNotFound);\ncomponents.set('PageTitle', PageTitle);\ncomponents.set('PersonnelBlock', PersonnelBlock);\ncomponents.set('PersonProfile', PersonProfile);\ncomponents.set('ProviderDetailsComponent', ProviderDetailsComponent);\ncomponents.set('ProviderSearch', ProviderSearch);\ncomponents.set('RegionsMap', RegionsMap);\ncomponents.set('RegionsProviderSearch', RegionsProviderSearch);\ncomponents.set('SendUsAnEmail', SendUsAnEmail);\ncomponents.set('SimpleContentBlock', SimpleContentBlock);\ncomponents.set('Sitemap', Sitemap);\ncomponents.set('Stat', Stat);\ncomponents.set('Stats3Up', Stats3Up);\ncomponents.set('StatsCarousel', StatsCarousel);\ncomponents.set('StepProcess', StepProcess);\ncomponents.set('StickyAnchorNavigation', StickyAnchorNavigation);\ncomponents.set('TestimonialQuote', TestimonialQuote);\ncomponents.set('TextAndImageLeft', TextAndImageLeft);\ncomponents.set('TextAndImageRight', TextAndImageRight);\ncomponents.set('TextAndImageRightFullColor', TextAndImageRightFullColor);\ncomponents.set('TextAndImageTop', TextAndImageTop);\ncomponents.set('TwoTwoLayoutTiles', TwoTwoLayoutTiles);\ncomponents.set('VerticalTab', VerticalTab);\n\nexport default function componentFactory(componentName) {\n return components.get(componentName);\n};\n","import { SitecoreContextFactory } from '@sitecore-jss/sitecore-jss-react';\r\n\r\n/*\r\n The SitecoreContextFactory stores the current Sitecore context for the app.\r\n For example, whether the page is currently being edited, or the current language.\r\n Note that the export makes this essentially a singleton, so we can store state in it.\r\n\r\n The Sitecore context is generally updated on route change (/src/index.js).\r\n The `withSitecoreContext()` higher order component from `sitecore-jss-react`\r\n can be used to access the context from within a component.\r\n*/\r\nexport default new SitecoreContextFactory();\r\n","import axios from 'axios';\r\n\r\n/**\r\n * Implements a data fetcher using Axios - replace with your favorite\r\n * SSR-capable HTTP or fetch 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\nexport function dataFetcher(url, data) {\r\n return axios({\r\n url,\r\n method: data ? 'POST' : 'GET',\r\n data,\r\n // note: axios 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 withCredentials: true,\r\n });\r\n}\r\n","import { debounce } from 'lodash';\r\n\r\nexport default function useDebouncedCallback(callback, delay, options = {}) {\r\n return debounce(callback, delay, options);\r\n}\r\n","import React from 'react';\r\nimport {\r\n withSitecoreContext,\r\n Placeholder,\r\n getChildPlaceholder,\r\n} from '@sitecore-jss/sitecore-jss-react';\r\nimport get from 'lodash/get';\r\n\r\n// This component can be used to render a static layout placed in the sitecore context\r\n// https://jss.sitecore.com/docs/techniques/extending-layout-service/layoutservice-static-context-rendering\r\nfunction ConditionalStaticPlaceholder({\r\n sitecoreContext,\r\n contextKey,\r\n name,\r\n ...otherProps\r\n}) {\r\n let placeholderData = get(sitecoreContext, contextKey, {});\r\n\r\n // if we have route data that places components in the target placeholder,\r\n // we're editing the definition item of the static item, so we should\r\n // render as a normal placeholder\r\n if (sitecoreContext.route) {\r\n const childPlaceholder = getChildPlaceholder(\r\n sitecoreContext.route,\r\n name\r\n );\r\n\r\n if (\r\n childPlaceholder &&\r\n childPlaceholder.some((rendering) => rendering.componentName)\r\n ) {\r\n placeholderData = sitecoreContext.route;\r\n }\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default withSitecoreContext()(ConditionalStaticPlaceholder);\r\n","import React, { useEffect } from 'react';\r\nimport {\r\n Placeholder,\r\n VisitorIdentification,\r\n} from '@sitecore-jss/sitecore-jss-react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport axios from 'axios';\r\nimport Helmet from 'react-helmet';\r\nimport {\r\n usePageLayoutAnalytics,\r\n useScrollTracking,\r\n ANALYTICS_EVENT,\r\n ANALYTICS_NULL_VALUES,\r\n} from '@fhs/shared/src/analytics';\r\nimport { useWindowEvent } from './hooks/events';\r\nimport usePureDebouncedCallback from './hooks/usePureDebouncedCallback';\r\nimport ConditionalStaticPlaceholder from './ConditionalStaticPlaceholder';\r\n\r\n// Analytics error handling starts\r\naxios.interceptors.response.use(\r\n (response) => response,\r\n (error) => {\r\n // Any status codes that falls outside the range of 2xx cause this function to trigger\r\n // Do something with response error\r\n let errorDescription = '';\r\n if (error.response) {\r\n // Request made and server responded\r\n errorDescription = `${error.response.status}:${error.response.statusText}`;\r\n } else if (error.request) {\r\n // Request made and server did not respond\r\n errorDescription = `${error.request.status}:${error.request.statusText}`;\r\n } else {\r\n errorDescription = error.message;\r\n }\r\n\r\n if (window) {\r\n const errorEvent = window.dataLayer.filter(\r\n (item) => item.event === ANALYTICS_EVENT.ERROR_HANDLING\r\n );\r\n\r\n if (errorEvent && !errorEvent.length) {\r\n window.dataLayer.push({\r\n event: ANALYTICS_EVENT.ERROR_HANDLING,\r\n errorInfo: {\r\n description: errorDescription,\r\n fatal: true,\r\n },\r\n });\r\n }\r\n }\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n// Analytics error handling end\r\n\r\n/*\r\n APP LAYOUT\r\n This is where the app's HTML structure and root placeholders should be defined.\r\n\r\n All routes share this root layout by default (this could be customized in RouteHandler),\r\n but components added to inner placeholders are route-specific.\r\n*/\r\nconst Layout = ({ route, context }) => {\r\n useEffect(() => {\r\n if (\r\n window &&\r\n window.google_tag_manager &&\r\n process.env.REACT_APP_FV_GTM_ID\r\n ) {\r\n window.google_tag_manager[\r\n process.env.REACT_APP_FV_GTM_ID\r\n ].dataLayer.reset();\r\n }\r\n }, [route.itemId]);\r\n\r\n let redirectDictionary;\r\n const { t } = useTranslation();\r\n const canonicalUrl = context?.canonicalDataLayer?.canonicalUrl;\r\n\r\n try {\r\n redirectDictionary = JSON.parse(\r\n t('redirects.fv', { defaultValue: '[]' })\r\n );\r\n\r\n redirectDictionary.forEach((val) => {\r\n if (window.location.pathname === val.pathName) {\r\n window.location.replace(val.extRedirect);\r\n }\r\n });\r\n } catch (err) {\r\n redirectDictionary = [];\r\n console.error(\"Fix the 'redirects.fv' dictionary item\");\r\n }\r\n\r\n usePageLayoutAnalytics(route, context);\r\n const { scrollThreshold, setScrollThreshold } = useScrollTracking(route);\r\n\r\n const gtmClickTracking = (event) => {\r\n if (\r\n !event.target.classList ||\r\n event.target.classList.contains('Link')\r\n ) {\r\n return;\r\n }\r\n\r\n const isAnchorTag = event.target.tagName.toLowerCase() === 'a';\r\n const isButton =\r\n event.target.classList.contains('btn') ||\r\n event.target.tagName.toLowerCase() === 'button' ||\r\n event.target.attributes.role?.value === 'button';\r\n\r\n if (!isAnchorTag && !isButton) {\r\n return;\r\n }\r\n\r\n const gtmClickObject = {\r\n event: ANALYTICS_EVENT.CLICK,\r\n clickInfo: {\r\n clickUrl: event.target.href || ANALYTICS_NULL_VALUES.NA_VALUE,\r\n clickElement: event.target.tagName.toLowerCase(),\r\n clickText:\r\n event.target.text ||\r\n event.target.textContent ||\r\n event.target.attributes['aria-label']?.value ||\r\n ANALYTICS_NULL_VALUES.NA_VALUE,\r\n clickElementPosition: '',\r\n clickClass: event.target.classList.value,\r\n },\r\n };\r\n\r\n window.dataLayer.push(gtmClickObject);\r\n };\r\n\r\n // To-Do:: move implementation to hook once usePureDebouncedCallback & useWindowEvent move to shared hooks\r\n const gtmScrollEventCallback = usePureDebouncedCallback(() => {\r\n if (!scrollThreshold || scrollThreshold[90]) {\r\n return;\r\n }\r\n\r\n const scrollTop = window.scrollY;\r\n const bodyHeight = document.body.scrollHeight;\r\n const windowHeight = window.innerHeight;\r\n const scrollPercent = scrollTop / (bodyHeight - windowHeight);\r\n const scrollPercentRounded = Math.round(scrollPercent * 100);\r\n\r\n if (Number(scrollPercentRounded) >= 25 && !scrollThreshold[25]) {\r\n setScrollThreshold((prevState) =>\r\n !prevState[25] ? { ...prevState, 25: true } : prevState\r\n );\r\n }\r\n if (Number(scrollPercentRounded) >= 50 && !scrollThreshold[50]) {\r\n setScrollThreshold((prevState) =>\r\n !prevState[50] ? { ...prevState, 50: true } : prevState\r\n );\r\n }\r\n if (Number(scrollPercentRounded) >= 75 && !scrollThreshold[75]) {\r\n setScrollThreshold((prevState) =>\r\n !prevState[75] ? { ...prevState, 75: true } : prevState\r\n );\r\n }\r\n if (Number(scrollPercentRounded) >= 90 && !scrollThreshold[90]) {\r\n setScrollThreshold((prevState) =>\r\n !prevState[90] ? { ...prevState, 90: true } : prevState\r\n );\r\n }\r\n }, 500);\r\n\r\n useWindowEvent('scroll', gtmScrollEventCallback);\r\n\r\n return (\r\n <>\r\n {/* react-helmet enables setting contents, like title and OG meta tags */}\r\n \r\n {canonicalUrl && }\r\n \r\n {(route.fields &&\r\n route.fields.pageTitle &&\r\n route.fields.pageTitle.value) ||\r\n 'Page'}\r\n \r\n \r\n\r\n {/*\r\n VisitorIdentification is necessary for Sitecore Analytics to determine if the visitor is a robot.\r\n If Sitecore XP (with xConnect/xDB) is used, this is required or else analytics will not be collected for the JSS app.\r\n For XM (CMS-only) apps, this should be removed.\r\n\r\n VI detection only runs once for a given analytics ID, so this is not a recurring operation once cookies are established.\r\n */}\r\n \r\n\r\n {/* root placeholder for the app, which we add components to using route data */}\r\n
\r\n \r\n
\r\n {/*\r\n Rendering for primary nav is in sitecore context and following this technique\r\n https://jss.sitecore.com/docs/techniques/extending-layout-service/layoutservice-static-context-rendering\r\n */}\r\n \r\n {/* */}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {/*\r\n Rendering for footer is in sitecore context and following this technique\r\n https://jss.sitecore.com/docs/techniques/extending-layout-service/layoutservice-static-context-rendering\r\n */}\r\n \r\n {/* */}\r\n
\r\n
\r\n\r\n {/* Modals will be mounted here via react portal to facilitate easier focus management */}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default Layout;\r\n","import React from 'react';\r\n\r\n// Renders a route-not-found message when no route is available from Sitecore\r\n// The JSS equivalent of a 404 Not Found page.\r\n\r\n// This is invoked from RouteHandler when Sitecore returns no valid route data.\r\n// The NotFound component receives the Layout Service Context data, but no route data.\r\n// This can be used to power parts of your site, such as navigation, from LS context additions\r\n// without losing the ability to render them on your 404 pages :)\r\n\r\nconst NotFound = ({ context = { site: { name: '' }, language: '' } }) => (\r\n \r\n

Page not found

\r\n

This page does not exist.

\r\n

\r\n Site: {context.site && context.site.name}\r\n
\r\n Language: {context.language}\r\n

\r\n
\r\n);\r\n\r\nexport default NotFound;\r\n","import React from 'react';\r\nimport i18n from 'i18next';\r\nimport Helmet from 'react-helmet';\r\nimport {\r\n isExperienceEditorActive,\r\n dataApi,\r\n} from '@sitecore-jss/sitecore-jss-react';\r\nimport SitecoreContextFactory from './lib/SitecoreContextFactory';\r\nimport { dataFetcher } from './dataFetcher';\r\nimport config from './temp/config';\r\nimport Layout from './Layout';\r\nimport NotFound from './NotFound';\r\nimport Spinner from './components-common/Spinner';\r\n\r\n// Dynamic route handler for Sitecore items.\r\n// Because JSS app routes are defined in Sitecore, traditional static React routing isn't enough -\r\n// we need to be able to load dynamic route data from Sitecore after the client side route changes.\r\n// So react-router delegates all route rendering to this handler, which attempts to get the right\r\n// route data from Sitecore - and if none exists, renders the not found component.\r\n\r\nlet ssrInitialState = null;\r\n\r\nexport default class RouteHandler extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isFetching: false,\r\n notFound: true,\r\n routeData: ssrInitialState, // null when client-side rendering\r\n defaultLanguage: config.defaultLanguage,\r\n };\r\n\r\n if (\r\n ssrInitialState &&\r\n ssrInitialState.sitecore &&\r\n ssrInitialState.sitecore.route\r\n ) {\r\n // set the initial sitecore context data if we got SSR initial state\r\n SitecoreContextFactory.setSitecoreContext({\r\n route: ssrInitialState.sitecore.route,\r\n itemId: ssrInitialState.sitecore.route.itemId,\r\n ...ssrInitialState.sitecore.context,\r\n });\r\n }\r\n\r\n // route data from react-router - if route was resolved, it's not a 404\r\n if (props.route !== null) {\r\n this.state.notFound = false;\r\n }\r\n\r\n // if we have an initial SSR state, and that state doesn't have a valid route data,\r\n // then this is a 404 route.\r\n if (\r\n ssrInitialState &&\r\n (!ssrInitialState.sitecore || !ssrInitialState.sitecore.route)\r\n ) {\r\n this.state.notFound = true;\r\n }\r\n\r\n // if we have an SSR state, and that state has language data, set the current language\r\n // (this makes the language of content follow the Sitecore context language cookie)\r\n // note that a route-based language (i.e. /de-DE) will override this default; this is for home.\r\n if (\r\n ssrInitialState &&\r\n ssrInitialState.context &&\r\n ssrInitialState.context.language\r\n ) {\r\n this.state.defaultLanguage = ssrInitialState.context.language;\r\n }\r\n\r\n // once we initialize the route handler, we've \"used up\" the SSR data,\r\n // if it existed, so we want to clear it now that it's in react state.\r\n // future route changes that might destroy/remount this component should ignore any SSR data.\r\n // EXCEPTION: Unless we are still SSR-ing. Because SSR can re-render the component twice\r\n // (once to find GraphQL queries that need to run, the second time to refresh the view with\r\n // GraphQL query results)\r\n // We test for SSR by checking for Node-specific process.env variable.\r\n if (typeof window !== 'undefined') {\r\n ssrInitialState = null;\r\n }\r\n\r\n this.componentIsMounted = false;\r\n this.languageIsChanging = false;\r\n\r\n // tell i18next to sync its current language with the route language\r\n this.updateLanguage();\r\n }\r\n\r\n componentDidMount() {\r\n // if no existing routeData is present (from SSR), get Layout Service fetching the route data\r\n if (!this.state.routeData) {\r\n this.updateRouteData();\r\n }\r\n\r\n this.componentIsMounted = true;\r\n }\r\n\r\n componentWillUnmount() {\r\n this.componentIsMounted = false;\r\n }\r\n\r\n /**\r\n * Loads route data from Sitecore Layout Service into state.routeData\r\n */\r\n updateRouteData() {\r\n let sitecoreRoutePath =\r\n this.props.route.match.params.sitecoreRoute || '/';\r\n if (!sitecoreRoutePath.startsWith('/')) {\r\n sitecoreRoutePath = `/${sitecoreRoutePath}`;\r\n }\r\n\r\n const language =\r\n this.props.route.match.params.lang || this.state.defaultLanguage;\r\n\r\n this.setState({ isFetching: true });\r\n\r\n // get the route data for the new route\r\n getRouteData(sitecoreRoutePath, language).then((routeData) => {\r\n if (\r\n routeData !== null &&\r\n routeData.sitecore &&\r\n routeData.sitecore.route\r\n ) {\r\n // set the sitecore context data and push the new route\r\n SitecoreContextFactory.setSitecoreContext({\r\n route: routeData.sitecore.route,\r\n itemId: routeData.sitecore.route.itemId,\r\n ...routeData.sitecore.context,\r\n });\r\n this.setState({\r\n routeData,\r\n notFound: false,\r\n isFetching: false,\r\n });\r\n } else {\r\n this.setState({ routeData, notFound: true, isFetching: false });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Updates the current app language to match the route data.\r\n */\r\n updateLanguage() {\r\n const newLanguage =\r\n this.props.route.match.params.lang || this.state.defaultLanguage;\r\n\r\n if (i18n.language !== newLanguage) {\r\n this.languageIsChanging = true;\r\n\r\n i18n.changeLanguage(newLanguage, () => {\r\n this.languageIsChanging = false;\r\n\r\n // if the component is not mounted, we don't care\r\n // (next time it mounts, it will render with the right language context)\r\n if (this.componentIsMounted) {\r\n // after we change the i18n language, we need to force-update React,\r\n // since otherwise React won't know that the dictionary has changed\r\n // because it is stored in i18next state not React state\r\n this.forceUpdate();\r\n }\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate(previousProps) {\r\n const existingRoute = previousProps.route.match.url;\r\n const newRoute = this.props.route.match.url;\r\n\r\n // don't change state (refetch route data) if the route has not changed\r\n if (existingRoute === newRoute) {\r\n return;\r\n }\r\n\r\n // if in experience editor - force reload instead of route data update\r\n // avoids confusing Sitecore's editing JS\r\n if (isExperienceEditorActive()) {\r\n window.location.assign(newRoute);\r\n return;\r\n }\r\n\r\n this.updateLanguage();\r\n this.updateRouteData();\r\n }\r\n\r\n render() {\r\n const { notFound, routeData } = this.state;\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 if (notFound) {\r\n return (\r\n
\r\n \r\n {i18n.t('Page not found')}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n // Don't render anything if the route data or dictionary data is not fully loaded yet.\r\n // This is a good place for a \"Loading\" component, if one is needed.\r\n if (!routeData || this.languageIsChanging) {\r\n return ;\r\n }\r\n\r\n // Render the app's root structural layout\r\n return (\r\n <>\r\n {this.state.isFetching && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Sets the initial state provided by server-side rendering.\r\n * Setting this state will bypass initial route data fetch calls.\r\n * @param {object} ssrState\r\n */\r\nexport function setServerSideRenderingState(ssrState) {\r\n ssrInitialState = ssrState;\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, language) {\r\n const fetchOptions = {\r\n layoutServiceConfig: { host: config.sitecoreApiHost },\r\n querystringParams: {\r\n sc_lang: language,\r\n sc_apikey: config.sitecoreApiKey,\r\n },\r\n fetcher: dataFetcher,\r\n };\r\n\r\n return dataApi.fetchRouteData(route, fetchOptions).catch((error) => {\r\n if (\r\n error.response &&\r\n error.response.status === 404 &&\r\n error.response.data\r\n ) {\r\n return error.response.data;\r\n }\r\n\r\n console.error('Route data fetch error', error, error.response);\r\n\r\n return null;\r\n });\r\n}\r\n","import { useEffect } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\n// Run effects after router pathname change to scroll to top\r\n// Must be rendered inside of router\r\n// https://reactrouter.com/web/guides/scroll-restoration\r\nexport default function ScrollToTop() {\r\n const { pathname } = useLocation();\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, [pathname]);\r\n\r\n return null;\r\n}\r\n","import './App.scss';\r\nimport 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\n\r\nimport React from 'react';\r\nimport { SitecoreContext } from '@sitecore-jss/sitecore-jss-react';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport { ApolloProvider } from 'react-apollo';\r\nimport componentFactory from './temp/componentFactory';\r\nimport SitecoreContextFactory from './lib/SitecoreContextFactory';\r\nimport RouteHandler from './RouteHandler';\r\nimport ScrollToTop from './ScrollToTop';\r\nimport NotFound from './NotFound';\r\n\r\n// This is the main JSX entry point of the app invoked by the renderer (server or client rendering).\r\n// By default the app's normal rendering is delegated to that handles the loading of JSS route data.\r\n\r\n// support languages in the URL prefix\r\n// e.g. /da-DK/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\n// wrap the app with:\r\n// ApolloProvider: provides an instance of Apollo GraphQL client to the app to make Connected GraphQL queries.\r\n// Not needed if not using connected GraphQL.\r\n// SitecoreContext: provides component resolution and context services via withSitecoreContext\r\n// Router: provides a basic routing setup that will resolve Sitecore item routes and allow for language URL prefixes.\r\nconst AppRoot = ({ path, Router, graphQLClient }) => {\r\n const routeRenderFunction = (props) => ;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {routePatterns.map((routePattern) => (\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 'isomorphic-fetch';\r\nimport { ApolloClient } from 'apollo-client';\r\nimport {\r\n InMemoryCache,\r\n IntrospectionFragmentMatcher,\r\n} from 'apollo-cache-inmemory';\r\n\r\n/*\r\n QUERY LINK SELECTION\r\n A link is transport which GraphQL queries are pushed across.\r\n You have many choices.\r\n See the apollo-link documentation for more details.\r\n\r\n NOTE: to use Sitecore Experience Editor it is essential that your\r\n link passes cookies along with requests (credentials: 'include').\r\n*/\r\n\r\n// choose between a basic HTTP link to run queries...\r\n// import { createHttpLink } from 'apollo-link-http';\r\n// const link = createHttpLink({ uri: endpoint, credentials: 'include' });\r\n\r\n// ...or a batched link (multiple queries within 10ms all go in one HTTP request)\r\nimport { BatchHttpLink } from 'apollo-link-batch-http';\r\n\r\n// ...and an automatic persisted query link, which reduces bandwidth by using query hashes to alias content\r\n// the APQ link is _chained_ behind another link that performs the actual HTTP calls, so you can choose\r\n// APQ + batched, or APQ + http links for example.\r\nimport { createPersistedQueryLink } from 'apollo-link-persisted-queries';\r\n\r\n/*\r\n INTROSPECTION DATA\r\n See https://www.apollographql.com/docs/react/recipes/fragment-matching.html\r\n This enables the Apollo cache to process fragments on interface types correctly.\r\n If this file does not exist, you may need to run the `jss graphql:update` script.\r\n*/\r\nimport introspectionQueryResultData from '../temp/GraphQLFragmentTypes.json';\r\n\r\nexport default function (endpoint, ssr, initialCacheState) {\r\n /* HTTP link selection: default to batched + APQ */\r\n const link = createPersistedQueryLink().concat(\r\n new BatchHttpLink({ uri: endpoint, credentials: 'include' })\r\n );\r\n\r\n const cache = new InMemoryCache({\r\n fragmentMatcher: new IntrospectionFragmentMatcher({\r\n introspectionQueryResultData,\r\n }),\r\n });\r\n\r\n return new ApolloClient({\r\n ssrMode: ssr,\r\n ssrForceFetchDelay: 100,\r\n link,\r\n cache: cache.restore(initialCacheState),\r\n });\r\n}\r\n","import i18n from 'i18next';\r\nimport fetchBackend from 'i18next-fetch-backend';\r\nimport { initReactI18next } from 'react-i18next';\r\nimport config from './temp/config';\r\n\r\n/**\r\n * Initializes the i18next library to provide a translation dictionary to the app.\r\n * If your app is not multilingual, this file and references to it can be removed.\r\n * Elsewhere in the app to use the dictionary you can use the `import { useTranslation } from 'react-i18next';`\r\n * https://react.i18next.com/latest/usetranslation-hook\r\n * @param {string} language Optional, the initial language. Only used for SSR; otherwise language set in RouteHandler.\r\n * @param {*} dictionary Optional, the dictionary to load. Only used for SSR; otherwise, the dictionary is loaded via JSS dictionary service.\r\n */\r\nexport default function i18nInit(language, dictionary) {\r\n return new Promise((resolve, reject) => {\r\n const options = {\r\n debug: false,\r\n lng: language,\r\n fallbackLng: false, // fallback to keys\r\n load: 'currentOnly', // e.g. don't load 'es' when requesting 'es-MX' -- Sitecore config should handle this\r\n useCookie: false, // using URLs and Sitecore to store language context, don't need a cookie\r\n keySeparator: false, // do not try to separate with '.' char, our json response is flat\r\n\r\n interpolation: {\r\n escapeValue: false, // not needed for react\r\n },\r\n };\r\n\r\n if (dictionary) {\r\n // if we got dictionary passed, that means we're in a SSR context with a server-provided dictionary\r\n // so we do not want a backend, because we already know all possible keys\r\n\r\n if (!i18n.isInitialized) {\r\n i18n.use(initReactI18next).init(options, (error) => {\r\n if (error) reject(error);\r\n\r\n i18n.addResourceBundle(\r\n language,\r\n 'translation',\r\n dictionary,\r\n true,\r\n true\r\n );\r\n\r\n resolve();\r\n });\r\n } else {\r\n i18n.changeLanguage(language).then(() => {\r\n i18n.addResourceBundle(\r\n language,\r\n 'translation',\r\n dictionary,\r\n true,\r\n true\r\n );\r\n\r\n resolve();\r\n });\r\n }\r\n } else {\r\n // We're running client-side, so we get translation data from the Sitecore dictionary API using fetch backend\r\n // For higher performance (but less simplicity), consider adding the i18n chained backend to a local cache option like the local storage backend.\r\n\r\n // eslint-disable-next-line\r\n const dictionaryServicePath = `${config.sitecoreApiHost}/sitecore/api/jss/dictionary/${config.jssAppName}/{{lng}}?sc_apikey=${config.sitecoreApiKey}`;\r\n\r\n options.backend = {\r\n loadPath: dictionaryServicePath,\r\n parse: (data) => {\r\n const parsedData = JSON.parse(data);\r\n if (parsedData.phrases) {\r\n return parsedData.phrases;\r\n }\r\n return parsedData;\r\n },\r\n };\r\n\r\n i18n.use(fetchBackend)\r\n .use(initReactI18next)\r\n .init(options, (error) => {\r\n if (error) reject(error);\r\n\r\n resolve();\r\n });\r\n }\r\n });\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport 'focus-visible';\r\n\r\n// Polyfill for object-fit because IE 11:\r\n// https://github.com/fregante/object-fit-images\r\nimport objectFitImages from 'object-fit-images';\r\n\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 { setServerSideRenderingState } from './RouteHandler';\r\nimport GraphQLClientFactory from './lib/GraphQLClientFactory';\r\nimport config from './temp/config';\r\nimport i18ninit from './i18n';\r\n\r\n// Added for code splitting\r\nimport { loadableReady } from '@loadable/component';\r\n\r\n/* eslint-disable no-underscore-dangle */\r\n\r\nlet renderFunction = ReactDOM.render;\r\n\r\nlet initLanguage = config.defaultLanguage;\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\nlet __JSS_STATE__ = null;\r\nconst ssrRawJson = document.getElementById('__JSS_STATE__');\r\nif (ssrRawJson) {\r\n __JSS_STATE__ = JSON.parse(ssrRawJson.innerHTML);\r\n}\r\nif (__JSS_STATE__) {\r\n // push the initial SSR state into the route handler, where it will be used\r\n setServerSideRenderingState(__JSS_STATE__);\r\n\r\n // when React initializes from a SSR-based initial state, you need to render with `hydrate` instead of `render`\r\n renderFunction = ReactDOM.hydrate;\r\n\r\n // set i18n language SSR state language instead of static config default language\r\n initLanguage = __JSS_STATE__.sitecore.context.language;\r\n}\r\n\r\n/*\r\n GraphQL Data\r\n The Apollo Client needs to be initialized to make GraphQL available to the JSS app.\r\n Not using GraphQL? Remove this, and the ApolloContext from `AppRoot`.\r\n*/\r\n// Apollo supports SSR of GraphQL queries, so like JSS SSR, it has an object we can pre-hydrate the client cache from\r\n// to avoid needing to re-run GraphQL queries after the SSR page loads\r\nconst initialGraphQLState =\r\n __JSS_STATE__ && __JSS_STATE__.APOLLO_STATE\r\n ? __JSS_STATE__.APOLLO_STATE\r\n : null;\r\n\r\nconst graphQLClient = GraphQLClientFactory(\r\n config.graphQLEndpoint,\r\n false,\r\n initialGraphQLState\r\n);\r\n\r\n/*\r\n App Rendering\r\n*/\r\n// initialize the dictionary, then render the app\r\n// note: if not making a multilingual app, the dictionary init can be removed.\r\ni18ninit(initLanguage).then(() => {\r\n // Added for code splitting\r\n loadableReady(() => {\r\n // HTML element to place the app into\r\n const rootElement = document.getElementById('root');\r\n\r\n renderFunction(\r\n ,\r\n rootElement,\r\n () => objectFitImages()\r\n );\r\n });\r\n});\r\n","const ANALYTICS_CATEGORY_NAME = {\r\n PROVIDER_PAGE: 'provider',\r\n PROVIDER_RESULT_PAGE: 'provider-result-page',\r\n LOCATION_PAGE: 'location',\r\n FAQ_PAGE: 'faqs',\r\n FAQ_RESULT_PAGE: 'faqs-result-page',\r\n LOCATION_RESULT_PAGE: 'location-result-page',\r\n CONDITION_PAGE: 'condition',\r\n SPECIALTY_PAGE: 'speciality',\r\n SERVICE_PAGE: 'service',\r\n TREATMENT_PAGE: 'treatment',\r\n CONDITION_RESULT_PAGE: 'specialty-result-page',\r\n BLOG_PAGE: 'blog',\r\n BLOG_RESULT_PAGE: 'content-page',\r\n GLOBAL_SEARCH_ALL: 'gs:all',\r\n GLOBAL_SEARCH_PROVIDERS: 'gs:providers',\r\n GLOBAL_SEARCH_LOCATIONS: 'gs:locations',\r\n GLOBAL_SEARCH_SERVICES: 'gs:services',\r\n GLOBAL_SEARCH_BLOGS: 'gs:blogs',\r\n GLOBAL_SEARCH_OTHERS: 'gs:others',\r\n};\r\n\r\nconst ANALYTICS_SEARCH_TYPE = {\r\n TYPED: 'typed',\r\n POPULAR: 'popular',\r\n TYPED_RECOMMENDED: 'typed-and-recommended',\r\n ALL_CTSS: 'all-ctss',\r\n ALL_PROVIDER: 'all-provider',\r\n ALL_LOCATION: 'all-location',\r\n ALL_BLOG: 'all-blog',\r\n};\r\n\r\nconst ANALYTICS_SORT_ORDER = {\r\n MOST_RELEVANT: 'most-relevant',\r\n};\r\n\r\nconst ANALYTICS_NULL_VALUES = {\r\n NA_VALUE: 'na',\r\n NO_SEARCH_TERM: 'no-search-term-available',\r\n};\r\n\r\nconst ANALYTICS_RESOURCE_NAME = {\r\n PROVIDER: 'prov',\r\n LOCATIONS: 'loc',\r\n CONDITION: 'cond',\r\n TREATMENT: 'trt',\r\n SPECIALTY: 'spc',\r\n SERVICES: 'serv',\r\n BLOG: 'blog',\r\n OTHERS: 'other',\r\n FAQ: 'faq',\r\n};\r\n\r\nconst ANALYTICS_EVENT = {\r\n CLICK: 'click',\r\n SEARCH_FILTER: 'search-filter',\r\n INTERNAL_SEARCH: 'internal-search',\r\n PAGE_VIEW: 'page-view',\r\n PAGE_SECTION_VIEW: 'page-section-view',\r\n SEARCH_RESULT_CLICK: 'search-result-click',\r\n SCROLL: 'scroll',\r\n GLOBAL_SEARCH: 'global-search',\r\n GLOBAL_SEARCH_RESULT_CLICK: 'global-search-result-click',\r\n ERROR_HANDLING: 'exception',\r\n};\r\n\r\nconst ANALYTICS_VIEW = {\r\n LIST: 'list',\r\n MAP: 'map',\r\n GLOBAL_DROPDOWN: 'gs-dropdown',\r\n};\r\n\r\nconst ANALYTICS_PAGE_NAME = {\r\n PAGE_NAME_LIST: 'result-list',\r\n PAGE_NAME_MAP: 'result-map',\r\n};\r\n\r\nconst ANALYTICS_SITE_NAME = {\r\n M_HEALTH_FAIRVIEW: process.env.REACT_APP_MHF_SITE_NAME,\r\n FAIRVIEW: process.env.REACT_APP_FV_SITE_NAME,\r\n};\r\n\r\nconst ANALYTICS_PAGE_HIERARCHY = {\r\n [ANALYTICS_SITE_NAME.M_HEALTH_FAIRVIEW]: {\r\n HIERARCHY_PROVIDER: 'mhf/find-a-provider',\r\n HIERARCHY_LOCATION: 'mhf/find-a-location',\r\n HIERARCHY_CONDITION: 'mhf/find-a-specialty',\r\n HIERARCHY_BLOG: 'mhf/find-a-blog-news',\r\n HIERARCHY_FAQ: 'mhf/find-a-faq',\r\n },\r\n [ANALYTICS_SITE_NAME.FAIRVIEW]: {\r\n HIERARCHY_PROVIDER: 'fv/find-a-provider',\r\n },\r\n};\r\n\r\nexport {\r\n ANALYTICS_CATEGORY_NAME,\r\n ANALYTICS_SEARCH_TYPE,\r\n ANALYTICS_SORT_ORDER,\r\n ANALYTICS_NULL_VALUES,\r\n ANALYTICS_EVENT,\r\n ANALYTICS_VIEW,\r\n ANALYTICS_PAGE_NAME,\r\n ANALYTICS_PAGE_HIERARCHY,\r\n ANALYTICS_SITE_NAME,\r\n ANALYTICS_RESOURCE_NAME,\r\n};\r\n","function clearAnalyticEvent(eventToRemove) {\r\n const indexEvent = window.dataLayer.findIndex(\r\n (dataLayer) => dataLayer.event === eventToRemove\r\n );\r\n\r\n if (indexEvent !== -1) {\r\n const gtmEventObject = { ...window.dataLayer[indexEvent] };\r\n window.dataLayer.splice(indexEvent, 1);\r\n return gtmEventObject;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nexport default clearAnalyticEvent;\r\n","import { ANALYTICS_EVENT, ANALYTICS_NULL_VALUES } from './constants';\r\nimport clearAnalyticsEvent from '../utilities/clearAnalyticsEvent';\r\n\r\nconst useGlobalSearchClickAnalytics = (\r\n searchInfo,\r\n resourceDetails,\r\n searchPosition,\r\n customAnalyticObject,\r\n customAnalyticFields\r\n) => {\r\n clearAnalyticsEvent(ANALYTICS_EVENT.GLOBAL_SEARCH_RESULT_CLICK);\r\n\r\n const gtmGlobalSearchResultClick = {\r\n event: ANALYTICS_EVENT.GLOBAL_SEARCH_RESULT_CLICK,\r\n searchInfo: {\r\n searchTerm:\r\n searchInfo.searchTerm || ANALYTICS_NULL_VALUES.NO_SEARCH_TERM,\r\n searchCategory: searchInfo.searchCategory,\r\n searchResultsCount: searchInfo.searchResultsCount,\r\n searchTermCategory: searchInfo.searchTermCategory,\r\n ...customAnalyticFields,\r\n },\r\n resourceInfo: {\r\n resourceDetails,\r\n },\r\n clickedResult: {\r\n searchPosition,\r\n },\r\n ...customAnalyticObject,\r\n };\r\n\r\n window.dataLayer.push(gtmGlobalSearchResultClick);\r\n};\r\n\r\nuseGlobalSearchClickAnalytics.defaultProps = {\r\n customAnalyticObject: {},\r\n customAnalyticFields: {},\r\n};\r\n\r\nexport default useGlobalSearchClickAnalytics;\r\n","import { useEffect } from 'react';\r\nimport { ANALYTICS_EVENT, ANALYTICS_NULL_VALUES } from './constants';\r\nimport clearAnalyticsEvent from '../utilities/clearAnalyticsEvent';\r\n\r\nconst useGlobalSearchAnalytics = (\r\n searchTerm,\r\n searchCategory,\r\n searchResultsCount,\r\n currentPage,\r\n totalPages,\r\n searchTermCategory,\r\n query,\r\n customAnalyticObject,\r\n customAnalyticFields\r\n) => {\r\n useEffect(() => {\r\n clearAnalyticsEvent(ANALYTICS_EVENT.GLOBAL_SEARCH);\r\n if (query.isFetching) {\r\n return;\r\n }\r\n\r\n const gtmGlobalSearchResult = {\r\n event: ANALYTICS_EVENT.GLOBAL_SEARCH,\r\n searchInfo: {\r\n searchTerm: searchTerm || ANALYTICS_NULL_VALUES.NO_SEARCH_TERM,\r\n searchCategory,\r\n searchResultsCount,\r\n searchPageDetails: {\r\n currentPage,\r\n totalPages,\r\n },\r\n searchTermCategory,\r\n ...customAnalyticFields,\r\n },\r\n ...customAnalyticObject,\r\n };\r\n\r\n window.dataLayer.push(gtmGlobalSearchResult);\r\n }, [query.isFetching]);\r\n};\r\n\r\nuseGlobalSearchAnalytics.defaultProps = {\r\n customAnalyticObject: {},\r\n customAnalyticFields: {},\r\n};\r\n\r\nexport default useGlobalSearchAnalytics;\r\n","import { useEffect } from 'react';\r\nimport clearAnalyticsEvent from '../utilities/clearAnalyticsEvent';\r\nimport { ANALYTICS_EVENT } from './constants';\r\n\r\nconst useInternalPageViewAnalytics = (\r\n searchPageName,\r\n searchPageCategory,\r\n searchPageHierarchy,\r\n isResultPage\r\n) => {\r\n useEffect(() => {\r\n if (!isResultPage) {\r\n return;\r\n }\r\n\r\n const gtmPageViewObject = clearAnalyticsEvent(\r\n ANALYTICS_EVENT.PAGE_VIEW\r\n );\r\n\r\n if (gtmPageViewObject) {\r\n gtmPageViewObject.pageInfo.pageName = searchPageName;\r\n gtmPageViewObject.pageInfo.pageCategory = searchPageCategory;\r\n gtmPageViewObject.pageInfo.pageHierarchy = searchPageHierarchy;\r\n window.dataLayer.push(gtmPageViewObject);\r\n }\r\n }, [isResultPage]);\r\n};\r\n\r\nexport default useInternalPageViewAnalytics;\r\n","import { useEffect, useState } from 'react';\r\nimport useInternalPageViewAnalytics from './useInternalPageViewAnalytics';\r\nimport { ANALYTICS_NULL_VALUES, ANALYTICS_EVENT } from './constants';\r\nimport clearAnalyticsEvent from '../utilities/clearAnalyticsEvent';\r\n\r\nconst useInternalSearchAnalytics = (\r\n filtersModel,\r\n resultsModel,\r\n searchParams,\r\n searchParamKeys,\r\n searchInternalCategory,\r\n termCategory,\r\n analyticView,\r\n searchPageName,\r\n searchPageCategory,\r\n searchPageHierarchy,\r\n sortOrder,\r\n customAnalyticObject,\r\n customAnalyticFields\r\n) => {\r\n const [isResultPage, setIsResultPage] = useState(false);\r\n\r\n useInternalPageViewAnalytics(\r\n searchPageName,\r\n searchPageCategory,\r\n searchPageHierarchy,\r\n isResultPage\r\n );\r\n\r\n useEffect(() => {\r\n clearAnalyticsEvent(ANALYTICS_EVENT.INTERNAL_SEARCH);\r\n if (\r\n resultsModel.query?.isLoading ||\r\n resultsModel.query?.isError ||\r\n resultsModel.query?.isFetching ||\r\n resultsModel.query?.isStale ||\r\n resultsModel.numResultsTotal === -1\r\n ) {\r\n return;\r\n }\r\n setIsResultPage(true);\r\n\r\n const gtmInternalSearchResult = {\r\n event: ANALYTICS_EVENT.INTERNAL_SEARCH,\r\n searchInfo: {\r\n searchTerm:\r\n searchParams[searchParamKeys.SEARCH_QUERY] ||\r\n ANALYTICS_NULL_VALUES.NA_VALUE,\r\n location:\r\n searchParams[searchParamKeys.ADDRESS_QUERY] ||\r\n ANALYTICS_NULL_VALUES.NA_VALUE,\r\n searchCategory: searchInternalCategory,\r\n searchResultsCount: resultsModel.numResultsTotal,\r\n searchPageDetails: {\r\n currentPage: resultsModel.currentPageNumber,\r\n totalPages: resultsModel.totalPages,\r\n },\r\n searchSort: sortOrder,\r\n searchView: analyticView,\r\n searchTermCategory: termCategory,\r\n ...customAnalyticFields,\r\n },\r\n filterInfo: {\r\n filterApplied: filtersModel.numFiltersApplied > 0,\r\n },\r\n ...customAnalyticObject,\r\n };\r\n\r\n window.dataLayer.push(gtmInternalSearchResult);\r\n }, [\r\n resultsModel.query?.isFetching,\r\n searchPageName,\r\n resultsModel.numResultsTotal,\r\n sortOrder,\r\n ]);\r\n};\r\n\r\nuseInternalSearchAnalytics.defaultProps = {\r\n customAnalyticObject: {},\r\n customAnalyticFields: {},\r\n};\r\n\r\nexport default useInternalSearchAnalytics;\r\n","import { useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ANALYTICS_EVENT } from './constants';\r\n\r\nfunction getAppropriateSiteVersion(siteName, t) {\r\n switch (siteName) {\r\n case 'MHealthFairviewOrg':\r\n return t('siteinfo.siteVersionMHF', {\r\n defaultValue: '8.1:131123',\r\n });\r\n\r\n case 'PediatricsMHealthFairviewOrg':\r\n return t('siteinfo.siteVersionPEDS', {\r\n defaultValue: '8.1:131123',\r\n });\r\n\r\n case 'FairviewOrg':\r\n return t('siteinfo.siteVersionFV', {\r\n defaultValue: '8.1:131123',\r\n });\r\n\r\n case 'GrandItascaOrg':\r\n return t('siteinfo.siteVersionGICH', {\r\n defaultValue: '8.1:131123',\r\n });\r\n default:\r\n return t('siteinfo.siteVersion', {\r\n defaultValue: '8.1:131123',\r\n });\r\n }\r\n}\r\n\r\nconst usePageLayoutAnalytics = (route, context) => {\r\n const { t } = useTranslation();\r\n\r\n useEffect(() => {\r\n const pageViewObject = {\r\n event: ANALYTICS_EVENT.PAGE_VIEW,\r\n siteInfo: {\r\n environment: context.siteEnvironmentInfo.siteEnvironmentName,\r\n siteVersion: getAppropriateSiteVersion(context.site?.name, t),\r\n },\r\n pageInfo: {\r\n pageName: route.fields.pageName.value.toLowerCase(),\r\n pageCategory: route.fields.pageCategory.value.toLowerCase(),\r\n pageHierarchy: context.gaDataLayer.pageHierarchy,\r\n },\r\n userInfo: {\r\n loginStatus: t('googleAnalytics.userInfo.nonAuthenticated', {\r\n defaultValue: 'non-authenticated',\r\n }),\r\n userType: t('googleAnalytics.userInfo.guest', {\r\n defaultValue: 'guest',\r\n }),\r\n },\r\n };\r\n\r\n if (route.fields.resourceDetails.value) {\r\n pageViewObject.resourceInfo = {\r\n resourceDetails: `${route.fields.resourceDetails.value.trim()}:${route.fields.pageTitle.value.trim()}`,\r\n };\r\n }\r\n\r\n const dataLayerObjCopy = new Array(...window.dataLayer);\r\n window.dataLayer.splice(0, window.dataLayer.length);\r\n dataLayerObjCopy.forEach((obj) => {\r\n if (\r\n (obj?.event && obj.event === 'gtm.js') ||\r\n (obj?.length > 0 && (obj[0] === 'js' || obj[0] === 'config'))\r\n ) {\r\n window.dataLayer.push(obj);\r\n }\r\n });\r\n\r\n window.dataLayer.push(pageViewObject);\r\n }, [route.itemId]);\r\n};\r\n\r\nexport default usePageLayoutAnalytics;\r\n","import { useState, useEffect } from 'react';\r\nimport { ANALYTICS_EVENT } from './constants';\r\n\r\nconst useScrollTracking = (route) => {\r\n const [scrollThreshold, setScrollThreshold] = useState({\r\n 25: false,\r\n 50: false,\r\n 75: false,\r\n 90: false,\r\n });\r\n\r\n useEffect(() => {\r\n setScrollThreshold({\r\n 25: false,\r\n 50: false,\r\n 75: false,\r\n 90: false,\r\n });\r\n }, [route.itemId]);\r\n\r\n useEffect(() => {\r\n const gtmScrollObject = {\r\n event: ANALYTICS_EVENT.SCROLL,\r\n scrollInfo: {\r\n scrollDirection: 'vertical-scroll',\r\n scrollMilestone: '',\r\n },\r\n };\r\n\r\n if (scrollThreshold[90]) {\r\n gtmScrollObject.scrollInfo.scrollMilestone = '90%';\r\n } else if (scrollThreshold[75]) {\r\n gtmScrollObject.scrollInfo.scrollMilestone = '75%';\r\n } else if (scrollThreshold[50]) {\r\n gtmScrollObject.scrollInfo.scrollMilestone = '50%';\r\n } else if (scrollThreshold[25]) {\r\n gtmScrollObject.scrollInfo.scrollMilestone = '25%';\r\n }\r\n\r\n if (!gtmScrollObject.scrollInfo.scrollMilestone) {\r\n return;\r\n }\r\n\r\n window.dataLayer.push(gtmScrollObject);\r\n }, [scrollThreshold]);\r\n\r\n return { scrollThreshold, setScrollThreshold };\r\n};\r\n\r\nexport default useScrollTracking;\r\n","import { useEffect } from 'react';\r\nimport {\r\n ANALYTICS_SORT_ORDER,\r\n ANALYTICS_NULL_VALUES,\r\n ANALYTICS_EVENT,\r\n} from './constants';\r\nimport clearAnalyticEvent from '../utilities/clearAnalyticsEvent';\r\n\r\nconst useSearchFilterAnalytics = (\r\n filtersModel,\r\n resultsModel,\r\n searchParams,\r\n searchParamKeys,\r\n searchCategory,\r\n analyticView,\r\n customAnalyticObject,\r\n customAnalyticFields\r\n) => {\r\n const numResultTotal = resultsModel.numResultsTotal || 0;\r\n const numAppliedFilters = filtersModel.numFiltersApplied || 0;\r\n const filtersApplied = filtersModel.filtersApplied || [];\r\n const isFilterApplied = filtersModel.numFiltersApplied > 0;\r\n\r\n useEffect(() => {\r\n clearAnalyticEvent(ANALYTICS_EVENT.SEARCH_FILTER);\r\n if (\r\n !isFilterApplied ||\r\n resultsModel.query.isLoading ||\r\n resultsModel.query.isError ||\r\n resultsModel.query.isFetching\r\n ) {\r\n return;\r\n }\r\n\r\n const gtmFilterSearchResult = {\r\n event: ANALYTICS_EVENT.SEARCH_FILTER,\r\n searchInfo: {\r\n searchTerm:\r\n searchParams[searchParamKeys.SEARCH_QUERY] ||\r\n ANALYTICS_NULL_VALUES.NA_VALUE,\r\n location:\r\n searchParams[searchParamKeys.ADDRESS_QUERY] ||\r\n ANALYTICS_NULL_VALUES.NA_VALUE,\r\n searchCategory,\r\n searchResultsCount: numResultTotal,\r\n searchSort:\r\n searchParams[searchParamKeys.SORT_ORDER] ||\r\n ANALYTICS_SORT_ORDER.MOST_RELEVANT,\r\n searchView: analyticView,\r\n ...customAnalyticFields,\r\n },\r\n filterInfo: {\r\n filterApplied: isFilterApplied,\r\n },\r\n ...customAnalyticObject,\r\n };\r\n window.dataLayer.push(gtmFilterSearchResult);\r\n }, [numResultTotal, numAppliedFilters, ...filtersApplied]);\r\n};\r\n\r\nuseSearchFilterAnalytics.defaultProps = {\r\n customAnalyticObject: {},\r\n customAnalyticFields: {},\r\n};\r\n\r\nexport default useSearchFilterAnalytics;\r\n","import clearAnalyticsEvent from '../utilities/clearAnalyticsEvent';\r\nimport {\r\n ANALYTICS_SORT_ORDER,\r\n ANALYTICS_NULL_VALUES,\r\n ANALYTICS_EVENT,\r\n ANALYTICS_VIEW,\r\n} from './constants';\r\n\r\nconst useSearchResultClickAnalytics = (\r\n searchResultClickObject,\r\n searchParams,\r\n searchParamKeys,\r\n searchClickCategory,\r\n customAnalyticObject,\r\n customAnalyticFields,\r\n analyticsView\r\n) => {\r\n clearAnalyticsEvent(ANALYTICS_EVENT.SEARCH_RESULT_CLICK);\r\n\r\n const gtmResultCard = {\r\n event: ANALYTICS_EVENT.SEARCH_RESULT_CLICK,\r\n searchInfo: {\r\n searchTerm:\r\n searchParams[searchParamKeys.SEARCH_QUERY] ||\r\n ANALYTICS_NULL_VALUES.NA_VALUE,\r\n location:\r\n searchParams[searchParamKeys.ADDRESS_QUERY] ||\r\n ANALYTICS_NULL_VALUES.NA_VALUE,\r\n searchCategory: searchClickCategory,\r\n searchResultsCount: searchResultClickObject.searchResultsCount,\r\n searchSort:\r\n searchParams[searchParamKeys.SORT_ORDER] ||\r\n ANALYTICS_SORT_ORDER.MOST_RELEVANT,\r\n searchView: analyticsView || ANALYTICS_VIEW.LIST,\r\n ...customAnalyticFields,\r\n },\r\n resourceInfo: searchResultClickObject.resourceInfo,\r\n clickedResult: searchResultClickObject.clickedResult,\r\n filterInfo: searchResultClickObject.filterInfo,\r\n ...customAnalyticObject,\r\n };\r\n\r\n window.dataLayer.push(gtmResultCard);\r\n};\r\n\r\nuseSearchResultClickAnalytics.defaultProps = {\r\n customAnalyticObject: {},\r\n customAnalyticFields: {},\r\n};\r\n\r\nexport default useSearchResultClickAnalytics;\r\n"],"sourceRoot":""}