{"version":3,"file":"static/js/84340.183af40a.chunk.js","mappings":"+IAcA,MAAMA,EAA0B,GAC1BC,EAAkB,GAElBC,EAAiC,IAG1BC,EAAWC,IAUI,IAVH,KACvBC,EAAI,SACJC,EAAQ,aACRC,EAAeP,EAAuB,UACtCQ,EAAYP,EACZQ,UAAWC,EAAYC,EAAAA,SAAQ,eAC/BC,EAAiB,CAAC,EAAC,eACnBC,EAAc,WACdC,EAAaZ,EAA8B,eAC3Ca,GACMX,EACN,MAAMY,GAAgBC,EAAAA,EAAAA,QAAOV,GACvBW,GAAcD,EAAAA,EAAAA,QAA8B,OAE3CE,EAAeC,IAAoBC,EAAAA,EAAAA,WACnC,OAAJhB,QAAI,IAAJA,EAAAA,EAAQ,IAAIiB,MAAM,EAAGN,EAAcO,UA8EtC,OA3EAC,EAAAA,EAAAA,YAAU,KACRR,EAAcO,QAAUhB,CAAY,GACnC,CAACA,EAAcC,EAAe,OAAJH,QAAI,IAAJA,OAAI,EAAJA,EAAMoB,UAEnCD,EAAAA,EAAAA,YAAU,KACJnB,GACFe,EAAiBf,EAAKiB,MAAM,EAAGN,EAAcO,UAG/C,IAAIG,EAAW,EACXC,EAAW,EAEf,MAAMC,EAAWf,GAAkBgB,OAC7BC,EAAgBF,EAAiBE,aAAehB,EAEhDiB,EAAWA,KAAO,IAADC,EAAAC,EACrBN,EAAYC,EAAiBM,aAAgBN,EAAiBO,UAE9D,MAAMC,EAAmC,QAAtBJ,EAAGd,EAAYK,eAAO,IAAAS,OAAA,EAAnBA,EAAqBK,QACzC,4BAGEX,EAAWC,GAAYX,EAAcO,UAAwB,QAAjBU,EAAS,OAAJ5B,QAAI,IAAJA,OAAI,EAAJA,EAAMoB,cAAM,IAAAQ,EAAAA,EAAI,MAE/DpB,GACAuB,IACa,OAAbA,QAAa,IAAbA,OAAa,EAAbA,EAAeE,wBAAwBC,SACG,GAAvCV,OAAOW,YAAcX,OAAOY,WAC/BL,GACAM,SAASC,gBAAgBC,aAAef,OAAOY,SAjDa,EAkD1DZ,OAAOW,aAEV3B,GACEe,EAAiBgB,aAAgBhB,EAAiBO,WACjDL,KAEAzB,GACFe,GAAiBD,GAAiB,IAC7BA,KACAd,EAAKiB,MACNN,EAAcO,QACdP,EAAcO,QAAUf,MAK9BQ,EAAcO,SAAWf,GAI7BkB,EAAWC,CAAQ,EAKrB,OAFAC,EAASiB,iBAAiB,SAAUd,EAAU,CAAEe,SAAS,IAElD,KACLlB,EAASmB,oBAAoB,SAAUhB,EAAS,CACjD,GACA,CAACxB,EAAcC,EAAWH,EAAMQ,KAEnCW,EAAAA,EAAAA,YAAU,KAAO,IAADwB,EAEZjC,GACAA,EAAiB,GACjBA,GAA8B,QAAhBiC,EAAQ,OAAJ3C,QAAI,IAAJA,OAAI,EAAJA,EAAMoB,cAAM,IAAAuB,EAAAA,EAAI,IAClC3C,IAEAe,GAAiBD,GAAiB,IAC7BA,KACAd,EAAKiB,MAAMN,EAAcO,QAASP,EAAcO,QAAU,MAE/DP,EAAcO,SAAW,EAC3B,GACC,CAACR,KAGFkC,EAAAA,EAAAA,KAAA,OAAKC,UAAU,oBAAoBC,IAAKjC,EAAYkC,UAClDH,EAAAA,EAAAA,KAACvC,EAAS,IAAKE,EAAcwC,SAAGjC,EAAckC,IAAI/C,MAC9C,C","sources":["components/Shared/LazyLoad/index.tsx"],"sourcesContent":["import { Fragment, ReactElement, useEffect, useRef, useState } from 'react';\n\ninterface Props {\n  data: any[] | null;\n  renderer: (data: any, index: number) => ReactElement;\n  initialCount?: number;\n  loadCount?: number;\n  container?: typeof Fragment;\n  containerProps?: any;\n  customViewport?: HTMLElement | null;\n  scrollMult?: number;\n  collapsedCount?: number;\n}\n\nconst LAZY_LOAD_INITIAL_COUNT = 10;\nconst LAZY_LOAD_COUNT = 20;\n\nconst DEFAULT_SCROLL_MULTIPLY_NUMBER = 2.5;\nconst SCROLL_HEIGHT_MULTIPLY_NUMBER_TO_DETECT_AVAILABLE_SCROLL_HEIGHT = 3;\n\nexport const LazyLoad = ({\n  data,\n  renderer,\n  initialCount = LAZY_LOAD_INITIAL_COUNT,\n  loadCount = LAZY_LOAD_COUNT,\n  container: Container = Fragment,\n  containerProps = {},\n  customViewport,\n  scrollMult = DEFAULT_SCROLL_MULTIPLY_NUMBER,\n  collapsedCount\n}: Props): ReactElement => {\n  const renderedCount = useRef(initialCount);\n  const lazyElement = useRef<null | HTMLDivElement>(null);\n\n  const [itemsToRender, setItemsToRender] = useState(\n    (data ?? []).slice(0, renderedCount.current)\n  );\n\n  useEffect(() => {\n    renderedCount.current = initialCount;\n  }, [initialCount, loadCount, data?.length]);\n\n  useEffect(() => {\n    if (data) {\n      setItemsToRender(data.slice(0, renderedCount.current));\n    }\n\n    let oldValue = 0;\n    let newValue = 0;\n\n    const viewport = customViewport || window;\n    const clientHeight = (viewport as any).clientHeight * scrollMult;\n\n    const onScroll = () => {\n      newValue = (viewport as any).pageYOffset || (viewport as any).scrollTop;\n\n      const lazyContanier = lazyElement.current?.closest(\n        '[class*=\"ModuleWidgets\"]'\n      );\n\n      if (oldValue < newValue && renderedCount.current <= (data?.length ?? 0)) {\n        if (\n          (!customViewport &&\n            lazyContanier &&\n            lazyContanier?.getBoundingClientRect().height <=\n              (window.innerHeight + window.scrollY) * 2) ||\n          (!lazyContanier &&\n            document.documentElement.scrollHeight - window.scrollY <=\n              window.innerHeight *\n                SCROLL_HEIGHT_MULTIPLY_NUMBER_TO_DETECT_AVAILABLE_SCROLL_HEIGHT) ||\n          (customViewport &&\n            (viewport as any).scrollHeight - (viewport as any).scrollTop <=\n              clientHeight)\n        ) {\n          if (data) {\n            setItemsToRender(itemsToRender => [\n              ...itemsToRender,\n              ...data.slice(\n                renderedCount.current,\n                renderedCount.current + loadCount\n              )\n            ]);\n          }\n\n          renderedCount.current += loadCount;\n        }\n      }\n\n      oldValue = newValue;\n    };\n\n    viewport.addEventListener('scroll', onScroll, { passive: true });\n\n    return () => {\n      viewport.removeEventListener('scroll', onScroll);\n    };\n  }, [initialCount, loadCount, data, customViewport]);\n\n  useEffect(() => {\n    if (\n      collapsedCount &&\n      collapsedCount > 1 &&\n      collapsedCount < (data?.length ?? 0) &&\n      data\n    ) {\n      setItemsToRender(itemsToRender => [\n        ...itemsToRender,\n        ...data.slice(renderedCount.current, renderedCount.current + 1)\n      ]);\n      renderedCount.current += 1;\n    }\n  }, [collapsedCount]);\n\n  return (\n    <div className=\"lazyLoad__wrapper\" ref={lazyElement}>\n      <Container {...containerProps}>{itemsToRender.map(renderer)}</Container>\n    </div>\n  );\n};\n"],"names":["LAZY_LOAD_INITIAL_COUNT","LAZY_LOAD_COUNT","DEFAULT_SCROLL_MULTIPLY_NUMBER","LazyLoad","_ref","data","renderer","initialCount","loadCount","container","Container","Fragment","containerProps","customViewport","scrollMult","collapsedCount","renderedCount","useRef","lazyElement","itemsToRender","setItemsToRender","useState","slice","current","useEffect","length","oldValue","newValue","viewport","window","clientHeight","onScroll","_lazyElement$current","_data$length","pageYOffset","scrollTop","lazyContanier","closest","getBoundingClientRect","height","innerHeight","scrollY","document","documentElement","scrollHeight","addEventListener","passive","removeEventListener","_data$length2","_jsx","className","ref","children","map"],"sourceRoot":""}