@stream-io/video-react-native-sdk 0.7.26 → 0.7.28

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/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ### [0.7.28](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.7.27...@stream-io/video-react-native-sdk-0.7.28) (2024-06-10)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **ios:** do not disable camera on inactive state ([#1396](https://github.com/GetStream/stream-video-js/issues/1396)) ([741f0bc](https://github.com/GetStream/stream-video-js/commit/741f0bc2dc54db0f95211eea3b558b16a45d40f3))
11
+
12
+ ### [0.7.27](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.7.26...@stream-io/video-react-native-sdk-0.7.27) (2024-06-07)
13
+
14
+ ### Dependency Updates
15
+
16
+ * `@stream-io/video-client` updated to version `1.3.0`
17
+ * `@stream-io/video-react-bindings` updated to version `0.4.42`
5
18
  ### [0.7.26](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.7.25...@stream-io/video-react-native-sdk-0.7.26) (2024-06-06)
6
19
 
7
20
  ### Dependency Updates
@@ -9,7 +9,6 @@ var _react = _interopRequireWildcard(require("react"));
9
9
  var _useIosCallkeepWithCallingStateEffect = require("../hooks/push/useIosCallkeepWithCallingStateEffect");
10
10
  var _utils = require("../utils/push/utils");
11
11
  var _useAndroidKeepCallAliveEffect = require("../hooks/useAndroidKeepCallAliveEffect");
12
- var _hooks = require("../utils/hooks");
13
12
  var _reactNative = require("react-native");
14
13
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
14
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -28,31 +27,44 @@ const StreamCall = ({
28
27
  call: call
29
28
  }, /*#__PURE__*/_react.default.createElement(AppStateListener, null), /*#__PURE__*/_react.default.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/_react.default.createElement(IosInformCallkeepCallEnd, null), /*#__PURE__*/_react.default.createElement(ClearPushWSSubscriptions, null), children);
30
29
  };
30
+
31
+ // Resume/Disable video stream tracks when app goes to background/foreground
32
+ // To save on CPU resources
31
33
  exports.StreamCall = StreamCall;
32
34
  const AppStateListener = () => {
33
35
  const call = (0, _videoReactBindings.useCall)();
34
-
35
- // Resume/Disable video stream tracks when app goes to background/foreground
36
- // To save on CPU resources
37
- (0, _hooks.useAppStateListener)(async () => {
38
- var _call$camera;
39
- await (call === null || call === void 0 || (_call$camera = call.camera) === null || _call$camera === void 0 ? void 0 : _call$camera.resume());
40
- }, async () => {
41
- if (_reactNative.Platform.OS === 'android') {
42
- var _NativeModules$Stream;
43
- // in Android, we need to check if we are in PiP mode
44
- // in PiP mode, we don't want to disable the camera
45
- _reactNative.NativeModules === null || _reactNative.NativeModules === void 0 || (_NativeModules$Stream = _reactNative.NativeModules.StreamVideoReactNative) === null || _NativeModules$Stream === void 0 || _NativeModules$Stream.isInPiPMode().then(async isInPiP => {
46
- if (!isInPiP) {
47
- var _call$camera2;
48
- await (call === null || call === void 0 || (_call$camera2 = call.camera) === null || _call$camera2 === void 0 ? void 0 : _call$camera2.disable());
36
+ const appState = (0, _react.useRef)(_reactNative.AppState.currentState);
37
+ (0, _react.useEffect)(() => {
38
+ // due to strange behavior in iOS when app goes to "inactive" state
39
+ // we dont check for inactive states
40
+ // ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
41
+ const subscription = _reactNative.AppState.addEventListener('change', nextAppState => {
42
+ if (appState.current.match(/background/) && nextAppState === 'active') {
43
+ var _call$camera;
44
+ call === null || call === void 0 || (_call$camera = call.camera) === null || _call$camera === void 0 || _call$camera.resume();
45
+ appState.current = nextAppState;
46
+ } else if (appState.current === 'active' && nextAppState.match(/background/)) {
47
+ if (_reactNative.Platform.OS === 'android') {
48
+ var _NativeModules$Stream;
49
+ // in Android, we need to check if we are in PiP mode
50
+ // in PiP mode, we don't want to disable the camera
51
+ _reactNative.NativeModules === null || _reactNative.NativeModules === void 0 || (_NativeModules$Stream = _reactNative.NativeModules.StreamVideoReactNative) === null || _NativeModules$Stream === void 0 || _NativeModules$Stream.isInPiPMode().then(async isInPiP => {
52
+ if (!isInPiP) {
53
+ var _call$camera2;
54
+ await (call === null || call === void 0 || (_call$camera2 = call.camera) === null || _call$camera2 === void 0 ? void 0 : _call$camera2.disable());
55
+ }
56
+ });
57
+ } else {
58
+ var _call$camera3;
59
+ call === null || call === void 0 || (_call$camera3 = call.camera) === null || _call$camera3 === void 0 || _call$camera3.disable();
49
60
  }
50
- });
51
- } else {
52
- var _call$camera3;
53
- await (call === null || call === void 0 || (_call$camera3 = call.camera) === null || _call$camera3 === void 0 ? void 0 : _call$camera3.disable());
54
- }
55
- });
61
+ appState.current = nextAppState;
62
+ }
63
+ });
64
+ return () => {
65
+ subscription.remove();
66
+ };
67
+ }, [call]);
56
68
  return null;
57
69
  };
58
70
 
@@ -1 +1 @@
1
- {"version":3,"names":["_videoReactBindings","require","_react","_interopRequireWildcard","_useIosCallkeepWithCallingStateEffect","_utils","_useAndroidKeepCallAliveEffect","_hooks","_reactNative","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","StreamCall","children","createElement","StreamCallProvider","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","exports","useCall","useAppStateListener","_call$camera","camera","resume","Platform","OS","_NativeModules$Stream","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","useAndroidKeepCallAliveEffect","useIosCallkeepWithCallingStateEffect","useEffect","clearPushWSEventSubscriptions","canAddPushWSSubscriptionsRef","current"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["_videoReactBindings","require","_react","_interopRequireWildcard","_useIosCallkeepWithCallingStateEffect","_utils","_useAndroidKeepCallAliveEffect","_reactNative","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","StreamCall","children","createElement","StreamCallProvider","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","exports","useCall","appState","useRef","AppState","currentState","useEffect","subscription","addEventListener","nextAppState","current","match","_call$camera","camera","resume","Platform","OS","_NativeModules$Stream","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","remove","useAndroidKeepCallAliveEffect","useIosCallkeepWithCallingStateEffect","clearPushWSEventSubscriptions","canAddPushWSSubscriptionsRef"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":"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"}
@@ -3,17 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- var _useAppStateListener = require("./useAppStateListener");
7
- Object.keys(_useAppStateListener).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _useAppStateListener[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
12
- get: function () {
13
- return _useAppStateListener[key];
14
- }
15
- });
16
- });
17
6
  var _useDebouncedValue = require("./useDebouncedValue");
18
7
  Object.keys(_useDebouncedValue).forEach(function (key) {
19
8
  if (key === "default" || key === "__esModule") return;
@@ -1 +1 @@
1
- {"version":3,"names":["_useAppStateListener","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_useDebouncedValue","_usePrevious"],"sourceRoot":"../../../../src","sources":["utils/hooks/index.ts"],"mappings":";;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,oBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,oBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,oBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,kBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,kBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,kBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,kBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,YAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,YAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,YAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,YAAA,CAAAN,GAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":["_useDebouncedValue","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_usePrevious"],"sourceRoot":"../../../../src","sources":["utils/hooks/index.ts"],"mappings":";;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,kBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,kBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,kBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,YAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,YAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,YAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,YAAA,CAAAL,GAAA;IAAA;EAAA;AAAA"}
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- const version = exports.version = '0.7.26';
7
+ const version = exports.version = '0.7.28';
8
8
  //# sourceMappingURL=version.js.map
@@ -1,10 +1,9 @@
1
1
  import { StreamCallProvider, useCall } from '@stream-io/video-react-bindings';
2
- import React, { useEffect } from 'react';
2
+ import React, { useEffect, useRef } from 'react';
3
3
  import { useIosCallkeepWithCallingStateEffect } from '../hooks/push/useIosCallkeepWithCallingStateEffect';
4
4
  import { canAddPushWSSubscriptionsRef, clearPushWSEventSubscriptions } from '../utils/push/utils';
5
5
  import { useAndroidKeepCallAliveEffect } from '../hooks/useAndroidKeepCallAliveEffect';
6
- import { useAppStateListener } from '../utils/hooks';
7
- import { NativeModules, Platform } from 'react-native';
6
+ import { AppState, NativeModules, Platform } from 'react-native';
8
7
  /**
9
8
  * StreamCall is a wrapper component that orchestrates the call life cycle logic and
10
9
  * provides the call object to the children components.
@@ -20,30 +19,43 @@ export const StreamCall = ({
20
19
  call: call
21
20
  }, /*#__PURE__*/React.createElement(AppStateListener, null), /*#__PURE__*/React.createElement(AndroidKeepCallAlive, null), /*#__PURE__*/React.createElement(IosInformCallkeepCallEnd, null), /*#__PURE__*/React.createElement(ClearPushWSSubscriptions, null), children);
22
21
  };
22
+
23
+ // Resume/Disable video stream tracks when app goes to background/foreground
24
+ // To save on CPU resources
23
25
  const AppStateListener = () => {
24
26
  const call = useCall();
25
-
26
- // Resume/Disable video stream tracks when app goes to background/foreground
27
- // To save on CPU resources
28
- useAppStateListener(async () => {
29
- var _call$camera;
30
- await (call === null || call === void 0 || (_call$camera = call.camera) === null || _call$camera === void 0 ? void 0 : _call$camera.resume());
31
- }, async () => {
32
- if (Platform.OS === 'android') {
33
- var _NativeModules$Stream;
34
- // in Android, we need to check if we are in PiP mode
35
- // in PiP mode, we don't want to disable the camera
36
- NativeModules === null || NativeModules === void 0 || (_NativeModules$Stream = NativeModules.StreamVideoReactNative) === null || _NativeModules$Stream === void 0 || _NativeModules$Stream.isInPiPMode().then(async isInPiP => {
37
- if (!isInPiP) {
38
- var _call$camera2;
39
- await (call === null || call === void 0 || (_call$camera2 = call.camera) === null || _call$camera2 === void 0 ? void 0 : _call$camera2.disable());
27
+ const appState = useRef(AppState.currentState);
28
+ useEffect(() => {
29
+ // due to strange behavior in iOS when app goes to "inactive" state
30
+ // we dont check for inactive states
31
+ // ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
32
+ const subscription = AppState.addEventListener('change', nextAppState => {
33
+ if (appState.current.match(/background/) && nextAppState === 'active') {
34
+ var _call$camera;
35
+ call === null || call === void 0 || (_call$camera = call.camera) === null || _call$camera === void 0 || _call$camera.resume();
36
+ appState.current = nextAppState;
37
+ } else if (appState.current === 'active' && nextAppState.match(/background/)) {
38
+ if (Platform.OS === 'android') {
39
+ var _NativeModules$Stream;
40
+ // in Android, we need to check if we are in PiP mode
41
+ // in PiP mode, we don't want to disable the camera
42
+ NativeModules === null || NativeModules === void 0 || (_NativeModules$Stream = NativeModules.StreamVideoReactNative) === null || _NativeModules$Stream === void 0 || _NativeModules$Stream.isInPiPMode().then(async isInPiP => {
43
+ if (!isInPiP) {
44
+ var _call$camera2;
45
+ await (call === null || call === void 0 || (_call$camera2 = call.camera) === null || _call$camera2 === void 0 ? void 0 : _call$camera2.disable());
46
+ }
47
+ });
48
+ } else {
49
+ var _call$camera3;
50
+ call === null || call === void 0 || (_call$camera3 = call.camera) === null || _call$camera3 === void 0 || _call$camera3.disable();
40
51
  }
41
- });
42
- } else {
43
- var _call$camera3;
44
- await (call === null || call === void 0 || (_call$camera3 = call.camera) === null || _call$camera3 === void 0 ? void 0 : _call$camera3.disable());
45
- }
46
- });
52
+ appState.current = nextAppState;
53
+ }
54
+ });
55
+ return () => {
56
+ subscription.remove();
57
+ };
58
+ }, [call]);
47
59
  return null;
48
60
  };
49
61
 
@@ -1 +1 @@
1
- {"version":3,"names":["StreamCallProvider","useCall","React","useEffect","useIosCallkeepWithCallingStateEffect","canAddPushWSSubscriptionsRef","clearPushWSEventSubscriptions","useAndroidKeepCallAliveEffect","useAppStateListener","NativeModules","Platform","StreamCall","call","children","createElement","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","_call$camera","camera","resume","OS","_NativeModules$Stream","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","current"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,OAAO,QAAQ,iCAAiC;AAC7E,OAAOC,KAAK,IAAuBC,SAAS,QAAQ,OAAO;AAE3D,SAASC,oCAAoC,QAAQ,oDAAoD;AACzG,SACEC,4BAA4B,EAC5BC,6BAA6B,QACxB,qBAAqB;AAC5B,SAASC,6BAA6B,QAAQ,wCAAwC;AACtF,SAASC,mBAAmB,QAAQ,gBAAgB;AACpD,SAASC,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAStD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAGA,CAAC;EACzBC,IAAI;EACJC;AACkC,CAAC,KAAK;EACxC,oBACEX,KAAA,CAAAY,aAAA,CAACd,kBAAkB;IAACY,IAAI,EAAEA;EAAK,gBAC7BV,KAAA,CAAAY,aAAA,CAACC,gBAAgB,MAAE,CAAC,eACpBb,KAAA,CAAAY,aAAA,CAACE,oBAAoB,MAAE,CAAC,eACxBd,KAAA,CAAAY,aAAA,CAACG,wBAAwB,MAAE,CAAC,eAC5Bf,KAAA,CAAAY,aAAA,CAACI,wBAAwB,MAAE,CAAC,EAC3BL,QACiB,CAAC;AAEzB,CAAC;AAED,MAAME,gBAAgB,GAAGA,CAAA,KAAM;EAC7B,MAAMH,IAAI,GAAGX,OAAO,CAAC,CAAC;;EAEtB;EACA;EACAO,mBAAmB,CACjB,YAAY;IAAA,IAAAW,YAAA;IACV,OAAMP,IAAI,aAAJA,IAAI,gBAAAO,YAAA,GAAJP,IAAI,CAAEQ,MAAM,cAAAD,YAAA,uBAAZA,YAAA,CAAcE,MAAM,CAAC,CAAC;EAC9B,CAAC,EACD,YAAY;IACV,IAAIX,QAAQ,CAACY,EAAE,KAAK,SAAS,EAAE;MAAA,IAAAC,qBAAA;MAC7B;MACA;MACAd,aAAa,aAAbA,aAAa,gBAAAc,qBAAA,GAAbd,aAAa,CAAEe,sBAAsB,cAAAD,qBAAA,eAArCA,qBAAA,CAAuCE,WAAW,CAAC,CAAC,CAACC,IAAI,CACvD,MAAOC,OAAmC,IAAK;QAC7C,IAAI,CAACA,OAAO,EAAE;UAAA,IAAAC,aAAA;UACZ,OAAMhB,IAAI,aAAJA,IAAI,gBAAAgB,aAAA,GAAJhB,IAAI,CAAEQ,MAAM,cAAAQ,aAAA,uBAAZA,aAAA,CAAcC,OAAO,CAAC,CAAC;QAC/B;MACF,CACF,CAAC;IACH,CAAC,MAAM;MAAA,IAAAC,aAAA;MACL,OAAMlB,IAAI,aAAJA,IAAI,gBAAAkB,aAAA,GAAJlB,IAAI,CAAEQ,MAAM,cAAAU,aAAA,uBAAZA,aAAA,CAAcD,OAAO,CAAC,CAAC;IAC/B;EACF,CACF,CAAC;EAED,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMb,oBAAoB,GAAGA,CAAA,KAAM;EACjCT,6BAA6B,CAAC,CAAC;EAC/B,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMU,wBAAwB,GAAGA,CAAA,KAAM;EACrCb,oCAAoC,CAAC,CAAC;EACtC,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMc,wBAAwB,GAAGA,CAAA,KAAM;EACrCf,SAAS,CAAC,MAAM;IACdG,6BAA6B,CAAC,CAAC;IAC/BD,4BAA4B,CAAC0B,OAAO,GAAG,KAAK;IAC5C,OAAO,MAAM;MACX1B,4BAA4B,CAAC0B,OAAO,GAAG,IAAI;IAC7C,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACb,CAAC"}
1
+ {"version":3,"names":["StreamCallProvider","useCall","React","useEffect","useRef","useIosCallkeepWithCallingStateEffect","canAddPushWSSubscriptionsRef","clearPushWSEventSubscriptions","useAndroidKeepCallAliveEffect","AppState","NativeModules","Platform","StreamCall","call","children","createElement","AppStateListener","AndroidKeepCallAlive","IosInformCallkeepCallEnd","ClearPushWSSubscriptions","appState","currentState","subscription","addEventListener","nextAppState","current","match","_call$camera","camera","resume","OS","_NativeModules$Stream","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","remove"],"sourceRoot":"../../../src","sources":["providers/StreamCall.tsx"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,OAAO,QAAQ,iCAAiC;AAC7E,OAAOC,KAAK,IAAuBC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEnE,SAASC,oCAAoC,QAAQ,oDAAoD;AACzG,SACEC,4BAA4B,EAC5BC,6BAA6B,QACxB,qBAAqB;AAC5B,SAASC,6BAA6B,QAAQ,wCAAwC;AACtF,SAASC,QAAQ,EAAEC,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAShE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAGA,CAAC;EACzBC,IAAI;EACJC;AACkC,CAAC,KAAK;EACxC,oBACEZ,KAAA,CAAAa,aAAA,CAACf,kBAAkB;IAACa,IAAI,EAAEA;EAAK,gBAC7BX,KAAA,CAAAa,aAAA,CAACC,gBAAgB,MAAE,CAAC,eACpBd,KAAA,CAAAa,aAAA,CAACE,oBAAoB,MAAE,CAAC,eACxBf,KAAA,CAAAa,aAAA,CAACG,wBAAwB,MAAE,CAAC,eAC5BhB,KAAA,CAAAa,aAAA,CAACI,wBAAwB,MAAE,CAAC,EAC3BL,QACiB,CAAC;AAEzB,CAAC;;AAED;AACA;AACA,MAAME,gBAAgB,GAAGA,CAAA,KAAM;EAC7B,MAAMH,IAAI,GAAGZ,OAAO,CAAC,CAAC;EACtB,MAAMmB,QAAQ,GAAGhB,MAAM,CAACK,QAAQ,CAACY,YAAY,CAAC;EAC9ClB,SAAS,CAAC,MAAM;IACd;IACA;IACA;IACA,MAAMmB,YAAY,GAAGb,QAAQ,CAACc,gBAAgB,CAAC,QAAQ,EAAGC,YAAY,IAAK;MACzE,IAAIJ,QAAQ,CAACK,OAAO,CAACC,KAAK,CAAC,YAAY,CAAC,IAAIF,YAAY,KAAK,QAAQ,EAAE;QAAA,IAAAG,YAAA;QACrEd,IAAI,aAAJA,IAAI,gBAAAc,YAAA,GAAJd,IAAI,CAAEe,MAAM,cAAAD,YAAA,eAAZA,YAAA,CAAcE,MAAM,CAAC,CAAC;QACtBT,QAAQ,CAACK,OAAO,GAAGD,YAAY;MACjC,CAAC,MAAM,IACLJ,QAAQ,CAACK,OAAO,KAAK,QAAQ,IAC7BD,YAAY,CAACE,KAAK,CAAC,YAAY,CAAC,EAChC;QACA,IAAIf,QAAQ,CAACmB,EAAE,KAAK,SAAS,EAAE;UAAA,IAAAC,qBAAA;UAC7B;UACA;UACArB,aAAa,aAAbA,aAAa,gBAAAqB,qBAAA,GAAbrB,aAAa,CAAEsB,sBAAsB,cAAAD,qBAAA,eAArCA,qBAAA,CAAuCE,WAAW,CAAC,CAAC,CAACC,IAAI,CACvD,MAAOC,OAAmC,IAAK;YAC7C,IAAI,CAACA,OAAO,EAAE;cAAA,IAAAC,aAAA;cACZ,OAAMvB,IAAI,aAAJA,IAAI,gBAAAuB,aAAA,GAAJvB,IAAI,CAAEe,MAAM,cAAAQ,aAAA,uBAAZA,aAAA,CAAcC,OAAO,CAAC,CAAC;YAC/B;UACF,CACF,CAAC;QACH,CAAC,MAAM;UAAA,IAAAC,aAAA;UACLzB,IAAI,aAAJA,IAAI,gBAAAyB,aAAA,GAAJzB,IAAI,CAAEe,MAAM,cAAAU,aAAA,eAAZA,aAAA,CAAcD,OAAO,CAAC,CAAC;QACzB;QACAjB,QAAQ,CAACK,OAAO,GAAGD,YAAY;MACjC;IACF,CAAC,CAAC;IAEF,OAAO,MAAM;MACXF,YAAY,CAACiB,MAAM,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAAC1B,IAAI,CAAC,CAAC;EAEV,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMI,oBAAoB,GAAGA,CAAA,KAAM;EACjCT,6BAA6B,CAAC,CAAC;EAC/B,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMU,wBAAwB,GAAGA,CAAA,KAAM;EACrCb,oCAAoC,CAAC,CAAC;EACtC,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMc,wBAAwB,GAAGA,CAAA,KAAM;EACrChB,SAAS,CAAC,MAAM;IACdI,6BAA6B,CAAC,CAAC;IAC/BD,4BAA4B,CAACmB,OAAO,GAAG,KAAK;IAC5C,OAAO,MAAM;MACXnB,4BAA4B,CAACmB,OAAO,GAAG,IAAI;IAC7C,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACb,CAAC"}
@@ -1,4 +1,3 @@
1
- export * from './useAppStateListener';
2
1
  export * from './useDebouncedValue';
3
2
  export * from './usePrevious';
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sourceRoot":"../../../../src","sources":["utils/hooks/index.ts"],"mappings":"AAAA,cAAc,uBAAuB;AACrC,cAAc,qBAAqB;AACnC,cAAc,eAAe"}
1
+ {"version":3,"names":[],"sourceRoot":"../../../../src","sources":["utils/hooks/index.ts"],"mappings":"AAAA,cAAc,qBAAqB;AACnC,cAAc,eAAe"}
@@ -1,2 +1,2 @@
1
- export const version = '0.7.26';
1
+ export const version = '0.7.28';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StreamCall.d.ts","sourceRoot":"","sources":["../../../src/providers/StreamCall.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAa,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAU/C,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AACF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,wBAGpB,kBAAkB,eAAe,CAAC,sBAUpC,CAAC"}
1
+ {"version":3,"file":"StreamCall.d.ts","sourceRoot":"","sources":["../../../src/providers/StreamCall.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAqB,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAS/C,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AACF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,wBAGpB,kBAAkB,eAAe,CAAC,sBAUpC,CAAC"}
@@ -1,4 +1,3 @@
1
- export * from './useAppStateListener';
2
1
  export * from './useDebouncedValue';
3
2
  export * from './usePrevious';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const version = "0.7.26";
1
+ export declare const version = "0.7.28";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/video-react-native-sdk",
3
- "version": "0.7.26",
3
+ "version": "0.7.28",
4
4
  "packageManager": "yarn@3.2.4",
5
5
  "main": "dist/commonjs/index.js",
6
6
  "module": "dist/module/index.js",
@@ -46,8 +46,8 @@
46
46
  "!**/.*"
47
47
  ],
48
48
  "dependencies": {
49
- "@stream-io/video-client": "^1.2.3",
50
- "@stream-io/video-react-bindings": "^0.4.41",
49
+ "@stream-io/video-client": "^1.3.0",
50
+ "@stream-io/video-react-bindings": "^0.4.42",
51
51
  "intl-pluralrules": "2.0.1",
52
52
  "lodash.merge": "^4.6.2",
53
53
  "react-native-url-polyfill": "1.3.0",
@@ -1,5 +1,5 @@
1
1
  import { StreamCallProvider, useCall } from '@stream-io/video-react-bindings';
2
- import React, { PropsWithChildren, useEffect } from 'react';
2
+ import React, { PropsWithChildren, useEffect, useRef } from 'react';
3
3
  import { Call } from '@stream-io/video-client';
4
4
  import { useIosCallkeepWithCallingStateEffect } from '../hooks/push/useIosCallkeepWithCallingStateEffect';
5
5
  import {
@@ -7,8 +7,7 @@ import {
7
7
  clearPushWSEventSubscriptions,
8
8
  } from '../utils/push/utils';
9
9
  import { useAndroidKeepCallAliveEffect } from '../hooks/useAndroidKeepCallAliveEffect';
10
- import { useAppStateListener } from '../utils/hooks';
11
- import { NativeModules, Platform } from 'react-native';
10
+ import { AppState, NativeModules, Platform } from 'react-native';
12
11
 
13
12
  export type StreamCallProps = {
14
13
  /**
@@ -39,31 +38,44 @@ export const StreamCall = ({
39
38
  );
40
39
  };
41
40
 
41
+ // Resume/Disable video stream tracks when app goes to background/foreground
42
+ // To save on CPU resources
42
43
  const AppStateListener = () => {
43
44
  const call = useCall();
44
-
45
- // Resume/Disable video stream tracks when app goes to background/foreground
46
- // To save on CPU resources
47
- useAppStateListener(
48
- async () => {
49
- await call?.camera?.resume();
50
- },
51
- async () => {
52
- if (Platform.OS === 'android') {
53
- // in Android, we need to check if we are in PiP mode
54
- // in PiP mode, we don't want to disable the camera
55
- NativeModules?.StreamVideoReactNative?.isInPiPMode().then(
56
- async (isInPiP: boolean | null | undefined) => {
57
- if (!isInPiP) {
58
- await call?.camera?.disable();
45
+ const appState = useRef(AppState.currentState);
46
+ useEffect(() => {
47
+ // due to strange behavior in iOS when app goes to "inactive" state
48
+ // we dont check for inactive states
49
+ // ref: https://www.reddit.com/r/reactnative/comments/15kib42/appstate_behavior_in_ios_when_swiping_down_to/
50
+ const subscription = AppState.addEventListener('change', (nextAppState) => {
51
+ if (appState.current.match(/background/) && nextAppState === 'active') {
52
+ call?.camera?.resume();
53
+ appState.current = nextAppState;
54
+ } else if (
55
+ appState.current === 'active' &&
56
+ nextAppState.match(/background/)
57
+ ) {
58
+ if (Platform.OS === 'android') {
59
+ // in Android, we need to check if we are in PiP mode
60
+ // in PiP mode, we don't want to disable the camera
61
+ NativeModules?.StreamVideoReactNative?.isInPiPMode().then(
62
+ async (isInPiP: boolean | null | undefined) => {
63
+ if (!isInPiP) {
64
+ await call?.camera?.disable();
65
+ }
59
66
  }
60
- }
61
- );
62
- } else {
63
- await call?.camera?.disable();
67
+ );
68
+ } else {
69
+ call?.camera?.disable();
70
+ }
71
+ appState.current = nextAppState;
64
72
  }
65
- }
66
- );
73
+ });
74
+
75
+ return () => {
76
+ subscription.remove();
77
+ };
78
+ }, [call]);
67
79
 
68
80
  return null;
69
81
  };
@@ -1,3 +1,2 @@
1
- export * from './useAppStateListener';
2
1
  export * from './useDebouncedValue';
3
2
  export * from './usePrevious';
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '0.7.26';
1
+ export const version = '0.7.28';
@@ -1,43 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useAppStateListener = void 0;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- const useAppStateListener = (onForeground, onBackground) => {
10
- const appStateRef = (0, _react.useRef)(_reactNative.AppState.currentState);
11
- const onForegroundRef = (0, _react.useRef)(onForeground);
12
- const onBackgroundRef = (0, _react.useRef)(onBackground);
13
-
14
- // setting refs to avoid passing the functions as dependencies to useEffect
15
- onForegroundRef.current = onForeground;
16
- onBackgroundRef.current = onBackground;
17
- (0, _react.useEffect)(() => {
18
- const handleAppStateChange = nextAppState => {
19
- const prevAppState = appStateRef.current;
20
- if (prevAppState.match(/inactive|background/) && nextAppState === 'active') {
21
- var _onForegroundRef$curr;
22
- (_onForegroundRef$curr = onForegroundRef.current) === null || _onForegroundRef$curr === void 0 || _onForegroundRef$curr.call(onForegroundRef);
23
- } else if (prevAppState === 'active' && nextAppState.match(/inactive|background/)) {
24
- var _onBackgroundRef$curr;
25
- (_onBackgroundRef$curr = onBackgroundRef.current) === null || _onBackgroundRef$curr === void 0 || _onBackgroundRef$curr.call(onBackgroundRef);
26
- }
27
- appStateRef.current = nextAppState;
28
- };
29
- const subscription = _reactNative.AppState.addEventListener('change', handleAppStateChange);
30
- return () => {
31
- // Following if-else logic is to support RN >= 0.65 and RN < 0.65 versions.
32
- // https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#:~:text=EventEmitter%23removeSubscription%20is%20now%20deprecated.%20(cb6cbd12f8%20by%20%40yungsters)
33
- if (subscription !== null && subscription !== void 0 && subscription.remove) {
34
- subscription.remove();
35
- } else {
36
- // @ts-ignore
37
- _reactNative.AppState.removeEventListener('change', handleAppStateChange);
38
- }
39
- };
40
- }, []);
41
- };
42
- exports.useAppStateListener = useAppStateListener;
43
- //# sourceMappingURL=useAppStateListener.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","require","_reactNative","useAppStateListener","onForeground","onBackground","appStateRef","useRef","AppState","currentState","onForegroundRef","onBackgroundRef","current","useEffect","handleAppStateChange","nextAppState","prevAppState","match","_onForegroundRef$curr","call","_onBackgroundRef$curr","subscription","addEventListener","remove","removeEventListener","exports"],"sourceRoot":"../../../../src","sources":["utils/hooks/useAppStateListener.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEO,MAAME,mBAAmB,GAAGA,CACjCC,YAAyB,EACzBC,YAAyB,KACtB;EACH,MAAMC,WAAW,GAAG,IAAAC,aAAM,EAACC,qBAAQ,CAACC,YAAY,CAAC;EACjD,MAAMC,eAAe,GAAG,IAAAH,aAAM,EAACH,YAAY,CAAC;EAC5C,MAAMO,eAAe,GAAG,IAAAJ,aAAM,EAACF,YAAY,CAAC;;EAE5C;EACAK,eAAe,CAACE,OAAO,GAAGR,YAAY;EACtCO,eAAe,CAACC,OAAO,GAAGP,YAAY;EAEtC,IAAAQ,gBAAS,EAAC,MAAM;IACd,MAAMC,oBAAoB,GAAIC,YAA4B,IAAK;MAC7D,MAAMC,YAAY,GAAGV,WAAW,CAACM,OAAO;MACxC,IACEI,YAAY,CAACC,KAAK,CAAC,qBAAqB,CAAC,IACzCF,YAAY,KAAK,QAAQ,EACzB;QAAA,IAAAG,qBAAA;QACA,CAAAA,qBAAA,GAAAR,eAAe,CAACE,OAAO,cAAAM,qBAAA,eAAvBA,qBAAA,CAAAC,IAAA,CAAAT,eAA0B,CAAC;MAC7B,CAAC,MAAM,IACLM,YAAY,KAAK,QAAQ,IACzBD,YAAY,CAACE,KAAK,CAAC,qBAAqB,CAAC,EACzC;QAAA,IAAAG,qBAAA;QACA,CAAAA,qBAAA,GAAAT,eAAe,CAACC,OAAO,cAAAQ,qBAAA,eAAvBA,qBAAA,CAAAD,IAAA,CAAAR,eAA0B,CAAC;MAC7B;MACAL,WAAW,CAACM,OAAO,GAAGG,YAAY;IACpC,CAAC;IACD,MAAMM,YAAY,GAAGb,qBAAQ,CAACc,gBAAgB,CAC5C,QAAQ,EACRR,oBACF,CAAC;IAED,OAAO,MAAM;MACX;MACA;MACA,IAAIO,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAEE,MAAM,EAAE;QACxBF,YAAY,CAACE,MAAM,CAAC,CAAC;MACvB,CAAC,MAAM;QACL;QACAf,qBAAQ,CAACgB,mBAAmB,CAAC,QAAQ,EAAEV,oBAAoB,CAAC;MAC9D;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAACW,OAAA,CAAAtB,mBAAA,GAAAA,mBAAA"}
@@ -1,36 +0,0 @@
1
- import { useEffect, useRef } from 'react';
2
- import { AppState } from 'react-native';
3
- export const useAppStateListener = (onForeground, onBackground) => {
4
- const appStateRef = useRef(AppState.currentState);
5
- const onForegroundRef = useRef(onForeground);
6
- const onBackgroundRef = useRef(onBackground);
7
-
8
- // setting refs to avoid passing the functions as dependencies to useEffect
9
- onForegroundRef.current = onForeground;
10
- onBackgroundRef.current = onBackground;
11
- useEffect(() => {
12
- const handleAppStateChange = nextAppState => {
13
- const prevAppState = appStateRef.current;
14
- if (prevAppState.match(/inactive|background/) && nextAppState === 'active') {
15
- var _onForegroundRef$curr;
16
- (_onForegroundRef$curr = onForegroundRef.current) === null || _onForegroundRef$curr === void 0 || _onForegroundRef$curr.call(onForegroundRef);
17
- } else if (prevAppState === 'active' && nextAppState.match(/inactive|background/)) {
18
- var _onBackgroundRef$curr;
19
- (_onBackgroundRef$curr = onBackgroundRef.current) === null || _onBackgroundRef$curr === void 0 || _onBackgroundRef$curr.call(onBackgroundRef);
20
- }
21
- appStateRef.current = nextAppState;
22
- };
23
- const subscription = AppState.addEventListener('change', handleAppStateChange);
24
- return () => {
25
- // Following if-else logic is to support RN >= 0.65 and RN < 0.65 versions.
26
- // https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#:~:text=EventEmitter%23removeSubscription%20is%20now%20deprecated.%20(cb6cbd12f8%20by%20%40yungsters)
27
- if (subscription !== null && subscription !== void 0 && subscription.remove) {
28
- subscription.remove();
29
- } else {
30
- // @ts-ignore
31
- AppState.removeEventListener('change', handleAppStateChange);
32
- }
33
- };
34
- }, []);
35
- };
36
- //# sourceMappingURL=useAppStateListener.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useEffect","useRef","AppState","useAppStateListener","onForeground","onBackground","appStateRef","currentState","onForegroundRef","onBackgroundRef","current","handleAppStateChange","nextAppState","prevAppState","match","_onForegroundRef$curr","call","_onBackgroundRef$curr","subscription","addEventListener","remove","removeEventListener"],"sourceRoot":"../../../../src","sources":["utils/hooks/useAppStateListener.ts"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,QAAQ,QAAwB,cAAc;AAEvD,OAAO,MAAMC,mBAAmB,GAAGA,CACjCC,YAAyB,EACzBC,YAAyB,KACtB;EACH,MAAMC,WAAW,GAAGL,MAAM,CAACC,QAAQ,CAACK,YAAY,CAAC;EACjD,MAAMC,eAAe,GAAGP,MAAM,CAACG,YAAY,CAAC;EAC5C,MAAMK,eAAe,GAAGR,MAAM,CAACI,YAAY,CAAC;;EAE5C;EACAG,eAAe,CAACE,OAAO,GAAGN,YAAY;EACtCK,eAAe,CAACC,OAAO,GAAGL,YAAY;EAEtCL,SAAS,CAAC,MAAM;IACd,MAAMW,oBAAoB,GAAIC,YAA4B,IAAK;MAC7D,MAAMC,YAAY,GAAGP,WAAW,CAACI,OAAO;MACxC,IACEG,YAAY,CAACC,KAAK,CAAC,qBAAqB,CAAC,IACzCF,YAAY,KAAK,QAAQ,EACzB;QAAA,IAAAG,qBAAA;QACA,CAAAA,qBAAA,GAAAP,eAAe,CAACE,OAAO,cAAAK,qBAAA,eAAvBA,qBAAA,CAAAC,IAAA,CAAAR,eAA0B,CAAC;MAC7B,CAAC,MAAM,IACLK,YAAY,KAAK,QAAQ,IACzBD,YAAY,CAACE,KAAK,CAAC,qBAAqB,CAAC,EACzC;QAAA,IAAAG,qBAAA;QACA,CAAAA,qBAAA,GAAAR,eAAe,CAACC,OAAO,cAAAO,qBAAA,eAAvBA,qBAAA,CAAAD,IAAA,CAAAP,eAA0B,CAAC;MAC7B;MACAH,WAAW,CAACI,OAAO,GAAGE,YAAY;IACpC,CAAC;IACD,MAAMM,YAAY,GAAGhB,QAAQ,CAACiB,gBAAgB,CAC5C,QAAQ,EACRR,oBACF,CAAC;IAED,OAAO,MAAM;MACX;MACA;MACA,IAAIO,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAEE,MAAM,EAAE;QACxBF,YAAY,CAACE,MAAM,CAAC,CAAC;MACvB,CAAC,MAAM;QACL;QACAlB,QAAQ,CAACmB,mBAAmB,CAAC,QAAQ,EAAEV,oBAAoB,CAAC;MAC9D;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const useAppStateListener: (onForeground?: () => void, onBackground?: () => void) => void;
2
- //# sourceMappingURL=useAppStateListener.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAppStateListener.d.ts","sourceRoot":"","sources":["../../../../src/utils/hooks/useAppStateListener.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,kBACf,MAAM,IAAI,iBACV,MAAM,IAAI,SA0C1B,CAAC"}
@@ -1,48 +0,0 @@
1
- import { useEffect, useRef } from 'react';
2
- import { AppState, AppStateStatus } from 'react-native';
3
-
4
- export const useAppStateListener = (
5
- onForeground?: () => void,
6
- onBackground?: () => void
7
- ) => {
8
- const appStateRef = useRef(AppState.currentState);
9
- const onForegroundRef = useRef(onForeground);
10
- const onBackgroundRef = useRef(onBackground);
11
-
12
- // setting refs to avoid passing the functions as dependencies to useEffect
13
- onForegroundRef.current = onForeground;
14
- onBackgroundRef.current = onBackground;
15
-
16
- useEffect(() => {
17
- const handleAppStateChange = (nextAppState: AppStateStatus) => {
18
- const prevAppState = appStateRef.current;
19
- if (
20
- prevAppState.match(/inactive|background/) &&
21
- nextAppState === 'active'
22
- ) {
23
- onForegroundRef.current?.();
24
- } else if (
25
- prevAppState === 'active' &&
26
- nextAppState.match(/inactive|background/)
27
- ) {
28
- onBackgroundRef.current?.();
29
- }
30
- appStateRef.current = nextAppState;
31
- };
32
- const subscription = AppState.addEventListener(
33
- 'change',
34
- handleAppStateChange
35
- );
36
-
37
- return () => {
38
- // Following if-else logic is to support RN >= 0.65 and RN < 0.65 versions.
39
- // https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#:~:text=EventEmitter%23removeSubscription%20is%20now%20deprecated.%20(cb6cbd12f8%20by%20%40yungsters)
40
- if (subscription?.remove) {
41
- subscription.remove();
42
- } else {
43
- // @ts-ignore
44
- AppState.removeEventListener('change', handleAppStateChange);
45
- }
46
- };
47
- }, []);
48
- };