Skip to content

Commit c4976e2

Browse files
committed
add callbacks to setLanguage
- adds optional success and failure callbacks to setting language
1 parent 1dbbe34 commit c4976e2

File tree

3 files changed

+49
-6
lines changed

3 files changed

+49
-6
lines changed

android/src/main/java/com/geektime/rnonesignalandroid/RNOneSignal.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,8 +288,38 @@ public void getDeviceState(Promise promise) {
288288
}
289289

290290
@ReactMethod
291-
public void setLanguage(String language) {
292-
OneSignal.setLanguage(language);
291+
public void setLanguage(String language, final Callback successCallback, final Callback failureCallback) {
292+
OneSignal.setLanguage(language, new OneSignal.OSSetLanguageCompletionHandler() {
293+
final Callback[] callbackArr = new Callback[]{ successCallback, failureCallback };
294+
@Override
295+
public void onSuccess(String results) {
296+
if (callbackArr[0] != null) {
297+
if (results == null) {
298+
results = "{'success' : 'true', 'message' : 'Successfully set language.'}";
299+
}
300+
callbackArr[0].invoke(results);
301+
callbackArr[0] = null;
302+
callbackArr[1] = null; // prevent other callback from being invoked by another channel
303+
}
304+
}
305+
306+
@Override
307+
public void onFailure(OneSignal.OSLanguageError error) {
308+
try {
309+
if (callbackArr[1] != null) {
310+
String errorMessage = error.getMessage();
311+
if (errorMessage == null) {
312+
errorMessage = "Failed to set language.";
313+
}
314+
callbackArr[1].invoke(RNUtils.jsonToWritableMap(jsonFromErrorMessageString(errorMessage)));
315+
callbackArr[0] = null;
316+
callbackArr[1] = null;
317+
}
318+
} catch (JSONException exception) {
319+
exception.printStackTrace();
320+
}
321+
}
322+
});
293323
}
294324

295325
@ReactMethod

ios/RCTOneSignal/RCTOneSignalEventEmitter.m

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,12 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
245245
}
246246
}
247247

248-
RCT_EXPORT_METHOD(setLanguage:(NSString *)language) {
249-
[OneSignal setLanguage:language];
248+
RCT_EXPORT_METHOD(setLanguage:(NSString *)language successCallback:(RCTResponseSenderBlock)successCallback failureCallback:(RCTResponseSenderBlock)failureCallback) {
249+
[OneSignal setLanguage:language withSuccess:^(NSDictionary *success) {
250+
successCallback(@[success]);
251+
} withFailure:^(NSError *error) {
252+
failureCallback([self processNSError:error]);
253+
}];
250254
}
251255

252256
RCT_EXPORT_METHOD(setNotificationOpenedHandler) {

src/index.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,12 +287,21 @@ export default class OneSignal {
287287
/**
288288
* Allows you to set the app defined language with the OneSignal SDK.
289289
* @param {string} language
290+
* @param {(success:object) => void} onSuccess
291+
* @param {(failure:object) => void} onFailure
290292
* @returns void
291293
*/
292-
static setLanguage(language: string): void {
294+
static setLanguage(language: string, onSuccess?: (success: object) => void, onFailure?: (failure: object) => void): void {
293295
if (!isNativeModuleLoaded(RNOneSignal)) return;
294296

295-
RNOneSignal.setLanguage(language);
297+
if (!onSuccess) {
298+
onSuccess = function(){};
299+
}
300+
301+
if (!onFailure) {
302+
onFailure = function(){};
303+
}
304+
RNOneSignal.setLanguage(language, onSuccess, onFailure);
296305
}
297306

298307
/* T A G S */

0 commit comments

Comments
 (0)