react-native-freshchat-sdk
Version:
A React Native module that allows you to use the native Freshchat SDK
322 lines (270 loc) • 11 kB
JavaScript
const {NativeModules} = require('react-native');
const {RNFreshchatSdk} = NativeModules;
import {NativeEventEmitter} from 'react-native';
const emitter = new NativeEventEmitter(RNFreshchatSdk);
const _eventHandlers = {};
import {
Platform
} from 'react-native';
const { version } = require('../package.json');
const rn_sdk_version_placeholder = "{{rn-version}}";
const platform_name_placeholder = "{{platform}}";
const platform_sdk_version_placeholder = "{{platform-version}}";
const android_platform_name = "android";
const ios_platform_name = "ios";
const sdk_version_placeholder = "rn-" + rn_sdk_version_placeholder + "-" + platform_name_placeholder + "-" + platform_sdk_version_placeholder;
const isAndroid = function() {
return !isIos();
};
const isIos = function() {
return Platform.OS === 'ios';
};
const registerForRestoreIdUpdates = function (register) {
RNFreshchatSdk.registerForRestoreIdUpdates(register);
};
const registerForMessageCountUpdates = function (register) {
RNFreshchatSdk.registerForMessageCountUpdates(register);
};
const registerUserInteractionListerner = function (register) {
RNFreshchatSdk.registerUserInteractionListerner(register);
};
const registerForOpeningLink = function (register) {
RNFreshchatSdk.registerForOpeningLink(register);
};
const registerForLocaleChangedByWebview = function (register) {
RNFreshchatSdk.registerForOpeningLink(register);
};
const registerForUserActions = function (register) {
RNFreshchatSdk.registerForUserActions(register);
};
const registerNotificationClickListener = function (register) {
RNFreshchatSdk.registerNotificationClickListener(register);
};
const registerForJWTRefresh = function (register) {
RNFreshchatSdk.registerForJWTRefresh(register);
};
const enableNativeListenerForType = function (type, enable) {
switch (type) {
case RNFreshchatSdk.ACTION_UNREAD_MESSAGE_COUNT_CHANGED:
registerForMessageCountUpdates(enable);
break;
case RNFreshchatSdk.ACTION_USER_RESTORE_ID_GENERATED:
registerForRestoreIdUpdates(enable);
break;
case RNFreshchatSdk.ACTION_USER_INTERACTION:
registerUserInteractionListerner(enable);
break;
case RNFreshchatSdk.ACTION_OPEN_LINKS:
registerForOpeningLink(enable);
break;
case RNFreshchatSdk.ACTION_LOCALE_CHANGED_BY_WEBVIEW:
registerForLocaleChangedByWebview(enable);
break;
case RNFreshchatSdk.ACTION_FRESHCHAT_EVENTS:
registerForUserActions(enable);
break;
case RNFreshchatSdk.FRESHCHAT_ACTION_NOTIFICATION_CLICK_LISTENER:
registerNotificationClickListener(enable);
break;
case RNFreshchatSdk.ACTION_SET_TOKEN_TO_REFRESH_DEVICE_PROPERTIES:
registerForJWTRefresh(enable);
break;
}
};
const eventsList = function(key) {
let events = {
EVENT_EXTERNAL_LINK_CLICKED : RNFreshchatSdk.ACTION_OPEN_LINKS,
EVENT_LOCALE_CHANGED_BY_WEBVIEW : RNFreshchatSdk.ACTION_LOCALE_CHANGED_BY_WEBVIEW,
EVENT_UNREAD_MESSAGE_COUNT_CHANGED : RNFreshchatSdk.ACTION_UNREAD_MESSAGE_COUNT_CHANGED,
EVENT_USER_RESTORE_ID_GENERATED : RNFreshchatSdk.ACTION_USER_RESTORE_ID_GENERATED,
EVENT_USER_INTERACTED : RNFreshchatSdk.ACTION_USER_INTERACTION,
FRESHCHAT_EVENTS : RNFreshchatSdk.ACTION_FRESHCHAT_EVENTS,
FRESHCHAT_NOTIFICATION_CLICKED : RNFreshchatSdk.FRESHCHAT_ACTION_NOTIFICATION_CLICK_LISTENER,
EVENT_SET_TOKEN_TO_REFRESH_DEVICE_PROPERTIES : RNFreshchatSdk.ACTION_SET_TOKEN_TO_REFRESH_DEVICE_PROPERTIES
};
return events[key];
};
module.exports = {
EVENT_EXTERNAL_LINK_CLICKED : eventsList('EVENT_EXTERNAL_LINK_CLICKED'),
EVENT_ANDROID_LOCALE_CHANGED_BY_WEBVIEW : eventsList('EVENT_LOCALE_CHANGED_BY_WEBVIEW'),
EVENT_UNREAD_MESSAGE_COUNT_CHANGED : eventsList('EVENT_UNREAD_MESSAGE_COUNT_CHANGED'),
EVENT_USER_RESTORE_ID_GENERATED : eventsList('EVENT_USER_RESTORE_ID_GENERATED'),
EVENT_USER_INTERACTED : eventsList('EVENT_USER_INTERACTED'),
FRESHCHAT_EVENTS : eventsList('FRESHCHAT_EVENTS'),
FRESHCHAT_NOTIFICATION_CLICKED : eventsList('FRESHCHAT_NOTIFICATION_CLICKED'),
EVENT_SET_TOKEN_TO_REFRESH_DEVICE_PROPERTIES : eventsList('EVENT_SET_TOKEN_TO_REFRESH_DEVICE_PROPERTIES'),
init: function(freshchatConfig) {
RNFreshchatSdk.init(freshchatConfig);
},
showFAQs: function(faqOptions) {
if(faqOptions) {
RNFreshchatSdk.showFAQsWithOptions(faqOptions);
} else {
RNFreshchatSdk.showFAQs();
}
},
showConversations: function(conversationOptions) {
if(conversationOptions) {
RNFreshchatSdk.showConversationsWithOptions(conversationOptions);
} else {
RNFreshchatSdk.showConversations();
}
},
showConversationWithReferenceID: function(topicName, conversationReferenceId) {
RNFreshchatSdk.showConversation(topicName, conversationReferenceId);
},
resetUser: function() {
RNFreshchatSdk.resetUser();
},
getUnreadCountAsync: function (callback, tags) {
try {
if (tags) {
RNFreshchatSdk.getUnreadCountAsyncForTags(callback, tags);
} else {
RNFreshchatSdk.getUnreadCountAsync(callback);
}
}
catch (err) {
console.log(err)
}
},
setUser: function(user, errorCallback) {
RNFreshchatSdk.setUser(user, errorCallback);
},
setUserWithIdToken: function(jwt, errorCallback) {
if (isAndroid()) {
RNFreshchatSdk.setUserWithIdToken(jwt, errorCallback);
} else {
RNFreshchatSdk.setUserWithIdToken(jwt);
}
},
getUser: function(callback) {
RNFreshchatSdk.getUser(callback);
},
getSDKVersionCode: function (callback) {
RNFreshchatSdk.getSDKVersionCode((native_sdk_version) => {
var platformName = "";
if (isAndroid()) {
platformName = android_platform_name;
} else {
platformName = ios_platform_name;
}
var reactNativeVersion = sdk_version_placeholder;
reactNativeVersion = reactNativeVersion.replace(rn_sdk_version_placeholder, version);
reactNativeVersion = reactNativeVersion.replace(platform_name_placeholder, platformName);
reactNativeVersion = reactNativeVersion.replace(platform_sdk_version_placeholder, native_sdk_version);
callback(reactNativeVersion);
});
},
setUserProperties: function(userProperties, errorCallback) {
RNFreshchatSdk.setUserProperties(userProperties, errorCallback);
},
setBotVariables: function(variables, botSpecificVariables) {
RNFreshchatSdk.setBotVariables(variables, botSpecificVariables);
},
sendMessage: function(freshchatMessage) {
RNFreshchatSdk.sendMessage(freshchatMessage);
},
identifyUser: function(externalId, restoreId, errorCallback) {
RNFreshchatSdk.identifyUser(externalId, restoreId, errorCallback);
},
restoreUserWithIdToken: function(jwt, errorCallback) {
if (isAndroid()) {
RNFreshchatSdk.restoreUser(jwt, errorCallback);
} else {
RNFreshchatSdk.restoreUser(jwt);
}
},
getUserIdTokenStatus: function(callback) {
RNFreshchatSdk.getUserIdTokenStatus(callback);
},
getFreshchatUserId: function(callback) {
RNFreshchatSdk.getFreshchatUserId(callback);
},
/**
* Function to dismiss Freshchat SDK screens
*
* @since 0.4.5
*/
dismissFreshchatViews: function () {
RNFreshchatSdk.dismissFreshchatViews();
},
setNotificationConfig: function(freshchatNotificationConfig) {
RNFreshchatSdk.setNotificationConfig(freshchatNotificationConfig);
},
setPushRegistrationToken: function (token) {
RNFreshchatSdk.setPushRegistrationToken(token);
},
isFreshchatNotification: function (payload, callback) {
RNFreshchatSdk.isFreshchatNotification(payload, callback);
},
handlePushNotification: function (payload) {
RNFreshchatSdk.handlePushNotification(payload);
},
openFreshchatDeeplink: function (link) {
RNFreshchatSdk.openFreshchatDeeplink(link);
},
trackEvent: function (name, properties) {
RNFreshchatSdk.trackEvent(name, properties);
},
notifyAppLocaleChange: function () {
RNFreshchatSdk.notifyAppLocaleChange();
},
addEventListener: function (type, handler) {
const listener = emitter.addListener(type, handler);
let shouldStartNativeListener = false;
if (!_eventHandlers[type]) {
_eventHandlers[type] = new Map();
shouldStartNativeListener = true;
}
_eventHandlers[type].set(handler, listener);
if (shouldStartNativeListener) {
enableNativeListenerForType(type, true);
}
},
// removeEventListener: function (type, handler) {
// if (!_eventHandlers[type].has(handler)) {
// return;
// }
// _eventHandlers[type].get(handler).remove();
// _eventHandlers[type].delete(handler);
//
// if (_eventHandlers[type].size === 0) {
// _eventHandlers[type] = undefined;
// enableNativeListenerForType(type, false);
// }
// },
removeEventListeners: function (type) {
if (!_eventHandlers[type]) {
return;
}
var eventSubscriptionsMap = _eventHandlers[type];
if (eventSubscriptionsMap) {
eventSubscriptionsMap.forEach((subscription) => {
if (subscription) {
subscription.remove();
}
});
}
_eventHandlers[type] = undefined;
enableNativeListenerForType(type, false);
},
transformPushNotificationIOSPayloadToNativePayload: function (reactPayload) {
var nativePayload = reactPayload._data;
var load = {
"alert": reactPayload._alert,
"badge": reactPayload._badgeCount,
"sound" : "default"
};
var apsPayload = {"aps":load};
var payload = Object.assign({}, apsPayload, nativePayload);
return payload;
},
// isAppActiveWhenReceivingNotification: function (nativePayload) {
// if (nativePayload.isActive !== undefined) {
// return nativePayload.isActive;
// } else {
// return false;
// }
// },
}