UNPKG

@wordpress/components

Version:
8 lines (7 loc) 3.04 kB
{ "version": 3, "sources": ["../../src/tabs/use-track-overflow.ts"], "sourcesContent": ["/* eslint-disable jsdoc/require-param */\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect } from '@wordpress/element';\nimport { useEvent } from '@wordpress/compose';\n\n/**\n * Tracks if an element contains overflow and on which end by tracking the\n * first and last child elements with an `IntersectionObserver` in relation\n * to the parent element.\n *\n * Note that the returned value will only indicate whether the first or last\n * element is currently \"going out of bounds\" but not whether it happens on\n * the X or Y axis.\n */\nexport function useTrackOverflow(parent, children) {\n const [first, setFirst] = useState(false);\n const [last, setLast] = useState(false);\n const [observer, setObserver] = useState();\n const callback = useEvent(entries => {\n for (const entry of entries) {\n if (entry.target === children.first) {\n setFirst(!entry.isIntersecting);\n }\n if (entry.target === children.last) {\n setLast(!entry.isIntersecting);\n }\n }\n });\n useEffect(() => {\n if (!parent || !window.IntersectionObserver) {\n return;\n }\n const newObserver = new IntersectionObserver(callback, {\n root: parent,\n threshold: 0.9\n });\n setObserver(newObserver);\n return () => newObserver.disconnect();\n }, [callback, parent]);\n useEffect(() => {\n if (!observer) {\n return;\n }\n if (children.first) {\n observer.observe(children.first);\n }\n if (children.last) {\n observer.observe(children.last);\n }\n return () => {\n if (children.first) {\n observer.unobserve(children.first);\n }\n if (children.last) {\n observer.unobserve(children.last);\n }\n };\n }, [children.first, children.last, observer]);\n return {\n first,\n last\n };\n}\n/* eslint-enable jsdoc/require-param */"], "mappings": ";AAIA,SAAS,UAAU,iBAAiB;AACpC,SAAS,gBAAgB;AAWlB,SAAS,iBAAiB,QAAQ,UAAU;AACjD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AACxC,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS;AACzC,QAAM,WAAW,SAAS,aAAW;AACnC,eAAW,SAAS,SAAS;AAC3B,UAAI,MAAM,WAAW,SAAS,OAAO;AACnC,iBAAS,CAAC,MAAM,cAAc;AAAA,MAChC;AACA,UAAI,MAAM,WAAW,SAAS,MAAM;AAClC,gBAAQ,CAAC,MAAM,cAAc;AAAA,MAC/B;AAAA,IACF;AAAA,EACF,CAAC;AACD,YAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,OAAO,sBAAsB;AAC3C;AAAA,IACF;AACA,UAAM,cAAc,IAAI,qBAAqB,UAAU;AAAA,MACrD,MAAM;AAAA,MACN,WAAW;AAAA,IACb,CAAC;AACD,gBAAY,WAAW;AACvB,WAAO,MAAM,YAAY,WAAW;AAAA,EACtC,GAAG,CAAC,UAAU,MAAM,CAAC;AACrB,YAAU,MAAM;AACd,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AACA,QAAI,SAAS,OAAO;AAClB,eAAS,QAAQ,SAAS,KAAK;AAAA,IACjC;AACA,QAAI,SAAS,MAAM;AACjB,eAAS,QAAQ,SAAS,IAAI;AAAA,IAChC;AACA,WAAO,MAAM;AACX,UAAI,SAAS,OAAO;AAClB,iBAAS,UAAU,SAAS,KAAK;AAAA,MACnC;AACA,UAAI,SAAS,MAAM;AACjB,iBAAS,UAAU,SAAS,IAAI;AAAA,MAClC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,OAAO,SAAS,MAAM,QAAQ,CAAC;AAC5C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;", "names": [] }