From 819aa9cf4d76a9284a2330d029e6df0e92b6302d Mon Sep 17 00:00:00 2001 From: dominick bartenope Date: Mon, 22 Apr 2024 13:53:30 -0400 Subject: [PATCH 1/6] Added logic to handle non string types when sending tags --- ios/RCTOneSignal/RCTOneSignalEventEmitter.m | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ios/RCTOneSignal/RCTOneSignalEventEmitter.m b/ios/RCTOneSignal/RCTOneSignalEventEmitter.m index 03b15994..3443a9c3 100644 --- a/ios/RCTOneSignal/RCTOneSignalEventEmitter.m +++ b/ios/RCTOneSignal/RCTOneSignalEventEmitter.m @@ -352,10 +352,15 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body { [OneSignal.User removeSms:smsNumber]; } -RCT_EXPORT_METHOD(addTag:(NSString *)key value:(NSString*)value) { - [OneSignal.User addTagWithKey:key value:value]; +RCT_EXPORT_METHOD(addTag:(NSString *)key value:(id)value) { + if([value isKindOfClass:[NSNumber class]]) { + //It is a number, convert to a string + value = [value stringValue]; + } + [OneSignal.User addTagWithKey:key value:value]; } + RCT_EXPORT_METHOD(addTags:(NSDictionary *)tags) { [OneSignal.User addTags:tags]; } From c8be2f787fac3e7bc7cf4d1d129b8814738d1c67 Mon Sep 17 00:00:00 2001 From: dominick bartenope Date: Mon, 22 Apr 2024 13:58:06 -0400 Subject: [PATCH 2/6] Added logic to handle non string types when sending tags --- src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 3979bd05..e8528402 100644 --- a/src/index.ts +++ b/src/index.ts @@ -430,7 +430,7 @@ export namespace OneSignal { * Add a tag for the current user. Tags are key:value pairs used as building blocks for targeting specific users and/or personalizing * messages. If the tag key already exists, it will be replaced with the value provided here. */ - export function addTag(key: string, value: string) { + export function addTag(key: string, value: string | number | boolean) { if (!isNativeModuleLoaded(RNOneSignal)) return; if (!key || (!value && value !== '')) { @@ -438,7 +438,7 @@ export namespace OneSignal { return; } - RNOneSignal.addTag(key, value); + RNOneSignal.addTag(key, value.toString()); } /** From 243d2d9e4f6ebba83b7ad8e34f3c576d82923b71 Mon Sep 17 00:00:00 2001 From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:47:28 -0700 Subject: [PATCH 3/6] Update tagging methods to pass string value to native bridge --- ios/RCTOneSignal/RCTOneSignalEventEmitter.m | 7 +------ src/index.ts | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/ios/RCTOneSignal/RCTOneSignalEventEmitter.m b/ios/RCTOneSignal/RCTOneSignalEventEmitter.m index 3443a9c3..152c91e8 100644 --- a/ios/RCTOneSignal/RCTOneSignalEventEmitter.m +++ b/ios/RCTOneSignal/RCTOneSignalEventEmitter.m @@ -353,14 +353,9 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body { } RCT_EXPORT_METHOD(addTag:(NSString *)key value:(id)value) { - if([value isKindOfClass:[NSNumber class]]) { - //It is a number, convert to a string - value = [value stringValue]; - } - [OneSignal.User addTagWithKey:key value:value]; + [OneSignal.User addTagWithKey:key value:value]; } - RCT_EXPORT_METHOD(addTags:(NSDictionary *)tags) { [OneSignal.User addTags:tags]; } diff --git a/src/index.ts b/src/index.ts index e8528402..1c209319 100644 --- a/src/index.ts +++ b/src/index.ts @@ -430,15 +430,20 @@ export namespace OneSignal { * Add a tag for the current user. Tags are key:value pairs used as building blocks for targeting specific users and/or personalizing * messages. If the tag key already exists, it will be replaced with the value provided here. */ - export function addTag(key: string, value: string | number | boolean) { + export function addTag(key: string, value: string) { if (!isNativeModuleLoaded(RNOneSignal)) return; - if (!key || (!value && value !== '')) { + if (!key || !value) { console.error('OneSignal: sendTag: must include a key and a value'); return; } - RNOneSignal.addTag(key, value.toString()); + // forces values to be string types + if (typeof value !== 'string') { + value = String(value); + } + + RNOneSignal.addTag(key, value); } /** @@ -456,6 +461,14 @@ export namespace OneSignal { return; } + const convertedTags = tags as { [key: string]: any }; + Object.keys(tags).forEach(function (key) { + // forces values to be string types + if (typeof convertedTags[key] !== 'string') { + convertedTags[key] = JSON.stringify(convertedTags[key]); + } + }); + RNOneSignal.addTags(tags); } From a5c767a1f3e0169ab8113b61d227aec50e8b724e Mon Sep 17 00:00:00 2001 From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com> Date: Wed, 1 May 2024 14:37:27 -0700 Subject: [PATCH 4/6] Refine tagging methods - ensure consistency of string conversion methods - check for null or undefined values instead of falsy checks --- src/index.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 1c209319..54ea2866 100644 --- a/src/index.ts +++ b/src/index.ts @@ -433,8 +433,8 @@ export namespace OneSignal { export function addTag(key: string, value: string) { if (!isNativeModuleLoaded(RNOneSignal)) return; - if (!key || !value) { - console.error('OneSignal: sendTag: must include a key and a value'); + if (!key || value === undefined || value === null) { + console.error('OneSignal: addTag: must include a key and a value'); return; } @@ -464,9 +464,7 @@ export namespace OneSignal { const convertedTags = tags as { [key: string]: any }; Object.keys(tags).forEach(function (key) { // forces values to be string types - if (typeof convertedTags[key] !== 'string') { - convertedTags[key] = JSON.stringify(convertedTags[key]); - } + convertedTags[key] = String(convertedTags[key]); }); RNOneSignal.addTags(tags); From 691286f664ef27af317aa9ab9aa68027e7b15544 Mon Sep 17 00:00:00 2001 From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com> Date: Wed, 1 May 2024 15:16:09 -0700 Subject: [PATCH 5/6] Add console warnings for non-string type key values --- src/index.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 54ea2866..9132dfb0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -440,6 +440,9 @@ export namespace OneSignal { // forces values to be string types if (typeof value !== 'string') { + console.warn( + 'OneSignal: addTag: tag value must be of type string; attempting to convert' + ); value = String(value); } @@ -463,8 +466,12 @@ export namespace OneSignal { const convertedTags = tags as { [key: string]: any }; Object.keys(tags).forEach(function (key) { - // forces values to be string types - convertedTags[key] = String(convertedTags[key]); + if (typeof convertedTags[key] !== 'string') { + console.warn( + 'OneSignal: addTags: tag value for key ' + key + ' must be of type string; attempting to convert' + ); + convertedTags[key] = String(convertedTags[key]); + } }); RNOneSignal.addTags(tags); From 37a41281b8d337a8c2ff40a3b123e2bd5718939b Mon Sep 17 00:00:00 2001 From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com> Date: Wed, 1 May 2024 15:29:37 -0700 Subject: [PATCH 6/6] run prettier --- src/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 9132dfb0..aed685c6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -441,7 +441,7 @@ export namespace OneSignal { // forces values to be string types if (typeof value !== 'string') { console.warn( - 'OneSignal: addTag: tag value must be of type string; attempting to convert' + 'OneSignal: addTag: tag value must be of type string; attempting to convert', ); value = String(value); } @@ -468,7 +468,9 @@ export namespace OneSignal { Object.keys(tags).forEach(function (key) { if (typeof convertedTags[key] !== 'string') { console.warn( - 'OneSignal: addTags: tag value for key ' + key + ' must be of type string; attempting to convert' + 'OneSignal: addTags: tag value for key ' + + key + + ' must be of type string; attempting to convert', ); convertedTags[key] = String(convertedTags[key]); }