import { NativeEventSubscription } from "react-native"; import BatteryInterface from "./interface"; import { BatteryChangeHandler, BatteryState } from "./types"; const _subscriptions = new Set(); let _nativeEventSubscription: NativeEventSubscription | null = null; let _latestState: BatteryState = null; function _listenerHandler(state: BatteryState): void { _latestState = state; _subscriptions.forEach((handler): void => handler(state)); } function add(handler: BatteryChangeHandler, latestOnListen: boolean = true): void { _subscriptions.add(handler); if (latestOnListen) { if (_latestState) { handler(_latestState); } else { BatteryInterface.getCurrentState().then((state: BatteryState): void => { _latestState = state; handler(_latestState); }); } } if (_subscriptions.size > 0 && !_nativeEventSubscription) { /// @ts-ignore _nativeEventSubscription = BatteryInterface.eventEmitter.addListener("battery", _listenerHandler); } } function clear(): void { _subscriptions.clear(); if (_nativeEventSubscription) { _nativeEventSubscription.remove(); _nativeEventSubscription = null; } } function remove(handler: any): void { _subscriptions.delete(handler); if (_subscriptions.size === 0 && _nativeEventSubscription) { _nativeEventSubscription.remove(); _nativeEventSubscription = null; } } export default { add, remove, clear };