'use strict' const ReactNative = require('react-native') const RNPermissions = ReactNative.NativeModules.ReactNativePermissions const RNPTypes = [ 'location', 'camera', 'microphone', 'photo', 'contacts', 'event', 'reminder', 'bluetooth', 'notification', 'backgroundRefresh', 'speechRecognition', ] const DEFAULTS = { location: 'whenInUse', notification: ['alert', 'badge', 'sound'], } class ReactNativePermissions { canOpenSettings() { return RNPermissions.canOpenSettings() } openSettings() { return RNPermissions.openSettings() } getTypes() { return RNPTypes } check(permission, type) { if (!RNPTypes.includes(permission)) { return Promise.reject( `ReactNativePermissions: ${ permission } is not a valid permission type on iOS`, ) } return RNPermissions.getPermissionStatus(permission, type) } request(permission, type) { if (!RNPTypes.includes(permission)) { return Promise.reject( `ReactNativePermissions: ${ permission } is not a valid permission type on iOS`, ) } if (permission == 'backgroundRefresh') { return Promise.reject( 'ReactNativePermissions: You cannot request backgroundRefresh', ) } type = type || DEFAULTS[permission] return RNPermissions.requestPermission(permission, type) } checkMultiple(permissions) { return Promise.all( permissions.map(permission => this.check(permission)), ).then(res => res.reduce((pre, cur, i) => { var name = permissions[i] pre[name] = cur return pre }, {}), ) } } module.exports = new ReactNativePermissions()