UNPKG

zence-marketing-react

Version:

zence-marketing-react is a React Native Android SDK designed to streamline event tracking and notifications for mobile applications. This SDK enables seamless integration with Android / iOS apps, capturing user actions like clicks, add-to-cart, purchases,

191 lines (173 loc) 5.87 kB
// src/PredefinedEvents.js import AsyncStorage from "@react-native-community/async-storage"; import { postEventData } from "../apiConfig/api"; import { isValid } from "../utils"; const PredefinedEvents = { // Event Handlers eventHandlers: { initialize: async (props) => { try { const requiredFields = [ "fcmToken", "deviceId", "appId", "appSecret", "appName", "programCode", "webSiteUrl", "url_type", "osVersion", "sdkVersion", "deviceModel", "manufacturer", "screenResolution", "timeZone", "locale", "networkType", "carrierName", "installTime", "appVersion", "batteryLevel", ]; const booleanFields = ["isRooted", "isCharging"]; const objectFields = ["permissions", "deviceStorage", "connectionInfo"]; // Check for missing required fields for (const field of requiredFields) { if (!props[field]) { throw new Error(`${field} is required`); } } // Check boolean fields explicitly for (const field of booleanFields) { if (typeof props[field] !== "boolean") { throw new Error(`${field} must be a boolean`); } } // Check if object fields are empty (if provided) for (const field of objectFields) { if (props[field] && Object.keys(props[field]).length === 0) { throw new Error(`${field} cannot be an empty object`); } } // Store values in AsyncStorage const entries = Object.entries(props); for (const [key, value] of entries) { if (value !== undefined && value !== null) { try { await AsyncStorage.setItem(key, String(value)); } catch (error) { console.error("Error saving data to AsyncStorage:", error); } } } return { name: "initialize", data: { ...props, }, timestamp: new Date().toISOString(), }; } catch (error) { console.error("Initialization error:", error.message); throw error; } }, login: async ({ userName, userId, ...otherData }) => { const deviceId = await AsyncStorage.getItem("deviceId"); const appId = await AsyncStorage.getItem("appId"); const appName = await AsyncStorage.getItem("appName"); const webSiteUrl = await AsyncStorage.getItem("webSiteUrl"); if (!userName || !userId) { throw new Error( "userName/email/mobile number and userId are required." ); } await AsyncStorage.setItem("userName", userName || ""); await AsyncStorage.setItem("userId", userId || ""); return { name: "login", data: { ...otherData }, timestamp: new Date().toISOString(), deviceId: deviceId, appId: appId, appName: appName, userId: userId?.length > 0 ? userId : null, userName: userName?.length > 0 ? userName : null, webSiteUrl: webSiteUrl, }; }, register: async ({ userName, userId, ...otherData }) => { const deviceId = await AsyncStorage.getItem("deviceId"); const appId = await AsyncStorage.getItem("appId"); const appName = await AsyncStorage.getItem("appName"); const webSiteUrl = await AsyncStorage.getItem("webSiteUrl"); if (!userName || !userId) { throw new Error( "userName/email/mobile number and userId are required." ); } await AsyncStorage.setItem("userName", userName || ""); await AsyncStorage.setItem("userId", userId || ""); return { name: "register", data: { ...otherData }, timestamp: new Date().toISOString(), deviceId: deviceId, appId: appId, appName: appName, userId: userId?.length > 0 ? userId : null, userName: userName?.length > 0 ? userName : null, webSiteUrl: webSiteUrl, }; }, logout: async () => { try { const deviceId = await AsyncStorage.getItem("deviceId"); const appId = await AsyncStorage.getItem("appId"); const appName = await AsyncStorage.getItem("appName"); const userName = await AsyncStorage.getItem("userName"); const userId = await AsyncStorage.getItem("userId"); const webSiteUrl = await AsyncStorage.getItem("webSiteUrl"); await AsyncStorage.setItem("userName", ""); await AsyncStorage.setItem("userId", ""); if (!deviceId) { throw new Error("Device Id not found"); } return { name: "logout", timestamp: new Date().toISOString(), deviceId: deviceId, appId: appId, appName: appName, userId: userId?.length > 0 ? userId : null, userName: userName?.length > 0 ? userName : null, webSiteUrl: webSiteUrl, }; } catch (error) { console.error("Error retrieving deviceId from AsyncStorage:", error); } }, }, // Function to handle predefined events async handleEvent(eventName, data) { if (this.eventHandlers[eventName]) { try { const event = await this.eventHandlers[eventName](data); if (event) { this.sendEvent(event); } } catch (error) { console.error(`Error handling event '${eventName}':`, error.message); } } }, // Common function to send the event async sendEvent(event) { try { await postEventData(event); } catch (error) { console.error(`Failed to send event '${event?.name}':`, error); } }, }; export default PredefinedEvents;