{"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":""}