@trycourier/courier-react-native 4.1.1 → 5.0.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 +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 +84 -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/views/CourierInboxView.js +1 -0
- package/lib/commonjs/views/CourierInboxView.js.map +1 -1
- package/lib/module/index.js +84 -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/views/CourierInboxView.js +1 -0
- package/lib/module/views/CourierInboxView.js.map +1 -1
- package/lib/typescript/src/index.d.ts +20 -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/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 +100 -27
- package/src/models/CourierInboxListener.tsx +8 -1
- package/src/models/CourierInboxTheme.tsx +33 -0
- package/src/models/InboxMessageFeed.tsx +1 -0
- package/src/views/CourierInboxView.tsx +2 -0
package/src/index.tsx
CHANGED
|
@@ -13,6 +13,7 @@ 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';
|
|
16
17
|
|
|
17
18
|
export { CourierClient } from './client/CourierClient';
|
|
18
19
|
export { BrandClient } from './client/BrandClient';
|
|
@@ -506,22 +507,50 @@ class Courier {
|
|
|
506
507
|
* @param {Object} props - The properties object.
|
|
507
508
|
* @param {Function} [props.onInitialLoad] - Callback function called when the inbox is initially loaded.
|
|
508
509
|
* @param {Function} [props.onError] - Callback function called when an error occurs. Receives the error message as a parameter.
|
|
509
|
-
* @param {Function} [props.
|
|
510
|
+
* @param {Function} [props.onUnreadCountChanged] - Callback function called when the unread count changes.
|
|
511
|
+
* @param {Function} [props.onFeedChanged] - Callback function called when the feed changes.
|
|
512
|
+
* @param {Function} [props.onArchiveChanged] - Callback function called when the archive changes.
|
|
513
|
+
* @param {Function} [props.onPageAdded] - Callback function called when a new page is added.
|
|
514
|
+
* @param {Function} [props.onMessageChanged] - Callback function called when a message changes.
|
|
515
|
+
* @param {Function} [props.onMessageAdded] - Callback function called when a new message is added.
|
|
516
|
+
* @param {Function} [props.onMessageRemoved] - Callback function called when a message is removed.
|
|
510
517
|
* @returns {CourierInboxListener} A listener object that can be used to remove the listener later.
|
|
511
518
|
*/
|
|
512
|
-
public addInboxListener(props: {
|
|
519
|
+
public addInboxListener(props: {
|
|
520
|
+
onInitialLoad?: () => void,
|
|
521
|
+
onError?: (error: string) => void,
|
|
522
|
+
onUnreadCountChanged?: (unreadCount: number) => void,
|
|
523
|
+
onFeedChanged?: (messages: InboxMessage[], totalMessageCount: number, canPaginate: boolean) => void,
|
|
524
|
+
onArchiveChanged?: (messages: InboxMessage[], totalMessageCount: number, canPaginate: boolean) => void,
|
|
525
|
+
onPageAdded?: (feed: InboxMessageFeed, messages: InboxMessage[], totalMessageCount: number, canPaginate: boolean) => void,
|
|
526
|
+
onMessageChanged?: (feed: InboxMessageFeed, index: number, message: InboxMessage) => void,
|
|
527
|
+
onMessageAdded?: (feed: InboxMessageFeed, index: number, message: InboxMessage) => void,
|
|
528
|
+
onMessageRemoved?: (feed: InboxMessageFeed, index: number, message: InboxMessage) => void
|
|
529
|
+
}): CourierInboxListener {
|
|
513
530
|
|
|
514
531
|
const listenerIds = {
|
|
515
532
|
loading: `inbox_loading_${Utils.generateUUID()}`,
|
|
516
533
|
error: `inbox_error_${Utils.generateUUID()}`,
|
|
517
|
-
|
|
534
|
+
unreadCount: `inbox_unread_count_${Utils.generateUUID()}`,
|
|
535
|
+
feed: `inbox_feed_${Utils.generateUUID()}`,
|
|
536
|
+
archive: `inbox_archive_${Utils.generateUUID()}`,
|
|
537
|
+
pageAdded: `inbox_page_added_${Utils.generateUUID()}`,
|
|
538
|
+
messageChanged: `inbox_message_changed_${Utils.generateUUID()}`,
|
|
539
|
+
messageAdded: `inbox_message_added_${Utils.generateUUID()}`,
|
|
540
|
+
messageRemoved: `inbox_message_removed_${Utils.generateUUID()}`
|
|
518
541
|
}
|
|
519
542
|
|
|
520
543
|
// Set the listener id
|
|
521
544
|
const id = Modules.Shared.addInboxListener(
|
|
522
545
|
listenerIds.loading,
|
|
523
546
|
listenerIds.error,
|
|
524
|
-
listenerIds.
|
|
547
|
+
listenerIds.unreadCount,
|
|
548
|
+
listenerIds.feed,
|
|
549
|
+
listenerIds.archive,
|
|
550
|
+
listenerIds.pageAdded,
|
|
551
|
+
listenerIds.messageChanged,
|
|
552
|
+
listenerIds.messageAdded,
|
|
553
|
+
listenerIds.messageRemoved
|
|
525
554
|
);
|
|
526
555
|
|
|
527
556
|
// Create the initial listeners
|
|
@@ -535,32 +564,64 @@ class Courier {
|
|
|
535
564
|
props.onError?.(event);
|
|
536
565
|
});
|
|
537
566
|
|
|
538
|
-
listener.
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
567
|
+
listener.onUnreadCountChanged = this.sharedBroadcaster.addListener(listenerIds.unreadCount, (event: any) => {
|
|
568
|
+
props.onUnreadCountChanged?.(event);
|
|
569
|
+
});
|
|
570
|
+
|
|
571
|
+
listener.onFeedChanged = this.sharedBroadcaster.addListener(listenerIds.feed, (event: any) => {
|
|
572
|
+
const convertedMessages = this.convertMessages(event.messages);
|
|
573
|
+
props.onFeedChanged?.(convertedMessages, event.totalMessageCount, event.canPaginate);
|
|
574
|
+
});
|
|
575
|
+
|
|
576
|
+
listener.onArchiveChanged = this.sharedBroadcaster.addListener(listenerIds.archive, (event: any) => {
|
|
577
|
+
const convertedMessages = this.convertMessages(event.messages);
|
|
578
|
+
props.onArchiveChanged?.(convertedMessages, event.totalMessageCount, event.canPaginate);
|
|
579
|
+
});
|
|
580
|
+
|
|
581
|
+
listener.onPageAdded = this.sharedBroadcaster.addListener(listenerIds.pageAdded, (event: any) => {
|
|
582
|
+
const convertedMessages = this.convertMessages(event.messages);
|
|
583
|
+
props.onPageAdded?.(event.feed === 'archived' ? 'archived' : 'feed', convertedMessages, event.totalMessageCount, event.canPaginate);
|
|
584
|
+
});
|
|
585
|
+
|
|
586
|
+
listener.onMessageChanged = this.sharedBroadcaster.addListener(listenerIds.messageChanged, (event: any) => {
|
|
587
|
+
const convertedMessage = this.convertMessage(event.message);
|
|
588
|
+
props.onMessageChanged?.(event.feed === 'archived' ? 'archived' : 'feed', event.index, convertedMessage);
|
|
589
|
+
});
|
|
590
|
+
|
|
591
|
+
listener.onMessageAdded = this.sharedBroadcaster.addListener(listenerIds.messageAdded, (event: any) => {
|
|
592
|
+
const convertedMessage = this.convertMessage(event.message);
|
|
593
|
+
props.onMessageAdded?.(event.feed === 'archived' ? 'archived' : 'feed', event.index, convertedMessage);
|
|
594
|
+
});
|
|
595
|
+
|
|
596
|
+
listener.onMessageRemoved = this.sharedBroadcaster.addListener(listenerIds.messageRemoved, (event: any) => {
|
|
597
|
+
const convertedMessage = this.convertMessage(event.message);
|
|
598
|
+
props.onMessageRemoved?.(event.feed === 'archived' ? 'archived' : 'feed', event.index, convertedMessage);
|
|
557
599
|
});
|
|
558
600
|
|
|
559
601
|
// Add listener to manager
|
|
560
602
|
this.inboxListeners.set(id, listener);
|
|
561
603
|
|
|
562
604
|
return listener;
|
|
605
|
+
}
|
|
563
606
|
|
|
607
|
+
private convertMessages(messages: string[]): InboxMessage[] {
|
|
608
|
+
return messages.map(jsonString => {
|
|
609
|
+
try {
|
|
610
|
+
return JSON.parse(jsonString) as InboxMessage;
|
|
611
|
+
} catch (error) {
|
|
612
|
+
Courier.log(`Error parsing message: ${error}`);
|
|
613
|
+
return null;
|
|
614
|
+
}
|
|
615
|
+
}).filter((message): message is InboxMessage => message !== null);
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
private convertMessage(message: string): InboxMessage {
|
|
619
|
+
try {
|
|
620
|
+
return JSON.parse(message) as InboxMessage;
|
|
621
|
+
} catch (error) {
|
|
622
|
+
Courier.log(`Error parsing message: ${error}`);
|
|
623
|
+
throw error;
|
|
624
|
+
}
|
|
564
625
|
}
|
|
565
626
|
|
|
566
627
|
/**
|
|
@@ -581,7 +642,13 @@ class Courier {
|
|
|
581
642
|
const listener = this.inboxListeners.get(props.listenerId);
|
|
582
643
|
listener?.onInitialLoad?.remove();
|
|
583
644
|
listener?.onError?.remove();
|
|
584
|
-
listener?.
|
|
645
|
+
listener?.onUnreadCountChanged?.remove();
|
|
646
|
+
listener?.onFeedChanged?.remove();
|
|
647
|
+
listener?.onArchiveChanged?.remove();
|
|
648
|
+
listener?.onPageAdded?.remove();
|
|
649
|
+
listener?.onMessageChanged?.remove();
|
|
650
|
+
listener?.onMessageAdded?.remove();
|
|
651
|
+
listener?.onMessageRemoved?.remove();
|
|
585
652
|
|
|
586
653
|
// Remove the listener
|
|
587
654
|
this.inboxListeners.delete(props.listenerId);
|
|
@@ -604,7 +671,13 @@ class Courier {
|
|
|
604
671
|
this.inboxListeners.forEach((listener) => {
|
|
605
672
|
listener?.onInitialLoad?.remove();
|
|
606
673
|
listener?.onError?.remove();
|
|
607
|
-
listener?.
|
|
674
|
+
listener?.onUnreadCountChanged?.remove();
|
|
675
|
+
listener?.onFeedChanged?.remove();
|
|
676
|
+
listener?.onArchiveChanged?.remove();
|
|
677
|
+
listener?.onPageAdded?.remove();
|
|
678
|
+
listener?.onMessageChanged?.remove();
|
|
679
|
+
listener?.onMessageAdded?.remove();
|
|
680
|
+
listener?.onMessageRemoved?.remove();
|
|
608
681
|
});
|
|
609
682
|
this.inboxListeners.clear();
|
|
610
683
|
|
|
@@ -623,8 +696,8 @@ class Courier {
|
|
|
623
696
|
* Fetches the next page of inbox messages.
|
|
624
697
|
* @returns {Promise<InboxMessage[]>} A promise that resolves with an array of fetched inbox messages.
|
|
625
698
|
*/
|
|
626
|
-
public async fetchNextPageOfMessages(): Promise<InboxMessage[]> {
|
|
627
|
-
const messages = await Modules.Shared.fetchNextPageOfMessages();
|
|
699
|
+
public async fetchNextPageOfMessages(props: { inboxMessageFeed: InboxMessageFeed }): Promise<InboxMessage[]> {
|
|
700
|
+
const messages = await Modules.Shared.fetchNextPageOfMessages(props.inboxMessageFeed);
|
|
628
701
|
return messages.map((message: string) => JSON.parse(message));
|
|
629
702
|
}
|
|
630
703
|
|
|
@@ -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)}
|