@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.
- package/lib/commonjs/hooks/useAppVersionCheck.js +80 -0
- package/lib/commonjs/hooks/useAppVersionCheck.js.map +1 -0
- package/lib/commonjs/index.js +8 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/hooks/useAppVersionCheck.js +72 -0
- package/lib/module/hooks/useAppVersionCheck.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/helpers/AssetManager.d.ts +1 -1
- package/lib/typescript/src/hooks/useAppVersionCheck.d.ts +5 -0
- package/lib/typescript/src/hooks/useAppVersionCheck.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +3 -1
- package/src/hooks/useAppVersionCheck.ts +94 -0
- package/src/index.tsx +2 -0
|
@@ -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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"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -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":["
|
|
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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"}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -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): "
|
|
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 @@
|
|
|
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 +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.
|
|
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
|
+
};
|