@trycourier/courier-react-native 5.4.3 → 5.5.1
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/android/build.gradle +2 -2
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/courierreactnative/CourierClientModule.kt +298 -303
- package/android/src/main/java/com/courierreactnative/CourierSharedModule.kt +194 -165
- package/android/src/main/java/com/courierreactnative/Utils.kt +1 -1
- package/courier-react-native.podspec +1 -1
- package/ios/CourierReactNativeDelegate.m +12 -8
- package/ios/CourierReactNativeEventEmitter.swift +1 -1
- package/ios/CourierReactNativeModule.m +3 -5
- package/ios/CourierSharedModule.swift +88 -112
- package/lib/commonjs/index.js +75 -93
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/CourierInboxListener.js +1 -0
- package/lib/commonjs/models/CourierInboxListener.js.map +1 -1
- package/lib/commonjs/models/InboxAction.js +22 -0
- package/lib/commonjs/models/InboxAction.js.map +1 -1
- package/lib/commonjs/models/InboxMessage.js +64 -0
- package/lib/commonjs/models/InboxMessage.js.map +1 -1
- package/lib/commonjs/models/InboxMessageEvent.js +2 -0
- package/lib/commonjs/models/InboxMessageEvent.js.map +1 -0
- package/lib/commonjs/views/CourierInboxView.js +6 -4
- package/lib/commonjs/views/CourierInboxView.js.map +1 -1
- package/lib/example/src/App.js +11 -0
- package/lib/example/src/Emitter.js +11 -0
- package/lib/example/src/Env.js +6 -0
- package/lib/example/src/Home.js +67 -0
- package/lib/example/src/Poke.js +75 -0
- package/lib/example/src/Tabs.js +36 -0
- package/lib/example/src/Utils.js +71 -0
- package/lib/example/src/pages/Auth.js +224 -0
- package/lib/example/src/pages/Inbox.js +38 -0
- package/lib/example/src/pages/Preferences.js +13 -0
- package/lib/example/src/pages/PreferencesStack.js +11 -0
- package/lib/example/src/pages/Push.js +93 -0
- package/lib/example/src/pages/Styles.js +26 -0
- package/lib/example/src/pages/Tests.js +1068 -0
- package/lib/example/src/pages/inbox/InboxCustom.js +141 -0
- package/lib/example/src/pages/inbox/InboxDefault.js +22 -0
- package/lib/example/src/pages/inbox/InboxStyled.js +220 -0
- package/lib/example/src/pages/preferences/PreferencesCustom.js +91 -0
- package/lib/example/src/pages/preferences/PreferencesDefault.js +17 -0
- package/lib/example/src/pages/preferences/PreferencesDetail.js +127 -0
- package/lib/example/src/pages/preferences/PreferencesStyled.js +110 -0
- package/lib/module/index.js +67 -90
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/CourierInboxListener.js +1 -0
- package/lib/module/models/CourierInboxListener.js.map +1 -1
- package/lib/module/models/InboxAction.js +16 -1
- package/lib/module/models/InboxAction.js.map +1 -1
- package/lib/module/models/InboxMessage.js +61 -1
- package/lib/module/models/InboxMessage.js.map +1 -1
- package/lib/module/models/InboxMessageEvent.js +2 -0
- package/lib/module/models/InboxMessageEvent.js.map +1 -0
- package/lib/module/views/CourierInboxView.js +6 -4
- package/lib/module/views/CourierInboxView.js.map +1 -1
- package/lib/package.json +171 -0
- package/lib/src/Broadcaster.js +24 -0
- package/lib/src/Modules.js +26 -0
- package/lib/src/client/BrandClient.js +17 -0
- package/lib/src/client/ClientModule.js +14 -0
- package/lib/src/client/CourierClient.js +31 -0
- package/lib/src/client/InboxClient.js +99 -0
- package/lib/src/client/PreferenceClient.js +63 -0
- package/lib/src/client/TokenClient.js +27 -0
- package/lib/src/client/TrackingClient.js +17 -0
- package/lib/src/index.js +567 -0
- package/lib/src/models/Android_CourierSheet.js +1 -0
- package/lib/src/models/CourierAuthenticationListener.js +14 -0
- package/lib/src/models/CourierBrand.js +1 -0
- package/lib/src/models/CourierButton.js +1 -0
- package/lib/src/models/CourierDevice.js +1 -0
- package/lib/src/models/CourierFont.js +1 -0
- package/lib/src/models/CourierInboxListener.js +20 -0
- package/lib/src/models/CourierInboxMessages.js +1 -0
- package/lib/src/models/CourierInboxTheme.js +1 -0
- package/lib/src/models/CourierInfoViewStyle.js +1 -0
- package/lib/src/models/CourierPaging.js +1 -0
- package/lib/src/models/CourierPreferencesTheme.js +1 -0
- package/lib/src/models/CourierPushListener.js +14 -0
- package/lib/src/models/CourierPushProvider.js +8 -0
- package/lib/src/models/CourierTrackingEvent.js +8 -0
- package/lib/src/models/CourierUserPreferences.js +51 -0
- package/lib/src/models/InboxAction.js +1 -0
- package/lib/src/models/InboxMessage.js +1 -0
- package/lib/src/models/InboxMessageFeed.js +1 -0
- package/lib/src/models/InboxMessageSet.js +1 -0
- package/lib/src/models/iOS_CourierCell.js +1 -0
- package/lib/src/models/iOS_CourierSheet.js +1 -0
- package/lib/src/utils.js +27 -0
- package/lib/src/views/CourierInboxView.js +75 -0
- package/lib/src/views/CourierPreferencesView.js +33 -0
- package/lib/typescript/src/index.d.ts +16 -20
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/models/CourierInboxListener.d.ts +4 -7
- package/lib/typescript/src/models/CourierInboxListener.d.ts.map +1 -1
- package/lib/typescript/src/models/InboxAction.d.ts +8 -4
- package/lib/typescript/src/models/InboxAction.d.ts.map +1 -1
- package/lib/typescript/src/models/InboxMessage.d.ts +28 -14
- package/lib/typescript/src/models/InboxMessage.d.ts.map +1 -1
- package/lib/typescript/src/models/InboxMessageEvent.d.ts +2 -0
- package/lib/typescript/src/models/InboxMessageEvent.d.ts.map +1 -0
- package/lib/typescript/src/models/InboxMessageFeed.d.ts +1 -1
- package/lib/typescript/src/models/InboxMessageFeed.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/index.tsx +61 -99
- package/src/models/CourierInboxListener.tsx +10 -13
- package/src/models/InboxAction.tsx +28 -4
- package/src/models/InboxMessage.tsx +102 -14
- package/src/models/InboxMessageEvent.tsx +1 -0
- package/src/models/InboxMessageFeed.tsx +1 -1
- package/src/views/CourierInboxView.tsx +4 -4
- package/ios/CourierReactNative.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/CourierReactNative.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/CourierReactNative.xcodeproj/project.xcworkspace/xcuserdata/mike.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/CourierReactNative.xcodeproj/xcuserdata/mike.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
|
@@ -1,2 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.InboxAction = void 0;
|
|
7
|
+
class InboxAction {
|
|
8
|
+
constructor(content = null, href = null, data = null) {
|
|
9
|
+
this.content = content;
|
|
10
|
+
this.href = href;
|
|
11
|
+
this.data = data;
|
|
12
|
+
}
|
|
13
|
+
static fromJson(jsonString) {
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(jsonString);
|
|
16
|
+
return new InboxAction(parsed.content, parsed.href, parsed.data);
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.log(`Error parsing action: ${error}`);
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.InboxAction = InboxAction;
|
|
2
24
|
//# sourceMappingURL=InboxAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["models/InboxAction.tsx"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["InboxAction","constructor","content","href","data","fromJson","jsonString","parsed","JSON","parse","error","console","log","exports"],"sourceRoot":"../../../src","sources":["models/InboxAction.tsx"],"mappings":";;;;;;AAAO,MAAMA,WAAW,CAAC;EAKvBC,WAAWA,CACTC,OAAsB,GAAG,IAAI,EAC7BC,IAAmB,GAAG,IAAI,EAC1BC,IAAmC,GAAG,IAAI,EAC1C;IACA,IAAI,CAACF,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,IAAI,GAAGA,IAAI;EAClB;EAEA,OAAOC,QAAQA,CAACC,UAAkB,EAAe;IAC/C,IAAI;MACF,MAAMC,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACH,UAAU,CAAC;MACrC,OAAO,IAAIN,WAAW,CACpBO,MAAM,CAACL,OAAO,EACdK,MAAM,CAACJ,IAAI,EACXI,MAAM,CAACH,IACT,CAAC;IACH,CAAC,CAAC,OAAOM,KAAK,EAAE;MACdC,OAAO,CAACC,GAAG,CAAC,yBAAyBF,KAAK,EAAE,CAAC;MAC7C,MAAMA,KAAK;IACb;EACF;AACF;AAACG,OAAA,CAAAb,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -3,4 +3,68 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.InboxMessage = void 0;
|
|
7
|
+
var _ = _interopRequireDefault(require(".."));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
class InboxMessage {
|
|
10
|
+
constructor(messageId, title = null, body = null, preview = null, created = null, actions = null, data = null, read = null, opened = null, archived = null, subtitle = null, time = '', trackingIds = null) {
|
|
11
|
+
this.messageId = messageId;
|
|
12
|
+
this.title = title;
|
|
13
|
+
this.body = body;
|
|
14
|
+
this.preview = preview;
|
|
15
|
+
this.created = created;
|
|
16
|
+
this.actions = actions;
|
|
17
|
+
this.data = data;
|
|
18
|
+
this.read = read;
|
|
19
|
+
this.opened = opened;
|
|
20
|
+
this.archived = archived;
|
|
21
|
+
this.subtitle = subtitle;
|
|
22
|
+
this.time = time;
|
|
23
|
+
this.trackingIds = trackingIds;
|
|
24
|
+
}
|
|
25
|
+
get isRead() {
|
|
26
|
+
return this.read !== null;
|
|
27
|
+
}
|
|
28
|
+
get isOpened() {
|
|
29
|
+
return this.opened !== null;
|
|
30
|
+
}
|
|
31
|
+
get isArchived() {
|
|
32
|
+
return this.archived !== null;
|
|
33
|
+
}
|
|
34
|
+
static fromJson(jsonString) {
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(jsonString);
|
|
37
|
+
return new InboxMessage(parsed.messageId, parsed.title, parsed.body, parsed.preview, parsed.created, parsed.actions, parsed.data, parsed.read, parsed.opened, parsed.archived, parsed.subtitle, parsed.time, parsed.trackingIds);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.log(`Error parsing message: ${error}`);
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async markAsRead() {
|
|
44
|
+
await _.default.shared.readMessage({
|
|
45
|
+
messageId: this.messageId
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async markAsUnread() {
|
|
49
|
+
await _.default.shared.unreadMessage({
|
|
50
|
+
messageId: this.messageId
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async markAsArchived() {
|
|
54
|
+
await _.default.shared.archiveMessage({
|
|
55
|
+
messageId: this.messageId
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
async markAsOpened() {
|
|
59
|
+
await _.default.shared.openMessage({
|
|
60
|
+
messageId: this.messageId
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async markAsClicked() {
|
|
64
|
+
await _.default.shared.clickMessage({
|
|
65
|
+
messageId: this.messageId
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.InboxMessage = InboxMessage;
|
|
6
70
|
//# sourceMappingURL=InboxMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["models/InboxMessage.tsx"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_","_interopRequireDefault","require","obj","__esModule","default","InboxMessage","constructor","messageId","title","body","preview","created","actions","data","read","opened","archived","subtitle","time","trackingIds","isRead","isOpened","isArchived","fromJson","jsonString","parsed","JSON","parse","error","console","log","markAsRead","Courier","shared","readMessage","markAsUnread","unreadMessage","markAsArchived","archiveMessage","markAsOpened","openMessage","markAsClicked","clickMessage","exports"],"sourceRoot":"../../../src","sources":["models/InboxMessage.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["models/InboxMessageEvent.tsx"],"mappings":"","ignoreList":[]}
|
|
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.CourierInboxView = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
+
var _InboxAction = require("../models/InboxAction");
|
|
10
|
+
var _InboxMessage = require("../models/InboxMessage");
|
|
9
11
|
var _Modules = require("../Modules");
|
|
10
12
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
11
13
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -35,7 +37,7 @@ const CourierInboxView = props => {
|
|
|
35
37
|
// Parse the native event data
|
|
36
38
|
if (props.onClickInboxMessageAtIndex) {
|
|
37
39
|
const index = event["index"];
|
|
38
|
-
const message =
|
|
40
|
+
const message = _InboxMessage.InboxMessage.fromJson(event["message"]);
|
|
39
41
|
props.onClickInboxMessageAtIndex(message, index);
|
|
40
42
|
}
|
|
41
43
|
};
|
|
@@ -50,7 +52,7 @@ const CourierInboxView = props => {
|
|
|
50
52
|
// Parse the native event data
|
|
51
53
|
if (props.onLongPressInboxMessageAtIndex) {
|
|
52
54
|
const index = event["index"];
|
|
53
|
-
const message =
|
|
55
|
+
const message = _InboxMessage.InboxMessage.fromJson(event["message"]);
|
|
54
56
|
props.onLongPressInboxMessageAtIndex(message, index);
|
|
55
57
|
}
|
|
56
58
|
};
|
|
@@ -65,8 +67,8 @@ const CourierInboxView = props => {
|
|
|
65
67
|
// Parse the native event data
|
|
66
68
|
if (props.onClickInboxActionForMessageAtIndex) {
|
|
67
69
|
const index = event["index"];
|
|
68
|
-
const action =
|
|
69
|
-
const message =
|
|
70
|
+
const action = _InboxAction.InboxAction.fromJson(event["action"]);
|
|
71
|
+
const message = _InboxMessage.InboxMessage.fromJson(event["message"]);
|
|
70
72
|
props.onClickInboxActionForMessageAtIndex(action, message, index);
|
|
71
73
|
}
|
|
72
74
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_Modules","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","CourierInbox","Modules","getNativeComponent","CourierInboxView","props","onClickInboxMessageAtIndexListener","undefined","onLongPressInboxMessageAtIndexListener","onClickInboxActionForMessageAtIndexListener","onScrollInboxListener","useEffect","_onClickInboxMessageA","_onLongPressInboxMess","_onClickInboxActionFo","_onScrollInboxListene","remove","_onClickInboxMessageA2","Platform","OS","onClickInboxMessageAtIndex","DeviceEventEmitter","addListener","event","index","message","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_InboxAction","_InboxMessage","_Modules","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","CourierInbox","Modules","getNativeComponent","CourierInboxView","props","onClickInboxMessageAtIndexListener","undefined","onLongPressInboxMessageAtIndexListener","onClickInboxActionForMessageAtIndexListener","onScrollInboxListener","useEffect","_onClickInboxMessageA","_onLongPressInboxMess","_onClickInboxActionFo","_onScrollInboxListene","remove","_onClickInboxMessageA2","Platform","OS","onClickInboxMessageAtIndex","DeviceEventEmitter","addListener","event","index","message","InboxMessage","fromJson","_onLongPressInboxMess2","onLongPressInboxMessageAtIndex","_onClickInboxActionFo2","onClickInboxActionForMessageAtIndex","action","InboxAction","_onScrollInboxListene2","onScrollInbox","contentOffset","createElement","canSwipePages","theme","light","dark","nativeEvent","style","exports"],"sourceRoot":"../../../src","sources":["views/CourierInboxView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NavigationContainer } from '@react-navigation/native';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import Home from './Home';
|
|
4
|
+
import Toast from 'react-native-toast-message';
|
|
5
|
+
import { Poke } from './Poke';
|
|
6
|
+
export default function App() {
|
|
7
|
+
return (React.createElement(Poke, { initialEnabled: false },
|
|
8
|
+
React.createElement(NavigationContainer, null,
|
|
9
|
+
React.createElement(Home, null),
|
|
10
|
+
React.createElement(Toast, null))));
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import EventEmitter from 'eventemitter3';
|
|
2
|
+
const eventEmitter = new EventEmitter();
|
|
3
|
+
export function emitEvent(eventName, eventData) {
|
|
4
|
+
eventEmitter.emit(eventName, eventData);
|
|
5
|
+
}
|
|
6
|
+
export function addListener(eventName, listener) {
|
|
7
|
+
eventEmitter.on(eventName, listener);
|
|
8
|
+
}
|
|
9
|
+
export function removeListener(eventName, listener) {
|
|
10
|
+
eventEmitter.off(eventName, listener);
|
|
11
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
|
|
3
|
+
import { Alert, Button } from 'react-native';
|
|
4
|
+
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
|
|
5
|
+
import Auth from './pages/Auth';
|
|
6
|
+
import Push from './pages/Push';
|
|
7
|
+
import Inbox from './pages/Inbox';
|
|
8
|
+
import Courier from '@trycourier/courier-react-native';
|
|
9
|
+
import PreferencesStack from './pages/PreferencesStack';
|
|
10
|
+
import Tests from './pages/Tests';
|
|
11
|
+
const Tab = createBottomTabNavigator();
|
|
12
|
+
const Home = () => {
|
|
13
|
+
const [unreadCount, setUnreadCount] = useState(0);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const setupInbox = async () => {
|
|
16
|
+
// Setup Push
|
|
17
|
+
Courier.setIOSForegroundPresentationOptions({ options: ['sound', 'badge', 'list', 'banner'] });
|
|
18
|
+
const pushListener = Courier.shared.addPushNotificationListener({
|
|
19
|
+
onPushNotificationClicked(push) {
|
|
20
|
+
console.log(push);
|
|
21
|
+
Alert.alert('👆 Push Notification Clicked', JSON.stringify(push));
|
|
22
|
+
},
|
|
23
|
+
onPushNotificationDelivered(push) {
|
|
24
|
+
console.log(push);
|
|
25
|
+
Alert.alert('📬 Push Notification Delivered', JSON.stringify(push));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// Setup Inbox
|
|
29
|
+
await Courier.shared.setInboxPaginationLimit(100);
|
|
30
|
+
const inboxListener = await Courier.shared.addInboxListener({
|
|
31
|
+
onUnreadCountChanged(unreadCount) {
|
|
32
|
+
setUnreadCount(unreadCount);
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
return { pushListener, inboxListener };
|
|
36
|
+
};
|
|
37
|
+
const listeners = setupInbox();
|
|
38
|
+
return () => {
|
|
39
|
+
listeners.then(({ pushListener, inboxListener }) => {
|
|
40
|
+
pushListener.remove();
|
|
41
|
+
inboxListener.remove();
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
}, []);
|
|
45
|
+
const inboxOptions = () => {
|
|
46
|
+
const badgeCount = () => {
|
|
47
|
+
return unreadCount > 0 ? unreadCount : undefined;
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
headerRight: () => (React.createElement(Button, { onPress: () => Courier.shared.readAllInboxMessages(), title: "Read All" })),
|
|
51
|
+
tabBarBadge: badgeCount(),
|
|
52
|
+
tabBarIcon: ({ color, size }) => (React.createElement(MaterialCommunityIcons, { name: 'bell', color: color, size: size }))
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
const icon = (icon) => {
|
|
56
|
+
return {
|
|
57
|
+
tabBarIcon: ({ color, size }) => (React.createElement(MaterialCommunityIcons, { name: icon, color: color, size: size }))
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
return (React.createElement(Tab.Navigator, null,
|
|
61
|
+
React.createElement(Tab.Screen, { name: "Auth", component: Auth, options: icon('account-circle') }),
|
|
62
|
+
React.createElement(Tab.Screen, { name: "Push", component: Push, options: icon('message-badge') }),
|
|
63
|
+
React.createElement(Tab.Screen, { name: "Inbox", component: Inbox, options: inboxOptions() }),
|
|
64
|
+
React.createElement(Tab.Screen, { name: "Preferences", component: PreferencesStack, options: { ...icon('wrench'), headerShown: false } }),
|
|
65
|
+
React.createElement(Tab.Screen, { name: "Tests", component: Tests, options: icon('test-tube') })));
|
|
66
|
+
};
|
|
67
|
+
export default Home;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import React, { useState, useEffect, useMemo, createContext, useContext } from 'react';
|
|
2
|
+
import { View, StyleSheet, Animated, Easing } from 'react-native';
|
|
3
|
+
const PokeContext = createContext(undefined);
|
|
4
|
+
export const usePoke = () => {
|
|
5
|
+
const context = useContext(PokeContext);
|
|
6
|
+
if (!context) {
|
|
7
|
+
throw new Error('usePoke must be used within a PokeProvider');
|
|
8
|
+
}
|
|
9
|
+
return context;
|
|
10
|
+
};
|
|
11
|
+
export const Poke = ({ children, initialEnabled = true, initialIndicatorStyle, initialTouchTimeout = 150, }) => {
|
|
12
|
+
const [enabled, setEnabled] = useState(initialEnabled);
|
|
13
|
+
const [indicatorStyle, setIndicatorStyle] = useState(initialIndicatorStyle || {});
|
|
14
|
+
const [touchTimeout, setTouchTimeout] = useState(initialTouchTimeout);
|
|
15
|
+
const contextValue = useMemo(() => ({
|
|
16
|
+
setEnabled,
|
|
17
|
+
setIndicatorStyle,
|
|
18
|
+
setTouchTimeout,
|
|
19
|
+
}), []);
|
|
20
|
+
return (React.createElement(PokeContext.Provider, { value: contextValue },
|
|
21
|
+
React.createElement(TouchIndicator, { enabled: enabled, indicatorStyle: indicatorStyle, touchTimeout: touchTimeout }, children)));
|
|
22
|
+
};
|
|
23
|
+
const TouchIndicator = ({ children, indicatorStyle, enabled, touchTimeout }) => {
|
|
24
|
+
const [latestTouch, setLatestTouch] = useState(null);
|
|
25
|
+
const indicatorSize = indicatorStyle?.size || 50;
|
|
26
|
+
const indicatorColor = indicatorStyle?.color || 'rgba(0, 122, 255, 0.4)'; // Default blue color
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (latestTouch) {
|
|
29
|
+
const timer = setTimeout(() => {
|
|
30
|
+
setLatestTouch(null);
|
|
31
|
+
}, touchTimeout);
|
|
32
|
+
return () => clearTimeout(timer);
|
|
33
|
+
}
|
|
34
|
+
return () => { }; // Add this line
|
|
35
|
+
}, [latestTouch, touchTimeout]);
|
|
36
|
+
const handleTouch = (event) => {
|
|
37
|
+
if (!enabled)
|
|
38
|
+
return;
|
|
39
|
+
const touch = event.nativeEvent.touches[0]; // Get only the latest touch
|
|
40
|
+
if (touch) {
|
|
41
|
+
const newTouch = {
|
|
42
|
+
id: `${touch.identifier}-${Date.now()}`,
|
|
43
|
+
x: touch.pageX,
|
|
44
|
+
y: touch.pageY,
|
|
45
|
+
timestamp: Date.now(),
|
|
46
|
+
animation: new Animated.Value(1),
|
|
47
|
+
};
|
|
48
|
+
Animated.timing(newTouch.animation, {
|
|
49
|
+
toValue: 0,
|
|
50
|
+
duration: touchTimeout,
|
|
51
|
+
useNativeDriver: true,
|
|
52
|
+
easing: Easing.out(Easing.cubic),
|
|
53
|
+
}).start();
|
|
54
|
+
setLatestTouch(newTouch);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const touchIndicatorStyle = useMemo(() => ({
|
|
58
|
+
position: 'absolute',
|
|
59
|
+
width: indicatorSize,
|
|
60
|
+
height: indicatorSize,
|
|
61
|
+
borderRadius: indicatorSize / 2,
|
|
62
|
+
backgroundColor: indicatorColor,
|
|
63
|
+
zIndex: 9999,
|
|
64
|
+
}), [indicatorSize, indicatorColor]);
|
|
65
|
+
return (React.createElement(View, { style: StyleSheet.absoluteFill, onTouchStart: handleTouch, onTouchMove: handleTouch, onTouchEnd: handleTouch },
|
|
66
|
+
children,
|
|
67
|
+
enabled && latestTouch && (React.createElement(Animated.View, { key: latestTouch.id, style: [
|
|
68
|
+
touchIndicatorStyle,
|
|
69
|
+
{
|
|
70
|
+
left: latestTouch.x - indicatorSize / 2,
|
|
71
|
+
top: latestTouch.y - indicatorSize / 2,
|
|
72
|
+
opacity: latestTouch.animation,
|
|
73
|
+
},
|
|
74
|
+
] }))));
|
|
75
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
|
3
|
+
export const Tab = ({ title, isSelected, onPress }) => (React.createElement(TouchableOpacity, { onPress: onPress, style: [styles.tabButton, isSelected && styles.selectedTabButton] },
|
|
4
|
+
React.createElement(Text, { style: [styles.tabText, isSelected && styles.selectedTabText] }, title)));
|
|
5
|
+
export const TabControl = ({ tabs, selectedTab, setSelectedTab }) => (React.createElement(View, { style: styles.segmentedControl }, tabs.map((tab) => (React.createElement(Tab, { key: tab.key, title: tab.title, isSelected: selectedTab === tab.key, onPress: () => setSelectedTab(tab.key) })))));
|
|
6
|
+
const styles = StyleSheet.create({
|
|
7
|
+
container: {
|
|
8
|
+
flex: 1,
|
|
9
|
+
},
|
|
10
|
+
segmentedControl: {
|
|
11
|
+
flexDirection: 'row',
|
|
12
|
+
justifyContent: 'space-around',
|
|
13
|
+
width: '100%',
|
|
14
|
+
},
|
|
15
|
+
content: {
|
|
16
|
+
flex: 1,
|
|
17
|
+
width: '100%',
|
|
18
|
+
height: '100%',
|
|
19
|
+
},
|
|
20
|
+
tabButton: {
|
|
21
|
+
padding: 16,
|
|
22
|
+
flex: 1,
|
|
23
|
+
alignItems: 'center',
|
|
24
|
+
borderBottomWidth: 2,
|
|
25
|
+
borderBottomColor: 'transparent',
|
|
26
|
+
},
|
|
27
|
+
selectedTabButton: {
|
|
28
|
+
borderBottomColor: 'blue',
|
|
29
|
+
},
|
|
30
|
+
tabText: {
|
|
31
|
+
color: 'black',
|
|
32
|
+
},
|
|
33
|
+
selectedTabText: {
|
|
34
|
+
fontWeight: 'bold',
|
|
35
|
+
},
|
|
36
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export class ExampleServer {
|
|
2
|
+
static async generateJwt(props) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
const url = 'https://api.courier.com/auth/issue-token';
|
|
5
|
+
const request = {
|
|
6
|
+
method: 'POST',
|
|
7
|
+
headers: {
|
|
8
|
+
'Content-Type': 'application/json',
|
|
9
|
+
'Authorization': `Bearer ${props.authKey}`
|
|
10
|
+
},
|
|
11
|
+
body: JSON.stringify({
|
|
12
|
+
scope: `user_id:${props.userId} write:user-tokens inbox:read:messages inbox:write:events read:preferences write:preferences read:brands`,
|
|
13
|
+
expires_in: '2 days'
|
|
14
|
+
})
|
|
15
|
+
};
|
|
16
|
+
fetch(url, request)
|
|
17
|
+
.then(response => response.json())
|
|
18
|
+
.then((data) => {
|
|
19
|
+
resolve(data.token);
|
|
20
|
+
})
|
|
21
|
+
.catch(error => {
|
|
22
|
+
reject(error);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
static async sendTest(props) {
|
|
27
|
+
const url = 'https://api.courier.com/send';
|
|
28
|
+
const headers = {
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
'Authorization': `Bearer ${props.authKey}`,
|
|
31
|
+
};
|
|
32
|
+
const body = JSON.stringify({
|
|
33
|
+
'message': {
|
|
34
|
+
'to': {
|
|
35
|
+
'user_id': props.userId
|
|
36
|
+
},
|
|
37
|
+
'content': {
|
|
38
|
+
'title': props.title ?? 'Test',
|
|
39
|
+
'body': props.body ?? 'Body',
|
|
40
|
+
},
|
|
41
|
+
'routing': {
|
|
42
|
+
'method': 'all',
|
|
43
|
+
'channels': [props.channel],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
const response = await fetch(url, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: headers,
|
|
50
|
+
body: body,
|
|
51
|
+
});
|
|
52
|
+
if (response.status === 202) {
|
|
53
|
+
const json = await response.json();
|
|
54
|
+
return json['requestId'] ?? 'Error';
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
throw new Error('Failed to send test message');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export class Utils {
|
|
62
|
+
static generateUUID() {
|
|
63
|
+
let uuid = '';
|
|
64
|
+
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
65
|
+
const charactersLength = characters.length;
|
|
66
|
+
for (let i = 0; i < 16; i++) {
|
|
67
|
+
uuid += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
68
|
+
}
|
|
69
|
+
return uuid;
|
|
70
|
+
}
|
|
71
|
+
}
|