UNPKG

react-laze

Version:
8 lines (7 loc) 4.71 kB
{ "version": 3, "sources": ["../../../src/useLaze.ts", "../../../src/useReactiveRef.ts", "../../../src/useConstant.ts", "../../../src/useLazyRef.ts"], "sourcesContent": ["import type { MutableRefObject } from 'react';\nimport { useDebugValue, useEffect, useState } from 'react';\nimport useReactiveRef from './useReactiveRef';\n\nexport interface Laze<T extends HTMLElement> {\n ref: MutableRefObject<T | null>;\n visible: boolean;\n}\n\nexport interface LazeOptions {\n refresh?: boolean;\n}\n\nexport default function useLaze<T extends HTMLElement>(\n options?: LazeOptions,\n): Laze<T> {\n const [visible, setVisible] = useState(false);\n\n // We use a reactive ref here so that the component\n // re-renders if the host element changes, therefore\n // re-evaluating our intersection logic\n const ref = useReactiveRef<T | null>(() => null);\n\n // We need to destructure here since\n // the host element is our dependency,\n // and we need to track whenever it changes.\n const { current } = ref;\n\n const shouldRefresh = options?.refresh;\n\n useEffect(() => {\n // If the host changed, make sure that\n // visibility is set to false\n setVisible(false);\n\n if (current) {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (shouldRefresh) {\n setVisible(entry.isIntersecting);\n } else if (entry.isIntersecting) {\n // Host intersected, set visibility to true\n setVisible(true);\n\n // Stop observing\n observer.disconnect();\n }\n }\n });\n\n observer.observe(current);\n\n return () => {\n observer.unobserve(current);\n observer.disconnect();\n };\n }\n\n return undefined;\n }, [current, shouldRefresh]);\n\n const value = {\n ref,\n visible,\n };\n\n useDebugValue(value);\n\n return value;\n}\n", "import type { MutableRefObject } from 'react';\nimport { useDebugValue, useState } from 'react';\nimport { useConstant } from './useConstant';\nimport { useLazyRef } from './useLazyRef';\n\nexport default function useReactiveRef<T>(\n supplier: () => T,\n): MutableRefObject<T> {\n const [state, setState] = useState<T>(supplier);\n\n const ref = useLazyRef<T>(supplier);\n\n if (ref.current !== state) {\n ref.current = state;\n }\n\n const proxyObject = useConstant(() => ({\n get current() {\n return ref.current;\n },\n set current(value) {\n setState(() => value);\n },\n }));\n\n useDebugValue(proxyObject);\n\n return proxyObject;\n}\n", "import { useDebugValue } from 'react';\nimport { useLazyRef } from './useLazyRef';\n\nexport function useConstant<T>(supplier: () => T): T {\n const { current } = useLazyRef(supplier);\n useDebugValue(current);\n return current;\n}\n", "import type { MutableRefObject } from 'react';\nimport { useDebugValue, useRef } from 'react';\n\nexport function useLazyRef<T>(supplier: () => T): MutableRefObject<T> {\n const ref = useRef<MutableRefObject<T> | null>();\n\n if (!ref.current) {\n ref.current = {\n current: supplier(),\n };\n }\n\n useDebugValue(ref.current);\n\n return ref.current;\n}\n"], "mappings": ";AACA,SAAS,iBAAAA,gBAAe,WAAW,YAAAC,iBAAgB;;;ACAnD,SAAS,iBAAAC,gBAAe,gBAAgB;;;ACDxC,SAAS,iBAAAC,sBAAqB;;;ACC9B,SAAS,eAAe,cAAc;AAE/B,SAAS,WAAc,UAAwC;AACpE,QAAM,MAAM,OAAmC;AAE/C,MAAI,CAAC,IAAI,SAAS;AAChB,QAAI,UAAU;AAAA,MACZ,SAAS,SAAS;AAAA,IACpB;AAAA,EACF;AAEA,gBAAc,IAAI,OAAO;AAEzB,SAAO,IAAI;AACb;;;ADZO,SAAS,YAAe,UAAsB;AACnD,QAAM,EAAE,QAAQ,IAAI,WAAW,QAAQ;AACvC,EAAAC,eAAc,OAAO;AACrB,SAAO;AACT;;;ADFe,SAAR,eACL,UACqB;AACrB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAY,QAAQ;AAE9C,QAAM,MAAM,WAAc,QAAQ;AAElC,MAAI,IAAI,YAAY,OAAO;AACzB,QAAI,UAAU;AAAA,EAChB;AAEA,QAAM,cAAc,YAAY,OAAO;AAAA,IACrC,IAAI,UAAU;AACZ,aAAO,IAAI;AAAA,IACb;AAAA,IACA,IAAI,QAAQ,OAAO;AACjB,eAAS,MAAM,KAAK;AAAA,IACtB;AAAA,EACF,EAAE;AAEF,EAAAC,eAAc,WAAW;AAEzB,SAAO;AACT;;;ADfe,SAAR,QACL,SACS;AACT,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAS,KAAK;AAK5C,QAAM,MAAM,eAAyB,MAAM,IAAI;AAK/C,QAAM,EAAE,QAAQ,IAAI;AAEpB,QAAM,gBAAgB,mCAAS;AAE/B,YAAU,MAAM;AAGd,eAAW,KAAK;AAEhB,QAAI,SAAS;AACX,YAAM,WAAW,IAAI,qBAAqB,aAAW;AACnD,mBAAW,SAAS,SAAS;AAC3B,cAAI,eAAe;AACjB,uBAAW,MAAM,cAAc;AAAA,UACjC,WAAW,MAAM,gBAAgB;AAE/B,uBAAW,IAAI;AAGf,qBAAS,WAAW;AAAA,UACtB;AAAA,QACF;AAAA,MACF,CAAC;AAED,eAAS,QAAQ,OAAO;AAExB,aAAO,MAAM;AACX,iBAAS,UAAU,OAAO;AAC1B,iBAAS,WAAW;AAAA,MACtB;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,SAAS,aAAa,CAAC;AAE3B,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,EACF;AAEA,EAAAC,eAAc,KAAK;AAEnB,SAAO;AACT;", "names": ["useDebugValue", "useState", "useDebugValue", "useDebugValue", "useDebugValue", "useDebugValue", "useState", "useDebugValue"] }