@kiosinc/commons-rn 0.1.81 → 0.1.83

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.
Files changed (30) hide show
  1. package/lib/commonjs/components/DelayedRender.js +24 -0
  2. package/lib/commonjs/components/DelayedRender.js.map +1 -0
  3. package/lib/commonjs/components/index.js +7 -0
  4. package/lib/commonjs/components/index.js.map +1 -1
  5. package/lib/commonjs/hooks/useAppVersionCheck.js +80 -0
  6. package/lib/commonjs/hooks/useAppVersionCheck.js.map +1 -0
  7. package/lib/commonjs/index.js +8 -0
  8. package/lib/commonjs/index.js.map +1 -1
  9. package/lib/module/components/DelayedRender.js +17 -0
  10. package/lib/module/components/DelayedRender.js.map +1 -0
  11. package/lib/module/components/index.js +1 -0
  12. package/lib/module/components/index.js.map +1 -1
  13. package/lib/module/hooks/useAppVersionCheck.js +72 -0
  14. package/lib/module/hooks/useAppVersionCheck.js.map +1 -0
  15. package/lib/module/index.js +1 -0
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/typescript/src/components/DelayedRender.d.ts +5 -0
  18. package/lib/typescript/src/components/DelayedRender.d.ts.map +1 -0
  19. package/lib/typescript/src/components/index.d.ts +1 -0
  20. package/lib/typescript/src/components/index.d.ts.map +1 -1
  21. package/lib/typescript/src/helpers/AssetManager.d.ts +1 -1
  22. package/lib/typescript/src/hooks/useAppVersionCheck.d.ts +5 -0
  23. package/lib/typescript/src/hooks/useAppVersionCheck.d.ts.map +1 -0
  24. package/lib/typescript/src/index.d.ts +1 -0
  25. package/lib/typescript/src/index.d.ts.map +1 -1
  26. package/package.json +3 -1
  27. package/src/components/DelayedRender.tsx +18 -0
  28. package/src/components/index.ts +1 -0
  29. package/src/hooks/useAppVersionCheck.ts +94 -0
  30. package/src/index.tsx +2 -0
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DelayedRender = void 0;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ const DelayedRender = ({
10
+ children
11
+ }) => {
12
+ const [readyForRender, shouldReadyForRender] = (0, _react.useState)(false);
13
+ (0, _react.useEffect)(() => {
14
+ _reactNative.InteractionManager.runAfterInteractions(() => {
15
+ shouldReadyForRender(true);
16
+ });
17
+ }, []);
18
+ if (!readyForRender) {
19
+ return null;
20
+ }
21
+ return children;
22
+ };
23
+ exports.DelayedRender = DelayedRender;
24
+ //# sourceMappingURL=DelayedRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","DelayedRender","children","readyForRender","shouldReadyForRender","useState","useEffect","InteractionManager","runAfterInteractions","exports"],"sourceRoot":"../../../src","sources":["components/DelayedRender.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEO,MAAME,aAAa,GAAGA,CAAC;EAAEC;AAAwC,CAAC,KAAK;EAC5E,MAAM,CAACC,cAAc,EAAEC,oBAAoB,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EAE9D,IAAAC,gBAAS,EAAC,MAAM;IACdC,+BAAkB,CAACC,oBAAoB,CAAC,MAAM;MAC5CJ,oBAAoB,CAAC,IAAI,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,IAAI,CAACD,cAAc,EAAE;IACnB,OAAO,IAAI;EACb;EAEA,OAAOD,QAAQ;AACjB,CAAC;AAACO,OAAA,CAAAR,aAAA,GAAAA,aAAA"}
@@ -39,6 +39,12 @@ Object.defineProperty(exports, "ContentLoaderList", {
39
39
  return _ContentLoaderList.ContentLoaderList;
40
40
  }
41
41
  });
42
+ Object.defineProperty(exports, "DelayedRender", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _DelayedRender.DelayedRender;
46
+ }
47
+ });
42
48
  Object.defineProperty(exports, "Divider", {
43
49
  enumerable: true,
44
50
  get: function () {
@@ -213,4 +219,5 @@ var _View = require("./View");
213
219
  var _RefreshControl = require("./RefreshControl");
214
220
  var _FirebaseMedia = require("./FirebaseMedia");
215
221
  var _PhoneInput = require("./PhoneInput");
222
+ var _DelayedRender = require("./DelayedRender");
216
223
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_Alert","require","_Badge","_BottomSheet","_Button","_Card","_Divider","_FAB","_Header","_IconButton","_Image","_KeyboardAvoidingView","_LineLoader","_ContentLoaderList","_LinkButton","_OtpInputs","_ParentView","_Searchbar","_SelectionDialog","_Snackbar","_Surface","_Switch","_Text","_TextInput","_ToggleButton","_TouchableRipple","_Video","_View","_RefreshControl","_FirebaseMedia","_PhoneInput"],"sourceRoot":"../../../src","sources":["components/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AACA,IAAAM,IAAA,GAAAN,OAAA;AACA,IAAAO,OAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AACA,IAAAS,MAAA,GAAAT,OAAA;AACA,IAAAU,qBAAA,GAAAV,OAAA;AACA,IAAAW,WAAA,GAAAX,OAAA;AACA,IAAAY,kBAAA,GAAAZ,OAAA;AACA,IAAAa,WAAA,GAAAb,OAAA;AACA,IAAAc,UAAA,GAAAd,OAAA;AACA,IAAAe,WAAA,GAAAf,OAAA;AACA,IAAAgB,UAAA,GAAAhB,OAAA;AACA,IAAAiB,gBAAA,GAAAjB,OAAA;AACA,IAAAkB,SAAA,GAAAlB,OAAA;AACA,IAAAmB,QAAA,GAAAnB,OAAA;AACA,IAAAoB,OAAA,GAAApB,OAAA;AACA,IAAAqB,KAAA,GAAArB,OAAA;AACA,IAAAsB,UAAA,GAAAtB,OAAA;AACA,IAAAuB,aAAA,GAAAvB,OAAA;AACA,IAAAwB,gBAAA,GAAAxB,OAAA;AACA,IAAAyB,MAAA,GAAAzB,OAAA;AACA,IAAA0B,KAAA,GAAA1B,OAAA;AACA,IAAA2B,eAAA,GAAA3B,OAAA;AACA,IAAA4B,cAAA,GAAA5B,OAAA;AACA,IAAA6B,WAAA,GAAA7B,OAAA"}
1
+ {"version":3,"names":["_Alert","require","_Badge","_BottomSheet","_Button","_Card","_Divider","_FAB","_Header","_IconButton","_Image","_KeyboardAvoidingView","_LineLoader","_ContentLoaderList","_LinkButton","_OtpInputs","_ParentView","_Searchbar","_SelectionDialog","_Snackbar","_Surface","_Switch","_Text","_TextInput","_ToggleButton","_TouchableRipple","_Video","_View","_RefreshControl","_FirebaseMedia","_PhoneInput","_DelayedRender"],"sourceRoot":"../../../src","sources":["components/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AACA,IAAAM,IAAA,GAAAN,OAAA;AACA,IAAAO,OAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AACA,IAAAS,MAAA,GAAAT,OAAA;AACA,IAAAU,qBAAA,GAAAV,OAAA;AACA,IAAAW,WAAA,GAAAX,OAAA;AACA,IAAAY,kBAAA,GAAAZ,OAAA;AACA,IAAAa,WAAA,GAAAb,OAAA;AACA,IAAAc,UAAA,GAAAd,OAAA;AACA,IAAAe,WAAA,GAAAf,OAAA;AACA,IAAAgB,UAAA,GAAAhB,OAAA;AACA,IAAAiB,gBAAA,GAAAjB,OAAA;AACA,IAAAkB,SAAA,GAAAlB,OAAA;AACA,IAAAmB,QAAA,GAAAnB,OAAA;AACA,IAAAoB,OAAA,GAAApB,OAAA;AACA,IAAAqB,KAAA,GAAArB,OAAA;AACA,IAAAsB,UAAA,GAAAtB,OAAA;AACA,IAAAuB,aAAA,GAAAvB,OAAA;AACA,IAAAwB,gBAAA,GAAAxB,OAAA;AACA,IAAAyB,MAAA,GAAAzB,OAAA;AACA,IAAA0B,KAAA,GAAA1B,OAAA;AACA,IAAA2B,eAAA,GAAA3B,OAAA;AACA,IAAA4B,cAAA,GAAA5B,OAAA;AACA,IAAA6B,WAAA,GAAA7B,OAAA;AACA,IAAA8B,cAAA,GAAA9B,OAAA"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useAppVersionCheck = void 0;
7
+ var _reactQuery = require("@tanstack/react-query");
8
+ var _firestore = _interopRequireDefault(require("@react-native-firebase/firestore"));
9
+ var _reactNativeConfig = _interopRequireDefault(require("react-native-config"));
10
+ var _reactNative = require("react-native");
11
+ var _reactNativeDeviceInfo = require("react-native-device-info");
12
+ var _react = require("react");
13
+ var _semver = _interopRequireDefault(require("semver"));
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ const useAppVersionCheck = ({
16
+ Alert
17
+ }) => {
18
+ const storeUrl = _reactNative.Platform.OS === 'android' ? _reactNativeConfig.default.PLAY_STORE_URL : _reactNativeConfig.default.APP_STORE_URL;
19
+
20
+ // Check app version only for production builds running in non release mode.
21
+ const shouldCheckAppVersion = Boolean(storeUrl) && !__DEV__;
22
+ const {
23
+ data: {
24
+ isRequiredUpdate
25
+ } = {},
26
+ refetch
27
+ } = (0, _reactQuery.useQuery)(['APP_VERSION'], async () => {
28
+ const data = (await (0, _firestore.default)().doc('_firebase_ext_/softwareVersions').get()).data();
29
+ const currentAppVersion = (0, _reactNativeDeviceInfo.getVersion)();
30
+ const {
31
+ minimumSupportedVersion,
32
+ latestVersion
33
+ } = data?.[_reactNativeConfig.default.BUNDLE_IDENTIFIER || '']?.[_reactNative.Platform.OS] || {};
34
+ if (!_semver.default.valid(currentAppVersion) || !_semver.default.valid(minimumSupportedVersion) || !_semver.default.valid(latestVersion)) {
35
+ return {
36
+ isOptionalUpdate: false,
37
+ isRequiredUpdate: false
38
+ };
39
+ }
40
+ const isOptionalUpdate = _semver.default.gt(latestVersion, currentAppVersion);
41
+ // eslint-disable-next-line @typescript-eslint/no-shadow
42
+ const isRequiredUpdate = _semver.default.gt(minimumSupportedVersion, currentAppVersion);
43
+ if (isRequiredUpdate || isOptionalUpdate) {
44
+ Alert.show({
45
+ isDismissable: !isRequiredUpdate,
46
+ // Allow dismissal only if the update is not required
47
+ title: 'New Update ✨',
48
+ description: 'A new version of the app is available. Please update to the latest version for the best experience.',
49
+ buttons: isRequiredUpdate ? [{
50
+ label: 'Update',
51
+ onPress: () => storeUrl && _reactNative.Linking.openURL(storeUrl)
52
+ }] : [{
53
+ label: 'Cancel'
54
+ }, {
55
+ label: 'Update',
56
+ onPress: () => storeUrl && _reactNative.Linking.openURL(storeUrl)
57
+ }]
58
+ });
59
+ }
60
+ return {
61
+ isOptionalUpdate,
62
+ isRequiredUpdate
63
+ };
64
+ }, {
65
+ enabled: shouldCheckAppVersion,
66
+ staleTime: Infinity
67
+ });
68
+ (0, _react.useEffect)(() => {
69
+ // For required updates, checking if the app version meets the minimum requirement when the app comes to the foreground.
70
+ // This handles the scenario where the user navigates to the store and returns without updating the app.
71
+ const subscription = _reactNative.AppState.addEventListener('change', state => {
72
+ if (state === 'active' && isRequiredUpdate) {
73
+ refetch();
74
+ }
75
+ });
76
+ return subscription.remove;
77
+ }, [isRequiredUpdate, refetch]);
78
+ };
79
+ exports.useAppVersionCheck = useAppVersionCheck;
80
+ //# sourceMappingURL=useAppVersionCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactQuery","require","_firestore","_interopRequireDefault","_reactNativeConfig","_reactNative","_reactNativeDeviceInfo","_react","_semver","obj","__esModule","default","useAppVersionCheck","Alert","storeUrl","Platform","OS","Config","PLAY_STORE_URL","APP_STORE_URL","shouldCheckAppVersion","Boolean","__DEV__","data","isRequiredUpdate","refetch","useQuery","firestore","doc","get","currentAppVersion","getVersion","minimumSupportedVersion","latestVersion","BUNDLE_IDENTIFIER","semver","valid","isOptionalUpdate","gt","show","isDismissable","title","description","buttons","label","onPress","Linking","openURL","enabled","staleTime","Infinity","useEffect","subscription","AppState","addEventListener","state","remove","exports"],"sourceRoot":"../../../src","sources":["hooks/useAppVersionCheck.ts"],"mappings":"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"}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  var _exportNames = {
7
+ useAppVersionCheck: true,
7
8
  AssetManager: true,
8
9
  Currency: true,
9
10
  useCustomerQueries: true,
@@ -51,6 +52,12 @@ Object.defineProperty(exports, "TSingleSnapBottomSheetRef", {
51
52
  return _useSingleSnapBottomSheetRef.TSingleSnapBottomSheetRef;
52
53
  }
53
54
  });
55
+ Object.defineProperty(exports, "useAppVersionCheck", {
56
+ enumerable: true,
57
+ get: function () {
58
+ return _useAppVersionCheck.useAppVersionCheck;
59
+ }
60
+ });
54
61
  Object.defineProperty(exports, "useCheckCustomer", {
55
62
  enumerable: true,
56
63
  get: function () {
@@ -75,6 +82,7 @@ Object.defineProperty(exports, "useSingleSnapBottomSheetRef", {
75
82
  return _useSingleSnapBottomSheetRef.useSingleSnapBottomSheetRef;
76
83
  }
77
84
  });
85
+ var _useAppVersionCheck = require("./hooks/useAppVersionCheck");
78
86
  var _AssetManager = require("./helpers/AssetManager");
79
87
  var _currency = require("./utils/currency");
80
88
  var _useCustomer = require("./hooks/useCustomer");
@@ -1 +1 @@
1
- {"version":3,"names":["_AssetManager","require","_currency","_useCustomer","_useCheckCustomer","_SavedCards","_useMultiSnapBottomSheetRef","_useSingleSnapBottomSheetRef","_components","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_auth","_selectBusiness","_analytics"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAEA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAEA,IAAAK,2BAAA,GAAAL,OAAA;AAIA,IAAAM,4BAAA,GAAAN,OAAA;AAKA,IAAAO,WAAA,GAAAP,OAAA;AAAAQ,MAAA,CAAAC,IAAA,CAAAF,WAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,WAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,WAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,KAAA,GAAApB,OAAA;AAAAQ,MAAA,CAAAC,IAAA,CAAAW,KAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,KAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,KAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,eAAA,GAAArB,OAAA;AAAAQ,MAAA,CAAAC,IAAA,CAAAY,eAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,eAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,eAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAW,UAAA,GAAAtB,OAAA"}
1
+ {"version":3,"names":["_useAppVersionCheck","require","_AssetManager","_currency","_useCustomer","_useCheckCustomer","_SavedCards","_useMultiSnapBottomSheetRef","_useSingleSnapBottomSheetRef","_components","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_auth","_selectBusiness","_analytics"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAEA,IAAAG,YAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAEA,IAAAM,2BAAA,GAAAN,OAAA;AAIA,IAAAO,4BAAA,GAAAP,OAAA;AAKA,IAAAQ,WAAA,GAAAR,OAAA;AAAAS,MAAA,CAAAC,IAAA,CAAAF,WAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,WAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,WAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,KAAA,GAAArB,OAAA;AAAAS,MAAA,CAAAC,IAAA,CAAAW,KAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,KAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,KAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,eAAA,GAAAtB,OAAA;AAAAS,MAAA,CAAAC,IAAA,CAAAY,eAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,eAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,eAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAW,UAAA,GAAAvB,OAAA"}
@@ -0,0 +1,17 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { InteractionManager } from 'react-native';
3
+ export const DelayedRender = ({
4
+ children
5
+ }) => {
6
+ const [readyForRender, shouldReadyForRender] = useState(false);
7
+ useEffect(() => {
8
+ InteractionManager.runAfterInteractions(() => {
9
+ shouldReadyForRender(true);
10
+ });
11
+ }, []);
12
+ if (!readyForRender) {
13
+ return null;
14
+ }
15
+ return children;
16
+ };
17
+ //# sourceMappingURL=DelayedRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","InteractionManager","DelayedRender","children","readyForRender","shouldReadyForRender","runAfterInteractions"],"sourceRoot":"../../../src","sources":["components/DelayedRender.tsx"],"mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,kBAAkB,QAAQ,cAAc;AAEjD,OAAO,MAAMC,aAAa,GAAGA,CAAC;EAAEC;AAAwC,CAAC,KAAK;EAC5E,MAAM,CAACC,cAAc,EAAEC,oBAAoB,CAAC,GAAGL,QAAQ,CAAC,KAAK,CAAC;EAE9DD,SAAS,CAAC,MAAM;IACdE,kBAAkB,CAACK,oBAAoB,CAAC,MAAM;MAC5CD,oBAAoB,CAAC,IAAI,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,IAAI,CAACD,cAAc,EAAE;IACnB,OAAO,IAAI;EACb;EAEA,OAAOD,QAAQ;AACjB,CAAC"}
@@ -28,4 +28,5 @@ export { View } from './View';
28
28
  export { RefreshControl } from './RefreshControl';
29
29
  export { FirebaseMedia } from './FirebaseMedia';
30
30
  export { PhoneInput } from './PhoneInput';
31
+ export { DelayedRender } from './DelayedRender';
31
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Alert","Badge","BottomSheet","Button","Card","Divider","FAB","Header","IconButton","Image","KeyboardAvoidingView","LineLoader","ContentLoaderList","LinkButton","OtpInputs","ParentView","Searchbar","SelectionDialog","Snackbar","Surface","Switch","Text","TextInput","ToggleButton","TouchableRipple","Video","View","RefreshControl","FirebaseMedia","PhoneInput"],"sourceRoot":"../../../src","sources":["components/index.ts"],"mappings":"AAAA,SAASA,KAAK,QAAQ,SAAS;AAC/B,SAASC,KAAK,QAAQ,SAAS;AAC/B,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,MAAM,QAAQ,UAAU;AACjC,SAASC,IAAI,QAAQ,QAAQ;AAC7B,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,GAAG,QAAQ,OAAO;AAC3B,SAASC,MAAM,QAAQ,UAAU;AACjC,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,KAAK,QAAQ,SAAS;AAC/B,SAASC,oBAAoB,QAAQ,wBAAwB;AAC7D,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,QAAQ,QAAQ,YAAY;AACrC,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,MAAM,QAAQ,UAAU;AACjC,SAASC,IAAI,QAAQ,QAAQ;AAC7B,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,KAAK,QAAQ,SAAS;AAC/B,SAASC,IAAI,QAAQ,QAAQ;AAC7B,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,UAAU,QAAuB,cAAc"}
1
+ {"version":3,"names":["Alert","Badge","BottomSheet","Button","Card","Divider","FAB","Header","IconButton","Image","KeyboardAvoidingView","LineLoader","ContentLoaderList","LinkButton","OtpInputs","ParentView","Searchbar","SelectionDialog","Snackbar","Surface","Switch","Text","TextInput","ToggleButton","TouchableRipple","Video","View","RefreshControl","FirebaseMedia","PhoneInput","DelayedRender"],"sourceRoot":"../../../src","sources":["components/index.ts"],"mappings":"AAAA,SAASA,KAAK,QAAQ,SAAS;AAC/B,SAASC,KAAK,QAAQ,SAAS;AAC/B,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,MAAM,QAAQ,UAAU;AACjC,SAASC,IAAI,QAAQ,QAAQ;AAC7B,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,GAAG,QAAQ,OAAO;AAC3B,SAASC,MAAM,QAAQ,UAAU;AACjC,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,KAAK,QAAQ,SAAS;AAC/B,SAASC,oBAAoB,QAAQ,wBAAwB;AAC7D,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,QAAQ,QAAQ,YAAY;AACrC,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,MAAM,QAAQ,UAAU;AACjC,SAASC,IAAI,QAAQ,QAAQ;AAC7B,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,KAAK,QAAQ,SAAS;AAC/B,SAASC,IAAI,QAAQ,QAAQ;AAC7B,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,UAAU,QAAuB,cAAc;AACxD,SAASC,aAAa,QAAQ,iBAAiB"}
@@ -0,0 +1,72 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import firestore from '@react-native-firebase/firestore';
3
+ import Config from 'react-native-config';
4
+ import { AppState, Linking, Platform } from 'react-native';
5
+ import { getVersion } from 'react-native-device-info';
6
+ import { useEffect } from 'react';
7
+ import semver from 'semver';
8
+ export const useAppVersionCheck = ({
9
+ Alert
10
+ }) => {
11
+ const storeUrl = Platform.OS === 'android' ? Config.PLAY_STORE_URL : Config.APP_STORE_URL;
12
+
13
+ // Check app version only for production builds running in non release mode.
14
+ const shouldCheckAppVersion = Boolean(storeUrl) && !__DEV__;
15
+ const {
16
+ data: {
17
+ isRequiredUpdate
18
+ } = {},
19
+ refetch
20
+ } = useQuery(['APP_VERSION'], async () => {
21
+ const data = (await firestore().doc('_firebase_ext_/softwareVersions').get()).data();
22
+ const currentAppVersion = getVersion();
23
+ const {
24
+ minimumSupportedVersion,
25
+ latestVersion
26
+ } = data?.[Config.BUNDLE_IDENTIFIER || '']?.[Platform.OS] || {};
27
+ if (!semver.valid(currentAppVersion) || !semver.valid(minimumSupportedVersion) || !semver.valid(latestVersion)) {
28
+ return {
29
+ isOptionalUpdate: false,
30
+ isRequiredUpdate: false
31
+ };
32
+ }
33
+ const isOptionalUpdate = semver.gt(latestVersion, currentAppVersion);
34
+ // eslint-disable-next-line @typescript-eslint/no-shadow
35
+ const isRequiredUpdate = semver.gt(minimumSupportedVersion, currentAppVersion);
36
+ if (isRequiredUpdate || isOptionalUpdate) {
37
+ Alert.show({
38
+ isDismissable: !isRequiredUpdate,
39
+ // Allow dismissal only if the update is not required
40
+ title: 'New Update ✨',
41
+ description: 'A new version of the app is available. Please update to the latest version for the best experience.',
42
+ buttons: isRequiredUpdate ? [{
43
+ label: 'Update',
44
+ onPress: () => storeUrl && Linking.openURL(storeUrl)
45
+ }] : [{
46
+ label: 'Cancel'
47
+ }, {
48
+ label: 'Update',
49
+ onPress: () => storeUrl && Linking.openURL(storeUrl)
50
+ }]
51
+ });
52
+ }
53
+ return {
54
+ isOptionalUpdate,
55
+ isRequiredUpdate
56
+ };
57
+ }, {
58
+ enabled: shouldCheckAppVersion,
59
+ staleTime: Infinity
60
+ });
61
+ useEffect(() => {
62
+ // For required updates, checking if the app version meets the minimum requirement when the app comes to the foreground.
63
+ // This handles the scenario where the user navigates to the store and returns without updating the app.
64
+ const subscription = AppState.addEventListener('change', state => {
65
+ if (state === 'active' && isRequiredUpdate) {
66
+ refetch();
67
+ }
68
+ });
69
+ return subscription.remove;
70
+ }, [isRequiredUpdate, refetch]);
71
+ };
72
+ //# sourceMappingURL=useAppVersionCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useQuery","firestore","Config","AppState","Linking","Platform","getVersion","useEffect","semver","useAppVersionCheck","Alert","storeUrl","OS","PLAY_STORE_URL","APP_STORE_URL","shouldCheckAppVersion","Boolean","__DEV__","data","isRequiredUpdate","refetch","doc","get","currentAppVersion","minimumSupportedVersion","latestVersion","BUNDLE_IDENTIFIER","valid","isOptionalUpdate","gt","show","isDismissable","title","description","buttons","label","onPress","openURL","enabled","staleTime","Infinity","subscription","addEventListener","state","remove"],"sourceRoot":"../../../src","sources":["hooks/useAppVersionCheck.ts"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ export { useAppVersionCheck } from './hooks/useAppVersionCheck';
1
2
  export { AssetManager } from './helpers/AssetManager';
2
3
  export { Currency } from './utils/currency';
3
4
  export { useCustomerQueries } from './hooks/useCustomer';
@@ -1 +1 @@
1
- {"version":3,"names":["AssetManager","Currency","useCustomerQueries","useCheckCustomer","SavedCards","useMultiSnapBottomSheetRef","TMultiSnapBottomSheetRef","useSingleSnapBottomSheetRef","TSingleSnapBottomSheetRef","Analytics"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,YAAY,QAAQ,wBAAwB;AACrD,SAASC,QAAQ,QAAQ,kBAAkB;AAE3C,SAASC,kBAAkB,QAAQ,qBAAqB;AACxD,SAASC,gBAAgB,QAAQ,0BAA0B;AAC3D,SAASC,UAAU,QAAQ,iCAAiC;AAE5D,SACEC,0BAA0B,EAC1BC,wBAAwB,QACnB,oCAAoC;AAC3C,SACEC,2BAA2B,EAC3BC,yBAAyB,QACpB,qCAAqC;AAE5C,cAAc,cAAc;AAC5B,cAAc,QAAQ;AACtB,cAAc,kBAAkB;AAEhC,SAASC,SAAS,QAAQ,mBAAmB"}
1
+ {"version":3,"names":["useAppVersionCheck","AssetManager","Currency","useCustomerQueries","useCheckCustomer","SavedCards","useMultiSnapBottomSheetRef","TMultiSnapBottomSheetRef","useSingleSnapBottomSheetRef","TSingleSnapBottomSheetRef","Analytics"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,4BAA4B;AAE/D,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,QAAQ,QAAQ,kBAAkB;AAE3C,SAASC,kBAAkB,QAAQ,qBAAqB;AACxD,SAASC,gBAAgB,QAAQ,0BAA0B;AAC3D,SAASC,UAAU,QAAQ,iCAAiC;AAE5D,SACEC,0BAA0B,EAC1BC,wBAAwB,QACnB,oCAAoC;AAC3C,SACEC,2BAA2B,EAC3BC,yBAAyB,QACpB,qCAAqC;AAE5C,cAAc,cAAc;AAC5B,cAAc,QAAQ;AACtB,cAAc,kBAAkB;AAEhC,SAASC,SAAS,QAAQ,mBAAmB"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare const DelayedRender: ({ children }: {
3
+ children: React.ReactNode;
4
+ }) => import("react").ReactNode;
5
+ //# sourceMappingURL=DelayedRender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DelayedRender.d.ts","sourceRoot":"","sources":["../../../../src/components/DelayedRender.tsx"],"names":[],"mappings":";AAGA,eAAO,MAAM,aAAa;cAA8B,MAAM,SAAS;+BActE,CAAC"}
@@ -28,4 +28,5 @@ export { View } from './View';
28
28
  export { RefreshControl } from './RefreshControl';
29
29
  export { FirebaseMedia } from './FirebaseMedia';
30
30
  export { PhoneInput, type PCountry } from './PhoneInput';
31
+ export { DelayedRender } from './DelayedRender';
31
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -3,7 +3,7 @@ import { FirebaseStorageTypes } from '@react-native-firebase/storage';
3
3
  type TaskSnapshot = FirebaseStorageTypes.TaskSnapshot;
4
4
  export declare class AssetManager {
5
5
  private static assetCache;
6
- static detectTypeFromPath(path: string): "video" | "image" | null;
6
+ static detectTypeFromPath(path: string): "image" | "video" | null;
7
7
  static clearCache(): Promise<void>;
8
8
  static uploadImage({ uri, base64, path, type, setProgress, }: {
9
9
  uri: string;
@@ -0,0 +1,5 @@
1
+ import { Alert as AlertFromLibrary } from '../components';
2
+ export declare const useAppVersionCheck: ({ Alert, }: {
3
+ Alert: typeof AlertFromLibrary;
4
+ }) => void;
5
+ //# sourceMappingURL=useAppVersionCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAppVersionCheck.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useAppVersionCheck.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE1D,eAAO,MAAM,kBAAkB;WAGtB,uBAAuB;UAiF/B,CAAC"}
@@ -1,3 +1,4 @@
1
+ export { useAppVersionCheck } from './hooks/useAppVersionCheck';
1
2
  export { AssetManager } from './helpers/AssetManager';
2
3
  export { Currency } from './utils/currency';
3
4
  export { useCustomerQueries } from './hooks/useCustomer';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,qCAAqC,CAAC;AAE7C,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,qCAAqC,CAAC;AAE7C,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kiosinc/commons-rn",
3
- "version": "0.1.81",
3
+ "version": "0.1.83",
4
4
  "description": "Common Code",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -67,6 +67,7 @@
67
67
  "@types/react": "~17.0.21",
68
68
  "@types/react-native": "0.70.0",
69
69
  "@types/react-native-video": "^5.0.18",
70
+ "@types/semver": "^7",
70
71
  "commitlint": "^17.0.2",
71
72
  "del-cli": "^5.0.0",
72
73
  "eslint": "^8.4.1",
@@ -205,6 +206,7 @@
205
206
  "react-native-size-matters": "^0.4.2",
206
207
  "react-native-uuid": "^2.0.2",
207
208
  "react-native-video": "^5.2.1",
209
+ "semver": "^7.6.3",
208
210
  "yup": "^1.3.2"
209
211
  }
210
212
  }
@@ -0,0 +1,18 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { InteractionManager } from 'react-native';
3
+
4
+ export const DelayedRender = ({ children }: { children: React.ReactNode }) => {
5
+ const [readyForRender, shouldReadyForRender] = useState(false);
6
+
7
+ useEffect(() => {
8
+ InteractionManager.runAfterInteractions(() => {
9
+ shouldReadyForRender(true);
10
+ });
11
+ }, []);
12
+
13
+ if (!readyForRender) {
14
+ return null;
15
+ }
16
+
17
+ return children;
18
+ };
@@ -28,3 +28,4 @@ export { View } from './View';
28
28
  export { RefreshControl } from './RefreshControl';
29
29
  export { FirebaseMedia } from './FirebaseMedia';
30
30
  export { PhoneInput, type PCountry } from './PhoneInput';
31
+ export { DelayedRender } from './DelayedRender';
@@ -0,0 +1,94 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import firestore from '@react-native-firebase/firestore';
3
+ import Config from 'react-native-config';
4
+ import { AppState, Linking, Platform } from 'react-native';
5
+ import { getVersion } from 'react-native-device-info';
6
+ import { useEffect } from 'react';
7
+ import semver from 'semver';
8
+ import { Alert as AlertFromLibrary } from '../components';
9
+
10
+ export const useAppVersionCheck = ({
11
+ Alert,
12
+ }: {
13
+ Alert: typeof AlertFromLibrary;
14
+ }) => {
15
+ const storeUrl =
16
+ Platform.OS === 'android' ? Config.PLAY_STORE_URL : Config.APP_STORE_URL;
17
+
18
+ // Check app version only for production builds running in non release mode.
19
+ const shouldCheckAppVersion = Boolean(storeUrl) && !__DEV__;
20
+
21
+ const { data: { isRequiredUpdate } = {}, refetch } = useQuery(
22
+ ['APP_VERSION'],
23
+ async () => {
24
+ const data = (
25
+ await firestore().doc('_firebase_ext_/softwareVersions').get()
26
+ ).data();
27
+
28
+ const currentAppVersion = getVersion();
29
+ const { minimumSupportedVersion, latestVersion } =
30
+ data?.[Config.BUNDLE_IDENTIFIER || '']?.[Platform.OS] || {};
31
+
32
+ if (
33
+ !semver.valid(currentAppVersion) ||
34
+ !semver.valid(minimumSupportedVersion) ||
35
+ !semver.valid(latestVersion)
36
+ ) {
37
+ return {
38
+ isOptionalUpdate: false,
39
+ isRequiredUpdate: false,
40
+ };
41
+ }
42
+
43
+ const isOptionalUpdate = semver.gt(latestVersion, currentAppVersion);
44
+ // eslint-disable-next-line @typescript-eslint/no-shadow
45
+ const isRequiredUpdate = semver.gt(
46
+ minimumSupportedVersion,
47
+ currentAppVersion
48
+ );
49
+
50
+ if (isRequiredUpdate || isOptionalUpdate) {
51
+ Alert.show({
52
+ isDismissable: !isRequiredUpdate, // Allow dismissal only if the update is not required
53
+ title: 'New Update ✨',
54
+ description:
55
+ 'A new version of the app is available. Please update to the latest version for the best experience.',
56
+ buttons: isRequiredUpdate
57
+ ? [
58
+ {
59
+ label: 'Update',
60
+ onPress: () => storeUrl && Linking.openURL(storeUrl),
61
+ },
62
+ ]
63
+ : [
64
+ {
65
+ label: 'Cancel',
66
+ },
67
+ {
68
+ label: 'Update',
69
+ onPress: () => storeUrl && Linking.openURL(storeUrl),
70
+ },
71
+ ],
72
+ });
73
+ }
74
+
75
+ return { isOptionalUpdate, isRequiredUpdate };
76
+ },
77
+ {
78
+ enabled: shouldCheckAppVersion,
79
+ staleTime: Infinity,
80
+ }
81
+ );
82
+
83
+ useEffect(() => {
84
+ // For required updates, checking if the app version meets the minimum requirement when the app comes to the foreground.
85
+ // This handles the scenario where the user navigates to the store and returns without updating the app.
86
+ const subscription = AppState.addEventListener('change', (state) => {
87
+ if (state === 'active' && isRequiredUpdate) {
88
+ refetch();
89
+ }
90
+ });
91
+
92
+ return subscription.remove;
93
+ }, [isRequiredUpdate, refetch]);
94
+ };
package/src/index.tsx CHANGED
@@ -1,3 +1,5 @@
1
+ export { useAppVersionCheck } from './hooks/useAppVersionCheck';
2
+
1
3
  export { AssetManager } from './helpers/AssetManager';
2
4
  export { Currency } from './utils/currency';
3
5