@futurejj/react-native-visibility-sensor 1.3.13 → 1.3.15

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.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  🔍 Component visibility sensor wrapper to sense whether or not a component is in viewport with configurable inset thresholds.
4
4
 
5
- [![npm version](https://img.shields.io/npm/v/%40futurejj%2Freact-native-visibility-sensor)](https://badge.fury.io/js/%40futurejj%2Freact-native-visibility-sensor) [![License](https://img.shields.io/github/license/JairajJangle/react-native-visibility-sensor)](https://github.com/JairajJangle/react-native-visibility-sensor/blob/main/LICENSE) [![Workflow Status](https://github.com/JairajJangle/react-native-visibility-sensor/actions/workflows/ci.yml/badge.svg)](https://github.com/JairajJangle/react-native-visibility-sensor/actions/workflows/ci.yml) [![Supported Platform Badge](https://img.shields.io/badge/platform-android%20%26%20ios-blue)](https://github.com/JairajJangle/react-native-visibility-sensor/tree/main/example) [![GitHub issues](https://img.shields.io/github/issues/JairajJangle/react-native-visibility-sensor)](https://github.com/JairajJangle/react-native-visibility-sensor/issues?q=is%3Aopen+is%3Aissue) ![TS](https://img.shields.io/badge/TypeScript-strict_💪-blue) ![NPM Downloads](https://img.shields.io/npm/dm/%40futurejj%2Freact-native-visibility-sensor)
5
+ [![npm version](https://img.shields.io/npm/v/%40futurejj%2Freact-native-visibility-sensor)](https://badge.fury.io/js/%40futurejj%2Freact-native-visibility-sensor) [![License](https://img.shields.io/github/license/JairajJangle/react-native-visibility-sensor)](https://github.com/JairajJangle/react-native-visibility-sensor/blob/main/LICENSE) [![Workflow Status](https://github.com/JairajJangle/react-native-visibility-sensor/actions/workflows/ci.yml/badge.svg)](https://github.com/JairajJangle/react-native-visibility-sensor/actions/workflows/ci.yml) ![Android](https://img.shields.io/badge/-Android-555555?logo=android&logoColor=3DDC84) ![iOS](https://img.shields.io/badge/-iOS-555555?logo=apple&logoColor=white) ![Web](https://img.shields.io/badge/-Web-555555?logo=google-chrome&logoColor=0096FF) [![GitHub issues](https://img.shields.io/github/issues/JairajJangle/react-native-visibility-sensor)](https://github.com/JairajJangle/react-native-visibility-sensor/issues?q=is%3Aopen+is%3Aissue) ![TS](https://img.shields.io/badge/TypeScript-strict_💪-blue) [![Expo Snack](https://img.shields.io/badge/Expo%20Snack-555555?style=flat&logo=expo&logoColor=white)](https://snack.expo.dev/@futurejj/react-native-visibility-sensor-example) ![NPM Downloads](https://img.shields.io/npm/dm/%40futurejj%2Freact-native-visibility-sensor) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/%40futurejj%2Freact-native-visibility-sensor)
6
6
 
7
7
  <div align="center">
8
8
  <img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYTlsaGEyaXd4ZDdicWdtYnM4d3FibWltZjJwd3RrOG80b2pzemQ4dCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/hNCfKTz7YMuDPIM7eV/giphy.gif" alt="Visibility Sensor demo" style="border: 1px solid gray;" />
@@ -86,7 +86,7 @@ Additionally, all properties from `ViewProps` are also applicable.
86
86
 
87
87
  ## Notes
88
88
 
89
- 1. Facing problem on Android? Refer this discussion: https://github.com/JairajJangle/react-native-visibility-sensor/pull/1#issuecomment-2251569005
89
+ 1. ⚠️ Facing problem on Android? Refer this discussion: https://github.com/JairajJangle/react-native-visibility-sensor/pull/1#issuecomment-2251569005
90
90
 
91
91
  ## Contributing
92
92
 
@@ -46,7 +46,10 @@ const VisibilitySensor = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
46
46
  });
47
47
  const [lastValue, setLastValue] = (0, _react.useState)(undefined);
48
48
  const [active, setActive] = (0, _react.useState)(false);
49
+ const hasMeasuredRef = (0, _react.useRef)(false);
49
50
  const measureInnerView = () => {
51
+ /* Check if the sensor is active to prevent unnecessary measurements
52
+ This avoids running measurements when the sensor is disabled or stopped */
50
53
  if (!active) return;
51
54
  localRef.current?.measure((_x, _y, width, height, pageX, pageY) => {
52
55
  const dimensions = {
@@ -59,6 +62,9 @@ const VisibilitySensor = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
59
62
  };
60
63
  if (rectDimensions.rectTop !== dimensions.rectTop || rectDimensions.rectBottom !== dimensions.rectBottom || rectDimensions.rectLeft !== dimensions.rectLeft || rectDimensions.rectRight !== dimensions.rectRight || rectDimensions.rectWidth !== dimensions.rectWidth || rectDimensions.rectHeight !== dimensions.rectHeight) {
61
64
  setRectDimensions(dimensions);
65
+ /* Set hasMeasuredRef to true to indicate that a valid measurement has been taken
66
+ This ensures visibility checks only proceed after initial measurement */
67
+ hasMeasuredRef.current = true;
62
68
  }
63
69
  });
64
70
  };
@@ -67,7 +73,12 @@ const VisibilitySensor = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
67
73
  if (!active) setActive(true);
68
74
  }, [active]);
69
75
  const stopWatching = (0, _react.useCallback)(() => {
70
- if (active) setActive(false);
76
+ if (active) {
77
+ setActive(false);
78
+ /* Reset measurement state when stopping to ensure fresh measurements
79
+ when the sensor is reactivated */
80
+ hasMeasuredRef.current = false;
81
+ }
71
82
  }, [active]);
72
83
  (0, _react.useEffect)(() => {
73
84
  if (!disabled) {
@@ -78,6 +89,10 @@ const VisibilitySensor = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
78
89
  };
79
90
  }, [disabled, startWatching, stopWatching]);
80
91
  (0, _react.useEffect)(() => {
92
+ /* Ensure visibility checks only run when the sensor is active and
93
+ at least one measurement has been completed. This prevents
94
+ premature visibility calculations with invalid or stale dimensions */
95
+ if (!active || !hasMeasuredRef.current) return;
81
96
  const window = _reactNative.Dimensions.get('window');
82
97
  const isVisible = rectDimensions.rectTop + (threshold.top || 0) <= window.height &&
83
98
  // Top edge is within the bottom of the window
@@ -95,7 +110,7 @@ const VisibilitySensor = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
95
110
  }
96
111
  }
97
112
  // eslint-disable-next-line react-hooks/exhaustive-deps
98
- }, [rectDimensions, lastValue]);
113
+ }, [rectDimensions, lastValue, active]);
99
114
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
100
115
  ref: localRef,
101
116
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useInterval","callback","delay","savedCallback","useRef","useEffect","current","undefined","id","setInterval","clearInterval","VisibilitySensor","forwardRef","props","ref","onChange","disabled","triggerOnce","threshold","children","rest","localRef","useImperativeHandle","getInnerRef","rectDimensions","setRectDimensions","useState","rectTop","rectBottom","rectLeft","rectRight","rectWidth","rectHeight","lastValue","setLastValue","active","setActive","measureInnerView","measure","_x","_y","width","height","pageX","pageY","dimensions","startWatching","useCallback","stopWatching","window","Dimensions","isVisible","top","bottom","left","right","jsx","View","_default","exports"],"sourceRoot":"../../src","sources":["VisibilitySensor.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useInterval","callback","delay","savedCallback","useRef","useEffect","current","undefined","id","setInterval","clearInterval","VisibilitySensor","forwardRef","props","ref","onChange","disabled","triggerOnce","threshold","children","rest","localRef","useImperativeHandle","getInnerRef","rectDimensions","setRectDimensions","useState","rectTop","rectBottom","rectLeft","rectRight","rectWidth","rectHeight","lastValue","setLastValue","active","setActive","hasMeasuredRef","measureInnerView","measure","_x","_y","width","height","pageX","pageY","dimensions","startWatching","useCallback","stopWatching","window","Dimensions","isVisible","top","bottom","left","right","jsx","View","_default","exports"],"sourceRoot":"../../src","sources":["VisibilitySensor.tsx"],"mappings":"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","ignoreList":[]}
@@ -40,7 +40,10 @@ const VisibilitySensor = /*#__PURE__*/forwardRef((props, ref) => {
40
40
  });
41
41
  const [lastValue, setLastValue] = useState(undefined);
42
42
  const [active, setActive] = useState(false);
43
+ const hasMeasuredRef = useRef(false);
43
44
  const measureInnerView = () => {
45
+ /* Check if the sensor is active to prevent unnecessary measurements
46
+ This avoids running measurements when the sensor is disabled or stopped */
44
47
  if (!active) return;
45
48
  localRef.current?.measure((_x, _y, width, height, pageX, pageY) => {
46
49
  const dimensions = {
@@ -53,6 +56,9 @@ const VisibilitySensor = /*#__PURE__*/forwardRef((props, ref) => {
53
56
  };
54
57
  if (rectDimensions.rectTop !== dimensions.rectTop || rectDimensions.rectBottom !== dimensions.rectBottom || rectDimensions.rectLeft !== dimensions.rectLeft || rectDimensions.rectRight !== dimensions.rectRight || rectDimensions.rectWidth !== dimensions.rectWidth || rectDimensions.rectHeight !== dimensions.rectHeight) {
55
58
  setRectDimensions(dimensions);
59
+ /* Set hasMeasuredRef to true to indicate that a valid measurement has been taken
60
+ This ensures visibility checks only proceed after initial measurement */
61
+ hasMeasuredRef.current = true;
56
62
  }
57
63
  });
58
64
  };
@@ -61,7 +67,12 @@ const VisibilitySensor = /*#__PURE__*/forwardRef((props, ref) => {
61
67
  if (!active) setActive(true);
62
68
  }, [active]);
63
69
  const stopWatching = useCallback(() => {
64
- if (active) setActive(false);
70
+ if (active) {
71
+ setActive(false);
72
+ /* Reset measurement state when stopping to ensure fresh measurements
73
+ when the sensor is reactivated */
74
+ hasMeasuredRef.current = false;
75
+ }
65
76
  }, [active]);
66
77
  useEffect(() => {
67
78
  if (!disabled) {
@@ -72,6 +83,10 @@ const VisibilitySensor = /*#__PURE__*/forwardRef((props, ref) => {
72
83
  };
73
84
  }, [disabled, startWatching, stopWatching]);
74
85
  useEffect(() => {
86
+ /* Ensure visibility checks only run when the sensor is active and
87
+ at least one measurement has been completed. This prevents
88
+ premature visibility calculations with invalid or stale dimensions */
89
+ if (!active || !hasMeasuredRef.current) return;
75
90
  const window = Dimensions.get('window');
76
91
  const isVisible = rectDimensions.rectTop + (threshold.top || 0) <= window.height &&
77
92
  // Top edge is within the bottom of the window
@@ -89,7 +104,7 @@ const VisibilitySensor = /*#__PURE__*/forwardRef((props, ref) => {
89
104
  }
90
105
  }
91
106
  // eslint-disable-next-line react-hooks/exhaustive-deps
92
- }, [rectDimensions, lastValue]);
107
+ }, [rectDimensions, lastValue, active]);
93
108
  return /*#__PURE__*/_jsx(View, {
94
109
  ref: localRef,
95
110
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useRef","useState","forwardRef","useImperativeHandle","Dimensions","View","jsx","_jsx","useInterval","callback","delay","savedCallback","current","undefined","id","setInterval","clearInterval","VisibilitySensor","props","ref","onChange","disabled","triggerOnce","threshold","children","rest","localRef","getInnerRef","rectDimensions","setRectDimensions","rectTop","rectBottom","rectLeft","rectRight","rectWidth","rectHeight","lastValue","setLastValue","active","setActive","measureInnerView","measure","_x","_y","width","height","pageX","pageY","dimensions","startWatching","stopWatching","window","get","isVisible","top","bottom","left","right"],"sourceRoot":"../../src","sources":["VisibilitySensor.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useRef","useState","forwardRef","useImperativeHandle","Dimensions","View","jsx","_jsx","useInterval","callback","delay","savedCallback","current","undefined","id","setInterval","clearInterval","VisibilitySensor","props","ref","onChange","disabled","triggerOnce","threshold","children","rest","localRef","getInnerRef","rectDimensions","setRectDimensions","rectTop","rectBottom","rectLeft","rectRight","rectWidth","rectHeight","lastValue","setLastValue","active","setActive","hasMeasuredRef","measureInnerView","measure","_x","_y","width","height","pageX","pageY","dimensions","startWatching","stopWatching","window","get","isVisible","top","bottom","left","right"],"sourceRoot":"../../src","sources":["VisibilitySensor.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilitySensor.d.ts","sourceRoot":"","sources":["../../src/VisibilitySensor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAmBlC,QAAA,MAAM,gBAAgB,mGA2GrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"VisibilitySensor.d.ts","sourceRoot":"","sources":["../../src/VisibilitySensor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAmBlC,QAAA,MAAM,gBAAgB,mGA2HrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futurejj/react-native-visibility-sensor",
3
- "version": "1.3.13",
3
+ "version": "1.3.15",
4
4
  "description": "A React Native wrapper to check whether a component is in the view port to track impressions and clicks",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -58,8 +58,11 @@ const VisibilitySensor = forwardRef<VisibilitySensorRef, VisibilitySensorProps>(
58
58
  });
59
59
  const [lastValue, setLastValue] = useState<boolean | undefined>(undefined);
60
60
  const [active, setActive] = useState<boolean>(false);
61
+ const hasMeasuredRef = useRef(false);
61
62
 
62
63
  const measureInnerView = () => {
64
+ /* Check if the sensor is active to prevent unnecessary measurements
65
+ This avoids running measurements when the sensor is disabled or stopped */
63
66
  if (!active) return;
64
67
 
65
68
  localRef.current?.measure(
@@ -88,6 +91,9 @@ const VisibilitySensor = forwardRef<VisibilitySensorRef, VisibilitySensorProps>(
88
91
  rectDimensions.rectHeight !== dimensions.rectHeight
89
92
  ) {
90
93
  setRectDimensions(dimensions);
94
+ /* Set hasMeasuredRef to true to indicate that a valid measurement has been taken
95
+ This ensures visibility checks only proceed after initial measurement */
96
+ hasMeasuredRef.current = true;
91
97
  }
92
98
  }
93
99
  );
@@ -100,7 +106,12 @@ const VisibilitySensor = forwardRef<VisibilitySensorRef, VisibilitySensorProps>(
100
106
  }, [active]);
101
107
 
102
108
  const stopWatching = useCallback(() => {
103
- if (active) setActive(false);
109
+ if (active) {
110
+ setActive(false);
111
+ /* Reset measurement state when stopping to ensure fresh measurements
112
+ when the sensor is reactivated */
113
+ hasMeasuredRef.current = false;
114
+ }
104
115
  }, [active]);
105
116
 
106
117
  useEffect(() => {
@@ -114,6 +125,11 @@ const VisibilitySensor = forwardRef<VisibilitySensorRef, VisibilitySensorProps>(
114
125
  }, [disabled, startWatching, stopWatching]);
115
126
 
116
127
  useEffect(() => {
128
+ /* Ensure visibility checks only run when the sensor is active and
129
+ at least one measurement has been completed. This prevents
130
+ premature visibility calculations with invalid or stale dimensions */
131
+ if (!active || !hasMeasuredRef.current) return;
132
+
117
133
  const window: ScaledSize = Dimensions.get('window');
118
134
  const isVisible: boolean =
119
135
  rectDimensions.rectTop + (threshold.top || 0) <= window.height && // Top edge is within the bottom of the window
@@ -129,7 +145,7 @@ const VisibilitySensor = forwardRef<VisibilitySensorRef, VisibilitySensorProps>(
129
145
  }
130
146
  }
131
147
  // eslint-disable-next-line react-hooks/exhaustive-deps
132
- }, [rectDimensions, lastValue]);
148
+ }, [rectDimensions, lastValue, active]);
133
149
 
134
150
  return (
135
151
  <View ref={localRef} {...rest}>