UNPKG

@applicaster/zapp-react-native-utils

Version:

Applicaster Zapp React Native utilities package

58 lines (44 loc) 1.5 kB
import { DeviceEventEmitter, NativeModules } from "react-native"; import { platformSelect } from "../reactUtils"; const { BackgroundTimer: RNBackgroundTimer } = NativeModules; class BackgroundTimer { private uniqueId: number; private readonly callbacks: Record<number, () => void>; constructor() { this.uniqueId = 0; this.callbacks = {}; const EventEmitter = platformSelect({ android: DeviceEventEmitter, android_tv: DeviceEventEmitter, amazon: DeviceEventEmitter, // probably does not exist and uses android_tv default: undefined, }); EventEmitter?.addListener("BackgroundTimer.timer.fired", (id: number) => { const callback = this.callbacks[id]; if (callback) { delete this.callbacks[id]; callback(); } }); } setTimeout(callback, timeout): number | NodeJS.Timeout { if (!RNBackgroundTimer) { return global.setTimeout(callback, timeout); } this.uniqueId += 1; const timeoutId = this.uniqueId; this.callbacks[timeoutId] = callback; RNBackgroundTimer.setTimeout(timeoutId, timeout); return timeoutId; } clearTimeout(timeoutId: number | NodeJS.Timeout): void { if (!RNBackgroundTimer) { return global.clearTimeout(timeoutId as NodeJS.Timeout); } if (this.callbacks[timeoutId as number]) { delete this.callbacks[timeoutId as number]; RNBackgroundTimer.clearTimeout(timeoutId); } } } export default new BackgroundTimer();