UNPKG

@applicaster/zapp-react-native-bridge

Version:

Applicaster Zapp React Native modules

127 lines (109 loc) 3.52 kB
import * as R from "ramda"; import { Platform } from "react-native"; import uuidv4 from "uuid/v4"; import { bridgeLogger } from "../logger"; export type QuickBrickEvent = | "quickBrickReady" | "moveAppToBackground" | "allowedOrientationsForScreen" | "idleTimerDisabled" | "allowOverdrawInLandscape" | "setPrefersHomeIndicatorAutoHidden" | "forceAppReload"; export interface AppData { bundleIdentifier: string; accountId: number; accountsAccountId: string; broadcasterId: number; } export interface QuickBrickCommunicationModuleI extends AppData { quickBrickEvent: ( eventName: QuickBrickEvent, payload: { [key: string]: any } ) => void; } const { NativeModules } = require("react-native"); /** * sends an event to the native QuickBrick manager module * This is one-way communication, no response is returned * * @export * @param {QuickBrickEvent} eventName * @param {{ [string]: any }} [payload={}] optional payload to pass to the native side - defaults to empty dictionary */ export function sendQuickBrickEvent( eventName: QuickBrickEvent, payload: { [key: string]: any } = {} ): void { const QBNativeModule = NativeModules.QuickBrickCommunicationModule; if (!QBNativeModule) { throw new Error("QuickBrickCommunicationModule not found"); } QBNativeModule.quickBrickEvent(eventName, payload); } /** * retrieve data from the native side * * @export * @returns {AppData} appData object - see type def for more details */ export function getAppData(): AppData { const APP_PROPERTY_KEYS = [ "accountId", "accountsAccountId", "broadcasterId", "bundleIdentifier", "apiSecretKey", "os_type", "uuid", "platform", "countryLocale", "languageLocale", ]; const webPlatforms = ["lg_tv", "samsung_tv", "web", "lg", "samsung"]; if (Platform && webPlatforms.includes(Platform.OS)) { APP_PROPERTY_KEYS.push("bver", "os_type", "platform", "store"); try { const uuid = window.localStorage.uuid || uuidv4(); window.localStorage.setItem("uuid", uuid); NativeModules.QuickBrickCommunicationModule.uuid = uuid; } catch (error) { bridgeLogger.error({ message: "cannot set device uuid", error }); } } if ( NativeModules.QuickBrickCommunicationModule && R.allPass(R.map(R.has, APP_PROPERTY_KEYS)) ) { // $FlowFixMe - CORRECT DECLARATIONS PLZ ! KTHXBYE return R.pick( APP_PROPERTY_KEYS, NativeModules.QuickBrickCommunicationModule ); } else { // TODO: in the end, we probably want to throw if the constants are not defined from the native side // for now, stubbing values is good enough return { accountId: 667, accountsAccountId: "5ae06cef8fba0f00084bd3c6", broadcasterId: 770, bundleIdentifier: "com.quickbrickTest", }; } } export function getLegacyInitialProps() { if (NativeModules.QuickBrickCommunicationModule) { return NativeModules.QuickBrickCommunicationModule.initialProps; } bridgeLogger.warning("QuickBrickCommunicationModule not found"); return {}; } export const QUICK_BRICK_EVENTS = { QUICK_BRICK_READY: "quickBrickReady", FORCE_APP_RELOAD: "forceAppReload", MOVE_APP_TO_BACKGROUND: "moveAppToBackground", ALLOWED_ORIENTATIONS_FOR_SCREEN: "allowedOrientationsForScreen", IDLE_TIMER_DISABLED: "idleTimerDisabled", SET_PREFERS_HOME_INDICATOR_AUTO_HIDDEN: "setPrefersHomeIndicatorAutoHidden", ALLOW_OVERDRAW_IN_LANDSCAPE: "allowOverdrawInLandscape", } as const;