{"version":3,"file":"static/js/5247.0532a203.chunk.js","mappings":"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","sources":["shared/timeline-block/timeline-block-component.jsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useMemo } from \"react\"\nimport ReactHtmlParser from \"react-html-parser\"\nimport * as SelectionFactoryHelper from \"../helpers/SelectionFactoryHelper\"\nimport Slider from \"react-slick\"\nimport Svg from \"../_svgs/svg\"\nimport useWindowWidth from \"../../hooks/useWindowWidth\"\n\nexport default function TimelineComponent({ timeline, bottomPadding, topPadding }) {\n const sliderRef = useRef(null)\n const [hasSetPosition, setHasSetPosition] = useState(false)\n const windowWidth = useWindowWidth()\n const currentYear = new Date().getFullYear().toString()\n\n const findClosestYearAndIndex = (yearsArray) => {\n if (yearsArray.length === 0) return null\n\n // Initialize closestYearObj to the first element in the array\n let closestYearObj = yearsArray[0]\n let minDiff = Math.abs(closestYearObj.year - currentYear)\n let closestYearIndex = 0\n\n for (let i = 1; i < yearsArray.length; i++) {\n const yearObj = yearsArray[i]\n const diff = Math.abs(parseInt(yearObj.year) - parseInt(currentYear))\n\n // Update closestYearObj if we find a closer year or if the difference is the same but the year is in the future\n if (diff < minDiff || (diff === minDiff && yearObj.year > closestYearObj.year)) {\n closestYearObj = yearObj\n minDiff = diff\n closestYearIndex = i\n }\n }\n\n return { closestYear: closestYearObj.year, closestYearIndex: closestYearIndex }\n }\n\n //current year in slider consists of position of element in array & a year property contained within said elements\n const [currentYearInSlider, setCurrentYearSlider] = useState(findClosestYearAndIndex(timeline))\n const tp = SelectionFactoryHelper.getFromSelectionFactory(topPadding)\n const bp = SelectionFactoryHelper.getFromSelectionFactory(bottomPadding)\n\n const constructNewTimeline = (timelineData) => {\n // this is done, so that we have a slide for every 2 informations instead of having one slide for every year\n let newTimeline = []\n timelineData.forEach((year) => {\n if (year.information.length <= 2) {\n newTimeline.push({\n year: year.year,\n information: year.information,\n showYear: true,\n })\n } else {\n // Split into separate objects with two information entries each\n for (let i = 0; i < year.information.length; i += 2) {\n // first range must have the year set\n if (i === 0) {\n const chunk = year.information.slice(i, i + 2)\n newTimeline.push({\n year: year.year,\n information: chunk,\n showYear: true,\n })\n } else {\n const chunk = year.information.slice(i, i + 2)\n newTimeline.push({\n year: year.year,\n information: chunk,\n showYear: false,\n })\n }\n }\n }\n })\n return newTimeline\n }\n\n const disableNavigationForwardIfSecondLastSlide = (constructedTimeline, currentIndex) => {\n var lastIndex = constructedTimeline.length - 1\n\n var nextArrow = document.querySelector(\"div.timeline-placeholder .slick-arrow.slick-next\")\n if (nextArrow) {\n if (currentIndex + 1 === lastIndex) {\n nextArrow.classList.add(\"slick-disabled\")\n nextArrow.setAttribute(\"disabled\", true)\n } else {\n nextArrow.classList.remove(\"slick-disabled\")\n nextArrow.removeAttribute(\"disabled\")\n }\n }\n }\n\n const handleSliderChange = () => {\n var currentIndex = sliderRef.current.innerSlider.state.currentSlide\n var slideInfo = sliderRef.current.props.children[currentIndex].props.year\n if (slideInfo) {\n const currentYearElement = document.querySelector(\".current-year\")\n\n if (currentYearElement) {\n currentYearElement.innerHTML = slideInfo\n }\n\n setCurrentYearSlider({ closestYear: slideInfo, closestYearIndex: currentIndex })\n // only disable navigation to last slide if not mobile\n if (windowWidth > 768) {\n disableNavigationForwardIfSecondLastSlide(newTimeline, currentIndex)\n }\n }\n }\n\n useEffect(() => {\n if (windowWidth < 768 && !hasSetPosition) {\n const scrollableContainer = document.querySelector(\".timeline-content\")\n const yearElements = document.querySelectorAll(\".timeline-year .year\")\n const yearElement = Array.from(yearElements).find((el) => el.textContent === currentYearInSlider.closestYear)\n\n if (yearElement && scrollableContainer) {\n const containerLeft = scrollableContainer.getBoundingClientRect().left\n const yearElementLeft = yearElement.getBoundingClientRect().left\n\n // Get the relative left position of yearElement with respect to the scrollableContainer\n const relativeLeftPosition = yearElementLeft - containerLeft\n\n // Set scroll position\n scrollableContainer.scrollLeft = relativeLeftPosition - 7.5 // To ensure it's 7.5px from the viewport's left\n }\n\n setHasSetPosition(true)\n }\n }, [hasSetPosition, currentYearInSlider, windowWidth])\n\n const newTimeline = useMemo(() => constructNewTimeline(timeline), [timeline])\n const { slide: initialSlide } = useMemo(() => {\n const determineInitialSlideAndYear = (constructedTimeline, targetYear) => {\n let slide = 0\n let year = targetYear\n const currentIndex = currentYearInSlider.closestYearIndex\n if (currentIndex >= 0) {\n // If the current year is found, set it as the initial slide\n slide = currentIndex\n } else {\n // If the current year is not found, find the nearest upcoming year\n for (let i = 0; i < constructedTimeline.length; i++) {\n if (constructedTimeline[i].year > targetYear) {\n slide = i\n year = constructedTimeline[i].year\n break\n }\n }\n }\n return { slide, year }\n }\n return determineInitialSlideAndYear(newTimeline, currentYear)\n }, [newTimeline, currentYear])\n\n const settings = {\n dots: false,\n arrows: true,\n infinite: false,\n slidesToShow: 1,\n slidesToScroll: 1,\n swipe: false,\n variableWidth: true,\n centerMode: false,\n speed: 250,\n initialSlide: initialSlide,\n }\n\n // make sure initialSlide is set properly and navigation works\n useEffect(() => {\n if (windowWidth >= 768 && sliderRef.current && !hasSetPosition) {\n sliderRef.current.slickGoTo(initialSlide)\n setHasSetPosition(true)\n }\n }, [initialSlide, hasSetPosition, sliderRef, windowWidth])\n\n return (\n <div className={`timeline-block ${windowWidth < 768 ? \"mobile\" : \"desktop\"} ${tp ? tp : \"\"} ${bp ? bp : \"\"}`}>\n <div className=\"w--wider\">\n <div className=\"timeline-content\">\n <div className=\"timeline-placeholder\">\n <div className=\"current-year-placeholder\">\n <div className=\"current-year\">{currentYearInSlider.closestYear}</div>\n </div>\n <div className=\"timeline-navigation\"></div>\n <div className=\"timeline-years\">\n {windowWidth < 768 ? (\n newTimeline.map((yearEntry, index) => <TimelineYearEntry key={index} {...yearEntry} />)\n ) : (\n <Slider ref={sliderRef} {...settings} afterChange={handleSliderChange}>\n {newTimeline.map((yearEntry, index) => (\n <TimelineYearEntry key={index} {...yearEntry} />\n ))}\n </Slider>\n )}\n </div>\n </div>\n </div>\n <div className=\"mobiledrag\">\n <span>Drag to navigate timeline</span>\n <Svg iconName={\"draghand\"} fillColor={\"None\"} />\n </div>\n </div>\n </div>\n )\n}\n\nexport function TimelineYearEntry({ year, information, showYear }) {\n return (\n <div className={\"timeline-year\"}>\n {information.map((information, index) => (\n <TimelineTextEntry key={index} {...information} />\n ))}\n {showYear ? <div className=\"year\">{year}</div> : null}\n </div>\n )\n}\n\nexport function TimelineTextEntry({ placement, title, information, readMore, readMoreText, target }) {\n return (\n <div className=\"timeline-information-block-container\">\n <div data-epi-property=\"Title\" className=\"rich-text\">\n {ReactHtmlParser(title)}\n <div className=\"information\">{ReactHtmlParser(information)}</div>\n </div>\n <a target={target[0]?.value || \"_blank\"} href={readMore}>\n {readMoreText}\n </a>\n </div>\n )\n}\n"],"names":["TimelineComponent","_ref","timeline","bottomPadding","topPadding","sliderRef","useRef","_useState","useState","_useState2","_slicedToArray","hasSetPosition","setHasSetPosition","windowWidth","useWindowWidth","currentYear","Date","getFullYear","toString","_useState3","yearsArray","length","closestYearObj","minDiff","Math","abs","year","closestYearIndex","i","yearObj","diff","parseInt","closestYear","findClosestYearAndIndex","_useState4","currentYearInSlider","setCurrentYearSlider","tp","SelectionFactoryHelper","bp","useEffect","scrollableContainer","document","querySelector","yearElements","querySelectorAll","yearElement","Array","from","find","el","textContent","containerLeft","getBoundingClientRect","left","relativeLeftPosition","scrollLeft","newTimeline","useMemo","timelineData","forEach","information","push","showYear","chunk","slice","constructNewTimeline","initialSlide","constructedTimeline","targetYear","slide","currentIndex","determineInitialSlideAndYear","settings","dots","arrows","infinite","slidesToShow","slidesToScroll","swipe","variableWidth","centerMode","speed","current","slickGoTo","_jsx","className","concat","children","_jsxs","map","yearEntry","index","TimelineYearEntry","_objectSpread","Slider","ref","afterChange","innerSlider","state","currentSlide","slideInfo","props","currentYearElement","innerHTML","lastIndex","nextArrow","classList","add","setAttribute","remove","removeAttribute","disableNavigationForwardIfSecondLastSlide","Svg","iconName","fillColor","_ref2","TimelineTextEntry","_ref3","placement","_target$","title","readMore","readMoreText","target","ReactHtmlParser","value","href"],"sourceRoot":""}