{"version":3,"file":"usePartialRendering.cjs","sources":["../../../src/components/Combobox/usePartialRendering.tsx"],"sourcesContent":["import { type FC, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nconst OPTION_INCREMENT_AMOUNT = 100\nconst RETURN_NULL = () => null\n\nexport function usePartialRendering<T>({\n  items,\n  minLength = 0,\n}: {\n  items: T[]\n  minLength?: number\n}) {\n  const limiter = useCallback((length: number) => Math.max(length, minLength), [minLength])\n\n  const [currentItemLength, setCurrentItemLength] = useState(limiter(OPTION_INCREMENT_AMOUNT))\n\n  useEffect(() => {\n    setCurrentItemLength((current) => limiter(current))\n  }, [limiter])\n\n  // minLength も考慮した実際のアイテム数を算出\n  const partialItems = useMemo(() => items.slice(0, currentItemLength), [currentItemLength, items])\n\n  const renderIntersection = useCallback(\n    () => (\n      <Intersection\n        onIntersect={() => {\n          setCurrentItemLength((current) => limiter(current + OPTION_INCREMENT_AMOUNT))\n        }}\n      />\n    ),\n    [limiter],\n  )\n\n  return {\n    items: partialItems,\n    renderIntersection: currentItemLength >= items.length ? RETURN_NULL : renderIntersection,\n  }\n}\n\nconst Intersection: FC<{ onIntersect: () => void }> = ({ onIntersect }) => {\n  const ref = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    const target = ref.current\n\n    if (target === null) {\n      return\n    }\n\n    // スクロール最下部に到達する度に表示するアイテム数を増加させるための IntersectionObserver\n    const observer = new IntersectionObserver(([entry]) => {\n      if (entry.isIntersecting) {\n        onIntersect()\n      }\n    })\n\n    observer.observe(target)\n\n    return () => observer.disconnect()\n  }, [onIntersect])\n\n  return <div ref={ref} />\n}\n"],"names":["useCallback","useState","useEffect","useMemo","_jsx","useRef"],"mappings":";;;;;AAEA,MAAM,uBAAuB,GAAG,GAAG;AACnC,MAAM,WAAW,GAAG,MAAM,IAAI;AAExB,SAAU,mBAAmB,CAAI,EACrC,KAAK,EACL,SAAS,GAAG,CAAC,GAId,EAAA;IACC,MAAM,OAAO,GAAGA,iBAAW,CAAC,CAAC,MAAc,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAEzF,IAAA,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAGC,cAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAE5FC,eAAS,CAAC,MAAK;QACb,oBAAoB,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AACrD,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;;IAGb,MAAM,YAAY,GAAGC,aAAO,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAEjG,IAAA,MAAM,kBAAkB,GAAGH,iBAAW,CACpC,OACEI,cAAA,CAAC,YAAY,EAAA,EACX,WAAW,EAAE,MAAK;AAChB,YAAA,oBAAoB,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,GAAG,uBAAuB,CAAC,CAAC;AAC/E,QAAA,CAAC,GACD,CACH,EACD,CAAC,OAAO,CAAC,CACV;IAED,OAAO;AACL,QAAA,KAAK,EAAE,YAAY;AACnB,QAAA,kBAAkB,EAAE,iBAAiB,IAAI,KAAK,CAAC,MAAM,GAAG,WAAW,GAAG,kBAAkB;KACzF;AACH;AAEA,MAAM,YAAY,GAAoC,CAAC,EAAE,WAAW,EAAE,KAAI;AACxE,IAAA,MAAM,GAAG,GAAGC,YAAM,CAAiB,IAAI,CAAC;IAExCH,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO;AAE1B,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB;QACF;;QAGA,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAI;AACpD,YAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AACxB,gBAAA,WAAW,EAAE;YACf;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;AAExB,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;AACpC,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AAEjB,IAAA,OAAOE,cAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,GAAG,GAAI;AAC1B,CAAC;;;;"}