@kiosinc/commons-rn 0.1.80 → 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/components/FirebaseMedia.js +11 -4
- package/lib/commonjs/components/FirebaseMedia.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/FirebaseMedia.js +11 -4
- package/lib/module/components/FirebaseMedia.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/FirebaseMedia.d.ts +2 -1
- package/lib/typescript/src/components/FirebaseMedia.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/FirebaseMedia.tsx +13 -3
- package/src/hooks/useAppVersionCheck.ts +94 -0
- package/src/index.tsx +2 -0
|
@@ -6,13 +6,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.FirebaseMedia = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNativeFastImage = _interopRequireDefault(require("react-native-fast-image"));
|
|
9
|
-
var
|
|
9
|
+
var _reactNativePaper = require("react-native-paper");
|
|
10
10
|
var _reactNativeVideo = _interopRequireDefault(require("react-native-video"));
|
|
11
|
+
var _reactNative = require("react-native");
|
|
12
|
+
var _placeholderImage = _interopRequireDefault(require("../assets/icons/placeholderImage.svg"));
|
|
11
13
|
var _AssetManager = require("../helpers/AssetManager");
|
|
12
14
|
var _View = require("./View");
|
|
13
15
|
var _IconButton = require("./IconButton");
|
|
14
16
|
var _ContentLoaderList = require("./ContentLoaderList");
|
|
15
|
-
var _reactNative = require("react-native");
|
|
16
17
|
var _Card = require("./Card");
|
|
17
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
19
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
@@ -23,6 +24,7 @@ const FirebaseMedia = exports.FirebaseMedia = /*#__PURE__*/_react.default.memo((
|
|
|
23
24
|
borderRadius = '10',
|
|
24
25
|
borderWidth = 1,
|
|
25
26
|
borderColor = 'onBackground',
|
|
27
|
+
placeholderIcon,
|
|
26
28
|
onPress,
|
|
27
29
|
...rest
|
|
28
30
|
}) => {
|
|
@@ -103,7 +105,10 @@ const FirebaseMedia = exports.FirebaseMedia = /*#__PURE__*/_react.default.memo((
|
|
|
103
105
|
style: styles.placeholder,
|
|
104
106
|
height: "100%",
|
|
105
107
|
width: "100%"
|
|
106
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
108
|
+
}, placeholderIcon ? /*#__PURE__*/_react.default.createElement(_reactNativePaper.Icon, {
|
|
109
|
+
source: placeholderIcon,
|
|
110
|
+
size: 24
|
|
111
|
+
}) : /*#__PURE__*/_react.default.createElement(_placeholderImage.default, {
|
|
107
112
|
height: "100%",
|
|
108
113
|
width: "100%"
|
|
109
114
|
}))))));
|
|
@@ -114,7 +119,9 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
114
119
|
width: '100%'
|
|
115
120
|
},
|
|
116
121
|
placeholder: {
|
|
117
|
-
backgroundColor: '#DBDCDF'
|
|
122
|
+
backgroundColor: '#DBDCDF',
|
|
123
|
+
alignItems: 'center',
|
|
124
|
+
justifyContent: 'center'
|
|
118
125
|
}
|
|
119
126
|
});
|
|
120
127
|
//# sourceMappingURL=FirebaseMedia.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNativeFastImage","_interopRequireDefault","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNativeFastImage","_interopRequireDefault","_reactNativePaper","_reactNativeVideo","_reactNative","_placeholderImage","_AssetManager","_View","_IconButton","_ContentLoaderList","_Card","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","FirebaseMedia","exports","React","memo","uri","borderRadius","borderWidth","borderColor","placeholderIcon","onPress","rest","status","setStatus","useState","firebaseURI","type","setFirebaseURI","useEffect","AssetManager","getAssetURL","then","assetDetails","catch","createElement","Card","bg","mode","View","overflow","height","width","style","styles","fullWidthHeight","onLoad","onError","top","bottom","right","left","position","alignItems","justifyContent","ContentLoaderList","count","radius","IconButton","icon","placeholder","Icon","size","StyleSheet","create","backgroundColor"],"sourceRoot":"../../../src","sources":["components/FirebaseMedia.tsx"],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
2
|
import React, { useEffect, useState } from 'react';
|
|
3
3
|
import FastImage from 'react-native-fast-image';
|
|
4
|
-
import
|
|
4
|
+
import { Icon } from 'react-native-paper';
|
|
5
5
|
import VideoOriginal from 'react-native-video';
|
|
6
|
+
import { StyleSheet } from 'react-native';
|
|
7
|
+
import PlaceHolderImage from '../assets/icons/placeholderImage.svg';
|
|
6
8
|
import { AssetManager } from '../helpers/AssetManager';
|
|
7
9
|
import { View } from './View';
|
|
8
10
|
import { IconButton } from './IconButton';
|
|
9
11
|
import { ContentLoaderList } from './ContentLoaderList';
|
|
10
|
-
import { StyleSheet } from 'react-native';
|
|
11
12
|
import { Card } from './Card';
|
|
12
13
|
export const FirebaseMedia = /*#__PURE__*/React.memo(({
|
|
13
14
|
uri,
|
|
14
15
|
borderRadius = '10',
|
|
15
16
|
borderWidth = 1,
|
|
16
17
|
borderColor = 'onBackground',
|
|
18
|
+
placeholderIcon,
|
|
17
19
|
onPress,
|
|
18
20
|
...rest
|
|
19
21
|
}) => {
|
|
@@ -94,7 +96,10 @@ export const FirebaseMedia = /*#__PURE__*/React.memo(({
|
|
|
94
96
|
style: styles.placeholder,
|
|
95
97
|
height: "100%",
|
|
96
98
|
width: "100%"
|
|
97
|
-
}, /*#__PURE__*/React.createElement(
|
|
99
|
+
}, placeholderIcon ? /*#__PURE__*/React.createElement(Icon, {
|
|
100
|
+
source: placeholderIcon,
|
|
101
|
+
size: 24
|
|
102
|
+
}) : /*#__PURE__*/React.createElement(PlaceHolderImage, {
|
|
98
103
|
height: "100%",
|
|
99
104
|
width: "100%"
|
|
100
105
|
}))))));
|
|
@@ -105,7 +110,9 @@ const styles = StyleSheet.create({
|
|
|
105
110
|
width: '100%'
|
|
106
111
|
},
|
|
107
112
|
placeholder: {
|
|
108
|
-
backgroundColor: '#DBDCDF'
|
|
113
|
+
backgroundColor: '#DBDCDF',
|
|
114
|
+
alignItems: 'center',
|
|
115
|
+
justifyContent: 'center'
|
|
109
116
|
}
|
|
110
117
|
});
|
|
111
118
|
//# sourceMappingURL=FirebaseMedia.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useState","FastImage","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","FastImage","Icon","VideoOriginal","StyleSheet","PlaceHolderImage","AssetManager","View","IconButton","ContentLoaderList","Card","FirebaseMedia","memo","uri","borderRadius","borderWidth","borderColor","placeholderIcon","onPress","rest","status","setStatus","firebaseURI","type","setFirebaseURI","getAssetURL","then","assetDetails","catch","createElement","_extends","bg","mode","overflow","height","width","style","styles","fullWidthHeight","source","onLoad","onError","top","bottom","right","left","position","alignItems","justifyContent","count","radius","icon","placeholder","size","create","backgroundColor"],"sourceRoot":"../../../src","sources":["components/FirebaseMedia.tsx"],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -6,9 +6,10 @@ import { ThemeType } from '../theme';
|
|
|
6
6
|
type RestyleProps = SpacingProps<ThemeType> & SpacingShorthandProps<ThemeType> & LayoutProps<ThemeType> & PositionProps<ThemeType> & BorderProps<ThemeType> & BackgroundColorProps<ThemeType> & BackgroundColorShorthandProps<ThemeType>;
|
|
7
7
|
type TFirebaseMedia = {
|
|
8
8
|
uri: string;
|
|
9
|
+
placeholderIcon?: string;
|
|
9
10
|
onPress?: () => void;
|
|
10
11
|
};
|
|
11
12
|
type Props = Omit<RestyleProps & FastImageProps & TFirebaseMedia & VideoProperties, 'source'>;
|
|
12
|
-
export declare const FirebaseMedia: React.MemoExoticComponent<({ uri, borderRadius, borderWidth, borderColor, onPress, ...rest }: Props) => JSX.Element>;
|
|
13
|
+
export declare const FirebaseMedia: React.MemoExoticComponent<({ uri, borderRadius, borderWidth, borderColor, placeholderIcon, onPress, ...rest }: Props) => JSX.Element>;
|
|
13
14
|
export {};
|
|
14
15
|
//# sourceMappingURL=FirebaseMedia.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirebaseMedia.d.ts","sourceRoot":"","sources":["../../../../src/components/FirebaseMedia.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAkB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,6BAA6B,EAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"FirebaseMedia.d.ts","sourceRoot":"","sources":["../../../../src/components/FirebaseMedia.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAkB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,6BAA6B,EAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMrD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAOrC,KAAK,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,GACzC,qBAAqB,CAAC,SAAS,CAAC,GAChC,WAAW,CAAC,SAAS,CAAC,GACtB,aAAa,CAAC,SAAS,CAAC,GACxB,WAAW,CAAC,SAAS,CAAC,GACtB,oBAAoB,CAAC,SAAS,CAAC,GAC/B,6BAA6B,CAAC,SAAS,CAAC,CAAC;AAE3C,KAAK,cAAc,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,KAAK,KAAK,GAAG,IAAI,CACf,YAAY,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,EAChE,QAAQ,CACT,CAAC;AAEF,eAAO,MAAM,aAAa,iHASrB,KAAK,iBAsGT,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.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
|
}
|
|
@@ -10,14 +10,16 @@ import {
|
|
|
10
10
|
BackgroundColorShorthandProps,
|
|
11
11
|
} from '@shopify/restyle';
|
|
12
12
|
import { VideoProperties } from 'react-native-video';
|
|
13
|
-
import
|
|
13
|
+
import { Icon } from 'react-native-paper';
|
|
14
14
|
import VideoOriginal from 'react-native-video';
|
|
15
|
+
import { StyleSheet } from 'react-native';
|
|
16
|
+
|
|
17
|
+
import PlaceHolderImage from '../assets/icons/placeholderImage.svg';
|
|
15
18
|
import { ThemeType } from '../theme';
|
|
16
19
|
import { AssetManager } from '../helpers/AssetManager';
|
|
17
20
|
import { View } from './View';
|
|
18
21
|
import { IconButton } from './IconButton';
|
|
19
22
|
import { ContentLoaderList } from './ContentLoaderList';
|
|
20
|
-
import { StyleSheet } from 'react-native';
|
|
21
23
|
import { Card } from './Card';
|
|
22
24
|
|
|
23
25
|
type RestyleProps = SpacingProps<ThemeType> &
|
|
@@ -30,6 +32,7 @@ type RestyleProps = SpacingProps<ThemeType> &
|
|
|
30
32
|
|
|
31
33
|
type TFirebaseMedia = {
|
|
32
34
|
uri: string;
|
|
35
|
+
placeholderIcon?: string;
|
|
33
36
|
onPress?: () => void;
|
|
34
37
|
};
|
|
35
38
|
|
|
@@ -44,6 +47,7 @@ export const FirebaseMedia = React.memo(
|
|
|
44
47
|
borderRadius = '10',
|
|
45
48
|
borderWidth = 1,
|
|
46
49
|
borderColor = 'onBackground',
|
|
50
|
+
placeholderIcon,
|
|
47
51
|
onPress,
|
|
48
52
|
...rest
|
|
49
53
|
}: Props) => {
|
|
@@ -136,7 +140,11 @@ export const FirebaseMedia = React.memo(
|
|
|
136
140
|
<IconButton icon="image-broken-variant" />
|
|
137
141
|
) : (
|
|
138
142
|
<View style={styles.placeholder} height="100%" width="100%">
|
|
139
|
-
|
|
143
|
+
{placeholderIcon ? (
|
|
144
|
+
<Icon source={placeholderIcon} size={24} />
|
|
145
|
+
) : (
|
|
146
|
+
<PlaceHolderImage height="100%" width="100%" />
|
|
147
|
+
)}
|
|
140
148
|
</View>
|
|
141
149
|
))}
|
|
142
150
|
</View>
|
|
@@ -153,5 +161,7 @@ const styles = StyleSheet.create({
|
|
|
153
161
|
},
|
|
154
162
|
placeholder: {
|
|
155
163
|
backgroundColor: '#DBDCDF',
|
|
164
|
+
alignItems: 'center',
|
|
165
|
+
justifyContent: 'center',
|
|
156
166
|
},
|
|
157
167
|
});
|
|
@@ -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
|
+
};
|