Skip to content

Commit bd9b137

Browse files
authored
#22 fix: Make sure that we use NSNumber to preserve negative numbers across the bridge
2 parents c1f9ba4 + 2fb68a8 commit bd9b137

File tree

5 files changed

+38
-33
lines changed

5 files changed

+38
-33
lines changed

example/src/App.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,11 @@ export default function App() {
8484
test_key_bool: false,
8585
fake_bool: 15,
8686
});
87+
// Log a few outcomes
8788
await context.log(Outcome.positive);
89+
await context.log(Outcome.positiveConverted);
90+
await context.log(Outcome.negative);
91+
await context.log(Outcome.negativeNotInteracted);
8892
},
8993
customSignals: {
9094
test_key_string: 'test_value_2',

ios/ContextSDKBridge.mm

+11-11
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ @interface RCT_EXTERN_MODULE(ContextSDKBridge, NSObject)
2626
withRejecter:(RCTPromiseRejectBlock)reject)
2727

2828
RCT_EXTERN_METHOD(calibrate:(NSString*)flowName
29-
maxDelay:(int)maxDelay
29+
maxDelay:(nonnull NSNumber*)maxDelay
3030
customSignals:(NSDictionary*)customSignals
3131
withResolver:(RCTPromiseResolveBlock)resolve
3232
withRejecter:(RCTPromiseRejectBlock)reject)
@@ -38,40 +38,40 @@ @interface RCT_EXTERN_MODULE(ContextSDKBridge, NSObject)
3838
withRejecter:(RCTPromiseRejectBlock)reject)
3939

4040
RCT_EXTERN_METHOD(fetchContext:(NSString*)flowName
41-
duration:(int)duration
41+
duration:(nonnull NSNumber*)duration
4242
customSignals:(NSDictionary*)customSignals
4343
withResolver:(RCTPromiseResolveBlock)resolve
4444
withRejecter:(RCTPromiseRejectBlock)reject)
4545

4646
RCT_EXTERN_METHOD(instantContext:(NSString*)flowName
47-
duration:(int)duration
47+
duration:(nonnull NSNumber*)duration
4848
customSignals:(NSDictionary*)customSignals
4949
withResolver:(RCTPromiseResolveBlock)resolve
5050
withRejecter:(RCTPromiseRejectBlock)reject)
5151

52-
RCT_EXTERN_METHOD(releaseContext:(int)contextID
52+
RCT_EXTERN_METHOD(releaseContext:(nonnull NSNumber*)contextID
5353
withResolver:(RCTPromiseResolveBlock)resolve
5454
withRejecter:(RCTPromiseRejectBlock)reject)
5555

56-
RCT_EXTERN_METHOD(context_shouldUpsell:(int)contextID
56+
RCT_EXTERN_METHOD(context_shouldUpsell:(nonnull NSNumber*)contextID
5757
withResolver:(RCTPromiseResolveBlock)resolve
5858
withRejecter:(RCTPromiseRejectBlock)reject)
5959

60-
RCT_EXTERN_METHOD(context_validate:(int)contextID
60+
RCT_EXTERN_METHOD(context_validate:(nonnull NSNumber*)contextID
6161
withResolver:(RCTPromiseResolveBlock)resolve
6262
withRejecter:(RCTPromiseRejectBlock)reject)
6363

64-
RCT_EXTERN_METHOD(context_log:(int)contextID
65-
outcome:(int)outcome
64+
RCT_EXTERN_METHOD(context_log:(nonnull NSNumber*)contextID
65+
outcome:(nonnull NSNumber*)outcome
6666
withResolver:(RCTPromiseResolveBlock)resolve
6767
withRejecter:(RCTPromiseRejectBlock)reject)
6868

69-
RCT_EXTERN_METHOD(context_logIfNotLoggedYet:(int)contextID
70-
outcome:(int)outcome
69+
RCT_EXTERN_METHOD(context_logIfNotLoggedYet:(nonnull NSNumber*)contextID
70+
outcome:(nonnull NSNumber*)outcome
7171
withResolver:(RCTPromiseResolveBlock)resolve
7272
withRejecter:(RCTPromiseRejectBlock)reject)
7373

74-
RCT_EXTERN_METHOD(context_appendOutcomeMetadata:(int)contextID
74+
RCT_EXTERN_METHOD(context_appendOutcomeMetadata:(nonnull NSNumber*)contextID
7575
values:(NSDictionary*)values
7676
withResolver:(RCTPromiseResolveBlock)resolve
7777
withRejecter:(RCTPromiseRejectBlock)reject)

ios/ContextSDKBridge.swift

+21-21
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ class ContextSDKBridge: NSObject {
5656
}
5757

5858
@objc(calibrate:maxDelay:customSignals:withResolver:withRejecter:)
59-
func calibrate(flowName: String, maxDelay: Int, customSignals: NSDictionary, resolve: @escaping RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
59+
func calibrate(flowName: String, maxDelay: NSNumber, customSignals: NSDictionary, resolve: @escaping RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
6060
let customSignalsID = createCustomSignals(customSignals: customSignals)
61-
contextSDK_calibrate_rn(flowName: flowName, customSignalsID: customSignalsID, maxDelay: Int32(maxDelay)) { contextID in
61+
contextSDK_calibrate_rn(flowName: flowName, customSignalsID: customSignalsID, maxDelay: maxDelay.int32Value) { contextID in
6262
resolve(contextID)
6363
}
6464
}
@@ -74,63 +74,63 @@ class ContextSDKBridge: NSObject {
7474
}
7575

7676
@objc(fetchContext:duration:customSignals:withResolver:withRejecter:)
77-
func fetchContext(flowName: String, duration: Int, customSignals: NSDictionary, resolve: @escaping RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
77+
func fetchContext(flowName: String, duration: NSNumber, customSignals: NSDictionary, resolve: @escaping RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
7878
let customSignalsID = createCustomSignals(customSignals: customSignals)
79-
contextSDK_fetchContext_rn(flowName: flowName, customSignalsID: customSignalsID, duration: Int32(duration)) { contextID in
79+
contextSDK_fetchContext_rn(flowName: flowName, customSignalsID: customSignalsID, duration: duration.int32Value) { contextID in
8080
resolve(contextID)
8181
}
8282
}
8383

8484
@objc(instantContext:duration:customSignals:withResolver:withRejecter:)
85-
func instantContext(flowName: String, duration: Int, customSignals: NSDictionary, resolve: @escaping RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
85+
func instantContext(flowName: String, duration: NSNumber, customSignals: NSDictionary, resolve: @escaping RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
8686
let customSignalsID = createCustomSignals(customSignals: customSignals)
87-
let contextID = contextSDK_instantContext(flowNameC: flowName, customSignalsID: customSignalsID, duration: Int32(duration))
87+
let contextID = contextSDK_instantContext(flowNameC: flowName, customSignalsID: customSignalsID, duration: duration.int32Value)
8888
contextSDK_releaseCustomSignals(contextID: customSignalsID)
8989
resolve(contextID)
9090
}
9191

9292
@objc(releaseContext:withResolver:withRejecter:)
93-
func releaseContext(contextID: Int,resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
94-
contextSDK_releaseContext(contextID: Int32(contextID))
93+
func releaseContext(contextID: NSNumber, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
94+
contextSDK_releaseContext(contextID: contextID.int32Value)
9595
resolve(true)
9696
}
9797

9898
@objc(context_shouldUpsell:withResolver:withRejecter:)
99-
func context_shouldUpsell(contextID: Int, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
100-
let shouldUpsell = contextSDK_context_shouldUpsell(contextID: Int32(contextID))
99+
func context_shouldUpsell(contextID: NSNumber, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
100+
let shouldUpsell = contextSDK_context_shouldUpsell(contextID: contextID.int32Value)
101101
resolve(shouldUpsell)
102102
}
103103

104104
@objc(context_validate:withResolver:withRejecter:)
105-
func context_validate(contextID: Int, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
106-
let output = String(cString: contextSDK_context_validate(contextID: Int32(contextID)))
105+
func context_validate(contextID: NSNumber, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
106+
let output = String(cString: contextSDK_context_validate(contextID: contextID.int32Value))
107107
resolve(output)
108108
}
109109

110110
@objc(context_log:outcome:withResolver:withRejecter:)
111-
func context_log(contextID: Int, outcome: Int, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
112-
contextSDK_context_log(Int32(contextID), Int32(outcome))
111+
func context_log(contextID: NSNumber, outcome: NSNumber, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
112+
contextSDK_context_log(contextID.int32Value, outcome.int32Value)
113113
resolve(true)
114114
}
115115

116116
@objc(context_logIfNotLoggedYet:outcome:withResolver:withRejecter:)
117-
func context_logIfNotLoggedYet(contextID: Int, outcome: Int, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
118-
contextSDK_context_logIfNotLoggedYet(Int32(contextID), Int32(outcome))
117+
func context_logIfNotLoggedYet(contextID: NSNumber, outcome: NSNumber, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
118+
contextSDK_context_logIfNotLoggedYet(contextID.int32Value, outcome.int32Value)
119119
resolve(true)
120120
}
121121

122122
@objc(context_appendOutcomeMetadata:values:withResolver:withRejecter:)
123-
func context_appendOutcomeMetadata(contextID: Int, values: NSDictionary, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
123+
func context_appendOutcomeMetadata(contextID: NSNumber, values: NSDictionary, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) {
124124
for (key, value) in values {
125125
guard let stringKey = key as? String else { continue }
126126
if let intValue = value as? Int {
127-
contextSDK_context_appendOutcomeMetadataInt(contextID: Int32(contextID), idC: stringKey, value: Int32(intValue))
127+
contextSDK_context_appendOutcomeMetadataInt(contextID: contextID.int32Value, idC: stringKey, value: Int32(intValue))
128128
} else if let doubleValue = value as? Double {
129-
contextSDK_context_appendOutcomeMetadataFloat(contextID: Int32(contextID), idC: stringKey, value: Float(doubleValue))
129+
contextSDK_context_appendOutcomeMetadataFloat(contextID: contextID.int32Value, idC: stringKey, value: Float(doubleValue))
130130
} else if let stringValue = value as? String {
131-
contextSDK_context_appendOutcomeMetadataString(contextID: Int32(contextID), idC: stringKey, valueC: stringValue)
131+
contextSDK_context_appendOutcomeMetadataString(contextID: contextID.int32Value, idC: stringKey, valueC: stringValue)
132132
} else if let boolValue = value as? Bool { // TODO: Bools fall into the Int clause - we should fix this
133-
contextSDK_context_appendOutcomeMetadataBool(contextID: Int32(contextID), idC: stringKey, value: boolValue)
133+
contextSDK_context_appendOutcomeMetadataBool(contextID: contextID.int32Value, idC: stringKey, value: boolValue)
134134
}
135135
}
136136
resolve(true)

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-context-sdk",
3-
"version": "5.2.1",
3+
"version": "5.2.2",
44
"description": "ContextSDK for React Native",
55
"main": "lib/commonjs/index",
66
"module": "lib/module/index",

react-native-context-sdk.podspec

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Pod::Spec.new do |s|
2121
"4.7.5" => "4.7.1",
2222
"4.8.1-alpha.1" => "4.8.0",
2323
"4.8.1-alpha.2" => "4.8.0",
24+
"5.2.2" => "5.2.1"
2425
}
2526
mapped_version = version_mapping[s.version.to_s] || s.version.to_s
2627
s.dependency("ContextSDK", mapped_version)

0 commit comments

Comments
 (0)