@kiosinc/commons-rn 0.1.81 → 0.1.82

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.
@@ -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":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,sBAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AACA,IAAAO,OAAA,GAAAL,sBAAA,CAAAF,OAAA;AAA4B,SAAAE,uBAAAM,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAGrB,MAAMG,kBAAkB,GAAGA,CAAC;EACjCC;AAGF,CAAC,KAAK;EACJ,MAAMC,QAAQ,GACZC,qBAAQ,CAACC,EAAE,KAAK,SAAS,GAAGC,0BAAM,CAACC,cAAc,GAAGD,0BAAM,CAACE,aAAa;;EAE1E;EACA,MAAMC,qBAAqB,GAAGC,OAAO,CAACP,QAAQ,CAAC,IAAI,CAACQ,OAAO;EAE3D,MAAM;IAAEC,IAAI,EAAE;MAAEC;IAAiB,CAAC,GAAG,CAAC,CAAC;IAAEC;EAAQ,CAAC,GAAG,IAAAC,oBAAQ,EAC3D,CAAC,aAAa,CAAC,EACf,YAAY;IACV,MAAMH,IAAI,GAAG,CACX,MAAM,IAAAI,kBAAS,EAAC,CAAC,CAACC,GAAG,CAAC,iCAAiC,CAAC,CAACC,GAAG,CAAC,CAAC,EAC9DN,IAAI,CAAC,CAAC;IAER,MAAMO,iBAAiB,GAAG,IAAAC,iCAAU,EAAC,CAAC;IACtC,MAAM;MAAEC,uBAAuB;MAAEC;IAAc,CAAC,GAC9CV,IAAI,GAAGN,0BAAM,CAACiB,iBAAiB,IAAI,EAAE,CAAC,GAAGnB,qBAAQ,CAACC,EAAE,CAAC,IAAI,CAAC,CAAC;IAE7D,IACE,CAACmB,eAAM,CAACC,KAAK,CAACN,iBAAiB,CAAC,IAChC,CAACK,eAAM,CAACC,KAAK,CAACJ,uBAAuB,CAAC,IACtC,CAACG,eAAM,CAACC,KAAK,CAACH,aAAa,CAAC,EAC5B;MACA,OAAO;QACLI,gBAAgB,EAAE,KAAK;QACvBb,gBAAgB,EAAE;MACpB,CAAC;IACH;IAEA,MAAMa,gBAAgB,GAAGF,eAAM,CAACG,EAAE,CAACL,aAAa,EAAEH,iBAAiB,CAAC;IACpE;IACA,MAAMN,gBAAgB,GAAGW,eAAM,CAACG,EAAE,CAChCN,uBAAuB,EACvBF,iBACF,CAAC;IAED,IAAIN,gBAAgB,IAAIa,gBAAgB,EAAE;MACxCxB,KAAK,CAAC0B,IAAI,CAAC;QACTC,aAAa,EAAE,CAAChB,gBAAgB;QAAE;QAClCiB,KAAK,EAAE,cAAc;QACrBC,WAAW,EACT,qGAAqG;QACvGC,OAAO,EAAEnB,gBAAgB,GACrB,CACE;UACEoB,KAAK,EAAE,QAAQ;UACfC,OAAO,EAAEA,CAAA,KAAM/B,QAAQ,IAAIgC,oBAAO,CAACC,OAAO,CAACjC,QAAQ;QACrD,CAAC,CACF,GACD,CACE;UACE8B,KAAK,EAAE;QACT,CAAC,EACD;UACEA,KAAK,EAAE,QAAQ;UACfC,OAAO,EAAEA,CAAA,KAAM/B,QAAQ,IAAIgC,oBAAO,CAACC,OAAO,CAACjC,QAAQ;QACrD,CAAC;MAET,CAAC,CAAC;IACJ;IAEA,OAAO;MAAEuB,gBAAgB;MAAEb;IAAiB,CAAC;EAC/C,CAAC,EACD;IACEwB,OAAO,EAAE5B,qBAAqB;IAC9B6B,SAAS,EAAEC;EACb,CACF,CAAC;EAED,IAAAC,gBAAS,EAAC,MAAM;IACd;IACA;IACA,MAAMC,YAAY,GAAGC,qBAAQ,CAACC,gBAAgB,CAAC,QAAQ,EAAGC,KAAK,IAAK;MAClE,IAAIA,KAAK,KAAK,QAAQ,IAAI/B,gBAAgB,EAAE;QAC1CC,OAAO,CAAC,CAAC;MACX;IACF,CAAC,CAAC;IAEF,OAAO2B,YAAY,CAACI,MAAM;EAC5B,CAAC,EAAE,CAAChC,gBAAgB,EAAEC,OAAO,CAAC,CAAC;AACjC,CAAC;AAACgC,OAAA,CAAA7C,kBAAA,GAAAA,kBAAA"}
@@ -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,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"}
@@ -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.82",
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,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