Skip to content

Commit f37742b

Browse files
Merge pull request #20 from SourcePointUSA/DIA-4960_add_language_param
DIA-4960 / DIA-4474 add language and messageTimeoutInSeconds build options
2 parents e94c137 + bed8008 commit f37742b

13 files changed

Lines changed: 159 additions & 45 deletions

File tree

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ useEffect(() => {
4747
config.accountId,
4848
config.propertyId,
4949
config.propertyName,
50-
config.campaigns
50+
config.campaigns,
51+
config.buildOptions
5152
);
5253

5354
return () => {
@@ -64,6 +65,7 @@ The following attributes should be replaced with your organization's details:
6465
| `config.propertyId` | Number | ID for property found in the Sourcepoint portal |
6566
| `config.propertyName` | String | Name of property found in the Sourcepoint portal |
6667
| `config.campaigns` | Object | Campaigns launched on the property through the Sourcepoint portal. Accepts `gdpr: {}`, `usnat: {}`, `preferences: {}` and `globalcmp: {}`. See table below for information on each campaign type. |
68+
| `config.buildOptions` | Object? | Check `SPBuildOptions` type for more information. |
6769
6870
Refer to the table below regarding the different campaigns that can be implemented:
6971
@@ -210,7 +212,7 @@ In the example below, you can find a fully configured example in React:
210212
211213
```jsx
212214
import React, { useState, useEffect, useRef } from 'react';
213-
import { View, Text, SafeAreaView } from 'react-native';
215+
import { View, Text, SafeAreaView, SPMessageLanguage } from 'react-native';
214216

215217
import SPConsentManager, { SPCampaignEnvironment, SPUserData } from '@sourcepoint/react-native-cmp';
216218

@@ -231,6 +233,12 @@ export default function App() {
231233
// usnat: {},
232234
// preferences: {},
233235
// globalcmp: {}
236+
},
237+
{
238+
// in order to override the message language, make sure the option "Use Browser Default"
239+
// is disabled in the Sourcepoint dashboard
240+
language: SPMessageLanguage.ENGLISH,
241+
messageTimeoutInSeconds: 20,
234242
}
235243
);
236244

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.sourcepoint.cmplibrary.model.ConsentAction
1919
import com.sourcepoint.cmplibrary.model.exposed.SPConsents
2020
import com.sourcepoint.cmplibrary.util.clearAllData
2121
import com.sourcepoint.cmplibrary.util.userConsents
22+
import com.sourcepoint.reactnativecmp.arguments.BuildOptions
2223
import com.sourcepoint.reactnativecmp.consents.RNSPUserData
2324
import org.json.JSONObject
2425

@@ -38,14 +39,17 @@ class ReactNativeCmpModule(reactContext: ReactApplicationContext) : NativeReactN
3839
accountId: Double,
3940
propertyId: Double,
4041
propertyName: String,
41-
campaigns: ReadableMap
42+
campaigns: ReadableMap,
43+
options: ReadableMap?,
4244
) {
4345
val convertedCampaigns = campaigns.SPCampaigns()
46+
val parsedOptions = BuildOptions(options)
4447
val config = SpConfigDataBuilder().apply {
4548
addAccountId(accountId.toInt())
4649
addPropertyName(propertyName)
4750
addPropertyId(propertyId.toInt())
48-
addMessageTimeout(30000)
51+
addMessageTimeout(parsedOptions.messageTimeoutInSeconds)
52+
addMessageLanguage(parsedOptions.language)
4953
convertedCampaigns.gdpr?.let {
5054
addCampaign(campaignType = GDPR, params = it.targetingParams, groupPmId = it.groupPmId)
5155
}

android/src/main/java/com/sourcepoint/reactnativecmp/arguments/Arguments.kt

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

33
import com.facebook.react.bridge.Arguments
4+
import com.facebook.react.bridge.ReadableMap
45
import com.facebook.react.bridge.WritableArray
56
import com.facebook.react.bridge.WritableMap
67
import kotlinx.serialization.json.JsonArray
@@ -158,3 +159,10 @@ fun WritableMap.putArray(name: String, value: Iterable<*>) {
158159
value.forEach { this.pushAny(it) }
159160
})
160161
}
162+
163+
fun ReadableMap.getLongOrNull(name: String) =
164+
if (hasKey(name) && !isNull(name)) {
165+
getLong(name)
166+
} else {
167+
null
168+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.sourcepoint.reactnativecmp.arguments
2+
3+
import com.facebook.react.bridge.ReadableMap
4+
import com.sourcepoint.cmplibrary.model.MessageLanguage
5+
import com.sourcepoint.cmplibrary.model.MessageLanguage.ENGLISH
6+
7+
data class BuildOptions(
8+
val language: MessageLanguage,
9+
val messageTimeoutInSeconds: Long,
10+
) {
11+
constructor(options: ReadableMap?) : this(
12+
language = MessageLanguage.entries.find { it.value == options?.getString("language") } ?: ENGLISH,
13+
messageTimeoutInSeconds = options?.getLongOrNull("messageTimeoutInSeconds") ?: 30000
14+
)
15+
}

example/src/App.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { LaunchArguments } from 'react-native-launch-arguments';
1111

1212
import SPConsentManager, {
1313
SPCampaignEnvironment,
14+
SPMessageLanguage,
1415
} from '@sourcepoint/react-native-cmp';
1516
import type { SPCampaigns, SPUserData } from '@sourcepoint/react-native-cmp';
1617
import type { LaunchArgs } from './LaunchArgs';
@@ -31,6 +32,12 @@ const config = {
3132
accountId: 22,
3233
propertyId: 16893,
3334
propertyName: 'mobile.multicampaign.demo',
35+
buildOptions: {
36+
// in order to override the message language, make sure the option "Use Browser Default"
37+
// is disabled in the Sourcepoint dashboard
38+
language: SPMessageLanguage.ENGLISH,
39+
messageTimeoutInSeconds: 20,
40+
},
3441
gdprPMId: '488393',
3542
usnatPMId: '988851',
3643
globalCmpPMId: '1323762',
@@ -58,7 +65,8 @@ export default function App() {
5865
config.accountId,
5966
config.propertyId,
6067
config.propertyName,
61-
config.campaigns
68+
config.campaigns,
69+
config.buildOptions
6270
);
6371

6472
if (launchArgs.clearData === true) {
@@ -127,7 +135,8 @@ export default function App() {
127135
config.accountId,
128136
config.propertyId,
129137
config.propertyName,
130-
config.campaigns
138+
config.campaigns,
139+
config.buildOptions
131140
);
132141
setUserData({});
133142
}, []);
@@ -159,22 +168,22 @@ export default function App() {
159168
<Button
160169
title="Load GDPR PM"
161170
onPress={onGDPRPMPress}
162-
disabled={disable || config.campaigns.gdpr == undefined}
171+
disabled={disable || config.campaigns.gdpr === undefined}
163172
/>
164173
<Button
165174
title="Load USNAT PM"
166175
onPress={onUSNATPMPress}
167-
disabled={disable || config.campaigns.usnat == undefined}
176+
disabled={disable || config.campaigns.usnat === undefined}
168177
/>
169178
<Button
170179
title="Load GlobalCMP PM"
171180
onPress={onGlobalCMPPress}
172-
disabled={disable || config.campaigns.globalcmp == undefined}
181+
disabled={disable || config.campaigns.globalcmp === undefined}
173182
/>
174183
<Button
175184
title="Load Preferences Center"
176185
onPress={onPreferencesPress}
177-
disabled={disable || config.campaigns.preferences == undefined}
186+
disabled={disable || config.campaigns.preferences === undefined}
178187
/>
179188
<Button title="Clear All" onPress={onClearDataPress} />
180189
<Text testID="sdkStatus" style={styles.status}>

example/src/LaunchArgs.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import type { SPCampaigns } from '@sourcepoint/react-native-cmp';
1+
import type {
2+
SPCampaigns,
3+
SPBuildOptions
4+
} from '@sourcepoint/react-native-cmp';
25

36
export type LaunchArgs = {
47
config?: {
@@ -8,6 +11,7 @@ export type LaunchArgs = {
811
gdprPMId?: string;
912
usnatPMId?: string;
1013
campaigns?: SPCampaigns;
14+
buildOptions?: SPBuildOptions;
1115
};
1216
authId?: string;
1317
clearData?: boolean;

ios/RNSourcepointCmp.swift

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@ import ConsentViewController
99
import Foundation
1010
import React
1111

12+
@objcMembers public class RNBuildOptions: NSObject {
13+
public let language: String
14+
public let messageTimeout: Int
15+
16+
@objc public init(language: String, messageTimeout: Int) {
17+
self.language = language
18+
self.messageTimeout = messageTimeout
19+
}
20+
}
21+
1222
@objcMembers public class RNAction: NSObject {
1323
public let type: RNSourcepointActionType
1424
public let customActionId: String?
@@ -80,7 +90,14 @@ import React
8090
UIApplication.shared.delegate?.window??.rootViewController
8191
}
8292

83-
public func build(_ accountId: Int, propertyId: Int, propertyName: String, campaigns: RNSPCampaigns, delegate: ReactNativeCmpImplDelegate?) {
93+
public func build(
94+
accountId: Int,
95+
propertyId: Int,
96+
propertyName: String,
97+
campaigns: RNSPCampaigns,
98+
options: RNBuildOptions,
99+
delegate: ReactNativeCmpImplDelegate?
100+
) {
84101
let manager = SPConsentManager(
85102
accountId: accountId,
86103
propertyId: propertyId,
@@ -89,7 +106,8 @@ import React
89106
delegate: Self.objcDelegate
90107
)
91108
self.delegate = delegate
92-
manager.messageTimeoutInSeconds = 10
109+
manager.messageLanguage = SPMessageLanguage.init(rawValue: options.language) ?? .English
110+
manager.messageTimeoutInSeconds = TimeInterval(options.messageTimeout)
93111
Self.shared?.consentManager = manager
94112
}
95113

ios/ReactNativeCmp.mm

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ @implementation ReactNativeCmp {
66
}
77
RCT_EXPORT_MODULE(ReactNativeCmpImpl)
88

9-
- (void)build:(double)accountId propertyId:(double)propertyId propertyName:(nonnull NSString *)propertyName campaigns:(JS::NativeReactNativeCmp::SPCampaigns &)campaigns {
9+
- (void)build:(double)accountId propertyId:(double)propertyId propertyName:(nonnull NSString *)propertyName campaigns:(JS::NativeReactNativeCmp::SPCampaigns &)campaigns options:(JS::NativeReactNativeCmp::SPBuildOptions &)options {
1010
if (sdk == nil) {
1111
sdk = [[ReactNativeCmpImpl alloc] init];
1212
}
@@ -61,11 +61,18 @@ - (void)build:(double)accountId propertyId:(double)propertyId propertyName:(nonn
6161
globalcmp: globalcmp
6262
environment:RNSPCampaignEnvPublic];
6363

64+
RNBuildOptions *buildOptions = [
65+
[RNBuildOptions alloc]
66+
initWithLanguage: options.language()
67+
messageTimeout: options.messageTimeoutInSeconds().has_value() ? (NSInteger)options.messageTimeoutInSeconds().value(): 30
68+
];
69+
6470
[sdk
65-
build:(NSInteger)accountId
71+
buildWithAccountId:(NSInteger)accountId
6672
propertyId:(NSInteger)propertyId
6773
propertyName:propertyName
6874
campaigns: internalCampaigns
75+
options: buildOptions
6976
delegate: self
7077
];
7178
}

lefthook.yml

Lines changed: 0 additions & 14 deletions
This file was deleted.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@
7474
"@eslint/compat": "^1.2.7",
7575
"@eslint/eslintrc": "^3.3.0",
7676
"@eslint/js": "^9.22.0",
77-
"@evilmartians/lefthook": "^1.5.0",
7877
"@react-native-community/cli": "15.0.0-alpha.2",
7978
"@react-native/babel-preset": "0.79.2",
8079
"@react-native/eslint-config": "^0.78.0",

0 commit comments

Comments
 (0)