@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.
- package/lib/commonjs/components/DelayedRender.js +24 -0
- package/lib/commonjs/components/DelayedRender.js.map +1 -0
- package/lib/commonjs/components/index.js +7 -0
- package/lib/commonjs/components/index.js.map +1 -1
- 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/components/DelayedRender.js +17 -0
- package/lib/module/components/DelayedRender.js.map +1 -0
- package/lib/module/components/index.js +1 -0
- package/lib/module/components/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/components/DelayedRender.d.ts +5 -0
- package/lib/typescript/src/components/DelayedRender.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +1 -0
- package/lib/typescript/src/components/index.d.ts.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/components/DelayedRender.tsx +18 -0
- package/src/components/index.ts +1 -0
- package/src/hooks/useAppVersionCheck.ts +94 -0
- 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":"
|
|
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":";;;;;;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"}
|
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,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":"AAAA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,OAAOC,SAAS,MAAM,kCAAkC;AACxD,OAAOC,MAAM,MAAM,qBAAqB;AACxC,SAASC,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,cAAc;AAC1D,SAASC,UAAU,QAAQ,0BAA0B;AACrD,SAASC,SAAS,QAAQ,OAAO;AACjC,OAAOC,MAAM,MAAM,QAAQ;AAG3B,OAAO,MAAMC,kBAAkB,GAAGA,CAAC;EACjCC;AAGF,CAAC,KAAK;EACJ,MAAMC,QAAQ,GACZN,QAAQ,CAACO,EAAE,KAAK,SAAS,GAAGV,MAAM,CAACW,cAAc,GAAGX,MAAM,CAACY,aAAa;;EAE1E;EACA,MAAMC,qBAAqB,GAAGC,OAAO,CAACL,QAAQ,CAAC,IAAI,CAACM,OAAO;EAE3D,MAAM;IAAEC,IAAI,EAAE;MAAEC;IAAiB,CAAC,GAAG,CAAC,CAAC;IAAEC;EAAQ,CAAC,GAAGpB,QAAQ,CAC3D,CAAC,aAAa,CAAC,EACf,YAAY;IACV,MAAMkB,IAAI,GAAG,CACX,MAAMjB,SAAS,CAAC,CAAC,CAACoB,GAAG,CAAC,iCAAiC,CAAC,CAACC,GAAG,CAAC,CAAC,EAC9DJ,IAAI,CAAC,CAAC;IAER,MAAMK,iBAAiB,GAAGjB,UAAU,CAAC,CAAC;IACtC,MAAM;MAAEkB,uBAAuB;MAAEC;IAAc,CAAC,GAC9CP,IAAI,GAAGhB,MAAM,CAACwB,iBAAiB,IAAI,EAAE,CAAC,GAAGrB,QAAQ,CAACO,EAAE,CAAC,IAAI,CAAC,CAAC;IAE7D,IACE,CAACJ,MAAM,CAACmB,KAAK,CAACJ,iBAAiB,CAAC,IAChC,CAACf,MAAM,CAACmB,KAAK,CAACH,uBAAuB,CAAC,IACtC,CAAChB,MAAM,CAACmB,KAAK,CAACF,aAAa,CAAC,EAC5B;MACA,OAAO;QACLG,gBAAgB,EAAE,KAAK;QACvBT,gBAAgB,EAAE;MACpB,CAAC;IACH;IAEA,MAAMS,gBAAgB,GAAGpB,MAAM,CAACqB,EAAE,CAACJ,aAAa,EAAEF,iBAAiB,CAAC;IACpE;IACA,MAAMJ,gBAAgB,GAAGX,MAAM,CAACqB,EAAE,CAChCL,uBAAuB,EACvBD,iBACF,CAAC;IAED,IAAIJ,gBAAgB,IAAIS,gBAAgB,EAAE;MACxClB,KAAK,CAACoB,IAAI,CAAC;QACTC,aAAa,EAAE,CAACZ,gBAAgB;QAAE;QAClCa,KAAK,EAAE,cAAc;QACrBC,WAAW,EACT,qGAAqG;QACvGC,OAAO,EAAEf,gBAAgB,GACrB,CACE;UACEgB,KAAK,EAAE,QAAQ;UACfC,OAAO,EAAEA,CAAA,KAAMzB,QAAQ,IAAIP,OAAO,CAACiC,OAAO,CAAC1B,QAAQ;QACrD,CAAC,CACF,GACD,CACE;UACEwB,KAAK,EAAE;QACT,CAAC,EACD;UACEA,KAAK,EAAE,QAAQ;UACfC,OAAO,EAAEA,CAAA,KAAMzB,QAAQ,IAAIP,OAAO,CAACiC,OAAO,CAAC1B,QAAQ;QACrD,CAAC;MAET,CAAC,CAAC;IACJ;IAEA,OAAO;MAAEiB,gBAAgB;MAAET;IAAiB,CAAC;EAC/C,CAAC,EACD;IACEmB,OAAO,EAAEvB,qBAAqB;IAC9BwB,SAAS,EAAEC;EACb,CACF,CAAC;EAEDjC,SAAS,CAAC,MAAM;IACd;IACA;IACA,MAAMkC,YAAY,GAAGtC,QAAQ,CAACuC,gBAAgB,CAAC,QAAQ,EAAGC,KAAK,IAAK;MAClE,IAAIA,KAAK,KAAK,QAAQ,IAAIxB,gBAAgB,EAAE;QAC1CC,OAAO,CAAC,CAAC;MACX;IACF,CAAC,CAAC;IAEF,OAAOqB,YAAY,CAACG,MAAM;EAC5B,CAAC,EAAE,CAACzB,gBAAgB,EAAEC,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
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"}
|
|
@@ -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): "
|
|
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.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
|
+
};
|
package/src/components/index.ts
CHANGED
|
@@ -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
|
+
};
|