UNPKG

react-native-firebase-for-netmera

Version:
160 lines (135 loc) 4.86 kB
/** * * Remote Config representation wrapper */ import { getLogger } from '../../utils/log'; import ModuleBase from '../../utils/ModuleBase'; import { getNativeModule } from '../../utils/native'; export const MODULE_NAME = 'RNFirebaseRemoteConfig'; export const NAMESPACE = 'config'; /** * @class Config */ export default class RemoteConfig extends ModuleBase { constructor(app) { super(app, { moduleName: MODULE_NAME, hasMultiAppSupport: false, hasCustomUrlSupport: false, namespace: NAMESPACE }); this._developerModeEnabled = false; } /** * Converts a native map to single JS value * @param nativeValue * @returns {*} * @private */ _nativeValueToJS(nativeValue) { return { source: nativeValue.source, val() { if (nativeValue.boolValue !== null && (nativeValue.stringValue === 'true' || nativeValue.stringValue === 'false' || nativeValue.stringValue === null)) return nativeValue.boolValue; if (nativeValue.numberValue !== null && nativeValue.numberValue !== undefined && (nativeValue.stringValue == null || nativeValue.stringValue === '' || nativeValue.numberValue.toString() === nativeValue.stringValue)) return nativeValue.numberValue; if (nativeValue.dataValue !== nativeValue.stringValue && (nativeValue.stringValue == null || nativeValue.stringValue === '')) return nativeValue.dataValue; return nativeValue.stringValue; } }; } /** * Enable Remote Config developer mode to allow for frequent refreshes of the cache */ enableDeveloperMode() { if (!this._developerModeEnabled) { getLogger(this).debug('Enabled developer mode'); getNativeModule(this).enableDeveloperMode(); this._developerModeEnabled = true; } } /** * Fetches Remote Config data * Call activateFetched to make fetched data available in app * @returns {*|Promise.<String>}: */ fetch(expiration) { if (expiration !== undefined) { getLogger(this).debug(`Fetching remote config data with expiration ${expiration.toString()}`); return getNativeModule(this).fetchWithExpirationDuration(expiration); } getLogger(this).debug('Fetching remote config data'); return getNativeModule(this).fetch(); } /** * Applies Fetched Config data to the Active Config * @returns {*|Promise.<Bool>} * resolves if there was a Fetched Config, and it was activated, * rejects if no Fetched Config was found, or the Fetched Config was already activated. */ activateFetched() { getLogger(this).debug('Activating remote config'); return getNativeModule(this).activateFetched(); } /** * Gets the config value of the default namespace. * @param key: Config key * @returns {*|Promise.<Object>}, will always resolve * Object looks like * { * "stringValue" : stringValue, * "numberValue" : numberValue, * "dataValue" : dataValue, * "boolValue" : boolValue, * "source" : OneOf<String>(remoteConfigSourceRemote|remoteConfigSourceDefault|remoteConfigSourceStatic) * } */ getValue(key) { return getNativeModule(this).getValue(key || '').then(this._nativeValueToJS); } /** * Gets the config value of the default namespace. * @param keys: Config key * @returns {*|Promise.<Object>}, will always resolve. * Result will be a dictionary of key and config objects * Object looks like * { * "stringValue" : stringValue, * "numberValue" : numberValue, * "dataValue" : dataValue, * "boolValue" : boolValue, * "source" : OneOf<String>(remoteConfigSourceRemote|remoteConfigSourceDefault|remoteConfigSourceStatic) * } */ getValues(keys) { return getNativeModule(this).getValues(keys || []).then(nativeValues => { const values = {}; for (let i = 0, len = keys.length; i < len; i++) { values[keys[i]] = this._nativeValueToJS(nativeValues[i]); } return values; }); } /** * Get the set of parameter keys that start with the given prefix, from the default namespace * @param prefix: The key prefix to look for. If prefix is nil or empty, returns all the keys. * @returns {*|Promise.<Array<String>>} */ getKeysByPrefix(prefix) { return getNativeModule(this).getKeysByPrefix(prefix); } /** * Sets config defaults for parameter keys and values in the default namespace config. * @param defaults: A dictionary mapping a String key to a Object values. */ setDefaults(defaults) { getNativeModule(this).setDefaults(defaults); } /** * Sets default configs from plist for default namespace; * @param resource: The plist file name or resource ID */ setDefaultsFromResource(resource) { getNativeModule(this).setDefaultsFromResource(resource); } } export const statics = {};