{"version":3,"file":"721.bundle.js","mappings":"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","sources":["webpack://vaneckreact/./ReactAU/Components/HybridInsightsBlock/HybridInsightsGridItem.tsx","webpack://vaneckreact/./ReactAU/Components/HybridInsightsBlock/HybridInsightsBlockInner.tsx","webpack://vaneckreact/./ReactAU/Components/HybridInsightsBlock/HybridInsightsBlock.tsx","webpack://vaneckreact/./ReactAU/Components/HybridInsightsBlock/useHybridInsightsBlock.tsx","webpack://vaneckreact/./ReactAU/core/customHooks/useAutoScollUp.tsx","webpack://vaneckreact/./ReactAU/services/fetchDataService.tsx"],"sourcesContent":["import { MediaPreview } from \"../../../ReactUS/interfaces/MediaPreview\";\r\nimport parse from \"html-react-parser\";\r\nexport function GridItem({ recommendation, index }: { recommendation: MediaPreview; index: number}) {\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n\r\n}\r\n\r\nexport function RelatedMediaBody({ recommendation, index }: { recommendation: MediaPreview; index: number}) {\r\n return (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport function Eyebrow({ recommendation }: { recommendation: MediaPreview }) {\r\n return (\r\n
\r\n {recommendation.Category}\r\n
\r\n )\r\n}\r\n\r\n\r\nexport function Header({ recommendation }: { recommendation: MediaPreview }) {\r\n return (\r\n
\r\n \r\n

{recommendation.Title}

\r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\nexport function Description({ recommendation }: { recommendation: MediaPreview }) {\r\n if(!recommendation.Description) return (<>);\r\n return (\r\n
\r\n

{parse(recommendation.Description)}

\r\n
\r\n )\r\n}\r\n\r\nexport function RelatedMediaImage({ recommendation, tabIndex }: { recommendation: MediaPreview; tabIndex: number}) {\r\n if(!recommendation.PostSmallImage) return (<>);\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {`${recommendation.Title}`}\r\n
\r\n
\r\n {/*
\r\n \r\n
*/}\r\n
\r\n
\r\n )\r\n}\r\n\r\n// export function ImageIcon({ mediaType }: { mediaType: string }) {\r\n// switch (mediaType) {\r\n// case \"Video\":\r\n// return (\r\n// \r\n// \r\n// );\r\n// case \"Webinar\":\r\n// return (\r\n// \r\n// \r\n// );\r\n// case \"Blog\":\r\n// return (\r\n// \r\n// \r\n// );\r\n// case \"Podcast\":\r\n// return (\r\n// \r\n// \r\n// );\r\n// default:\r\n// return (<>)\r\n// }\r\n// }","import { MediaPreview, RecommendationsBlockViewModel } from \"../../../ReactUS/interfaces/MediaPreview\";\r\nimport { GridItem } from \"./HybridInsightsGridItem\";\r\n\r\nexport function HybridInsightsBlockInner(props: RecommendationsBlockViewModel) {\r\n const { Recommendations, Template, Title, CssClass, ContainerCssClass } = props;\r\n\r\n return (\r\n
\r\n {Title &&

{Title}

}\r\n
\r\n {Recommendations.map((recommendation, index) => (\r\n \r\n ))}\r\n
\r\n
\r\n );\r\n}","import \"./HybridInsightsBlock.scss\";\r\nimport useAutoScrollUp from \"../../core/customHooks/useAutoScollUp\";\r\nimport { useState } from \"react\";\r\nimport { useHybridInsightsBlock } from \"./useHybridInsightsBlock\";\r\nimport { HybridInsightsBlockInner } from \"./HybridInsightsBlockInner\";\r\n\r\nexport interface HybridInsightsBlockInterface extends ComponentInterface { }\r\n\r\nconst HybridInsightsBlock = (props: HybridInsightsBlockInterface) => {\r\n const element = props.rootElement;\r\n const blockID = element.dataset.blockid as unknown as number;\r\n const pageID = element.dataset.pageid as unknown as number;\r\n\r\n const [markup, setMarkup] = useState(\r\n
Loading Data...
\r\n );\r\n\r\n useAutoScrollUp(element);\r\n if (isNaN(blockID)) return

Error: BlockID not found.

;\r\n\r\n const [blockData] = useHybridInsightsBlock({\r\n blockID: blockID,\r\n pageID: pageID,\r\n setMarkup: setMarkup,\r\n });\r\n\r\n return (\r\n
\r\n {markup}\r\n {blockData && blockData.Items && blockData.Items.length > 0 && <>\r\n \r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default HybridInsightsBlock;","import { fetchBlockData } from \"../../services/fetchDataService\";\r\nimport { HybridInsightsGridBlockViewModel } from \"../../../ReactUS/interfaces/MediaPreview\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\ninterface UseHybridInsightsBlockProps {\r\n blockID: Number;\r\n pageID: Number;\r\n setMarkup: Function;\r\n}\r\n\r\nexport function useHybridInsightsBlock(props: UseHybridInsightsBlockProps) {\r\n const { blockID, pageID, setMarkup } = props;\r\n const [blockData, setBlockData] = useState(null);\r\n const url = document.location.href;\r\n\r\n const visits = getVisitsCount();\r\n const isFirstVisit = visits ? parseInt(visits) < 2 : true;\r\n const categoryId = (document.querySelector(\"[data-categoryid]\") as HTMLElement)?.dataset.categoryid;\r\n const ivcookie = getCookie(\"iv\") ?? \"\";\r\n\r\n useEffect(() => {\r\n (async () => {\r\n let additionalParams = getAdditionalParams(categoryId, isFirstVisit);\r\n const response: HybridInsightsGridBlockViewModel = await fetchBlockData({\r\n url: `/main/hybridinsightsgridblock/getcontent/?blockid=${blockID}&pageid=${pageID}&iv=${ivcookie}¤tPageUrl=${url}${additionalParams}`,\r\n isJson: true,\r\n setMarkup: setMarkup,\r\n });\r\n // console.log(\"%c *** HYBRID INSIGHTS BLOCK ***\", \"background: #f28bff; color: #fff\");\r\n // console.log(\"HybridInsights loaded, response:\", response);\r\n setBlockData(response);\r\n setMarkup(false);\r\n })();\r\n }, [])\r\n\r\n return [blockData]\r\n}\r\n\r\nfunction getAdditionalParams(categoryId: string | undefined, isFirstVisit: boolean) {\r\n let additionalParams = \"\";\r\n if (categoryId) {\r\n additionalParams += \"&categoryId=\" + categoryId;\r\n }\r\n if (isFirstVisit) {\r\n additionalParams += \"&isFirstVisit=\" + isFirstVisit;\r\n }\r\n return additionalParams;\r\n}\r\n\r\nfunction getCookie(name: string) {\r\n const value = `; ${document.cookie}`;\r\n const parts = value.split(`; ${name}=`);\r\n if (parts.length === 2) return parts.pop()?.split(';').shift();\r\n}\r\n\r\nfunction getVisitsCount() {\r\n const key = getLocalStorageKeyByMicrosite();\r\n const visits = localStorage.getItem(key);\r\n return visits;\r\n}\r\n \r\nfunction getLocalStorageKeyByMicrosite() {\r\n let microsite = (document.querySelector(\"#hdnCurrentMicrositeId\") as HTMLInputElement)?.value;\r\n // AU workaround\r\n if (!microsite) {\r\n microsite = (document.querySelector(\"#hdnSelectedCountry\") as HTMLInputElement)?.value.toLowerCase();\r\n }\r\n let key = \"\";\r\n switch (microsite) {\r\n case \"global\":\r\n key = \"ve-PageVisitCount-corp\";\r\n break;\r\n case \"ucits\":\r\n key = \"ve-PageVisitCount-eu\";\r\n break;\r\n case \"au\":\r\n key = \"ve-PageVisitCount-au\";\r\n break;\r\n default:\r\n key = \"ve-PageVisitCount\";\r\n break;\r\n }\r\n\r\n return key;\r\n}","import { useState, useEffect, useLayoutEffect } from \"react\";\r\n\r\n/**\r\n * When a component is rendered above the viewport, it results in the current scroll position being offset by the height difference.\r\n * This custom hook will adjust for the height of the component before every paint.\r\n * @param {HTMLElement} element\r\n */\r\nfunction useAutoScrollUp(element: HTMLElement) {\r\n const [height, setHeight] = useState(0);\r\n\r\n useEffect(() => {\r\n element && setHeight(element.getBoundingClientRect()?.height);\r\n }, [element]);\r\n\r\n useLayoutEffect(() => {\r\n if (!element || !height) return;\r\n const elemBoundingRect = element.getBoundingClientRect();\r\n const newHeight = elemBoundingRect.height;\r\n const heightIncrease = newHeight - height;\r\n\r\n //compensate scrolling only if elem above viewport (scrolling up)\r\n if (elemBoundingRect.top < 50) {\r\n window.scrollBy(0, heightIncrease);\r\n }\r\n\r\n setHeight((height) => height + heightIncrease);\r\n });\r\n}\r\n\r\nexport default useAutoScrollUp;","import React from \"react\";\r\n\r\nexport interface FetchBlockDataInterface {\r\n url: string,\r\n isJson?: Boolean,\r\n setMarkup?: Function | null\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n reactlang: string | null | undefined;\r\n reactctr: string | null | undefined;\r\n isapiepieditmode: string | null | undefined;\r\n isapilatestversionpreview: string | null | undefined;\r\n epiprojectid: string | null | undefined;\r\n }\r\n}\r\n\r\nwindow.reactlang = document.getElementsByTagName(\"ve-language\")[0]?.innerHTML;\r\nwindow.reactctr = document.getElementsByTagName(\"ve-country\")[0]?.innerHTML;\r\nwindow.isapiepieditmode = document.getElementsByTagName(\"ve-is-epi-edit-mode\")[0]?.innerHTML;\r\nwindow.isapilatestversionpreview = document.getElementsByTagName(\"ve-is-latest-version-preview\")[0]?.innerHTML;\r\nwindow.epiprojectid = document.getElementsByTagName(\"ve-epi-project-id\")[0]?.innerHTML;\r\n\r\n/**\r\n * Fetches data for a given API endpoint. Expects any get parameters to be encoded in the url.\r\n * If JSON is expected, returns the JSON object. If not returns the result object.\r\n * @param {FetchBlockDataInterface} options\r\n * @returns {any|Response}\r\n */\r\nexport async function fetchBlockData({ url, isJson = true, setMarkup = null }: FetchBlockDataInterface): Promise {\r\n\r\n try {\r\n let additionalParams = window.isapiepieditmode || window.isapilatestversionpreview\r\n ? `&epieditmode=${window.isapiepieditmode}&latest=${window.isapilatestversionpreview}`\r\n : '';\r\n if(window.epiprojectid){\r\n additionalParams += `&epiprojects=${window.epiprojectid}`;\r\n }\r\n const request = await fetch(`${url}${url.indexOf('?') !== -1 ? '&' : '?'}reactlang=${window.reactlang}&reactctr=${window.reactctr}${additionalParams}&_=${new Date().getTime()}`);\r\n const response: Response|any = isJson ? await request.json() : request;\r\n \r\n return response;\r\n } catch (err) {\r\n console.log(`Error while fetching block data! URL: ${url}`);\r\n\r\n typeof (setMarkup) === \"function\" && setMarkup(\r\n
An error occured when loading data.
\r\n );\r\n\r\n throw new Error(err as string);\r\n }\r\n}"],"names":["GridItem","recommendation","index","className","RelatedMediaBody","RelatedMediaImage","tabIndex","Eyebrow","Header","Description","Category","href","MediaLink","Title","PostSmallImage","style","backgroundImage","paddingBottom","alt","src","HybridInsightsBlockInner","props","Recommendations","Template","CssClass","ContainerCssClass","map","element","rootElement","blockID","dataset","blockid","pageID","pageid","markup","setMarkup","useState","isNaN","blockData","setBlockData","url","document","location","visits","key","microsite","querySelector","value","toLowerCase","getLocalStorageKeyByMicrosite","localStorage","getItem","getVisitsCount","isFirstVisit","parseInt","categoryId","categoryid","ivcookie","name","parts","cookie","split","length","pop","shift","getCookie","useEffect","additionalParams","getAdditionalParams","response","isJson","useHybridInsightsBlock","Items","Heading","height","setHeight","getBoundingClientRect","useLayoutEffect","elemBoundingRect","heightIncrease","top","window","scrollBy","async","fetchBlockData","isapiepieditmode","isapilatestversionpreview","epiprojectid","request","fetch","indexOf","reactlang","reactctr","Date","getTime","json","err","console","log","Error","getElementsByTagName","innerHTML"],"sourceRoot":""}