react-native-moengage
Version:
MoEngage is a mobile marketing automation company. This react-native SDK helps you track events, trigger smart notifications and in-apps, provides a drop-in Inbox Controller for notifications.
250 lines (226 loc) • 9.02 kB
text/typescript
import MoEngageLogger from "../logger/MoEngageLogger";
import MoECampaignContext from "../models/MoECampaignContext";
import MoECampaignData from "../models/MoECampaignData";
import MoEClickData from "../models/MoEClickData";
import MoEInAppCustomAction from "../models/MoEInAppCustomAction";
import MoEInAppData from "../models/MoEInAppData";
import MoEInAppNavigation from "../models/MoEInAppNavigation";
import MoEInAppRules from "../models/MoEInAppRules";
import MoESelfHandledCampaign from "../models/MoESelfHandledCampaign";
import MoESelfHandledCampaignData from "../models/MoESelfHandledCampaignData";
import MoESelfHandledCampaignsData from "../models/MoESelfHandledCampaignsData";
import {
ACTION_TYPE,
FORMATTED_CAMPAIGN_ID,
MOE_CAMPAIGN_CONTEXT,
MOE_CAMPAIGN_ID,
MOE_CAMPAIGN_NAME,
MOE_CUSTOM_ACTION,
MOE_CUSTOM_ACTION_OBJ_ERROR,
MOE_DISMISSINTERVAL,
MOE_IN_APP_OBJECT_ERROR,
MOE_KEY_VALUE_PAIR,
MOE_NAVIGATION,
MOE_NAVIGATION_OBJ_ERROR,
MOE_NAVIGATION_TYPE,
MOE_PAYLOAD,
MOE_PLATFORM,
MOE_SELF_HANDLED,
MOE_NAVIGATION_VALUE,
MOE_INAPP_DISPLAY_RULES,
MOE_INAPP_SCREEN_NAME,
MOE_INAPP_CONTEXTS,
MOE_DATA,
ACCOUNT_META,
MOE_INAPP_SCREEN_NAMES
} from "../utils/MoEConstants";
import { isValidObject } from "../utils/MoEHelper";
import { getMoEAccountMeta } from "./MoEngagePayloadParser";
/**
*
* @param obj is a json that has InApp details
* @returns true if obj is a valid InApp Object else false
*/
export function isMoEInAppCampaignValid(obj: { [k: string]: any }) {
try {
if (obj != undefined && obj[MOE_CAMPAIGN_ID] != undefined && obj[MOE_CAMPAIGN_NAME] != undefined && obj[MOE_CAMPAIGN_CONTEXT]
&& obj[MOE_PLATFORM]) {
return true;
}
else {
throw new Error(MOE_IN_APP_OBJECT_ERROR);
}
}
catch (error: any) {
MoEngageLogger.error(error?.message);
return false;
}
}
function getMoECampaignData(json: { [k: string]: any }) {
MoEngageLogger.verbose("getMoECampaignData(): Payload: ", json);
var campaignId = json[MOE_CAMPAIGN_ID];
var campaignName = json[MOE_CAMPAIGN_NAME];
var campaignContext = json[MOE_CAMPAIGN_CONTEXT];
var formattedCampaignId = campaignContext[FORMATTED_CAMPAIGN_ID];
var campaignContextObj = new MoECampaignContext(formattedCampaignId, campaignContext);
return new MoECampaignData(campaignId, campaignName, campaignContextObj);
}
function getMoESelfHandledCampaign(json: { [k: string]: any }) {
var selfHandled = json[MOE_SELF_HANDLED];
var payload = selfHandled[MOE_PAYLOAD];
var dismissInterval = selfHandled[MOE_DISMISSINTERVAL];
let displayRulesPayload = selfHandled[MOE_INAPP_DISPLAY_RULES];
let displayRules = getMoEInAppRules(displayRulesPayload);
return new MoESelfHandledCampaign(payload, dismissInterval, displayRules);
}
export function getMoEInAppRules(json: { [k: string]: any }) {
var screenName: string | null = null;
if (json[MOE_INAPP_SCREEN_NAME] != undefined) {
screenName = json[MOE_INAPP_SCREEN_NAME];
}
var contexts = json[MOE_INAPP_CONTEXTS];
var screenNames = json[MOE_INAPP_SCREEN_NAMES]
return new MoEInAppRules(screenName, contexts, screenNames);
}
function getMoEInAppCustomAction(json: { [k: string]: any }) {
var customAction = json[MOE_CUSTOM_ACTION]
var keyValuePair = customAction[MOE_KEY_VALUE_PAIR]
var actionType = json[ACTION_TYPE]
return new MoEInAppCustomAction(keyValuePair, actionType)
}
function getMoEInAppNavigation(json: { [k: string]: any }) {
var navigation = json[MOE_NAVIGATION]
var navigationType = navigation[MOE_NAVIGATION_TYPE]
var url = navigation[MOE_NAVIGATION_VALUE]
var keyValuePair = navigation[MOE_KEY_VALUE_PAIR]
var actionType = json[ACTION_TYPE]
return new MoEInAppNavigation(navigationType, url, keyValuePair, actionType)
}
/**
* this funtion creates MoEInAppData Object from json
*/
export function getMoEInAppData(json: { [k: string]: any }, accountMetaPayload: { [k: string]: any }) {
if (isMoEInAppCampaignValid(json)) {
var campaignData = getMoECampaignData(json);
var platform = json[MOE_PLATFORM];
var accountMeta = getMoEAccountMeta(accountMetaPayload);
return new MoEInAppData(accountMeta, platform, campaignData);
}
else return undefined
}
/**
* this funtion creates MoESelfHandledCampaignData Object from json
*/
export function getMoESelfHandledCampaignData(json: { [k: string]: any }, accountMetaPayload: { [k: string]: any }) {
MoEngageLogger.verbose("getMoESelfHandledCampaignData(): Payload: ", json);
if (isSelfHandledCampaignValid(json)) {
var campaignData = getMoECampaignData(json);
var platform = json[MOE_PLATFORM];
var accountMeta = getMoEAccountMeta(accountMetaPayload);
var campaign = getMoESelfHandledCampaign(json);
return new MoESelfHandledCampaignData(accountMeta, platform, campaign, campaignData);
}
else return null
}
/**
* This function checks weather customAction key exists or not. And also checks value is a type of object
*/
export function isInAppCustomActionValid(obj: { [k: string]: any }) {
try {
if (obj[MOE_CUSTOM_ACTION] != undefined && isValidObject(obj[MOE_CUSTOM_ACTION])) {
return true;
}
else {
throw new Error(MOE_CUSTOM_ACTION_OBJ_ERROR);
}
}
catch (error: any) {
MoEngageLogger.error(error?.message);
return false;
}
}
/**
* this funtion creates MoEInAppCustomAction Object from json
*/
export function getCustomActionObj(json: { [k: string]: any }, accountMetaPayload: { [k: string]: any }) {
if (isInAppCustomActionValid(json)) {
var campaignData = getMoECampaignData(json);
var platform = json[MOE_PLATFORM];
var accountMeta = getMoEAccountMeta(accountMetaPayload);
var action = getMoEInAppCustomAction(json);
return new MoEClickData(accountMeta, platform, campaignData, action);
}
else return undefined
}
/**
* This function checks weather selfHandled key exists or not.
* checks value is a type of object
* checks mandatory keys of selfHandled exist or not
*/
export function isSelfHandledCampaignValid(obj: { [k: string]: any }) {
try {
if (obj[MOE_SELF_HANDLED] != undefined && isValidObject(obj[MOE_SELF_HANDLED])) {
var selfHandled = obj[MOE_SELF_HANDLED];
if (selfHandled[MOE_PAYLOAD] != undefined && selfHandled[MOE_DISMISSINTERVAL] != undefined) {
MoEngageLogger.info("SelfHandled campaign has data");
return true;
} else {
MoEngageLogger.info("SelfHandled campaign has no data");
return false;
}
} else {
return false;
}
}
catch (error: any) {
MoEngageLogger.error(error?.message);
return false;
}
}
/**
* This function checks weather navigation key exists or not. And also checks value is a type of object
*/
export function isNavigationValid(obj: { [k: string]: any }) {
try {
if (obj[MOE_NAVIGATION] != undefined && isValidObject(obj[MOE_NAVIGATION])) {
return true;
}
else {
throw new Error(MOE_NAVIGATION_OBJ_ERROR);
}
}
catch (error: any) {
MoEngageLogger.error(error?.message);
return false;
}
}
/**
* this funtion creates MoEInAppNavigation Object from json
*/
export function getNavigationObj(json: { [k: string]: any }, accountMetaPayload: { [k: string]: any }) {
if (isNavigationValid(json)) {
var campaignData = getMoECampaignData(json);
var platform = json[MOE_PLATFORM];
var accountMeta = getMoEAccountMeta(accountMetaPayload);
var action = getMoEInAppNavigation(json);
return new MoEClickData(accountMeta, platform, campaignData, action);
}
else return undefined
}
export function getMoESelfHandledCampaignsDataObj(payload: string) {
const jsonPayload = JSON.parse(payload);
const accountMeta = getMoEAccountMeta(jsonPayload[ACCOUNT_META]);
const selfHandledCampaigns: Array<MoESelfHandledCampaignData> = [];
for (let i = 0; i < jsonPayload.campaigns.length; i++) {
const campaignJson = jsonPayload.campaigns[i];
const campaignPayload = campaignJson[MOE_DATA];
if (isSelfHandledCampaignValid(campaignPayload)) {
const campaign = getMoESelfHandledCampaign(campaignPayload);
var platform = campaignPayload[MOE_PLATFORM];
const campaignData = getMoECampaignData(campaignPayload);
const campaignInfo = new MoESelfHandledCampaignData(accountMeta, platform, campaign, campaignData);
selfHandledCampaigns.push(campaignInfo);
}
}
return new MoESelfHandledCampaignsData(accountMeta, selfHandledCampaigns);
}