Skip to content

Commit cfe727a

Browse files
avoid EventEmitter with complex data types
1 parent 2d11946 commit cfe727a

File tree

3 files changed

+42
-17
lines changed

3 files changed

+42
-17
lines changed

android/src/main/java/com/sourcepoint/reactnativecmp/ReactNativeCmpModule.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.sourcepoint.reactnativecmp
22

33
import android.view.View
4-
import com.facebook.react.bridge.Arguments.createMap
54
import com.facebook.react.bridge.Callback
65
import com.facebook.react.bridge.Promise
76
import com.facebook.react.bridge.ReactApplicationContext
@@ -21,6 +20,8 @@ import com.sourcepoint.reactnativecmp.arguments.BuildOptions
2120
import com.sourcepoint.reactnativecmp.arguments.toList
2221
import com.sourcepoint.reactnativecmp.consents.RNSPGDPRConsent
2322
import com.sourcepoint.reactnativecmp.consents.RNSPUserData
23+
import kotlinx.serialization.encodeToString
24+
import kotlinx.serialization.json.Json
2425

2526
data class SPLoadMessageParams(val authId: String?) {
2627
constructor(fromReadableMap: ReadableMap?) : this(authId = fromReadableMap?.getString("authId"))
@@ -162,17 +163,17 @@ class ReactNativeCmpModule(reactContext: ReactApplicationContext) : NativeReactN
162163
}
163164

164165
override fun onAction(view: View, consentAction: ConsentAction): ConsentAction {
165-
emitOnAction(createMap().apply {
166-
putString("actionType", RNSourcepointActionType.from(consentAction.actionType).name)
167-
putString("customActionId", consentAction.customActionId)
168-
})
166+
emitInternalOnAction(Json.encodeToString(mapOf(
167+
"actionType" to RNSourcepointActionType.from(consentAction.actionType).name,
168+
"customActionId" to consentAction.customActionId
169+
)))
169170
return consentAction
170171
}
171172

172173
override fun onConsentReady(consent: SPConsents) {}
173174

174175
override fun onError(error: Throwable) {
175-
emitOnError(createMap().apply { putString("description", error.message) })
176+
emitInternalOnError(Json.encodeToString(mapOf("description" to error.message)))
176177
}
177178

178179
override fun onNoIntentActivitiesFound(url: String) {}

src/NativeReactNativeCmp.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,10 @@ export type SPBuildOptions = {
201201
androidDismissMessageOnBackPress?: boolean;
202202
}
203203

204+
export type SPError = {
205+
description: string;
206+
};
207+
204208
export interface Spec extends TurboModule {
205209
build(
206210
accountId: number,
@@ -230,12 +234,12 @@ export interface Spec extends TurboModule {
230234
callback: (consent: GDPRConsent) => void
231235
): void;
232236

233-
readonly onAction: EventEmitter<SPAction>;
237+
readonly internalOnAction: EventEmitter<string>;
234238
readonly onSPUIReady: EventEmitter<void>;
235239
readonly onSPUIFinished: EventEmitter<void>;
236240
readonly onFinished: EventEmitter<void>;
237241
readonly onMessageInactivityTimeout: EventEmitter<void>;
238-
readonly onError: EventEmitter<{ description: string }>;
242+
readonly internalOnError: EventEmitter<string>;
239243
}
240244

241245
export default TurboModuleRegistry.getEnforcing<Spec>('ReactNativeCmp');

src/index.tsx

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type {
66
SPAction,
77
SPBuildOptions,
88
GDPRConsent,
9+
SPError
910
} from './NativeReactNativeCmp';
1011
import ReactNativeCmp, { SPMessageLanguage } from './NativeReactNativeCmp';
1112
import type { EventEmitter } from 'react-native/Libraries/Types/CodegenTypes';
@@ -18,6 +19,32 @@ const defaultBuildOptions: SPBuildOptions = {
1819
}
1920

2021
export default class SPConsentManager implements Spec {
22+
/** intended to be used by the SDK only */
23+
internalOnAction: EventEmitter<string> = ReactNativeCmp.internalOnAction;
24+
/** intended to be used by the SDK only */
25+
internalOnError: EventEmitter<string> = ReactNativeCmp.internalOnError;
26+
27+
onSPUIReady: EventEmitter<void> = ReactNativeCmp.onSPUIReady;
28+
onSPUIFinished: EventEmitter<void> = ReactNativeCmp.onSPUIFinished;
29+
onFinished: EventEmitter<void> = ReactNativeCmp.onFinished;
30+
onMessageInactivityTimeout: EventEmitter<void> = ReactNativeCmp.onMessageInactivityTimeout;
31+
32+
onAction(handler: (action: SPAction) => void) {
33+
ReactNativeCmp.internalOnAction((stringifiedAction) => {
34+
handler(JSON.parse(stringifiedAction) as SPAction);
35+
});
36+
}
37+
38+
onError(handler: (error: SPError) => void) {
39+
ReactNativeCmp.internalOnError((stringifiedError) => {
40+
handler(JSON.parse(stringifiedError) as SPError);
41+
});
42+
}
43+
44+
getConstants?(): {} {
45+
throw new Error('Method not implemented.');
46+
}
47+
2148
build(
2249
accountId: number,
2350
propertyId: number,
@@ -74,14 +101,7 @@ export default class SPConsentManager implements Spec {
74101
categories: string[],
75102
legIntCategories: string[],
76103
callback: (consent: GDPRConsent) => void
77-
) {
78-
ReactNativeCmp.postDeleteCustomConsentGDPR(vendors, categories, legIntCategories, callback);
104+
) {
105+
ReactNativeCmp.postDeleteCustomConsentGDPR(vendors, categories, legIntCategories, callback);
79106
}
80-
81-
onAction: EventEmitter<SPAction> = ReactNativeCmp.onAction;
82-
onSPUIReady: EventEmitter<void> = ReactNativeCmp.onSPUIReady;
83-
onSPUIFinished: EventEmitter<void> = ReactNativeCmp.onSPUIFinished;
84-
onFinished: EventEmitter<void> = ReactNativeCmp.onFinished;
85-
onMessageInactivityTimeout: EventEmitter<void> = ReactNativeCmp.onMessageInactivityTimeout;
86-
onError: EventEmitter<{ description: string }> = ReactNativeCmp.onError;
87107
}

0 commit comments

Comments
 (0)