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