ReactNativePermissions.ios.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use strict';
  2. var React = require('react-native');
  3. var RNPermissions = React.NativeModules.ReactNativePermissions;
  4. const permissionTypes = [
  5. 'location',
  6. 'camera',
  7. 'microphone',
  8. 'photo',
  9. 'contacts',
  10. 'event',
  11. 'reminder',
  12. 'bluetooth',
  13. 'notification',
  14. 'backgroundRefresh',
  15. ]
  16. const permissionStatus = [
  17. 'undetermined',
  18. 'denied',
  19. 'authorized',
  20. 'restricted'
  21. ]
  22. class ReactNativePermissions {
  23. canOpenSettings() {
  24. return RNPermissions.canOpenSettings()
  25. }
  26. openSettings() {
  27. return RNPermissions.openSettings()
  28. }
  29. getPermissionStatus(permission) {
  30. if (permissionTypes.includes(permission)) {
  31. return RNPermissions.getPermissionStatus(permission)
  32. } else {
  33. return Promise.reject(`ReactNativePermissions: ${permission} is not a valid permission type`)
  34. }
  35. }
  36. //recursive funciton to chain a promises for a list of permissions
  37. checkMultiplePermissions(permissions) {
  38. let i = permissions.length
  39. let that = this
  40. const obj = {}
  41. function processNext() {
  42. i--
  43. let p = permissions[i]
  44. if (!p) {
  45. return obj
  46. }
  47. return that.getPermissionStatus(p)
  48. .then(res => {
  49. obj[p] = res
  50. return processNext()
  51. }).catch(e => {
  52. console.warn(e)
  53. return processNext()
  54. })
  55. }
  56. return processNext()
  57. }
  58. }
  59. export default new ReactNativePermissions();