@trycourier/courier-react-native 5.4.3 → 5.5.0
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/src/main/java/com/courierreactnative/CourierSharedModule.kt +41 -42
- 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
package/src/index.tsx
CHANGED
|
@@ -14,9 +14,9 @@ import Broadcaster from './Broadcaster';
|
|
|
14
14
|
import { CourierClient } from './client/CourierClient';
|
|
15
15
|
import { Events, CourierUtils } from './utils';
|
|
16
16
|
import { InboxMessageFeed } from './models/InboxMessageFeed';
|
|
17
|
-
import {
|
|
17
|
+
import { InboxMessageEvent } from './models/InboxMessageEvent';
|
|
18
18
|
|
|
19
|
-
export { CourierClient } from './client/CourierClient';
|
|
19
|
+
export { CourierClient } from './client/CourierClient' ;
|
|
20
20
|
export { BrandClient } from './client/BrandClient';
|
|
21
21
|
export { CourierBrandResponse } from './models/CourierBrand';
|
|
22
22
|
export { CourierDevice } from './models/CourierDevice';
|
|
@@ -37,8 +37,9 @@ export { CourierButton } from './models/CourierButton';
|
|
|
37
37
|
export { CourierInfoViewStyle } from './models/CourierInfoViewStyle';
|
|
38
38
|
export { iOS_CourierCell } from './models/iOS_CourierCell';
|
|
39
39
|
export { iOS_CourierSheet } from './models/iOS_CourierSheet';
|
|
40
|
-
export { InboxMessageSet } from './models/InboxMessageSet';
|
|
41
40
|
export { InboxMessage } from './models/InboxMessage';
|
|
41
|
+
export { InboxMessageFeed } from './models/InboxMessageFeed';
|
|
42
|
+
export { InboxMessageEvent } from './models/InboxMessageEvent';
|
|
42
43
|
export { CourierInboxButtonStyle, CourierInboxTextStyle, CourierInboxUnreadIndicatorStyle, CourierInboxTheme } from './models/CourierInboxTheme';
|
|
43
44
|
export { CourierPreferencesTheme, CourierPreferencesMode, CourierPreferencesChannel } from './models/CourierPreferencesTheme';
|
|
44
45
|
export type iOSForegroundPresentationOptions = 'sound' | 'badge' | 'list' | 'banner';
|
|
@@ -508,144 +509,109 @@ class Courier {
|
|
|
508
509
|
}
|
|
509
510
|
|
|
510
511
|
/**
|
|
511
|
-
* Adds a listener for inbox changes.
|
|
512
|
+
* Adds a listener for inbox changes (aligned with the updated native iOS/Swift callbacks).
|
|
512
513
|
* @param {Object} props - The properties object.
|
|
513
|
-
* @param {Function} [props.
|
|
514
|
-
* @param {Function} [props.onError] -
|
|
515
|
-
* @param {Function} [props.onUnreadCountChanged] -
|
|
516
|
-
* @param {Function} [props.
|
|
517
|
-
* @param {Function} [props.
|
|
518
|
-
* @param {Function} [props.onPageAdded] -
|
|
519
|
-
* @param {Function} [props.
|
|
520
|
-
* @param {Function} [props.onMessageAdded] - Callback function called when a new message is added.
|
|
521
|
-
* @param {Function} [props.onMessageRemoved] - Callback function called when a message is removed.
|
|
514
|
+
* @param {Function} [props.onLoading] - Called when loading or refreshing begins. Receives isRefresh (boolean).
|
|
515
|
+
* @param {Function} [props.onError] - Called when an error occurs. Receives the error message (string).
|
|
516
|
+
* @param {Function} [props.onUnreadCountChanged] - Called when unread count changes. Receives unreadCount (number).
|
|
517
|
+
* @param {Function} [props.onTotalCountChanged] - Called when total message count changes. Receives totalCount (number) and feed ("feed" or "archive").
|
|
518
|
+
* @param {Function} [props.onMessagesChanged] - Called when messages in a feed change. Receives an InboxMessageSet and feed name.
|
|
519
|
+
* @param {Function} [props.onPageAdded] - Called when a new page of messages is added. Receives an InboxMessageSet, feed name, and isFirstPage (boolean).
|
|
520
|
+
* @param {Function} [props.onMessageEvent] - Called for message-level changes (add/remove/update). Receives a message, index, feed name, and event string.
|
|
522
521
|
* @returns {CourierInboxListener} A listener object that can be used to remove the listener later.
|
|
523
522
|
*/
|
|
524
523
|
public async addInboxListener(props: {
|
|
525
|
-
|
|
524
|
+
onLoading?: (isRefresh: boolean) => void,
|
|
526
525
|
onError?: (error: string) => void,
|
|
527
526
|
onUnreadCountChanged?: (unreadCount: number) => void,
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
onPageAdded?: (
|
|
531
|
-
|
|
532
|
-
onMessageAdded?: (feed: InboxMessageFeed, index: number, message: InboxMessage) => void,
|
|
533
|
-
onMessageRemoved?: (feed: InboxMessageFeed, index: number, message: InboxMessage) => void
|
|
527
|
+
onTotalCountChanged?: (totalCount: number, feed: string) => void,
|
|
528
|
+
onMessagesChanged?: (messages: InboxMessage[], canPaginate: boolean, feed: InboxMessageFeed) => void,
|
|
529
|
+
onPageAdded?: (messages: InboxMessage[], canPaginate: boolean, isFirstPage: boolean, feed: InboxMessageFeed) => void,
|
|
530
|
+
onMessageEvent?: (message: InboxMessage, index: number, feed: InboxMessageFeed, eventName: InboxMessageEvent) => void
|
|
534
531
|
}): Promise<CourierInboxListener> {
|
|
535
532
|
|
|
533
|
+
// Generate a unique ID for the listener
|
|
536
534
|
const listenerId = `inbox_${CourierUtils.generateUUID()}`;
|
|
537
535
|
|
|
536
|
+
// Generate unique channel IDs for each callback
|
|
538
537
|
const listenerIds = {
|
|
539
538
|
loading: `inbox_loading_${CourierUtils.generateUUID()}`,
|
|
540
539
|
error: `inbox_error_${CourierUtils.generateUUID()}`,
|
|
541
540
|
unreadCount: `inbox_unread_count_${CourierUtils.generateUUID()}`,
|
|
542
|
-
|
|
543
|
-
|
|
541
|
+
totalCount: `inbox_total_count_${CourierUtils.generateUUID()}`,
|
|
542
|
+
messagesChanged: `inbox_messages_changed_${CourierUtils.generateUUID()}`,
|
|
544
543
|
pageAdded: `inbox_page_added_${CourierUtils.generateUUID()}`,
|
|
545
|
-
|
|
546
|
-
messageAdded: `inbox_message_added_${CourierUtils.generateUUID()}`,
|
|
547
|
-
messageRemoved: `inbox_message_removed_${CourierUtils.generateUUID()}`
|
|
544
|
+
messageEvent: `inbox_message_event_${CourierUtils.generateUUID()}`,
|
|
548
545
|
};
|
|
549
546
|
|
|
550
|
-
// Create the
|
|
547
|
+
// Create the CourierInboxListener instance
|
|
551
548
|
const listener = new CourierInboxListener(listenerId);
|
|
552
549
|
|
|
553
|
-
|
|
554
|
-
|
|
550
|
+
// 1) onLoading
|
|
551
|
+
listener.onLoading = await this.sharedBroadcaster.addListener(listenerIds.loading, (event: any) => {
|
|
552
|
+
// event is simply the boolean "isRefresh"
|
|
553
|
+
props.onLoading?.(event);
|
|
555
554
|
});
|
|
556
555
|
|
|
556
|
+
// 2) onError
|
|
557
557
|
listener.onError = await this.sharedBroadcaster.addListener(listenerIds.error, (event: any) => {
|
|
558
|
+
// event is the error message (string)
|
|
558
559
|
props.onError?.(event);
|
|
559
560
|
});
|
|
560
561
|
|
|
562
|
+
// 3) onUnreadCountChanged
|
|
561
563
|
listener.onUnreadCountChanged = await this.sharedBroadcaster.addListener(listenerIds.unreadCount, (event: any) => {
|
|
564
|
+
// event is the unread count (number)
|
|
562
565
|
props.onUnreadCountChanged?.(event);
|
|
563
566
|
});
|
|
564
567
|
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
totalMessageCount: event.totalMessageCount,
|
|
570
|
-
canPaginate: event.canPaginate
|
|
571
|
-
}
|
|
572
|
-
props.onFeedChanged?.(messageSet);
|
|
568
|
+
// 4) onTotalCountChanged
|
|
569
|
+
listener.onTotalCountChanged = await this.sharedBroadcaster.addListener(listenerIds.totalCount, (event: any) => {
|
|
570
|
+
// event => { feed: "feed"|"archive", totalCount: number }
|
|
571
|
+
props.onTotalCountChanged?.(event.totalCount, event.feed);
|
|
573
572
|
});
|
|
574
573
|
|
|
575
|
-
|
|
574
|
+
// 5) onMessagesChanged
|
|
575
|
+
listener.onMessagesChanged = await this.sharedBroadcaster.addListener(listenerIds.messagesChanged, (event: any) => {
|
|
576
|
+
// event => { feed: "feed"|"archive", messages: any[], totalMessageCount: number, canPaginate: boolean }
|
|
576
577
|
const convertedMessages = this.convertMessages(event.messages);
|
|
577
|
-
|
|
578
|
-
messages: convertedMessages,
|
|
579
|
-
totalMessageCount: event.totalMessageCount,
|
|
580
|
-
canPaginate: event.canPaginate
|
|
581
|
-
}
|
|
582
|
-
props.onArchiveChanged?.(messageSet);
|
|
578
|
+
props.onMessagesChanged?.(convertedMessages, event.canPaginate, event.feed);
|
|
583
579
|
});
|
|
584
580
|
|
|
581
|
+
// 6) onPageAdded
|
|
585
582
|
listener.onPageAdded = await this.sharedBroadcaster.addListener(listenerIds.pageAdded, (event: any) => {
|
|
583
|
+
// event => { feed: "feed"|"archive", messages: any[], totalMessageCount: number, canPaginate: boolean, isFirstPage: boolean }
|
|
586
584
|
const convertedMessages = this.convertMessages(event.messages);
|
|
587
|
-
|
|
588
|
-
messages: convertedMessages,
|
|
589
|
-
totalMessageCount: event.totalMessageCount,
|
|
590
|
-
canPaginate: event.canPaginate
|
|
591
|
-
}
|
|
592
|
-
props.onPageAdded?.(event.feed === 'archived' ? 'archived' : 'feed', messageSet);
|
|
593
|
-
});
|
|
594
|
-
|
|
595
|
-
listener.onMessageChanged = await this.sharedBroadcaster.addListener(listenerIds.messageChanged, (event: any) => {
|
|
596
|
-
const convertedMessage = this.convertMessage(event.message);
|
|
597
|
-
props.onMessageChanged?.(event.feed === 'archived' ? 'archived' : 'feed', event.index, convertedMessage);
|
|
598
|
-
});
|
|
599
|
-
|
|
600
|
-
listener.onMessageAdded = await this.sharedBroadcaster.addListener(listenerIds.messageAdded, (event: any) => {
|
|
601
|
-
const convertedMessage = this.convertMessage(event.message);
|
|
602
|
-
props.onMessageAdded?.(event.feed === 'archived' ? 'archived' : 'feed', event.index, convertedMessage);
|
|
585
|
+
props.onPageAdded?.(convertedMessages, event.canPaginate, event.isFirstPage, event.feed);
|
|
603
586
|
});
|
|
604
587
|
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
588
|
+
// 7) onMessageEvent
|
|
589
|
+
listener.onMessageEvent = await this.sharedBroadcaster.addListener(listenerIds.messageEvent, (event: any) => {
|
|
590
|
+
// event => { feed: "feed"|"archive", index: number, event: string, message: any }
|
|
591
|
+
const convertedMessage = InboxMessage.fromJson(event.message);
|
|
592
|
+
props.onMessageEvent?.(convertedMessage, event.index, event.feed, event.event);
|
|
608
593
|
});
|
|
609
594
|
|
|
610
|
-
// Attach listener to native
|
|
595
|
+
// Attach the listener to native iOS/Android via bridging
|
|
611
596
|
const id = await Modules.Shared.addInboxListener(
|
|
612
597
|
listenerId,
|
|
613
598
|
listenerIds.loading,
|
|
614
599
|
listenerIds.error,
|
|
615
600
|
listenerIds.unreadCount,
|
|
616
|
-
listenerIds.
|
|
617
|
-
listenerIds.
|
|
601
|
+
listenerIds.totalCount,
|
|
602
|
+
listenerIds.messagesChanged,
|
|
618
603
|
listenerIds.pageAdded,
|
|
619
|
-
listenerIds.
|
|
620
|
-
listenerIds.messageAdded,
|
|
621
|
-
listenerIds.messageRemoved
|
|
604
|
+
listenerIds.messageEvent
|
|
622
605
|
);
|
|
623
606
|
|
|
624
|
-
//
|
|
607
|
+
// Keep track so we can remove it later
|
|
625
608
|
this.inboxListeners.set(id, listener);
|
|
626
609
|
|
|
627
610
|
return listener;
|
|
628
|
-
|
|
629
611
|
}
|
|
630
612
|
|
|
631
613
|
private convertMessages(messages: string[]): InboxMessage[] {
|
|
632
|
-
return messages.map(jsonString =>
|
|
633
|
-
try {
|
|
634
|
-
return JSON.parse(jsonString) as InboxMessage;
|
|
635
|
-
} catch (error) {
|
|
636
|
-
Courier.log(`Error parsing message: ${error}`);
|
|
637
|
-
return null;
|
|
638
|
-
}
|
|
639
|
-
}).filter((message): message is InboxMessage => message !== null);
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
private convertMessage(message: string): InboxMessage {
|
|
643
|
-
try {
|
|
644
|
-
return JSON.parse(message) as InboxMessage;
|
|
645
|
-
} catch (error) {
|
|
646
|
-
Courier.log(`Error parsing message: ${error}`);
|
|
647
|
-
throw error;
|
|
648
|
-
}
|
|
614
|
+
return messages.map(jsonString => InboxMessage.fromJson(jsonString));
|
|
649
615
|
}
|
|
650
616
|
|
|
651
617
|
/**
|
|
@@ -664,15 +630,13 @@ class Courier {
|
|
|
664
630
|
|
|
665
631
|
// Remove emitters
|
|
666
632
|
const listener = this.inboxListeners.get(props.listenerId);
|
|
667
|
-
listener?.
|
|
633
|
+
listener?.onLoading?.remove();
|
|
668
634
|
listener?.onError?.remove();
|
|
669
635
|
listener?.onUnreadCountChanged?.remove();
|
|
670
|
-
listener?.
|
|
671
|
-
listener?.
|
|
636
|
+
listener?.onTotalCountChanged?.remove();
|
|
637
|
+
listener?.onMessagesChanged?.remove();
|
|
672
638
|
listener?.onPageAdded?.remove();
|
|
673
|
-
listener?.
|
|
674
|
-
listener?.onMessageAdded?.remove();
|
|
675
|
-
listener?.onMessageRemoved?.remove();
|
|
639
|
+
listener?.onMessageEvent?.remove();
|
|
676
640
|
|
|
677
641
|
// Remove the listener
|
|
678
642
|
this.inboxListeners.delete(props.listenerId);
|
|
@@ -693,15 +657,13 @@ class Courier {
|
|
|
693
657
|
|
|
694
658
|
// Remove all items from inboxListeners
|
|
695
659
|
this.inboxListeners.forEach((listener) => {
|
|
696
|
-
listener?.
|
|
660
|
+
listener?.onLoading?.remove();
|
|
697
661
|
listener?.onError?.remove();
|
|
698
662
|
listener?.onUnreadCountChanged?.remove();
|
|
699
|
-
listener?.
|
|
700
|
-
listener?.
|
|
663
|
+
listener?.onTotalCountChanged?.remove();
|
|
664
|
+
listener?.onMessagesChanged?.remove();
|
|
701
665
|
listener?.onPageAdded?.remove();
|
|
702
|
-
listener?.
|
|
703
|
-
listener?.onMessageAdded?.remove();
|
|
704
|
-
listener?.onMessageRemoved?.remove();
|
|
666
|
+
listener?.onMessageEvent?.remove();
|
|
705
667
|
});
|
|
706
668
|
|
|
707
669
|
this.inboxListeners.clear();
|
|
@@ -2,25 +2,22 @@ import Courier from "..";
|
|
|
2
2
|
import { EmitterSubscription } from "react-native";
|
|
3
3
|
|
|
4
4
|
export class CourierInboxListener {
|
|
5
|
+
readonly listenerId: string;
|
|
6
|
+
|
|
7
|
+
public onLoading?: EmitterSubscription;
|
|
8
|
+
public onError?: EmitterSubscription;
|
|
9
|
+
public onUnreadCountChanged?: EmitterSubscription;
|
|
10
|
+
public onTotalCountChanged?: EmitterSubscription;
|
|
11
|
+
public onMessagesChanged?: EmitterSubscription;
|
|
12
|
+
public onPageAdded?: EmitterSubscription;
|
|
13
|
+
public onMessageEvent?: EmitterSubscription;
|
|
5
14
|
|
|
6
|
-
readonly listenerId: string
|
|
7
|
-
public onInitialLoad?: EmitterSubscription
|
|
8
|
-
public onError?: EmitterSubscription
|
|
9
|
-
public onMessagesChanged?: EmitterSubscription
|
|
10
|
-
public onUnreadCountChanged?: EmitterSubscription
|
|
11
|
-
public onFeedChanged?: EmitterSubscription
|
|
12
|
-
public onArchiveChanged?: EmitterSubscription
|
|
13
|
-
public onPageAdded?: EmitterSubscription
|
|
14
|
-
public onMessageChanged?: EmitterSubscription
|
|
15
|
-
public onMessageAdded?: EmitterSubscription
|
|
16
|
-
public onMessageRemoved?: EmitterSubscription
|
|
17
|
-
|
|
18
15
|
constructor(id: string) {
|
|
19
16
|
this.listenerId = id;
|
|
20
17
|
}
|
|
21
18
|
|
|
22
19
|
public async remove() {
|
|
20
|
+
// Remove this listener from native code
|
|
23
21
|
await Courier.shared.removeInboxListener({ listenerId: this.listenerId });
|
|
24
22
|
}
|
|
25
|
-
|
|
26
23
|
}
|
|
@@ -1,5 +1,29 @@
|
|
|
1
|
-
export
|
|
2
|
-
content?: string | null;
|
|
3
|
-
href?: string | null;
|
|
4
|
-
data?: { [key: string]: any } | null;
|
|
1
|
+
export class InboxAction {
|
|
2
|
+
readonly content?: string | null;
|
|
3
|
+
readonly href?: string | null;
|
|
4
|
+
readonly data?: { [key: string]: any } | null;
|
|
5
|
+
|
|
6
|
+
constructor(
|
|
7
|
+
content: string | null = null,
|
|
8
|
+
href: string | null = null,
|
|
9
|
+
data: { [key: string]: any } | null = null
|
|
10
|
+
) {
|
|
11
|
+
this.content = content;
|
|
12
|
+
this.href = href;
|
|
13
|
+
this.data = data;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
static fromJson(jsonString: string): InboxAction {
|
|
17
|
+
try {
|
|
18
|
+
const parsed = JSON.parse(jsonString);
|
|
19
|
+
return new InboxAction(
|
|
20
|
+
parsed.content,
|
|
21
|
+
parsed.href,
|
|
22
|
+
parsed.data
|
|
23
|
+
);
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.log(`Error parsing action: ${error}`);
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
5
29
|
}
|
|
@@ -1,17 +1,105 @@
|
|
|
1
|
+
import Courier from "..";
|
|
1
2
|
import { InboxAction } from "./InboxAction";
|
|
2
3
|
|
|
3
|
-
export
|
|
4
|
-
messageId: string;
|
|
5
|
-
title?: string | null;
|
|
6
|
-
body?: string | null;
|
|
7
|
-
preview?: string | null;
|
|
8
|
-
created?: string | null;
|
|
9
|
-
actions?: InboxAction[] | null;
|
|
10
|
-
data?: { [key: string]: any } | null;
|
|
11
|
-
read?: boolean | null;
|
|
12
|
-
opened?: boolean | null;
|
|
13
|
-
archived?: boolean | null
|
|
14
|
-
subtitle?: string | null;
|
|
15
|
-
time?: string;
|
|
16
|
-
trackingIds?: { [key: string]: any } | null
|
|
4
|
+
export class InboxMessage {
|
|
5
|
+
readonly messageId: string;
|
|
6
|
+
readonly title?: string | null;
|
|
7
|
+
readonly body?: string | null;
|
|
8
|
+
readonly preview?: string | null;
|
|
9
|
+
readonly created?: string | null;
|
|
10
|
+
readonly actions?: InboxAction[] | null;
|
|
11
|
+
readonly data?: { [key: string]: any } | null;
|
|
12
|
+
readonly read?: boolean | null;
|
|
13
|
+
readonly opened?: boolean | null;
|
|
14
|
+
readonly archived?: boolean | null;
|
|
15
|
+
readonly subtitle?: string | null;
|
|
16
|
+
readonly time?: string;
|
|
17
|
+
readonly trackingIds?: { [key: string]: any } | null;
|
|
18
|
+
|
|
19
|
+
constructor(
|
|
20
|
+
messageId: string,
|
|
21
|
+
title: string | null = null,
|
|
22
|
+
body: string | null = null,
|
|
23
|
+
preview: string | null = null,
|
|
24
|
+
created: string | null = null,
|
|
25
|
+
actions: InboxAction[] | null = null,
|
|
26
|
+
data: { [key: string]: any } | null = null,
|
|
27
|
+
read: boolean | null = null,
|
|
28
|
+
opened: boolean | null = null,
|
|
29
|
+
archived: boolean | null = null,
|
|
30
|
+
subtitle: string | null = null,
|
|
31
|
+
time: string = '',
|
|
32
|
+
trackingIds: { [key: string]: any } | null = null
|
|
33
|
+
) {
|
|
34
|
+
this.messageId = messageId;
|
|
35
|
+
this.title = title;
|
|
36
|
+
this.body = body;
|
|
37
|
+
this.preview = preview;
|
|
38
|
+
this.created = created;
|
|
39
|
+
this.actions = actions;
|
|
40
|
+
this.data = data;
|
|
41
|
+
this.read = read;
|
|
42
|
+
this.opened = opened;
|
|
43
|
+
this.archived = archived;
|
|
44
|
+
this.subtitle = subtitle;
|
|
45
|
+
this.time = time;
|
|
46
|
+
this.trackingIds = trackingIds;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get isRead(): boolean {
|
|
50
|
+
return this.read !== null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get isOpened(): boolean {
|
|
54
|
+
return this.opened !== null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
get isArchived(): boolean {
|
|
58
|
+
return this.archived !== null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
static fromJson(jsonString: string): InboxMessage {
|
|
62
|
+
try {
|
|
63
|
+
const parsed = JSON.parse(jsonString);
|
|
64
|
+
return new InboxMessage(
|
|
65
|
+
parsed.messageId,
|
|
66
|
+
parsed.title,
|
|
67
|
+
parsed.body,
|
|
68
|
+
parsed.preview,
|
|
69
|
+
parsed.created,
|
|
70
|
+
parsed.actions,
|
|
71
|
+
parsed.data,
|
|
72
|
+
parsed.read,
|
|
73
|
+
parsed.opened,
|
|
74
|
+
parsed.archived,
|
|
75
|
+
parsed.subtitle,
|
|
76
|
+
parsed.time,
|
|
77
|
+
parsed.trackingIds
|
|
78
|
+
);
|
|
79
|
+
} catch (error) {
|
|
80
|
+
console.log(`Error parsing message: ${error}`);
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async markAsRead() {
|
|
86
|
+
await Courier.shared.readMessage({ messageId: this.messageId });
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async markAsUnread() {
|
|
90
|
+
await Courier.shared.unreadMessage({ messageId: this.messageId });
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async markAsArchived() {
|
|
94
|
+
await Courier.shared.archiveMessage({ messageId: this.messageId });
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
async markAsOpened() {
|
|
98
|
+
await Courier.shared.openMessage({ messageId: this.messageId });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async markAsClicked() {
|
|
102
|
+
await Courier.shared.clickMessage({ messageId: this.messageId });
|
|
103
|
+
}
|
|
104
|
+
|
|
17
105
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type InboxMessageEvent = 'added' | 'read' | 'unread' | 'opened' | 'archived' | 'clicked';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export type InboxMessageFeed = 'feed' | '
|
|
1
|
+
export type InboxMessageFeed = 'feed' | 'archive';
|
|
@@ -54,7 +54,7 @@ export const CourierInboxView = (props: CourierInboxViewProps) => {
|
|
|
54
54
|
if (props.onClickInboxMessageAtIndex) {
|
|
55
55
|
|
|
56
56
|
const index = event["index"];
|
|
57
|
-
const message =
|
|
57
|
+
const message = InboxMessage.fromJson(event["message"]);
|
|
58
58
|
|
|
59
59
|
props.onClickInboxMessageAtIndex(message, index);
|
|
60
60
|
|
|
@@ -78,7 +78,7 @@ export const CourierInboxView = (props: CourierInboxViewProps) => {
|
|
|
78
78
|
if (props.onLongPressInboxMessageAtIndex) {
|
|
79
79
|
|
|
80
80
|
const index = event["index"];
|
|
81
|
-
const message =
|
|
81
|
+
const message = InboxMessage.fromJson(event["message"]);
|
|
82
82
|
|
|
83
83
|
props.onLongPressInboxMessageAtIndex(message, index);
|
|
84
84
|
|
|
@@ -102,8 +102,8 @@ export const CourierInboxView = (props: CourierInboxViewProps) => {
|
|
|
102
102
|
if (props.onClickInboxActionForMessageAtIndex) {
|
|
103
103
|
|
|
104
104
|
const index = event["index"];
|
|
105
|
-
const action =
|
|
106
|
-
const message =
|
|
105
|
+
const action = InboxAction.fromJson(event["action"]);
|
|
106
|
+
const message = InboxMessage.fromJson(event["message"]);
|
|
107
107
|
|
|
108
108
|
props.onClickInboxActionForMessageAtIndex(action, message, index);
|
|
109
109
|
|
|
Binary file
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
-
<plist version="1.0">
|
|
4
|
-
<dict>
|
|
5
|
-
<key>SchemeUserState</key>
|
|
6
|
-
<dict>
|
|
7
|
-
<key>CourierReactNative.xcscheme_^#shared#^_</key>
|
|
8
|
-
<dict>
|
|
9
|
-
<key>orderHint</key>
|
|
10
|
-
<integer>0</integer>
|
|
11
|
-
</dict>
|
|
12
|
-
</dict>
|
|
13
|
-
</dict>
|
|
14
|
-
</plist>
|