@kiosinc/commons-rn 0.1.88 → 0.1.90
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/Header.js +7 -2
- package/lib/commonjs/components/Header.js.map +1 -1
- package/lib/commonjs/helpers/index.js +7 -0
- package/lib/commonjs/helpers/index.js.map +1 -1
- package/lib/commonjs/helpers/notifications/NotificationHandler.js +97 -0
- package/lib/commonjs/helpers/notifications/NotificationHandler.js.map +1 -0
- package/lib/commonjs/hooks/index.js +7 -0
- package/lib/commonjs/hooks/index.js.map +1 -1
- package/lib/commonjs/hooks/useSaveDevice.js +76 -0
- package/lib/commonjs/hooks/useSaveDevice.js.map +1 -0
- package/lib/commonjs/types/react-native-config.d.js +2 -0
- package/lib/commonjs/types/react-native-config.d.js.map +1 -0
- package/lib/module/components/Header.js +7 -2
- package/lib/module/components/Header.js.map +1 -1
- package/lib/module/helpers/index.js +1 -0
- package/lib/module/helpers/index.js.map +1 -1
- package/lib/module/helpers/notifications/NotificationHandler.js +89 -0
- package/lib/module/helpers/notifications/NotificationHandler.js.map +1 -0
- package/lib/module/hooks/index.js +1 -0
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/hooks/useSaveDevice.js +68 -0
- package/lib/module/hooks/useSaveDevice.js.map +1 -0
- package/lib/module/types/react-native-config.d.js +2 -0
- package/lib/module/types/react-native-config.d.js.map +1 -0
- package/lib/typescript/src/components/Header.d.ts +2 -0
- package/lib/typescript/src/components/Header.d.ts.map +1 -1
- package/lib/typescript/src/helpers/index.d.ts +1 -0
- package/lib/typescript/src/helpers/index.d.ts.map +1 -1
- package/lib/typescript/src/helpers/notifications/NotificationHandler.d.ts +13 -0
- package/lib/typescript/src/helpers/notifications/NotificationHandler.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +1 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useSaveDevice.d.ts +7 -0
- package/lib/typescript/src/hooks/useSaveDevice.d.ts.map +1 -0
- package/package.json +2 -1
- package/src/components/Header.tsx +11 -2
- package/src/helpers/index.ts +1 -0
- package/src/helpers/notifications/NotificationHandler.ts +114 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useSaveDevice.ts +80 -0
- package/src/types/react-native-config.d.ts +21 -0
|
@@ -14,6 +14,8 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
14
14
|
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); }
|
|
15
15
|
const restyleFunctions = (0, _restyle.composeRestyleFunctions)([_restyle.spacing, _restyle.spacingShorthand, _restyle.layout, _restyle.position, _restyle.border, _restyle.backgroundColor, _restyle.backgroundColorShorthand]);
|
|
16
16
|
const Header = ({
|
|
17
|
+
isBackButtonVisible = true,
|
|
18
|
+
isCloseButtonVisible,
|
|
17
19
|
title,
|
|
18
20
|
menuOptions,
|
|
19
21
|
textAlign = 'center',
|
|
@@ -30,7 +32,7 @@ const Header = ({
|
|
|
30
32
|
height: 60,
|
|
31
33
|
flexDirection: "row",
|
|
32
34
|
alignItems: "center"
|
|
33
|
-
}, props), navigation.canGoBack() ? /*#__PURE__*/React.createElement(_components.IconButton, {
|
|
35
|
+
}, props), navigation.canGoBack() && isBackButtonVisible ? /*#__PURE__*/React.createElement(_components.IconButton, {
|
|
34
36
|
icon: "arrow-left",
|
|
35
37
|
onPress: navigation.goBack
|
|
36
38
|
}) : /*#__PURE__*/React.createElement(_components.View, {
|
|
@@ -65,8 +67,11 @@ const Header = ({
|
|
|
65
67
|
}, menuOption, {
|
|
66
68
|
onPress: onPress
|
|
67
69
|
}));
|
|
68
|
-
})), customRightOptions, !menuOptions && !customRightOptions && /*#__PURE__*/React.createElement(_components.View, {
|
|
70
|
+
})), customRightOptions, !menuOptions && !customRightOptions && !isCloseButtonVisible && /*#__PURE__*/React.createElement(_components.View, {
|
|
69
71
|
width: 40
|
|
72
|
+
}), navigation.canGoBack() && isCloseButtonVisible && /*#__PURE__*/React.createElement(_components.IconButton, {
|
|
73
|
+
icon: "close",
|
|
74
|
+
onPress: navigation.goBack
|
|
70
75
|
}));
|
|
71
76
|
};
|
|
72
77
|
exports.Header = Header;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","_interopRequireWildcard","require","_components","_reactNativePaper","_native","_restyle","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","restyleFunctions","composeRestyleFunctions","spacing","spacingShorthand","layout","position","border","backgroundColor","backgroundColorShorthand","Header","title","menuOptions","textAlign","customRightOptions","rest","props","useRestyle","navigation","useNavigation","visible","setVisible","useState","theme","useTheme","openMenu","closeMenu","createElement","View","height","flexDirection","alignItems","canGoBack","IconButton","icon","onPress","goBack","width","Text","flex","variant","Menu","style","colors","background","contentStyle","onDismiss","anchor","Appbar","Action","map","menuOption","index","Item","String","exports"],"sourceRoot":"../../../src","sources":["components/Header.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AAGA,IAAAG,OAAA,GAAAH,OAAA;AAEA,IAAAI,QAAA,GAAAJ,OAAA;AAiB0B,SAAAK,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAP,wBAAAO,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAY,SAAA,IAAAA,QAAA,GAAAT,MAAA,CAAAU,MAAA,GAAAV,MAAA,CAAAU,MAAA,CAAAC,IAAA,eAAAC,MAAA,aAAAL,CAAA,MAAAA,CAAA,GAAAM,SAAA,CAAAC,MAAA,EAAAP,CAAA,UAAAQ,MAAA,GAAAF,SAAA,CAAAN,CAAA,YAAAS,GAAA,IAAAD,MAAA,QAAAf,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAS,MAAA,EAAAC,GAAA,KAAAJ,MAAA,CAAAI,GAAA,IAAAD,MAAA,CAAAC,GAAA,gBAAAJ,MAAA,YAAAH,QAAA,CAAAQ,KAAA,OAAAJ,SAAA;AAW1B,MAAMK,gBAAgB,GAAG,IAAAC,gCAAuB,EAA0B,CACxEC,gBAAO,EACPC,yBAAgB,EAChBC,eAAM,EACNC,iBAAQ,EACRC,eAAM,EACNC,wBAAe,EACfC,iCAAwB,CACzB,CAAC;
|
|
1
|
+
{"version":3,"names":["React","_interopRequireWildcard","require","_components","_reactNativePaper","_native","_restyle","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","restyleFunctions","composeRestyleFunctions","spacing","spacingShorthand","layout","position","border","backgroundColor","backgroundColorShorthand","Header","isBackButtonVisible","isCloseButtonVisible","title","menuOptions","textAlign","customRightOptions","rest","props","useRestyle","navigation","useNavigation","visible","setVisible","useState","theme","useTheme","openMenu","closeMenu","createElement","View","height","flexDirection","alignItems","canGoBack","IconButton","icon","onPress","goBack","width","Text","flex","variant","Menu","style","colors","background","contentStyle","onDismiss","anchor","Appbar","Action","map","menuOption","index","Item","String","exports"],"sourceRoot":"../../../src","sources":["components/Header.tsx"],"mappings":"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"}
|
|
@@ -9,5 +9,12 @@ Object.defineProperty(exports, "AssetManager", {
|
|
|
9
9
|
return _AssetManager.AssetManager;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "NotificationHandler", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _NotificationHandler.NotificationHandler;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
var _AssetManager = require("./AssetManager");
|
|
19
|
+
var _NotificationHandler = require("./notifications/NotificationHandler");
|
|
13
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_AssetManager","require"],"sourceRoot":"../../../src","sources":["helpers/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_AssetManager","require","_NotificationHandler"],"sourceRoot":"../../../src","sources":["helpers/index.ts"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,oBAAA,GAAAD,OAAA"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.NotificationHandler = void 0;
|
|
7
|
+
var _messaging = _interopRequireDefault(require("@react-native-firebase/messaging"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
class NotificationHandler {
|
|
10
|
+
// Request Permission for Notifications (iOS only)
|
|
11
|
+
static async requestPermission() {
|
|
12
|
+
try {
|
|
13
|
+
const authStatus = await (0, _messaging.default)().requestPermission();
|
|
14
|
+
const enabled = authStatus === _messaging.default.AuthorizationStatus.AUTHORIZED || authStatus === _messaging.default.AuthorizationStatus.PROVISIONAL;
|
|
15
|
+
if (enabled) {
|
|
16
|
+
console.log('Authorization status:', authStatus);
|
|
17
|
+
}
|
|
18
|
+
} catch (error) {
|
|
19
|
+
console.error('Permission request failed:', error);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Get FCM Token
|
|
24
|
+
static async getToken() {
|
|
25
|
+
try {
|
|
26
|
+
const token = await (0, _messaging.default)().getToken();
|
|
27
|
+
console.log('FCM Token:', token);
|
|
28
|
+
return token;
|
|
29
|
+
} catch (error) {
|
|
30
|
+
console.error('Failed to get FCM token', error);
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Refresh FCM Token
|
|
36
|
+
static async refreshToken(onTokenRefreshed) {
|
|
37
|
+
(0, _messaging.default)().onTokenRefresh(async fcmToken => {
|
|
38
|
+
console.log('New FCM Token:', fcmToken);
|
|
39
|
+
// Execute the callback with the new token
|
|
40
|
+
onTokenRefreshed(fcmToken);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Handle Foreground Notifications
|
|
45
|
+
static onNotificationReceived(callback) {
|
|
46
|
+
(0, _messaging.default)().onMessage(async remoteMessage => {
|
|
47
|
+
console.log('Foreground notification:', remoteMessage);
|
|
48
|
+
callback(remoteMessage);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Handle Notification Clicks when App is in Background or Quit State
|
|
53
|
+
static onNotificationOpenedApp(callback) {
|
|
54
|
+
(0, _messaging.default)().onNotificationOpenedApp(remoteMessage => {
|
|
55
|
+
console.log('App opened from background state via notification:', remoteMessage);
|
|
56
|
+
callback(remoteMessage);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Handle Initial Notification when App is opened from Quit State
|
|
61
|
+
static async onNotificationInitialAppOpen(callback) {
|
|
62
|
+
const remoteMessage = await (0, _messaging.default)().getInitialNotification();
|
|
63
|
+
if (remoteMessage) {
|
|
64
|
+
console.log('App opened from quit state via notification:', remoteMessage);
|
|
65
|
+
callback(remoteMessage);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Background Message Handler
|
|
70
|
+
static handleBackgroundMessage() {
|
|
71
|
+
(0, _messaging.default)().setBackgroundMessageHandler(async remoteMessage => {
|
|
72
|
+
console.log('Message handled in the background!', remoteMessage);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Subscribe to a Topic
|
|
77
|
+
static async subscribeToTopic(topic) {
|
|
78
|
+
try {
|
|
79
|
+
await (0, _messaging.default)().subscribeToTopic(topic);
|
|
80
|
+
console.log(`Subscribed to topic: ${topic}`);
|
|
81
|
+
} catch (error) {
|
|
82
|
+
console.error(`Failed to subscribe to topic: ${topic}`, error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Unsubscribe from a Topic
|
|
87
|
+
static async unsubscribeFromTopic(topic) {
|
|
88
|
+
try {
|
|
89
|
+
await (0, _messaging.default)().unsubscribeFromTopic(topic);
|
|
90
|
+
console.log(`Unsubscribed from topic: ${topic}`);
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.error(`Failed to unsubscribe from topic: ${topic}`, error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.NotificationHandler = NotificationHandler;
|
|
97
|
+
//# sourceMappingURL=NotificationHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_messaging","_interopRequireDefault","require","obj","__esModule","default","NotificationHandler","requestPermission","authStatus","messaging","enabled","AuthorizationStatus","AUTHORIZED","PROVISIONAL","console","log","error","getToken","token","refreshToken","onTokenRefreshed","onTokenRefresh","fcmToken","onNotificationReceived","callback","onMessage","remoteMessage","onNotificationOpenedApp","onNotificationInitialAppOpen","getInitialNotification","handleBackgroundMessage","setBackgroundMessageHandler","subscribeToTopic","topic","unsubscribeFromTopic","exports"],"sourceRoot":"../../../../src","sources":["helpers/notifications/NotificationHandler.ts"],"mappings":"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"}
|
|
@@ -51,6 +51,12 @@ Object.defineProperty(exports, "useLogout", {
|
|
|
51
51
|
return _useLogout.useLogout;
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
|
+
Object.defineProperty(exports, "useSaveDeviceDetails", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _useSaveDevice.useSaveDeviceDetails;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
54
60
|
Object.defineProperty(exports, "useTermsOfService", {
|
|
55
61
|
enumerable: true,
|
|
56
62
|
get: function () {
|
|
@@ -66,4 +72,5 @@ var _useAppVersionCheck = require("./useAppVersionCheck");
|
|
|
66
72
|
var _useBusinesses = require("./useBusinesses");
|
|
67
73
|
var _useLogout = require("./useLogout");
|
|
68
74
|
var _useCreateBusiness = require("./useCreateBusiness");
|
|
75
|
+
var _useSaveDevice = require("./useSaveDevice");
|
|
69
76
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_useDeactivateAccount","require","_useTermsOfService","_useAuth","_useCustomer","_useCheckCustomer","_useAppVersionCheck","_useBusinesses","_useLogout","_useCreateBusiness"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_useDeactivateAccount","require","_useTermsOfService","_useAuth","_useCustomer","_useCheckCustomer","_useAppVersionCheck","_useBusinesses","_useLogout","_useCreateBusiness","_useSaveDevice"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,qBAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,mBAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAN,OAAA;AACA,IAAAO,UAAA,GAAAP,OAAA;AACA,IAAAQ,kBAAA,GAAAR,OAAA;AACA,IAAAS,cAAA,GAAAT,OAAA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSaveDeviceDetails = 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 _commonsRn = require("@kiosinc/commons-rn");
|
|
11
|
+
var _reactNativeDeviceInfo = _interopRequireDefault(require("react-native-device-info"));
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
const uniqueId = _reactNativeDeviceInfo.default.getUniqueId();
|
|
14
|
+
const DATA = {
|
|
15
|
+
deviceName: _reactNativeDeviceInfo.default.getDeviceId(),
|
|
16
|
+
build: _reactNativeDeviceInfo.default.getBuildNumber(),
|
|
17
|
+
fcmToken: '',
|
|
18
|
+
uid: '',
|
|
19
|
+
model: _reactNativeDeviceInfo.default.getModel(),
|
|
20
|
+
systemName: _reactNativeDeviceInfo.default.getSystemName(),
|
|
21
|
+
systemVersion: _reactNativeDeviceInfo.default.getSystemVersion(),
|
|
22
|
+
updatedAt: '',
|
|
23
|
+
createdAt: '',
|
|
24
|
+
version: _reactNativeDeviceInfo.default.getVersion()
|
|
25
|
+
};
|
|
26
|
+
const useSaveDeviceDetails = () => {
|
|
27
|
+
const {
|
|
28
|
+
user
|
|
29
|
+
} = (0, _commonsRn.useAuthentication)();
|
|
30
|
+
const mutation = (0, _reactQuery.useMutation)(async ({
|
|
31
|
+
token
|
|
32
|
+
}) => {
|
|
33
|
+
// List of allowed URL schemes
|
|
34
|
+
const allowedSchemes = ['gusteau', 'remy', 'gusteaudev', 'remydev'];
|
|
35
|
+
|
|
36
|
+
// Run only if URL_SCHEME is in the allowed list
|
|
37
|
+
if (!allowedSchemes.includes(_reactNativeConfig.default.URL_SCHEME)) {
|
|
38
|
+
console.log('URL_SCHEME is not valid for this function');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const devicesRef = (0, _firestore.default)().collection(`devices/registry/${_reactNativeConfig.default.URL_SCHEME}`);
|
|
42
|
+
const docRef = devicesRef.doc(await uniqueId);
|
|
43
|
+
const docSnapshot = await docRef.get();
|
|
44
|
+
|
|
45
|
+
// Check if UID or FCM token is empty or different before updating
|
|
46
|
+
const existingData = docSnapshot.exists ? docSnapshot.data() : null;
|
|
47
|
+
const shouldUpdate = !existingData?.uid || existingData.uid !== user?.uid || existingData.fcmToken !== token;
|
|
48
|
+
if (shouldUpdate) {
|
|
49
|
+
await docRef.set({
|
|
50
|
+
...DATA,
|
|
51
|
+
uid: user?.uid || '',
|
|
52
|
+
fcmToken: token,
|
|
53
|
+
createdAt: existingData?.createdAt ?? _firestore.default.FieldValue.serverTimestamp(),
|
|
54
|
+
updatedAt: _firestore.default.FieldValue.serverTimestamp()
|
|
55
|
+
}, {
|
|
56
|
+
merge: true
|
|
57
|
+
});
|
|
58
|
+
console.log('Device added or updated!');
|
|
59
|
+
} else {
|
|
60
|
+
console.log('Device update not needed, UID and FCM token match.');
|
|
61
|
+
}
|
|
62
|
+
}, {
|
|
63
|
+
onError: error => {
|
|
64
|
+
_commonsRn.Alert.show({
|
|
65
|
+
title: error.name,
|
|
66
|
+
description: error?.message
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
saveDevice: mutation.mutate,
|
|
72
|
+
isLoadingDevice: mutation.isLoading
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
exports.useSaveDeviceDetails = useSaveDeviceDetails;
|
|
76
|
+
//# sourceMappingURL=useSaveDevice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactQuery","require","_firestore","_interopRequireDefault","_reactNativeConfig","_commonsRn","_reactNativeDeviceInfo","obj","__esModule","default","uniqueId","DeviceInfo","getUniqueId","DATA","deviceName","getDeviceId","build","getBuildNumber","fcmToken","uid","model","getModel","systemName","getSystemName","systemVersion","getSystemVersion","updatedAt","createdAt","version","getVersion","useSaveDeviceDetails","user","useAuthentication","mutation","useMutation","token","allowedSchemes","includes","Config","URL_SCHEME","console","log","devicesRef","firestore","collection","docRef","doc","docSnapshot","get","existingData","exists","data","shouldUpdate","set","FieldValue","serverTimestamp","merge","onError","error","Alert","show","title","name","description","message","saveDevice","mutate","isLoadingDevice","isLoading","exports"],"sourceRoot":"../../../src","sources":["hooks/useSaveDevice.ts"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/react-native-config.d.ts"],"mappings":""}
|
|
@@ -8,6 +8,8 @@ import { useNavigation } from '@react-navigation/native';
|
|
|
8
8
|
import { useRestyle, spacing, border, backgroundColor, backgroundColorShorthand, composeRestyleFunctions, spacingShorthand, layout, position } from '@shopify/restyle';
|
|
9
9
|
const restyleFunctions = composeRestyleFunctions([spacing, spacingShorthand, layout, position, border, backgroundColor, backgroundColorShorthand]);
|
|
10
10
|
export const Header = ({
|
|
11
|
+
isBackButtonVisible = true,
|
|
12
|
+
isCloseButtonVisible,
|
|
11
13
|
title,
|
|
12
14
|
menuOptions,
|
|
13
15
|
textAlign = 'center',
|
|
@@ -24,7 +26,7 @@ export const Header = ({
|
|
|
24
26
|
height: 60,
|
|
25
27
|
flexDirection: "row",
|
|
26
28
|
alignItems: "center"
|
|
27
|
-
}, props), navigation.canGoBack() ? /*#__PURE__*/React.createElement(IconButton, {
|
|
29
|
+
}, props), navigation.canGoBack() && isBackButtonVisible ? /*#__PURE__*/React.createElement(IconButton, {
|
|
28
30
|
icon: "arrow-left",
|
|
29
31
|
onPress: navigation.goBack
|
|
30
32
|
}) : /*#__PURE__*/React.createElement(View, {
|
|
@@ -59,8 +61,11 @@ export const Header = ({
|
|
|
59
61
|
}, menuOption, {
|
|
60
62
|
onPress: onPress
|
|
61
63
|
}));
|
|
62
|
-
})), customRightOptions, !menuOptions && !customRightOptions && /*#__PURE__*/React.createElement(View, {
|
|
64
|
+
})), customRightOptions, !menuOptions && !customRightOptions && !isCloseButtonVisible && /*#__PURE__*/React.createElement(View, {
|
|
63
65
|
width: 40
|
|
66
|
+
}), navigation.canGoBack() && isCloseButtonVisible && /*#__PURE__*/React.createElement(IconButton, {
|
|
67
|
+
icon: "close",
|
|
68
|
+
onPress: navigation.goBack
|
|
64
69
|
}));
|
|
65
70
|
};
|
|
66
71
|
//# sourceMappingURL=Header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Text","Appbar","Menu","useTheme","IconButton","View","useNavigation","useRestyle","spacing","border","backgroundColor","backgroundColorShorthand","composeRestyleFunctions","spacingShorthand","layout","position","restyleFunctions","Header","title","menuOptions","textAlign","customRightOptions","rest","props","navigation","visible","setVisible","useState","theme","openMenu","closeMenu","createElement","_extends","height","flexDirection","alignItems","canGoBack","icon","onPress","goBack","width","flex","variant","style","colors","background","contentStyle","onDismiss","anchor","Action","map","menuOption","index","e","Item","key","String"],"sourceRoot":"../../../src","sources":["components/Header.tsx"],"mappings":";AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,IAAI,QAAQ,eAAe;AACpC,SAASC,MAAM,EAAEC,IAAI,EAAEC,QAAQ,QAAQ,oBAAoB;AAC3D,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,IAAI,QAAQ,eAAe;AACpC,SAASC,aAAa,QAAQ,0BAA0B;AAExD,SACEC,UAAU,EACVC,OAAO,EACPC,MAAM,EACNC,eAAe,EACfC,wBAAwB,EAIxBC,uBAAuB,EAIvBC,gBAAgB,EAChBC,MAAM,EACNC,QAAQ,QAEH,kBAAkB;AAWzB,MAAMC,gBAAgB,GAAGJ,uBAAuB,CAA0B,CACxEJ,OAAO,EACPK,gBAAgB,EAChBC,MAAM,EACNC,QAAQ,EACRN,MAAM,EACNC,eAAe,EACfC,wBAAwB,CACzB,CAAC;
|
|
1
|
+
{"version":3,"names":["React","Text","Appbar","Menu","useTheme","IconButton","View","useNavigation","useRestyle","spacing","border","backgroundColor","backgroundColorShorthand","composeRestyleFunctions","spacingShorthand","layout","position","restyleFunctions","Header","isBackButtonVisible","isCloseButtonVisible","title","menuOptions","textAlign","customRightOptions","rest","props","navigation","visible","setVisible","useState","theme","openMenu","closeMenu","createElement","_extends","height","flexDirection","alignItems","canGoBack","icon","onPress","goBack","width","flex","variant","style","colors","background","contentStyle","onDismiss","anchor","Action","map","menuOption","index","e","Item","key","String"],"sourceRoot":"../../../src","sources":["components/Header.tsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AssetManager"],"sourceRoot":"../../../src","sources":["helpers/index.ts"],"mappings":"AAAA,SAASA,YAAY,QAAQ,gBAAgB"}
|
|
1
|
+
{"version":3,"names":["AssetManager","NotificationHandler"],"sourceRoot":"../../../src","sources":["helpers/index.ts"],"mappings":"AAAA,SAASA,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,mBAAmB,QAAQ,qCAAqC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import messaging from '@react-native-firebase/messaging';
|
|
2
|
+
export class NotificationHandler {
|
|
3
|
+
// Request Permission for Notifications (iOS only)
|
|
4
|
+
static async requestPermission() {
|
|
5
|
+
try {
|
|
6
|
+
const authStatus = await messaging().requestPermission();
|
|
7
|
+
const enabled = authStatus === messaging.AuthorizationStatus.AUTHORIZED || authStatus === messaging.AuthorizationStatus.PROVISIONAL;
|
|
8
|
+
if (enabled) {
|
|
9
|
+
console.log('Authorization status:', authStatus);
|
|
10
|
+
}
|
|
11
|
+
} catch (error) {
|
|
12
|
+
console.error('Permission request failed:', error);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Get FCM Token
|
|
17
|
+
static async getToken() {
|
|
18
|
+
try {
|
|
19
|
+
const token = await messaging().getToken();
|
|
20
|
+
console.log('FCM Token:', token);
|
|
21
|
+
return token;
|
|
22
|
+
} catch (error) {
|
|
23
|
+
console.error('Failed to get FCM token', error);
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Refresh FCM Token
|
|
29
|
+
static async refreshToken(onTokenRefreshed) {
|
|
30
|
+
messaging().onTokenRefresh(async fcmToken => {
|
|
31
|
+
console.log('New FCM Token:', fcmToken);
|
|
32
|
+
// Execute the callback with the new token
|
|
33
|
+
onTokenRefreshed(fcmToken);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Handle Foreground Notifications
|
|
38
|
+
static onNotificationReceived(callback) {
|
|
39
|
+
messaging().onMessage(async remoteMessage => {
|
|
40
|
+
console.log('Foreground notification:', remoteMessage);
|
|
41
|
+
callback(remoteMessage);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Handle Notification Clicks when App is in Background or Quit State
|
|
46
|
+
static onNotificationOpenedApp(callback) {
|
|
47
|
+
messaging().onNotificationOpenedApp(remoteMessage => {
|
|
48
|
+
console.log('App opened from background state via notification:', remoteMessage);
|
|
49
|
+
callback(remoteMessage);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Handle Initial Notification when App is opened from Quit State
|
|
54
|
+
static async onNotificationInitialAppOpen(callback) {
|
|
55
|
+
const remoteMessage = await messaging().getInitialNotification();
|
|
56
|
+
if (remoteMessage) {
|
|
57
|
+
console.log('App opened from quit state via notification:', remoteMessage);
|
|
58
|
+
callback(remoteMessage);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Background Message Handler
|
|
63
|
+
static handleBackgroundMessage() {
|
|
64
|
+
messaging().setBackgroundMessageHandler(async remoteMessage => {
|
|
65
|
+
console.log('Message handled in the background!', remoteMessage);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Subscribe to a Topic
|
|
70
|
+
static async subscribeToTopic(topic) {
|
|
71
|
+
try {
|
|
72
|
+
await messaging().subscribeToTopic(topic);
|
|
73
|
+
console.log(`Subscribed to topic: ${topic}`);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
console.error(`Failed to subscribe to topic: ${topic}`, error);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Unsubscribe from a Topic
|
|
80
|
+
static async unsubscribeFromTopic(topic) {
|
|
81
|
+
try {
|
|
82
|
+
await messaging().unsubscribeFromTopic(topic);
|
|
83
|
+
console.log(`Unsubscribed from topic: ${topic}`);
|
|
84
|
+
} catch (error) {
|
|
85
|
+
console.error(`Failed to unsubscribe from topic: ${topic}`, error);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=NotificationHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["messaging","NotificationHandler","requestPermission","authStatus","enabled","AuthorizationStatus","AUTHORIZED","PROVISIONAL","console","log","error","getToken","token","refreshToken","onTokenRefreshed","onTokenRefresh","fcmToken","onNotificationReceived","callback","onMessage","remoteMessage","onNotificationOpenedApp","onNotificationInitialAppOpen","getInitialNotification","handleBackgroundMessage","setBackgroundMessageHandler","subscribeToTopic","topic","unsubscribeFromTopic"],"sourceRoot":"../../../../src","sources":["helpers/notifications/NotificationHandler.ts"],"mappings":"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"}
|
|
@@ -7,4 +7,5 @@ export { useAppVersionCheck } from './useAppVersionCheck';
|
|
|
7
7
|
export { useBusinesses } from './useBusinesses';
|
|
8
8
|
export { useLogout } from './useLogout';
|
|
9
9
|
export { useCreateBusiness } from './useCreateBusiness';
|
|
10
|
+
export { useSaveDeviceDetails } from './useSaveDevice';
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useDeactivateAccount","useTermsOfService","useAuth","useCustomerQueries","useCheckCustomer","useAppVersionCheck","useBusinesses","useLogout","useCreateBusiness"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,wBAAwB;AAC7D,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,kBAAkB,QAAQ,eAAe;AAClD,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,iBAAiB,QAAQ,qBAAqB"}
|
|
1
|
+
{"version":3,"names":["useDeactivateAccount","useTermsOfService","useAuth","useCustomerQueries","useCheckCustomer","useAppVersionCheck","useBusinesses","useLogout","useCreateBusiness","useSaveDeviceDetails"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,wBAAwB;AAC7D,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,kBAAkB,QAAQ,eAAe;AAClD,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,oBAAoB,QAAQ,iBAAiB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { useMutation } from '@tanstack/react-query';
|
|
2
|
+
import firestore from '@react-native-firebase/firestore';
|
|
3
|
+
import Config from 'react-native-config';
|
|
4
|
+
import { Alert, useAuthentication } from '@kiosinc/commons-rn';
|
|
5
|
+
import DeviceInfo from 'react-native-device-info';
|
|
6
|
+
const uniqueId = DeviceInfo.getUniqueId();
|
|
7
|
+
const DATA = {
|
|
8
|
+
deviceName: DeviceInfo.getDeviceId(),
|
|
9
|
+
build: DeviceInfo.getBuildNumber(),
|
|
10
|
+
fcmToken: '',
|
|
11
|
+
uid: '',
|
|
12
|
+
model: DeviceInfo.getModel(),
|
|
13
|
+
systemName: DeviceInfo.getSystemName(),
|
|
14
|
+
systemVersion: DeviceInfo.getSystemVersion(),
|
|
15
|
+
updatedAt: '',
|
|
16
|
+
createdAt: '',
|
|
17
|
+
version: DeviceInfo.getVersion()
|
|
18
|
+
};
|
|
19
|
+
export const useSaveDeviceDetails = () => {
|
|
20
|
+
const {
|
|
21
|
+
user
|
|
22
|
+
} = useAuthentication();
|
|
23
|
+
const mutation = useMutation(async ({
|
|
24
|
+
token
|
|
25
|
+
}) => {
|
|
26
|
+
// List of allowed URL schemes
|
|
27
|
+
const allowedSchemes = ['gusteau', 'remy', 'gusteaudev', 'remydev'];
|
|
28
|
+
|
|
29
|
+
// Run only if URL_SCHEME is in the allowed list
|
|
30
|
+
if (!allowedSchemes.includes(Config.URL_SCHEME)) {
|
|
31
|
+
console.log('URL_SCHEME is not valid for this function');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const devicesRef = firestore().collection(`devices/registry/${Config.URL_SCHEME}`);
|
|
35
|
+
const docRef = devicesRef.doc(await uniqueId);
|
|
36
|
+
const docSnapshot = await docRef.get();
|
|
37
|
+
|
|
38
|
+
// Check if UID or FCM token is empty or different before updating
|
|
39
|
+
const existingData = docSnapshot.exists ? docSnapshot.data() : null;
|
|
40
|
+
const shouldUpdate = !existingData?.uid || existingData.uid !== user?.uid || existingData.fcmToken !== token;
|
|
41
|
+
if (shouldUpdate) {
|
|
42
|
+
await docRef.set({
|
|
43
|
+
...DATA,
|
|
44
|
+
uid: user?.uid || '',
|
|
45
|
+
fcmToken: token,
|
|
46
|
+
createdAt: existingData?.createdAt ?? firestore.FieldValue.serverTimestamp(),
|
|
47
|
+
updatedAt: firestore.FieldValue.serverTimestamp()
|
|
48
|
+
}, {
|
|
49
|
+
merge: true
|
|
50
|
+
});
|
|
51
|
+
console.log('Device added or updated!');
|
|
52
|
+
} else {
|
|
53
|
+
console.log('Device update not needed, UID and FCM token match.');
|
|
54
|
+
}
|
|
55
|
+
}, {
|
|
56
|
+
onError: error => {
|
|
57
|
+
Alert.show({
|
|
58
|
+
title: error.name,
|
|
59
|
+
description: error?.message
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
saveDevice: mutation.mutate,
|
|
65
|
+
isLoadingDevice: mutation.isLoading
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=useSaveDevice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMutation","firestore","Config","Alert","useAuthentication","DeviceInfo","uniqueId","getUniqueId","DATA","deviceName","getDeviceId","build","getBuildNumber","fcmToken","uid","model","getModel","systemName","getSystemName","systemVersion","getSystemVersion","updatedAt","createdAt","version","getVersion","useSaveDeviceDetails","user","mutation","token","allowedSchemes","includes","URL_SCHEME","console","log","devicesRef","collection","docRef","doc","docSnapshot","get","existingData","exists","data","shouldUpdate","set","FieldValue","serverTimestamp","merge","onError","error","show","title","name","description","message","saveDevice","mutate","isLoadingDevice","isLoading"],"sourceRoot":"../../../src","sources":["hooks/useSaveDevice.ts"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/react-native-config.d.ts"],"mappings":""}
|
|
@@ -5,6 +5,8 @@ import { type ThemeType } from '../theme';
|
|
|
5
5
|
import { MenuItemProps } from 'react-native-paper';
|
|
6
6
|
type RestyleProps = SpacingProps<ThemeType> & SpacingShorthandProps<ThemeType> & LayoutProps<ThemeType> & PositionProps<ThemeType> & BorderProps<ThemeType> & BackgroundColorProps<ThemeType> & BackgroundColorShorthandProps<ThemeType>;
|
|
7
7
|
type Props = RestyleProps & ViewProps & {
|
|
8
|
+
isBackButtonVisible?: boolean;
|
|
9
|
+
isCloseButtonVisible?: boolean;
|
|
8
10
|
textAlign?: 'center' | 'right' | 'left';
|
|
9
11
|
title?: string;
|
|
10
12
|
customRightOptions?: React.ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAML,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EAEzB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,aAAa,EAIlB,KAAK,6BAA6B,EACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,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;AAY3C,KAAK,KAAK,GAAG,YAAY,GACvB,SAAS,GAAG;IACV,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CACpC,CAAC;AAEJ,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAML,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EAEzB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,aAAa,EAIlB,KAAK,6BAA6B,EACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,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;AAY3C,KAAK,KAAK,GAAG,YAAY,GACvB,SAAS,GAAG;IACV,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CACpC,CAAC;AAEJ,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwElC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FirebaseMessagingTypes } from '@react-native-firebase/messaging';
|
|
2
|
+
export declare class NotificationHandler {
|
|
3
|
+
static requestPermission(): Promise<void>;
|
|
4
|
+
static getToken(): Promise<string | null>;
|
|
5
|
+
static refreshToken(onTokenRefreshed: (token: string) => void): Promise<void>;
|
|
6
|
+
static onNotificationReceived(callback: (message: FirebaseMessagingTypes.RemoteMessage) => void): void;
|
|
7
|
+
static onNotificationOpenedApp(callback: (message: FirebaseMessagingTypes.RemoteMessage | null) => void): void;
|
|
8
|
+
static onNotificationInitialAppOpen(callback: (message: FirebaseMessagingTypes.RemoteMessage | null) => void): Promise<void>;
|
|
9
|
+
static handleBackgroundMessage(): void;
|
|
10
|
+
static subscribeToTopic(topic: string): Promise<void>;
|
|
11
|
+
static unsubscribeFromTopic(topic: string): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=NotificationHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotificationHandler.d.ts","sourceRoot":"","sources":["../../../../../src/helpers/notifications/NotificationHandler.ts"],"names":[],"mappings":"AAAA,OAAkB,EAChB,sBAAsB,EACvB,MAAM,kCAAkC,CAAC;AAE1C,qBAAa,mBAAmB;WAEjB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;WAgBlC,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;WAYlC,YAAY,CACvB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GACxC,OAAO,CAAC,IAAI,CAAC;IAShB,MAAM,CAAC,sBAAsB,CAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,aAAa,KAAK,IAAI,GAChE,IAAI;IAUP,MAAM,CAAC,uBAAuB,CAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,aAAa,GAAG,IAAI,KAAK,IAAI,GACvE,IAAI;WAaM,4BAA4B,CACvC,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,aAAa,GAAG,IAAI,KAAK,IAAI,GACvE,OAAO,CAAC,IAAI,CAAC;IAYhB,MAAM,CAAC,uBAAuB,IAAI,IAAI;WASzB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAU9C,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQhE"}
|
|
@@ -7,4 +7,5 @@ export { useAppVersionCheck } from './useAppVersionCheck';
|
|
|
7
7
|
export { useBusinesses } from './useBusinesses';
|
|
8
8
|
export { useLogout } from './useLogout';
|
|
9
9
|
export { useCreateBusiness } from './useCreateBusiness';
|
|
10
|
+
export { useSaveDeviceDetails } from './useSaveDevice';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSaveDevice.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useSaveDevice.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,oBAAoB;;eAGF,MAAM;;;CAuDpC,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.90",
|
|
4
4
|
"description": "Common Code",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -190,6 +190,7 @@
|
|
|
190
190
|
"@hookform/resolvers": "^3.3.2",
|
|
191
191
|
"@kiosinc/commons-types": "^0.0.17",
|
|
192
192
|
"@react-native-firebase/firestore": "^20.3.0",
|
|
193
|
+
"@react-native-firebase/messaging": "^20.3.0",
|
|
193
194
|
"@react-native-firebase/storage": "^20.3.0",
|
|
194
195
|
"@react-navigation/material-top-tabs": "^6.6.13",
|
|
195
196
|
"@shopify/restyle": "^2.4.2",
|
|
@@ -45,6 +45,8 @@ const restyleFunctions = composeRestyleFunctions<ThemeType, RestyleProps>([
|
|
|
45
45
|
|
|
46
46
|
type Props = RestyleProps &
|
|
47
47
|
ViewProps & {
|
|
48
|
+
isBackButtonVisible?: boolean;
|
|
49
|
+
isCloseButtonVisible?: boolean;
|
|
48
50
|
textAlign?: 'center' | 'right' | 'left';
|
|
49
51
|
title?: string;
|
|
50
52
|
customRightOptions?: React.ReactNode;
|
|
@@ -52,6 +54,8 @@ type Props = RestyleProps &
|
|
|
52
54
|
};
|
|
53
55
|
|
|
54
56
|
export const Header: React.FC<Props> = ({
|
|
57
|
+
isBackButtonVisible = true,
|
|
58
|
+
isCloseButtonVisible,
|
|
55
59
|
title,
|
|
56
60
|
menuOptions,
|
|
57
61
|
textAlign = 'center',
|
|
@@ -74,7 +78,7 @@ export const Header: React.FC<Props> = ({
|
|
|
74
78
|
alignItems="center"
|
|
75
79
|
{...(props as ViewProps)}
|
|
76
80
|
>
|
|
77
|
-
{navigation.canGoBack() ? (
|
|
81
|
+
{navigation.canGoBack() && isBackButtonVisible ? (
|
|
78
82
|
<IconButton icon="arrow-left" onPress={navigation.goBack} />
|
|
79
83
|
) : (
|
|
80
84
|
<View width={40} />
|
|
@@ -113,7 +117,12 @@ export const Header: React.FC<Props> = ({
|
|
|
113
117
|
</Menu>
|
|
114
118
|
)}
|
|
115
119
|
{customRightOptions}
|
|
116
|
-
{!menuOptions && !customRightOptions &&
|
|
120
|
+
{!menuOptions && !customRightOptions && !isCloseButtonVisible && (
|
|
121
|
+
<View width={40} />
|
|
122
|
+
)}
|
|
123
|
+
{navigation.canGoBack() && isCloseButtonVisible && (
|
|
124
|
+
<IconButton icon="close" onPress={navigation.goBack} />
|
|
125
|
+
)}
|
|
117
126
|
</View>
|
|
118
127
|
);
|
|
119
128
|
};
|
package/src/helpers/index.ts
CHANGED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import messaging, {
|
|
2
|
+
FirebaseMessagingTypes,
|
|
3
|
+
} from '@react-native-firebase/messaging';
|
|
4
|
+
|
|
5
|
+
export class NotificationHandler {
|
|
6
|
+
// Request Permission for Notifications (iOS only)
|
|
7
|
+
static async requestPermission(): Promise<void> {
|
|
8
|
+
try {
|
|
9
|
+
const authStatus = await messaging().requestPermission();
|
|
10
|
+
const enabled =
|
|
11
|
+
authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
|
|
12
|
+
authStatus === messaging.AuthorizationStatus.PROVISIONAL;
|
|
13
|
+
|
|
14
|
+
if (enabled) {
|
|
15
|
+
console.log('Authorization status:', authStatus);
|
|
16
|
+
}
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.error('Permission request failed:', error);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Get FCM Token
|
|
23
|
+
static async getToken(): Promise<string | null> {
|
|
24
|
+
try {
|
|
25
|
+
const token = await messaging().getToken();
|
|
26
|
+
console.log('FCM Token:', token);
|
|
27
|
+
return token;
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.error('Failed to get FCM token', error);
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Refresh FCM Token
|
|
35
|
+
static async refreshToken(
|
|
36
|
+
onTokenRefreshed: (token: string) => void
|
|
37
|
+
): Promise<void> {
|
|
38
|
+
messaging().onTokenRefresh(async (fcmToken: string) => {
|
|
39
|
+
console.log('New FCM Token:', fcmToken);
|
|
40
|
+
// Execute the callback with the new token
|
|
41
|
+
onTokenRefreshed(fcmToken);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Handle Foreground Notifications
|
|
46
|
+
static onNotificationReceived(
|
|
47
|
+
callback: (message: FirebaseMessagingTypes.RemoteMessage) => void
|
|
48
|
+
): void {
|
|
49
|
+
messaging().onMessage(
|
|
50
|
+
async (remoteMessage: FirebaseMessagingTypes.RemoteMessage) => {
|
|
51
|
+
console.log('Foreground notification:', remoteMessage);
|
|
52
|
+
callback(remoteMessage);
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Handle Notification Clicks when App is in Background or Quit State
|
|
58
|
+
static onNotificationOpenedApp(
|
|
59
|
+
callback: (message: FirebaseMessagingTypes.RemoteMessage | null) => void
|
|
60
|
+
): void {
|
|
61
|
+
messaging().onNotificationOpenedApp(
|
|
62
|
+
(remoteMessage: FirebaseMessagingTypes.RemoteMessage) => {
|
|
63
|
+
console.log(
|
|
64
|
+
'App opened from background state via notification:',
|
|
65
|
+
remoteMessage
|
|
66
|
+
);
|
|
67
|
+
callback(remoteMessage);
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Handle Initial Notification when App is opened from Quit State
|
|
73
|
+
static async onNotificationInitialAppOpen(
|
|
74
|
+
callback: (message: FirebaseMessagingTypes.RemoteMessage | null) => void
|
|
75
|
+
): Promise<void> {
|
|
76
|
+
const remoteMessage = await messaging().getInitialNotification();
|
|
77
|
+
if (remoteMessage) {
|
|
78
|
+
console.log(
|
|
79
|
+
'App opened from quit state via notification:',
|
|
80
|
+
remoteMessage
|
|
81
|
+
);
|
|
82
|
+
callback(remoteMessage);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Background Message Handler
|
|
87
|
+
static handleBackgroundMessage(): void {
|
|
88
|
+
messaging().setBackgroundMessageHandler(
|
|
89
|
+
async (remoteMessage: FirebaseMessagingTypes.RemoteMessage) => {
|
|
90
|
+
console.log('Message handled in the background!', remoteMessage);
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Subscribe to a Topic
|
|
96
|
+
static async subscribeToTopic(topic: string): Promise<void> {
|
|
97
|
+
try {
|
|
98
|
+
await messaging().subscribeToTopic(topic);
|
|
99
|
+
console.log(`Subscribed to topic: ${topic}`);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
console.error(`Failed to subscribe to topic: ${topic}`, error);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Unsubscribe from a Topic
|
|
106
|
+
static async unsubscribeFromTopic(topic: string): Promise<void> {
|
|
107
|
+
try {
|
|
108
|
+
await messaging().unsubscribeFromTopic(topic);
|
|
109
|
+
console.log(`Unsubscribed from topic: ${topic}`);
|
|
110
|
+
} catch (error) {
|
|
111
|
+
console.error(`Failed to unsubscribe from topic: ${topic}`, error);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
package/src/hooks/index.ts
CHANGED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { useMutation } from '@tanstack/react-query';
|
|
2
|
+
import firestore from '@react-native-firebase/firestore';
|
|
3
|
+
import Config from 'react-native-config';
|
|
4
|
+
import { Alert, useAuthentication } from '@kiosinc/commons-rn';
|
|
5
|
+
import DeviceInfo from 'react-native-device-info';
|
|
6
|
+
|
|
7
|
+
const uniqueId = DeviceInfo.getUniqueId();
|
|
8
|
+
|
|
9
|
+
const DATA = {
|
|
10
|
+
deviceName: DeviceInfo.getDeviceId(),
|
|
11
|
+
build: DeviceInfo.getBuildNumber(),
|
|
12
|
+
fcmToken: '',
|
|
13
|
+
uid: '',
|
|
14
|
+
model: DeviceInfo.getModel(),
|
|
15
|
+
systemName: DeviceInfo.getSystemName(),
|
|
16
|
+
systemVersion: DeviceInfo.getSystemVersion(),
|
|
17
|
+
updatedAt: '',
|
|
18
|
+
createdAt: '',
|
|
19
|
+
version: DeviceInfo.getVersion(),
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const useSaveDeviceDetails = () => {
|
|
23
|
+
const { user } = useAuthentication();
|
|
24
|
+
const mutation = useMutation(
|
|
25
|
+
async ({ token }: { token: string }) => {
|
|
26
|
+
// List of allowed URL schemes
|
|
27
|
+
const allowedSchemes = ['gusteau', 'remy', 'gusteaudev', 'remydev'];
|
|
28
|
+
|
|
29
|
+
// Run only if URL_SCHEME is in the allowed list
|
|
30
|
+
if (!allowedSchemes.includes(Config.URL_SCHEME)) {
|
|
31
|
+
console.log('URL_SCHEME is not valid for this function');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const devicesRef = firestore().collection(
|
|
36
|
+
`devices/registry/${Config.URL_SCHEME}`
|
|
37
|
+
);
|
|
38
|
+
const docRef = devicesRef.doc(await uniqueId);
|
|
39
|
+
const docSnapshot = await docRef.get();
|
|
40
|
+
|
|
41
|
+
// Check if UID or FCM token is empty or different before updating
|
|
42
|
+
const existingData = docSnapshot.exists ? docSnapshot.data() : null;
|
|
43
|
+
|
|
44
|
+
const shouldUpdate =
|
|
45
|
+
!existingData?.uid ||
|
|
46
|
+
existingData.uid !== user?.uid ||
|
|
47
|
+
existingData.fcmToken !== token;
|
|
48
|
+
|
|
49
|
+
if (shouldUpdate) {
|
|
50
|
+
await docRef.set(
|
|
51
|
+
{
|
|
52
|
+
...DATA,
|
|
53
|
+
uid: user?.uid || '',
|
|
54
|
+
fcmToken: token,
|
|
55
|
+
createdAt:
|
|
56
|
+
existingData?.createdAt ?? firestore.FieldValue.serverTimestamp(),
|
|
57
|
+
updatedAt: firestore.FieldValue.serverTimestamp(),
|
|
58
|
+
},
|
|
59
|
+
{ merge: true }
|
|
60
|
+
);
|
|
61
|
+
console.log('Device added or updated!');
|
|
62
|
+
} else {
|
|
63
|
+
console.log('Device update not needed, UID and FCM token match.');
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
onError: (error: Error) => {
|
|
68
|
+
Alert.show({
|
|
69
|
+
title: error.name,
|
|
70
|
+
description: error?.message,
|
|
71
|
+
});
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
return {
|
|
77
|
+
saveDevice: mutation.mutate,
|
|
78
|
+
isLoadingDevice: mutation.isLoading,
|
|
79
|
+
};
|
|
80
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare module 'react-native-config' {
|
|
2
|
+
export interface NativeConfig {
|
|
3
|
+
ENV: 'local' | 'dev' | 'production';
|
|
4
|
+
AMPLITUDE_API_KEY?: string;
|
|
5
|
+
GOOGLE_PLACES_API_KEY?: string;
|
|
6
|
+
SQUARE_APPLICATION_ID?: string;
|
|
7
|
+
CHILDS_SERVER_ENV: string;
|
|
8
|
+
SQUARE_BASE_URL: string;
|
|
9
|
+
BASE_URL: string;
|
|
10
|
+
SQUARE_BASE_URL: string;
|
|
11
|
+
MIXPANEL_TOKEN: string;
|
|
12
|
+
APP_NAME: string;
|
|
13
|
+
URL_SCHEME: string;
|
|
14
|
+
BUNDLE_IDENTIFIER: string;
|
|
15
|
+
PLAY_STORE_URL?: string;
|
|
16
|
+
APP_STORE_URL?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const Config: NativeConfig;
|
|
20
|
+
export default Config;
|
|
21
|
+
}
|