From d583b5f81868bf64c1292b3f944f4b85ddca3888 Mon Sep 17 00:00:00 2001 From: Ryan Lepinski Date: Wed, 2 Oct 2024 09:08:54 -0700 Subject: [PATCH] Add show message center methods (#598) --- android/src/main/AndroidManifest.xml | 9 ++++++ .../urbanairship/reactnative/AirshipModule.kt | 12 +++++++ ios/AirshipReactNative.swift | 10 ++++++ ios/RTNAirship.mm | 22 +++++++++++++ src/AirshipMessageCenter.ts | 32 +++++++++++++++---- src/NativeRTNAirship.ts | 2 ++ 6 files changed, 81 insertions(+), 6 deletions(-) diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index f47146ca..90af1c90 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -14,8 +14,16 @@ + + + + + + + @@ -24,6 +32,7 @@ diff --git a/android/src/main/java/com/urbanairship/reactnative/AirshipModule.kt b/android/src/main/java/com/urbanairship/reactnative/AirshipModule.kt index 5a55566f..117951ed 100644 --- a/android/src/main/java/com/urbanairship/reactnative/AirshipModule.kt +++ b/android/src/main/java/com/urbanairship/reactnative/AirshipModule.kt @@ -634,6 +634,18 @@ class AirshipModule internal constructor(val context: ReactApplicationContext) : proxy.messageCenter.setAutoLaunchDefaultMessageCenter(enabled) } + override fun messageCenterShowMessageCenter(messageId: String?, promise: Promise) { + promise.resolveResult { + proxy.messageCenter.showMessageCenter(messageId) + } + } + + override fun messageCenterShowMessageView(messageId: String?, promise: Promise) { + promise.resolveResult { + proxy.messageCenter.showMessageView(requireNotNull(messageId)) + } + } + @ReactMethod override fun preferenceCenterDisplay(preferenceCenterId: String?, promise: Promise) { promise.resolveResult { diff --git a/ios/AirshipReactNative.swift b/ios/AirshipReactNative.swift index cfa74c0d..4bb4f152 100644 --- a/ios/AirshipReactNative.swift +++ b/ios/AirshipReactNative.swift @@ -512,6 +512,16 @@ public extension AirshipReactNative { try AirshipProxy.shared.messageCenter.display(messageID: messageId) } + @MainActor @objc + func messageCenterShowMessageView(messageId: String) throws { + try AirshipProxy.shared.messageCenter.showMessageView(messageID: messageId) + } + + @MainActor @objc + func messageCenterShowMessageCenter(messageId: String?) throws { + try AirshipProxy.shared.messageCenter.showMessageCenter(messageID: messageId) + } + @objc func messageCenterRefresh() async throws { try await AirshipProxy.shared.messageCenter.refresh() diff --git a/ios/RTNAirship.mm b/ios/RTNAirship.mm index 971f3227..033721d0 100644 --- a/ios/RTNAirship.mm +++ b/ios/RTNAirship.mm @@ -594,6 +594,28 @@ + (BOOL)requiresMainQueueSetup { [self handleResult:nil error:error resolve:resolve reject:reject]; } +RCT_REMAP_METHOD(messageCenterShowMessageCenter, + messageCenterShowMessageCenter:(NSString *)messageId + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject) { + NSError *error; + [AirshipReactNative.shared messageCenterShowMessageCenterWithMessageId:messageId + error:&error]; + + [self handleResult:nil error:error resolve:resolve reject:reject]; +} + +RCT_REMAP_METHOD(messageCenterShowMessageView, + messageCenterShowMessageView:(NSString *)messageId + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject) { + NSError *error; + [AirshipReactNative.shared messageCenterShowMessageViewWithMessageId:messageId + error:&error]; + + [self handleResult:nil error:error resolve:resolve reject:reject]; +} + RCT_REMAP_METHOD(messageCenterGetMessages, messageCenterGetMessages:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { diff --git a/src/AirshipMessageCenter.ts b/src/AirshipMessageCenter.ts index ce687b5b..ccd5b582 100644 --- a/src/AirshipMessageCenter.ts +++ b/src/AirshipMessageCenter.ts @@ -25,7 +25,7 @@ export class AirshipMessageCenter { /** * Marks a message as read. * @param messageId The message Id. - * @returns A promise. Will reject if the message is not + * @returns A promise. Will reject if the message is not * found or if takeOff is not called. */ public markMessageRead(messageId: string): Promise { @@ -35,7 +35,7 @@ export class AirshipMessageCenter { /** * Deletes a message. * @param messageId The message Id. - * @returns A promise. Will reject if the message is not + * @returns A promise. Will reject if the message is not * found or if takeOff is not called. */ public deleteMessage(messageId: string): Promise { @@ -52,9 +52,9 @@ export class AirshipMessageCenter { /** * Requests to display the Message Center. - * - * Will either emit an event to display the - * Message Center if auto launch message center + * + * Will either emit an event to display the + * Message Center if auto launch message center * is disabled, or display the OOTB message center. * @param messageId Optional message Id. * @returns A promise. @@ -63,9 +63,29 @@ export class AirshipMessageCenter { return this.module.messageCenterDisplay(messageId); } + /** + * Overlays the Message Center regardless if auto launch Message Center is enabled or not. + * + * @param messageId Optional message Id. + * @returns A promise. + */ + public showMessageCenter(messageId?: string): Promise { + return this.module.messageCenterShowMessageCenter(messageId); + } + + /** + * Overlays the message view regardless if auto launch Message Center is enabled or not. + * + * @param messageId The message Id. + * @returns A promise. + */ + public showMessageView(messageId: string): Promise { + return this.module.messageCenterShowMessageView(messageId); + } + /** * Refreshes the messages. - * @returns A promise. Will reject if the list fails to refresh or if + * @returns A promise. Will reject if the list fails to refresh or if * takeOff is not called yet. */ public refreshMessages(): Promise { diff --git a/src/NativeRTNAirship.ts b/src/NativeRTNAirship.ts index 9ee88914..acdd0b56 100644 --- a/src/NativeRTNAirship.ts +++ b/src/NativeRTNAirship.ts @@ -96,6 +96,8 @@ export interface Spec extends TurboModule { messageCenterMarkMessageRead(messageId: string): Promise; messageCenterRefresh(): Promise; messageCenterSetAutoLaunchDefaultMessageCenter(enabled: boolean): void; + messageCenterShowMessageCenter(messageId?: string): Promise; + messageCenterShowMessageView(messageId: string): Promise; // Preference Center preferenceCenterDisplay(preferenceCenterId: string): Promise;