linear-react-components-ui 2.2.0-beta.1 → 2.2.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,10 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { c as compilerRuntimeExports } from "../_virtual/compiler-runtime.js";
3
- import { useContext, useRef } from "react";
4
- import PanelContext from "./helpers.js";
3
+ import { useContext, useRef, useEffect } from "react";
4
+ import PanelContext, { getCurrentThreshold } from "./helpers.js";
5
5
  import NoPermission from "../noPermission/index.js";
6
- import { useScrollEndReached } from "../hooks/useScrollEndReached/index.js";
7
6
  const PanelContent = (t0) => {
8
- const $ = compilerRuntimeExports.c(13);
7
+ const $ = compilerRuntimeExports.c(18);
9
8
  let children;
10
9
  let customClass;
11
10
  let rest;
@@ -32,12 +31,28 @@ const PanelContent = (t0) => {
32
31
  } = useContext(PanelContext);
33
32
  const onEndReachedThreshold = t1 === void 0 ? 0.1 : t1;
34
33
  const rootElementRef = useRef(null);
34
+ const lastScrollHeight = useRef(0);
35
+ const enableOnEndReached = useRef(true);
35
36
  let t2;
36
37
  if ($[4] !== onEndReached || $[5] !== onEndReachedThreshold) {
37
- t2 = {
38
- elementRef: rootElementRef,
39
- onEndReached,
40
- onEndReachedThreshold
38
+ t2 = async () => {
39
+ const element = rootElementRef.current;
40
+ if (element && onEndReached) {
41
+ const {
42
+ scrollTop,
43
+ scrollHeight,
44
+ clientHeight
45
+ } = element;
46
+ const scrollOffset = scrollHeight - clientHeight - scrollTop - 1;
47
+ const threshold = getCurrentThreshold(element, onEndReachedThreshold);
48
+ if (scrollOffset <= threshold && enableOnEndReached.current) {
49
+ enableOnEndReached.current = false;
50
+ await new Promise((resolve) => {
51
+ resolve(onEndReached());
52
+ });
53
+ lastScrollHeight.current = scrollHeight;
54
+ }
55
+ }
41
56
  };
42
57
  $[4] = onEndReached;
43
58
  $[5] = onEndReachedThreshold;
@@ -45,23 +60,65 @@ const PanelContent = (t0) => {
45
60
  } else {
46
61
  t2 = $[6];
47
62
  }
48
- useScrollEndReached(t2);
63
+ const onScrollEndReached = t2;
64
+ let t3;
65
+ if ($[7] !== onEndReached || $[8] !== onScrollEndReached) {
66
+ t3 = () => {
67
+ let observer;
68
+ if (rootElementRef?.current && onEndReached) {
69
+ observer = new ResizeObserver(() => {
70
+ const currentElement = rootElementRef.current;
71
+ if (currentElement) {
72
+ const {
73
+ scrollHeight: scrollHeight_0
74
+ } = currentElement;
75
+ if (scrollHeight_0 && scrollHeight_0 !== lastScrollHeight.current) {
76
+ enableOnEndReached.current = true;
77
+ observer?.disconnect();
78
+ }
79
+ }
80
+ });
81
+ observer.observe(rootElementRef.current);
82
+ rootElementRef.current.addEventListener("scroll", onScrollEndReached);
83
+ rootElementRef.current.addEventListener("resize", onScrollEndReached);
84
+ }
85
+ return () => {
86
+ rootElementRef.current?.removeEventListener("scroll", onScrollEndReached);
87
+ rootElementRef.current?.removeEventListener("resize", onScrollEndReached);
88
+ observer?.disconnect();
89
+ };
90
+ };
91
+ $[7] = onEndReached;
92
+ $[8] = onScrollEndReached;
93
+ $[9] = t3;
94
+ } else {
95
+ t3 = $[9];
96
+ }
97
+ let t4;
98
+ if ($[10] !== onScrollEndReached) {
99
+ t4 = [onScrollEndReached];
100
+ $[10] = onScrollEndReached;
101
+ $[11] = t4;
102
+ } else {
103
+ t4 = $[11];
104
+ }
105
+ useEffect(t3, t4);
49
106
  if (!opened) {
50
107
  return null;
51
108
  }
52
- let t3;
53
- if ($[7] !== children || $[8] !== customClass || $[9] !== hideContent || $[10] !== opened || $[11] !== rest) {
54
- t3 = hideContent ? /* @__PURE__ */ jsx(NoPermission, {}) : /* @__PURE__ */ jsx("div", { ref: rootElementRef, className: `panel-content ${customClass ?? ""}`, ...rest, children: opened && children });
55
- $[7] = children;
56
- $[8] = customClass;
57
- $[9] = hideContent;
58
- $[10] = opened;
59
- $[11] = rest;
60
- $[12] = t3;
109
+ let t5;
110
+ if ($[12] !== children || $[13] !== customClass || $[14] !== hideContent || $[15] !== opened || $[16] !== rest) {
111
+ t5 = hideContent ? /* @__PURE__ */ jsx(NoPermission, {}) : /* @__PURE__ */ jsx("div", { ref: rootElementRef, className: `panel-content ${customClass ?? ""}`, ...rest, children: opened && children });
112
+ $[12] = children;
113
+ $[13] = customClass;
114
+ $[14] = hideContent;
115
+ $[15] = opened;
116
+ $[16] = rest;
117
+ $[17] = t5;
61
118
  } else {
62
- t3 = $[12];
119
+ t5 = $[17];
63
120
  }
64
- return t3;
121
+ return t5;
65
122
  };
66
123
  export {
67
124
  PanelContent as default
@@ -1 +1 @@
1
- {"version":3,"file":"Content.js","sources":["../../src/lib/panel/Content.tsx"],"sourcesContent":["import { useContext, useRef } from 'react';\nimport PanelContext from './helpers';\nimport NoPermission from '../noPermission';\nimport { IPanelContentProps } from './types';\nimport { useScrollEndReached } from '../hooks/useScrollEndReached';\n\nconst PanelContent = ({ customClass, children, ...rest }: IPanelContentProps) => {\n const {\n opened, onEndReached, onEndReachedThreshold = 0.1, hideContent,\n } = useContext(PanelContext);\n const rootElementRef = useRef<HTMLDivElement>(null);\n \n useScrollEndReached({\n elementRef: rootElementRef,\n onEndReached,\n onEndReachedThreshold,\n });\n\n if (!opened) return null;\n return (\n hideContent\n ? (\n <NoPermission />\n )\n : (\n <div\n ref={rootElementRef}\n className={`panel-content ${customClass ?? ''}`}\n {...rest}>\n {opened && children}\n </div>\n )\n );\n};\n\nexport default PanelContent;\n"],"names":["PanelContent","t0","$","_c","children","customClass","rest","opened","onEndReached","onEndReachedThreshold","t1","hideContent","useContext","PanelContext","undefined","rootElementRef","useRef","t2","elementRef","useScrollEndReached","t3"],"mappings":";;;;;;AAMA,MAAMA,eAAeC,CAAAA,OAAA;AAAA,QAAAC,IAAAC,uBAAAA,EAAA,EAAA;AAAA,MAAAC;AAAA,MAAAC;AAAA,MAAAC;AAAA,MAAAJ,SAAAD,IAAA;AAAC,KAAA;AAAA,MAAAI;AAAAA,MAAAD;AAAAA,MAAA,GAAAE;AAAAA,IAAAA,IAAAL;AAAsDC,WAAAD;AAAAC,WAAAE;AAAAF,WAAAG;AAAAH,WAAAI;AAAAA,EAAA,OAAA;AAAAF,eAAAF,EAAA,CAAA;AAAAG,kBAAAH,EAAA,CAAA;AAAAI,WAAAJ,EAAA,CAAA;AAAA,EAAA;AAC1E,QAAA;AAAA,IAAAK;AAAAA,IAAAC;AAAAA,IAAAC,uBAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAEIC,WAAWC,YAAY;AADH,QAAAJ,wBAAAC,OAAAI,SAAA,MAAAJ;AAExB,QAAAK,iBAAuBC,OAAuB,IAAI;AAAE,MAAAC;AAAA,MAAAf,EAAA,CAAA,MAAAM,gBAAAN,SAAAO,uBAAA;AAEhCQ,SAAA;AAAA,MAAAC,YACNH;AAAAA,MAAcP;AAAAA,MAAAC;AAAAA,IAAAA;AAG3BP,WAAAM;AAAAN,WAAAO;AAAAP,WAAAe;AAAAA,EAAA,OAAA;AAAAA,SAAAf,EAAA,CAAA;AAAA,EAAA;AAJDiB,sBAAoBF,EAInB;AAED,MAAI,CAACV,QAAM;AAAA,WAAS;AAAA,EAAI;AAAC,MAAAa;AAAA,MAAAlB,EAAA,CAAA,MAAAE,YAAAF,EAAA,CAAA,MAAAG,eAAAH,EAAA,CAAA,MAAAS,eAAAT,EAAA,EAAA,MAAAK,UAAAL,UAAAI,MAAA;AAEvBc,SAAAT,cAEI,oBAAC,cAAA,CAAA,CAAY,IAGb,oBAAA,SACOI,KAAAA,gBACM,WAAA,iBAAiBV,eAAA,EAAiB,OACzCC,MACHC,oBAAAH,UACH;AACCF,WAAAE;AAAAF,WAAAG;AAAAH,WAAAS;AAAAT,YAAAK;AAAAL,YAAAI;AAAAJ,YAAAkB;AAAAA,EAAA,OAAA;AAAAA,SAAAlB,EAAA,EAAA;AAAA,EAAA;AAAA,SAXLkB;AAWK;"}
1
+ {"version":3,"file":"Content.js","sources":["../../src/lib/panel/Content.tsx"],"sourcesContent":["import { useCallback, useContext, useEffect, useRef } from 'react';\nimport PanelContext, { getCurrentThreshold } from './helpers';\nimport NoPermission from '../noPermission';\nimport { IPanelContentProps } from './types';\n\nconst PanelContent = ({ customClass, children, ...rest }: IPanelContentProps) => {\n const {\n opened, onEndReached, onEndReachedThreshold = 0.1, hideContent,\n } = useContext(PanelContext);\n const rootElementRef = useRef<HTMLDivElement>(null);\n const lastScrollHeight = useRef(0);\n const enableOnEndReached = useRef(true);\n\n const onScrollEndReached = useCallback(async () => {\n const element = rootElementRef.current;\n\n if (element && onEndReached) {\n const { scrollTop, scrollHeight, clientHeight } = element;\n const scrollOffset = scrollHeight - clientHeight - scrollTop - 1;\n const threshold = getCurrentThreshold(element, onEndReachedThreshold);\n\n if (scrollOffset <= threshold && enableOnEndReached.current) {\n enableOnEndReached.current = false;\n await new Promise((resolve) => {\n resolve(onEndReached());\n });\n lastScrollHeight.current = scrollHeight;\n }\n }\n }, [\n onEndReached, onEndReachedThreshold,\n rootElementRef.current, lastScrollHeight.current,\n ]);\n\n useEffect(() => {\n let observer: ResizeObserver | null;\n if (rootElementRef?.current && onEndReached) {\n observer = new ResizeObserver(() => {\n const currentElement = rootElementRef.current;\n if (currentElement) {\n const { scrollHeight } = currentElement as HTMLDivElement;\n if (scrollHeight && scrollHeight !== lastScrollHeight.current) {\n enableOnEndReached.current = true;\n observer?.disconnect();\n }\n }\n });\n\n observer.observe(rootElementRef.current);\n rootElementRef.current.addEventListener('scroll', onScrollEndReached);\n rootElementRef.current.addEventListener('resize', onScrollEndReached);\n }\n\n return () => {\n rootElementRef.current?.removeEventListener('scroll', onScrollEndReached);\n rootElementRef.current?.removeEventListener('resize', onScrollEndReached);\n observer?.disconnect();\n };\n }, [onScrollEndReached]);\n\n if (!opened) return null;\n return (\n hideContent\n ? (\n <NoPermission />\n )\n : (\n <div\n ref={rootElementRef}\n className={`panel-content ${customClass ?? ''}`}\n {...rest}>\n {opened && children}\n </div>\n )\n );\n};\n\nexport default PanelContent;\n"],"names":["PanelContent","t0","$","_c","children","customClass","rest","opened","onEndReached","onEndReachedThreshold","t1","hideContent","useContext","PanelContext","undefined","rootElementRef","useRef","lastScrollHeight","enableOnEndReached","t2","element","current","scrollTop","scrollHeight","clientHeight","scrollOffset","threshold","getCurrentThreshold","Promise","resolve","onScrollEndReached","t3","observer","ResizeObserver","currentElement","scrollHeight_0","disconnect","observe","addEventListener","removeEventListener","t4","useEffect","t5"],"mappings":"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"}
@@ -1,6 +1,21 @@
1
1
  import { createContext } from "react";
2
+ function getCurrentThreshold(scrollableElement, scrollThreshold) {
3
+ const MIN_THRESHOLD = 0;
4
+ const MAX_THRESHOLD = 1;
5
+ if (scrollThreshold < MIN_THRESHOLD) return MIN_THRESHOLD;
6
+ if (scrollThreshold > MAX_THRESHOLD) return MAX_THRESHOLD;
7
+ const {
8
+ scrollHeight,
9
+ clientHeight
10
+ } = scrollableElement;
11
+ const offsetHeight = scrollHeight - clientHeight;
12
+ const calculatedScrollThreshold = Math.round(scrollHeight * scrollThreshold);
13
+ const maxScrollThreshold = Math.round(offsetHeight - offsetHeight * 0.3);
14
+ return Math.min(calculatedScrollThreshold, maxScrollThreshold);
15
+ }
2
16
  const PanelContext = createContext({});
3
17
  export {
4
- PanelContext as default
18
+ PanelContext as default,
19
+ getCurrentThreshold
5
20
  };
6
21
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../src/lib/panel/helpers.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { ContextProps } from './types';\n\nexport function getCurrentThreshold(\n scrollableElement: HTMLDivElement,\n scrollThreshold: number,\n): number {\n const MIN_THRESHOLD = 0;\n const MAX_THRESHOLD = 1;\n if (scrollThreshold < MIN_THRESHOLD) return MIN_THRESHOLD;\n if (scrollThreshold > MAX_THRESHOLD) return MAX_THRESHOLD;\n const { scrollHeight, clientHeight } = scrollableElement;\n const offsetHeight = scrollHeight - clientHeight;\n\n const calculatedScrollThreshold = Math.round(scrollHeight * scrollThreshold);\n const maxScrollThreshold = Math.round(offsetHeight - (offsetHeight * 0.3));\n\n return Math.min(calculatedScrollThreshold, maxScrollThreshold);\n}\n\nconst PanelContext = createContext<ContextProps>({} as ContextProps);\n\nexport default PanelContext;\n"],"names":["PanelContext","createContext"],"mappings":";AAoBA,MAAMA,eAAeC,cAA4B,CAAA,CAAkB;"}
1
+ {"version":3,"file":"helpers.js","sources":["../../src/lib/panel/helpers.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { ContextProps } from './types';\n\nexport function getCurrentThreshold(\n scrollableElement: HTMLDivElement,\n scrollThreshold: number,\n): number {\n const MIN_THRESHOLD = 0;\n const MAX_THRESHOLD = 1;\n if (scrollThreshold < MIN_THRESHOLD) return MIN_THRESHOLD;\n if (scrollThreshold > MAX_THRESHOLD) return MAX_THRESHOLD;\n const { scrollHeight, clientHeight } = scrollableElement;\n const offsetHeight = scrollHeight - clientHeight;\n\n const calculatedScrollThreshold = Math.round(scrollHeight * scrollThreshold);\n const maxScrollThreshold = Math.round(offsetHeight - (offsetHeight * 0.3));\n\n return Math.min(calculatedScrollThreshold, maxScrollThreshold);\n}\n\nconst PanelContext = createContext<ContextProps>({} as ContextProps);\n\nexport default PanelContext;\n"],"names":["getCurrentThreshold","scrollableElement","scrollThreshold","MIN_THRESHOLD","MAX_THRESHOLD","scrollHeight","clientHeight","offsetHeight","calculatedScrollThreshold","Math","round","maxScrollThreshold","min","PanelContext","createContext"],"mappings":";AAGO,SAASA,oBACdC,mBACAC,iBACQ;AACR,QAAMC,gBAAgB;AACtB,QAAMC,gBAAgB;AACtB,MAAIF,kBAAkBC,cAAe,QAAOA;AAC5C,MAAID,kBAAkBE,cAAe,QAAOA;AAC5C,QAAM;AAAA,IAAEC;AAAAA,IAAcC;AAAAA,EAAAA,IAAiBL;AACvC,QAAMM,eAAeF,eAAeC;AAEpC,QAAME,4BAA4BC,KAAKC,MAAML,eAAeH,eAAe;AAC3E,QAAMS,qBAAqBF,KAAKC,MAAMH,eAAgBA,eAAe,GAAI;AAEzE,SAAOE,KAAKG,IAAIJ,2BAA2BG,kBAAkB;AAC/D;AAEA,MAAME,eAAeC,cAA4B,CAAA,CAAkB;"}
@@ -2,10 +2,9 @@ import { ComponentPropsWithoutRef, ReactElement, ReactNode } from 'react';
2
2
  import { PermissionAttr } from '../@types/PermissionAttr';
3
3
  import { default as ColorStyles } from '../internals/colorStyles';
4
4
  import { IconNames } from '../@types/Icon';
5
- import { UseScrollEndReachedParams } from '../hooks/useScrollEndReached/types';
6
5
  export type Func = () => void;
7
6
  export type AsyncFunc = () => Promise<void>;
8
- export interface IPanelProps extends Omit<ComponentPropsWithoutRef<'div'>, 'className'>, UseScrollEndReachedParams {
7
+ export interface IPanelProps extends Omit<ComponentPropsWithoutRef<'div'>, 'className'> {
9
8
  customClass?: string;
10
9
  startOpened?: boolean;
11
10
  toggleable?: boolean;
@@ -13,6 +12,8 @@ export interface IPanelProps extends Omit<ComponentPropsWithoutRef<'div'>, 'clas
13
12
  colorStyle?: typeof ColorStyles | string;
14
13
  gridCols?: string;
15
14
  title?: string;
15
+ onEndReached?: Func | AsyncFunc;
16
+ onEndReachedThreshold?: number;
16
17
  permissionAttr?: PermissionAttr | PermissionAttr[];
17
18
  }
18
19
  export interface IPanelContentProps extends Omit<ComponentPropsWithoutRef<'div'>, 'className'> {
@@ -27,11 +28,13 @@ export interface IPanelHeaderProps extends Omit<ComponentPropsWithoutRef<'div'>,
27
28
  customClassForTitle?: string;
28
29
  headerColored?: boolean;
29
30
  }
30
- export type ContextProps = UseScrollEndReachedParams & {
31
+ export type ContextProps = {
31
32
  toggleable: boolean;
32
33
  handlerToggleable: () => void;
33
34
  opened: boolean;
34
35
  hideContent: boolean;
36
+ onEndReached?: Func | AsyncFunc;
37
+ onEndReachedThreshold: number;
35
38
  };
36
39
  export interface IParameterFunction {
37
40
  props: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "linear-react-components-ui",
3
- "version": "2.2.0-beta.1",
3
+ "version": "2.2.0-beta.11",
4
4
  "description": "Linear Sistemas ReactJs Components",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -1,8 +0,0 @@
1
- import { AsyncFunc, Func, UseScrollEndReachedParams } from './types';
2
- export interface ScrollEndReachedParams extends UseScrollEndReachedParams {
3
- elementRef: React.RefObject<HTMLElement | null>;
4
- onEndReached?: Func | AsyncFunc;
5
- onEndReachedThreshold?: number;
6
- }
7
- export declare function getCurrentThreshold(scrollableElement: HTMLElement, scrollThreshold: number): number;
8
- export declare function useScrollEndReached({ elementRef, onEndReached, onEndReachedThreshold, }: ScrollEndReachedParams): void;
@@ -1,103 +0,0 @@
1
- import { c as compilerRuntimeExports } from "../../_virtual/compiler-runtime.js";
2
- import { useRef, useEffect } from "react";
3
- function getCurrentThreshold(scrollableElement, scrollThreshold) {
4
- const MIN_THRESHOLD = 0;
5
- const MAX_THRESHOLD = 1;
6
- if (scrollThreshold < MIN_THRESHOLD) return MIN_THRESHOLD;
7
- if (scrollThreshold > MAX_THRESHOLD) return MAX_THRESHOLD;
8
- const {
9
- scrollHeight,
10
- clientHeight
11
- } = scrollableElement;
12
- const offsetHeight = scrollHeight - clientHeight;
13
- const calculatedScrollThreshold = Math.round(scrollHeight * scrollThreshold);
14
- const maxScrollThreshold = Math.round(offsetHeight - offsetHeight * 0.3);
15
- return Math.min(calculatedScrollThreshold, maxScrollThreshold);
16
- }
17
- function useScrollEndReached(t0) {
18
- const $ = compilerRuntimeExports.c(9);
19
- const {
20
- elementRef,
21
- onEndReached,
22
- onEndReachedThreshold: t1
23
- } = t0;
24
- const onEndReachedThreshold = t1 === void 0 ? 0.1 : t1;
25
- const lastScrollHeight = useRef(0);
26
- const enableOnEndReached = useRef(true);
27
- let t2;
28
- if ($[0] !== elementRef || $[1] !== onEndReached || $[2] !== onEndReachedThreshold) {
29
- t2 = async () => {
30
- const element = elementRef.current;
31
- if (element && onEndReached) {
32
- const {
33
- scrollTop,
34
- scrollHeight,
35
- clientHeight
36
- } = element;
37
- const scrollOffset = scrollHeight - clientHeight - scrollTop - 1;
38
- const threshold = getCurrentThreshold(element, onEndReachedThreshold);
39
- if (scrollOffset <= threshold && enableOnEndReached.current && scrollHeight !== lastScrollHeight.current) {
40
- enableOnEndReached.current = false;
41
- await new Promise((resolve) => {
42
- resolve(onEndReached());
43
- });
44
- enableOnEndReached.current = true;
45
- lastScrollHeight.current = scrollHeight;
46
- }
47
- }
48
- };
49
- $[0] = elementRef;
50
- $[1] = onEndReached;
51
- $[2] = onEndReachedThreshold;
52
- $[3] = t2;
53
- } else {
54
- t2 = $[3];
55
- }
56
- const onScrollEndReached = t2;
57
- let t3;
58
- if ($[4] !== elementRef || $[5] !== onEndReached || $[6] !== onScrollEndReached) {
59
- t3 = () => {
60
- let observer;
61
- const element_0 = elementRef.current;
62
- if (element_0 && onEndReached) {
63
- observer = new ResizeObserver(() => {
64
- const currentElement = elementRef.current;
65
- if (currentElement) {
66
- const {
67
- scrollHeight: scrollHeight_0
68
- } = currentElement;
69
- if (scrollHeight_0 && scrollHeight_0 !== lastScrollHeight.current) {
70
- enableOnEndReached.current = true;
71
- observer?.disconnect();
72
- }
73
- }
74
- });
75
- observer.observe(element_0);
76
- element_0.addEventListener("scroll", onScrollEndReached);
77
- }
78
- return () => {
79
- element_0?.removeEventListener("scroll", onScrollEndReached);
80
- observer?.disconnect();
81
- };
82
- };
83
- $[4] = elementRef;
84
- $[5] = onEndReached;
85
- $[6] = onScrollEndReached;
86
- $[7] = t3;
87
- } else {
88
- t3 = $[7];
89
- }
90
- let t4;
91
- if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
92
- t4 = [];
93
- $[8] = t4;
94
- } else {
95
- t4 = $[8];
96
- }
97
- useEffect(t3, t4);
98
- }
99
- export {
100
- getCurrentThreshold,
101
- useScrollEndReached
102
- };
103
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/lib/hooks/useScrollEndReached/index.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { AsyncFunc, Func, UseScrollEndReachedParams } from \"./types\";\n\nexport interface ScrollEndReachedParams extends UseScrollEndReachedParams {\n elementRef: React.RefObject<HTMLElement | null>;\n onEndReached?: Func | AsyncFunc;\n onEndReachedThreshold?: number;\n}\n\nexport function getCurrentThreshold(\n scrollableElement: HTMLElement,\n scrollThreshold: number,\n): number {\n const MIN_THRESHOLD = 0;\n const MAX_THRESHOLD = 1;\n if (scrollThreshold < MIN_THRESHOLD) return MIN_THRESHOLD;\n if (scrollThreshold > MAX_THRESHOLD) return MAX_THRESHOLD;\n const { scrollHeight, clientHeight } = scrollableElement;\n const offsetHeight = scrollHeight - clientHeight;\n\n const calculatedScrollThreshold = Math.round(scrollHeight * scrollThreshold);\n const maxScrollThreshold = Math.round(offsetHeight - (offsetHeight * 0.3));\n\n return Math.min(calculatedScrollThreshold, maxScrollThreshold);\n}\n\nexport function useScrollEndReached({\n elementRef,\n onEndReached,\n onEndReachedThreshold = 0.1,\n}: ScrollEndReachedParams) {\n const lastScrollHeight = useRef(0);\n const enableOnEndReached = useRef(true);\n\n const onScrollEndReached = async () => {\n const element = elementRef.current;\n \n if (element && onEndReached) {\n const { scrollTop, scrollHeight, clientHeight } = element;\n const scrollOffset = scrollHeight - clientHeight - scrollTop - 1;\n const threshold = getCurrentThreshold(element, onEndReachedThreshold);\n\n if (\n scrollOffset <= threshold && enableOnEndReached.current \n && scrollHeight !== lastScrollHeight.current\n ) {\n enableOnEndReached.current = false;\n await new Promise((resolve) => {\n resolve(onEndReached());\n });\n enableOnEndReached.current = true;\n lastScrollHeight.current = scrollHeight;\n }\n }\n };\n\n useEffect(() => {\n let observer: ResizeObserver | null;\n const element = elementRef.current;\n if (element && onEndReached) {\n observer = new ResizeObserver(() => {\n const currentElement = elementRef.current;\n if (currentElement) {\n const { scrollHeight } = currentElement as HTMLDivElement;\n if (scrollHeight && scrollHeight !== lastScrollHeight.current) {\n enableOnEndReached.current = true;\n observer?.disconnect();\n }\n }\n });\n \n observer.observe(element);\n element.addEventListener('scroll', onScrollEndReached);\n }\n \n return () => {\n element?.removeEventListener('scroll', onScrollEndReached);\n observer?.disconnect();\n };\n }, []);\n}\n"],"names":["getCurrentThreshold","scrollableElement","scrollThreshold","MIN_THRESHOLD","MAX_THRESHOLD","scrollHeight","clientHeight","offsetHeight","calculatedScrollThreshold","Math","round","maxScrollThreshold","min","useScrollEndReached","t0","$","_c","elementRef","onEndReached","onEndReachedThreshold","t1","undefined","lastScrollHeight","useRef","enableOnEndReached","t2","element","current","scrollTop","scrollOffset","threshold","Promise","resolve","onScrollEndReached","t3","observer","element_0","ResizeObserver","currentElement","scrollHeight_0","disconnect","observe","addEventListener","removeEventListener","t4","Symbol","for","useEffect"],"mappings":";;AASO,SAASA,oBACdC,mBACAC,iBACQ;AACR,QAAMC,gBAAgB;AACtB,QAAMC,gBAAgB;AACtB,MAAIF,kBAAkBC,cAAe,QAAOA;AAC5C,MAAID,kBAAkBE,cAAe,QAAOA;AAC5C,QAAM;AAAA,IAAEC;AAAAA,IAAcC;AAAAA,EAAAA,IAAiBL;AACvC,QAAMM,eAAeF,eAAeC;AAEpC,QAAME,4BAA4BC,KAAKC,MAAML,eAAeH,eAAe;AAC3E,QAAMS,qBAAqBF,KAAKC,MAAMH,eAAgBA,eAAe,GAAI;AAEzE,SAAOE,KAAKG,IAAIJ,2BAA2BG,kBAAkB;AAC/D;AAEO,SAAAE,oBAAAC,IAAA;AAAA,QAAAC,IAAAC,uBAAAA,EAAA,CAAA;AAA6B,QAAA;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC,uBAAAC;AAAAA,EAAAA,IAAAN;AAGlC,QAAAK,wBAAAC,OAAAC,SAAA,MAAAD;AAEA,QAAAE,mBAAyBC,OAAO,CAAC;AACjC,QAAAC,qBAA2BD,OAAO,IAAI;AAAE,MAAAE;AAAA,MAAAV,EAAA,CAAA,MAAAE,cAAAF,SAAAG,gBAAAH,EAAA,CAAA,MAAAI,uBAAA;AAEbM,qBAAA;AACzB,YAAAC,UAAgBT,WAAUU;AAE1B,UAAID,WAAAR,cAAuB;AACzB,cAAA;AAAA,UAAAU;AAAAA,UAAAvB;AAAAA,UAAAC;AAAAA,QAAAA,IAAkDoB;AAClD,cAAAG,eAAqBxB,eAAeC,eAAesB,YAAY;AAC/D,cAAAE,YAAkB9B,oBAAoB0B,SAASP,qBAAqB;AAEpE,YACEU,gBAAgBC,aAAaN,mBAAkBG,WAC5CtB,iBAAiBiB,iBAAgBK,SAAQ;AAE5CH,6BAAkBG,UAAW;AAC7B,gBAAM,IAAII,QAAQC,CAAAA,YAAA;AAChBA,oBAAQd,cAAc;AAAA,UAAC,CACxB;AACDM,6BAAkBG,UAAW;AAC7BL,2BAAgBK,UAAWtB;AAAAA,QAAH;AAAA,MACzB;AAAA,IACF;AACFU,WAAAE;AAAAF,WAAAG;AAAAH,WAAAI;AAAAJ,WAAAU;AAAAA,EAAA,OAAA;AAAAA,SAAAV,EAAA,CAAA;AAAA,EAAA;AApBD,QAAAkB,qBAA2BR;AAoBzB,MAAAS;AAAA,MAAAnB,EAAA,CAAA,MAAAE,cAAAF,SAAAG,gBAAAH,EAAA,CAAA,MAAAkB,oBAAA;AAEQC,SAAAA,MAAA;AACJC,UAAAA;AACJ,YAAAC,YAAiBnB,WAAUU;AAC3B,UAAIS,aAAAlB,cAAuB;AACzBiB,mBAAWA,IAAIE,eAAe,MAAA;AAC5B,gBAAAC,iBAAuBrB,WAAUU;AACjC,cAAIW,gBAAc;AAChB,kBAAA;AAAA,cAAAjC,cAAAkC;AAAAA,YAAAA,IAAyBD;AACzB,gBAAIC,kBAAgBlC,mBAAiBiB,iBAAgBK,SAAQ;AAC3DH,iCAAkBG,UAAW;AAC7BQ,wBAAQK,WAAAA;AAAAA,YAAc;AAAA,UACvB;AAAA,QACF,CACF;AAEDL,iBAAQM,QAASf,SAAO;AACxBA,kBAAOgB,iBAAkB,UAAUT,kBAAkB;AAAA,MAAC;AACvD,aAEM,MAAA;AACLP,mBAAOiB,oBAAsB,UAAUV,kBAAkB;AACzDE,kBAAQK,WAAAA;AAAAA,MAAc;AAAA,IACvB;AACFzB,WAAAE;AAAAF,WAAAG;AAAAH,WAAAkB;AAAAlB,WAAAmB;AAAAA,EAAA,OAAA;AAAAA,SAAAnB,EAAA,CAAA;AAAA,EAAA;AAAA,MAAA6B;AAAA,MAAA7B,EAAA,CAAA,MAAA8B,OAAAC,IAAA,2BAAA,GAAA;AAAEF,SAAA,CAAA;AAAE7B,WAAA6B;AAAAA,EAAA,OAAA;AAAAA,SAAA7B,EAAA,CAAA;AAAA,EAAA;AAvBLgC,YAAUb,IAuBPU,EAAE;AAAC;"}
@@ -1,6 +0,0 @@
1
- export type Func = () => void;
2
- export type AsyncFunc = () => Promise<void>;
3
- export interface UseScrollEndReachedParams {
4
- onEndReached?: Func | AsyncFunc;
5
- onEndReachedThreshold?: number;
6
- }