@trycourier/courier-react-native 4.1.1 → 5.0.2
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 +1 -1
- package/android/src/main/java/com/courierreactnative/CourierInboxViewManager.kt +129 -0
- package/android/src/main/java/com/courierreactnative/CourierSharedModule.kt +71 -20
- package/android/src/main/java/com/courierreactnative/Utils.kt +1 -1
- package/courier-react-native.podspec +1 -1
- package/ios/CourierInboxReactNativeManager.m +2 -0
- package/ios/CourierInboxReactNativeManager.swift +165 -0
- package/ios/CourierReactNativeDelegate.m +1 -1
- package/ios/CourierReactNativeEventEmitter.swift +1 -1
- package/ios/CourierReactNativeModule.m +9 -2
- package/ios/CourierSharedModule.swift +121 -50
- package/lib/commonjs/index.js +114 -22
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/CourierInboxListener.js.map +1 -1
- package/lib/commonjs/models/InboxMessageFeed.js +2 -0
- package/lib/commonjs/models/InboxMessageFeed.js.map +1 -0
- package/lib/commonjs/models/InboxMessageSet.js +6 -0
- package/lib/commonjs/models/InboxMessageSet.js.map +1 -0
- package/lib/commonjs/views/CourierInboxView.js +1 -0
- package/lib/commonjs/views/CourierInboxView.js.map +1 -1
- package/lib/module/index.js +108 -22
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/CourierInboxListener.js.map +1 -1
- package/lib/module/models/InboxMessageFeed.js +2 -0
- package/lib/module/models/InboxMessageFeed.js.map +1 -0
- package/lib/module/models/InboxMessageSet.js +2 -0
- package/lib/module/models/InboxMessageSet.js.map +1 -0
- package/lib/module/views/CourierInboxView.js +1 -0
- package/lib/module/views/CourierInboxView.js.map +1 -1
- package/lib/typescript/src/index.d.ts +22 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/models/CourierInboxListener.d.ts +7 -0
- package/lib/typescript/src/models/CourierInboxListener.d.ts.map +1 -1
- package/lib/typescript/src/models/CourierInboxTheme.d.ts +27 -0
- package/lib/typescript/src/models/CourierInboxTheme.d.ts.map +1 -1
- package/lib/typescript/src/models/InboxMessageFeed.d.ts +2 -0
- package/lib/typescript/src/models/InboxMessageFeed.d.ts.map +1 -0
- package/lib/typescript/src/models/InboxMessageSet.d.ts +7 -0
- package/lib/typescript/src/models/InboxMessageSet.d.ts.map +1 -0
- package/lib/typescript/src/views/CourierInboxView.d.ts +1 -0
- package/lib/typescript/src/views/CourierInboxView.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.tsx +125 -27
- package/src/models/CourierInboxListener.tsx +8 -1
- package/src/models/CourierInboxTheme.tsx +33 -0
- package/src/models/InboxMessageFeed.tsx +1 -0
- package/src/models/InboxMessageSet.tsx +7 -0
- package/src/views/CourierInboxView.tsx +2 -0
package/src/index.tsx
CHANGED
|
@@ -13,6 +13,8 @@ import { Modules } from './Modules';
|
|
|
13
13
|
import Broadcaster from './Broadcaster';
|
|
14
14
|
import { CourierClient } from './client/CourierClient';
|
|
15
15
|
import { Events, Utils } from './utils';
|
|
16
|
+
import { InboxMessageFeed } from './models/InboxMessageFeed';
|
|
17
|
+
import { InboxMessageSet } from './models/InboxMessageSet';
|
|
16
18
|
|
|
17
19
|
export { CourierClient } from './client/CourierClient';
|
|
18
20
|
export { BrandClient } from './client/BrandClient';
|
|
@@ -35,6 +37,7 @@ export { CourierButton } from './models/CourierButton';
|
|
|
35
37
|
export { CourierInfoViewStyle } from './models/CourierInfoViewStyle';
|
|
36
38
|
export { iOS_CourierCell } from './models/iOS_CourierCell';
|
|
37
39
|
export { iOS_CourierSheet } from './models/iOS_CourierSheet';
|
|
40
|
+
export { InboxMessageSet } from './models/InboxMessageSet';
|
|
38
41
|
export { CourierInboxButtonStyle, CourierInboxTextStyle, CourierInboxUnreadIndicatorStyle, CourierInboxTheme } from './models/CourierInboxTheme';
|
|
39
42
|
export { CourierPreferencesTheme, CourierPreferencesMode, CourierPreferencesChannel } from './models/CourierPreferencesTheme';
|
|
40
43
|
export type iOSForegroundPresentationOptions = 'sound' | 'badge' | 'list' | 'banner';
|
|
@@ -506,22 +509,50 @@ class Courier {
|
|
|
506
509
|
* @param {Object} props - The properties object.
|
|
507
510
|
* @param {Function} [props.onInitialLoad] - Callback function called when the inbox is initially loaded.
|
|
508
511
|
* @param {Function} [props.onError] - Callback function called when an error occurs. Receives the error message as a parameter.
|
|
509
|
-
* @param {Function} [props.
|
|
512
|
+
* @param {Function} [props.onUnreadCountChanged] - Callback function called when the unread count changes.
|
|
513
|
+
* @param {Function} [props.onFeedChanged] - Callback function called when the feed changes.
|
|
514
|
+
* @param {Function} [props.onArchiveChanged] - Callback function called when the archive changes.
|
|
515
|
+
* @param {Function} [props.onPageAdded] - Callback function called when a new page is added.
|
|
516
|
+
* @param {Function} [props.onMessageChanged] - Callback function called when a message changes.
|
|
517
|
+
* @param {Function} [props.onMessageAdded] - Callback function called when a new message is added.
|
|
518
|
+
* @param {Function} [props.onMessageRemoved] - Callback function called when a message is removed.
|
|
510
519
|
* @returns {CourierInboxListener} A listener object that can be used to remove the listener later.
|
|
511
520
|
*/
|
|
512
|
-
public addInboxListener(props: {
|
|
521
|
+
public addInboxListener(props: {
|
|
522
|
+
onInitialLoad?: () => void,
|
|
523
|
+
onError?: (error: string) => void,
|
|
524
|
+
onUnreadCountChanged?: (unreadCount: number) => void,
|
|
525
|
+
onFeedChanged?: (messageSet: InboxMessageSet) => void,
|
|
526
|
+
onArchiveChanged?: (messageSet: InboxMessageSet) => void,
|
|
527
|
+
onPageAdded?: (feed: InboxMessageFeed, messageSet: InboxMessageSet) => void,
|
|
528
|
+
onMessageChanged?: (feed: InboxMessageFeed, index: number, message: InboxMessage) => void,
|
|
529
|
+
onMessageAdded?: (feed: InboxMessageFeed, index: number, message: InboxMessage) => void,
|
|
530
|
+
onMessageRemoved?: (feed: InboxMessageFeed, index: number, message: InboxMessage) => void
|
|
531
|
+
}): CourierInboxListener {
|
|
513
532
|
|
|
514
533
|
const listenerIds = {
|
|
515
534
|
loading: `inbox_loading_${Utils.generateUUID()}`,
|
|
516
535
|
error: `inbox_error_${Utils.generateUUID()}`,
|
|
517
|
-
|
|
536
|
+
unreadCount: `inbox_unread_count_${Utils.generateUUID()}`,
|
|
537
|
+
feed: `inbox_feed_${Utils.generateUUID()}`,
|
|
538
|
+
archive: `inbox_archive_${Utils.generateUUID()}`,
|
|
539
|
+
pageAdded: `inbox_page_added_${Utils.generateUUID()}`,
|
|
540
|
+
messageChanged: `inbox_message_changed_${Utils.generateUUID()}`,
|
|
541
|
+
messageAdded: `inbox_message_added_${Utils.generateUUID()}`,
|
|
542
|
+
messageRemoved: `inbox_message_removed_${Utils.generateUUID()}`
|
|
518
543
|
}
|
|
519
544
|
|
|
520
545
|
// Set the listener id
|
|
521
546
|
const id = Modules.Shared.addInboxListener(
|
|
522
547
|
listenerIds.loading,
|
|
523
548
|
listenerIds.error,
|
|
524
|
-
listenerIds.
|
|
549
|
+
listenerIds.unreadCount,
|
|
550
|
+
listenerIds.feed,
|
|
551
|
+
listenerIds.archive,
|
|
552
|
+
listenerIds.pageAdded,
|
|
553
|
+
listenerIds.messageChanged,
|
|
554
|
+
listenerIds.messageAdded,
|
|
555
|
+
listenerIds.messageRemoved
|
|
525
556
|
);
|
|
526
557
|
|
|
527
558
|
// Create the initial listeners
|
|
@@ -535,32 +566,79 @@ class Courier {
|
|
|
535
566
|
props.onError?.(event);
|
|
536
567
|
});
|
|
537
568
|
|
|
538
|
-
listener.
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
569
|
+
listener.onUnreadCountChanged = this.sharedBroadcaster.addListener(listenerIds.unreadCount, (event: any) => {
|
|
570
|
+
props.onUnreadCountChanged?.(event);
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
listener.onFeedChanged = this.sharedBroadcaster.addListener(listenerIds.feed, (event: any) => {
|
|
574
|
+
const convertedMessages = this.convertMessages(event.messages);
|
|
575
|
+
const messageSet: InboxMessageSet = {
|
|
576
|
+
messages: convertedMessages,
|
|
577
|
+
totalMessageCount: event.totalMessageCount,
|
|
578
|
+
canPaginate: event.canPaginate
|
|
579
|
+
}
|
|
580
|
+
props.onFeedChanged?.(messageSet);
|
|
581
|
+
});
|
|
582
|
+
|
|
583
|
+
listener.onArchiveChanged = this.sharedBroadcaster.addListener(listenerIds.archive, (event: any) => {
|
|
584
|
+
const convertedMessages = this.convertMessages(event.messages);
|
|
585
|
+
const messageSet: InboxMessageSet = {
|
|
586
|
+
messages: convertedMessages,
|
|
587
|
+
totalMessageCount: event.totalMessageCount,
|
|
588
|
+
canPaginate: event.canPaginate
|
|
589
|
+
}
|
|
590
|
+
props.onArchiveChanged?.(messageSet);
|
|
591
|
+
});
|
|
592
|
+
|
|
593
|
+
listener.onPageAdded = this.sharedBroadcaster.addListener(listenerIds.pageAdded, (event: any) => {
|
|
594
|
+
const convertedMessages = this.convertMessages(event.messages);
|
|
595
|
+
const messageSet: InboxMessageSet = {
|
|
596
|
+
messages: convertedMessages,
|
|
597
|
+
totalMessageCount: event.totalMessageCount,
|
|
598
|
+
canPaginate: event.canPaginate
|
|
599
|
+
}
|
|
600
|
+
props.onPageAdded?.(event.feed === 'archived' ? 'archived' : 'feed', messageSet);
|
|
601
|
+
});
|
|
602
|
+
|
|
603
|
+
listener.onMessageChanged = this.sharedBroadcaster.addListener(listenerIds.messageChanged, (event: any) => {
|
|
604
|
+
const convertedMessage = this.convertMessage(event.message);
|
|
605
|
+
props.onMessageChanged?.(event.feed === 'archived' ? 'archived' : 'feed', event.index, convertedMessage);
|
|
606
|
+
});
|
|
607
|
+
|
|
608
|
+
listener.onMessageAdded = this.sharedBroadcaster.addListener(listenerIds.messageAdded, (event: any) => {
|
|
609
|
+
const convertedMessage = this.convertMessage(event.message);
|
|
610
|
+
props.onMessageAdded?.(event.feed === 'archived' ? 'archived' : 'feed', event.index, convertedMessage);
|
|
611
|
+
});
|
|
612
|
+
|
|
613
|
+
listener.onMessageRemoved = this.sharedBroadcaster.addListener(listenerIds.messageRemoved, (event: any) => {
|
|
614
|
+
const convertedMessage = this.convertMessage(event.message);
|
|
615
|
+
props.onMessageRemoved?.(event.feed === 'archived' ? 'archived' : 'feed', event.index, convertedMessage);
|
|
557
616
|
});
|
|
558
617
|
|
|
559
618
|
// Add listener to manager
|
|
560
619
|
this.inboxListeners.set(id, listener);
|
|
561
620
|
|
|
562
621
|
return listener;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
private convertMessages(messages: string[]): InboxMessage[] {
|
|
625
|
+
return messages.map(jsonString => {
|
|
626
|
+
try {
|
|
627
|
+
return JSON.parse(jsonString) as InboxMessage;
|
|
628
|
+
} catch (error) {
|
|
629
|
+
Courier.log(`Error parsing message: ${error}`);
|
|
630
|
+
return null;
|
|
631
|
+
}
|
|
632
|
+
}).filter((message): message is InboxMessage => message !== null);
|
|
633
|
+
}
|
|
563
634
|
|
|
635
|
+
private convertMessage(message: string): InboxMessage {
|
|
636
|
+
try {
|
|
637
|
+
return JSON.parse(message) as InboxMessage;
|
|
638
|
+
} catch (error) {
|
|
639
|
+
Courier.log(`Error parsing message: ${error}`);
|
|
640
|
+
throw error;
|
|
641
|
+
}
|
|
564
642
|
}
|
|
565
643
|
|
|
566
644
|
/**
|
|
@@ -581,7 +659,13 @@ class Courier {
|
|
|
581
659
|
const listener = this.inboxListeners.get(props.listenerId);
|
|
582
660
|
listener?.onInitialLoad?.remove();
|
|
583
661
|
listener?.onError?.remove();
|
|
584
|
-
listener?.
|
|
662
|
+
listener?.onUnreadCountChanged?.remove();
|
|
663
|
+
listener?.onFeedChanged?.remove();
|
|
664
|
+
listener?.onArchiveChanged?.remove();
|
|
665
|
+
listener?.onPageAdded?.remove();
|
|
666
|
+
listener?.onMessageChanged?.remove();
|
|
667
|
+
listener?.onMessageAdded?.remove();
|
|
668
|
+
listener?.onMessageRemoved?.remove();
|
|
585
669
|
|
|
586
670
|
// Remove the listener
|
|
587
671
|
this.inboxListeners.delete(props.listenerId);
|
|
@@ -604,7 +688,13 @@ class Courier {
|
|
|
604
688
|
this.inboxListeners.forEach((listener) => {
|
|
605
689
|
listener?.onInitialLoad?.remove();
|
|
606
690
|
listener?.onError?.remove();
|
|
607
|
-
listener?.
|
|
691
|
+
listener?.onUnreadCountChanged?.remove();
|
|
692
|
+
listener?.onFeedChanged?.remove();
|
|
693
|
+
listener?.onArchiveChanged?.remove();
|
|
694
|
+
listener?.onPageAdded?.remove();
|
|
695
|
+
listener?.onMessageChanged?.remove();
|
|
696
|
+
listener?.onMessageAdded?.remove();
|
|
697
|
+
listener?.onMessageRemoved?.remove();
|
|
608
698
|
});
|
|
609
699
|
this.inboxListeners.clear();
|
|
610
700
|
|
|
@@ -623,11 +713,19 @@ class Courier {
|
|
|
623
713
|
* Fetches the next page of inbox messages.
|
|
624
714
|
* @returns {Promise<InboxMessage[]>} A promise that resolves with an array of fetched inbox messages.
|
|
625
715
|
*/
|
|
626
|
-
public async fetchNextPageOfMessages(): Promise<InboxMessage[]> {
|
|
627
|
-
const messages = await Modules.Shared.fetchNextPageOfMessages();
|
|
716
|
+
public async fetchNextPageOfMessages(props: { inboxMessageFeed: InboxMessageFeed }): Promise<InboxMessage[]> {
|
|
717
|
+
const messages = await Modules.Shared.fetchNextPageOfMessages(props.inboxMessageFeed);
|
|
628
718
|
return messages.map((message: string) => JSON.parse(message));
|
|
629
719
|
}
|
|
630
720
|
|
|
631
721
|
}
|
|
632
722
|
|
|
723
|
+
// Handle Hot Reload cleanup
|
|
724
|
+
if (__DEV__) {
|
|
725
|
+
console.log('Courier SDK is running in development mode');
|
|
726
|
+
Courier.shared.removeAllAuthenticationListeners();
|
|
727
|
+
Courier.shared.removeAllInboxListeners();
|
|
728
|
+
Courier.shared.removeAllPushNotificationListeners();
|
|
729
|
+
}
|
|
730
|
+
|
|
633
731
|
export default Courier;
|
|
@@ -7,7 +7,14 @@ export class CourierInboxListener {
|
|
|
7
7
|
public onInitialLoad?: EmitterSubscription
|
|
8
8
|
public onError?: EmitterSubscription
|
|
9
9
|
public onMessagesChanged?: EmitterSubscription
|
|
10
|
-
|
|
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
|
+
|
|
11
18
|
constructor(id: string) {
|
|
12
19
|
this.listenerId = id;
|
|
13
20
|
}
|
|
@@ -17,8 +17,41 @@ export interface CourierInboxUnreadIndicatorStyle {
|
|
|
17
17
|
color?: string
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
export interface CourierInboxTabIndicatorStyle {
|
|
21
|
+
font?: CourierFont
|
|
22
|
+
color?: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface CourierInboxTabItemStyle {
|
|
26
|
+
font?: CourierFont
|
|
27
|
+
indicator?: CourierInboxTabIndicatorStyle
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface CourierInboxTabStyle {
|
|
31
|
+
selected?: CourierInboxTabItemStyle
|
|
32
|
+
unselected?: CourierInboxTabItemStyle
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface CourierSwipeActionStyle {
|
|
36
|
+
icon?: string
|
|
37
|
+
color?: string
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface CourierReadingSwipeActionStyle {
|
|
41
|
+
read?: CourierSwipeActionStyle
|
|
42
|
+
unread?: CourierSwipeActionStyle
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface CourierArchivingSwipeActionStyle {
|
|
46
|
+
archive?: CourierSwipeActionStyle
|
|
47
|
+
}
|
|
48
|
+
|
|
20
49
|
export interface CourierInboxTheme {
|
|
21
50
|
brandId?: string,
|
|
51
|
+
tabIndicatorColor?: string,
|
|
52
|
+
tabStyle?: CourierInboxTabStyle,
|
|
53
|
+
readingSwipeActionStyle?: CourierReadingSwipeActionStyle
|
|
54
|
+
archivingSwipeActionStyle?: CourierArchivingSwipeActionStyle
|
|
22
55
|
loadingIndicatorColor?: string
|
|
23
56
|
unreadIndicatorStyle?: CourierInboxUnreadIndicatorStyle
|
|
24
57
|
titleStyle?: CourierInboxTextStyle
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type InboxMessageFeed = 'feed' | 'archived';
|
|
@@ -6,6 +6,7 @@ import { CourierInboxTheme } from "src/models/CourierInboxTheme";
|
|
|
6
6
|
import { Modules } from "../Modules";
|
|
7
7
|
|
|
8
8
|
type CourierInboxViewProps = {
|
|
9
|
+
canSwipePages?: boolean,
|
|
9
10
|
theme?: {
|
|
10
11
|
light?: CourierInboxTheme,
|
|
11
12
|
dark?: CourierInboxTheme
|
|
@@ -107,6 +108,7 @@ export const CourierInboxView = (props: CourierInboxViewProps) => {
|
|
|
107
108
|
|
|
108
109
|
return (
|
|
109
110
|
<CourierInbox
|
|
111
|
+
canSwipePages={props.canSwipePages ?? false}
|
|
110
112
|
theme={props.theme ?? { light: undefined, dark: undefined }}
|
|
111
113
|
onClickInboxMessageAtIndex={(event: any) => onClickInboxMessageAtIndex(event.nativeEvent)}
|
|
112
114
|
onClickInboxActionForMessageAtIndex={(event: any) => onClickInboxActionForMessageAtIndex(event.nativeEvent)}
|