forked from zoontek/react-native-permissions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.ios.js
70 lines (56 loc) · 1.5 KB
/
index.ios.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
'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(this.check.bind(this)))
.then(res => res.reduce((pre, cur, i) => {
var name = permissions[i]
pre[name] = cur
return pre
}, {}))
}
}
module.exports = new ReactNativePermissions()