Parcourir la source

Cleanup a bit, fix typing

Mathieu Acthernoene il y a 6 ans
Parent
révision
9b1eb6095a
1 fichiers modifiés avec 17 ajouts et 21 suppressions
  1. 17
    21
      index.js

+ 17
- 21
index.js Voir le fichier

5
   NativeModules,
5
   NativeModules,
6
   PermissionsAndroid,
6
   PermissionsAndroid,
7
   Platform,
7
   Platform,
8
+  // $FlowFixMe
8
 } from "react-native";
9
 } from "react-native";
9
 
10
 
10
 const { RNPermissions } = NativeModules;
11
 const { RNPermissions } = NativeModules;
68
   | "criticalAlert"
69
   | "criticalAlert"
69
   | "provisional";
70
   | "provisional";
70
 
71
 
71
-export type RequestConfig = {|
72
+export type RequestConfig = {
72
   notificationOptions?: NotificationOption[],
73
   notificationOptions?: NotificationOption[],
73
   rationale?: Rationale,
74
   rationale?: Rationale,
74
-|};
75
+};
75
 
76
 
76
 const platformPermissions = Object.values(
77
 const platformPermissions = Object.values(
77
   Platform.OS === "ios" ? IOS_PERMISSIONS : ANDROID_PERMISSIONS,
78
   Platform.OS === "ios" ? IOS_PERMISSIONS : ANDROID_PERMISSIONS,
91
 function getUnavailablePermissions(permissions: string[]) {
92
 function getUnavailablePermissions(permissions: string[]) {
92
   return Promise.all(
93
   return Promise.all(
93
     permissions.map(p => RNPermissions.isPermissionAvailable(p)),
94
     permissions.map(p => RNPermissions.isPermissionAvailable(p)),
94
-  ).then(result =>
95
-    result.reduce(
96
-      (acc, isAvailable, i) =>
97
-        isAvailable ? acc : { ...acc, [permissions[i]]: RESULTS.UNAVAILABLE },
98
-      {},
99
-    ),
95
+  ).then(availabilities =>
96
+    availabilities.reduce((acc, available, i) => {
97
+      return !available
98
+        ? { ...acc, [permissions[i]]: RESULTS.UNAVAILABLE }
99
+        : acc;
100
+    }, {}),
100
   );
101
   );
101
 }
102
 }
102
 
103
 
104
 
105
 
105
 async function getRequestedPermissions() {
106
 async function getRequestedPermissions() {
106
   const requested = await AsyncStorage.getItem(requestedKey);
107
   const requested = await AsyncStorage.getItem(requestedKey);
107
-
108
   return requested ? JSON.parse(requested) : [];
108
   return requested ? JSON.parse(requested) : [];
109
 }
109
 }
110
 
110
 
111
 async function setRequestedPermissions(permissions: string[]) {
111
 async function setRequestedPermissions(permissions: string[]) {
112
   const requested = await getRequestedPermissions();
112
   const requested = await getRequestedPermissions();
113
   const dedup = [...new Set([...requested, ...permissions])];
113
   const dedup = [...new Set([...requested, ...permissions])];
114
-
115
   return AsyncStorage.setItem(requestedKey, dedup);
114
   return AsyncStorage.setItem(requestedKey, dedup);
116
 }
115
 }
117
 
116
 
141
 
140
 
142
 async function internalRequest(
141
 async function internalRequest(
143
   permission: string,
142
   permission: string,
144
-  config: RequestConfig,
143
+  config: RequestConfig = {},
145
 ): Promise<PermissionStatus> {
144
 ): Promise<PermissionStatus> {
146
   const { notificationOptions, rationale } = config;
145
   const { notificationOptions, rationale } = config;
147
 
146
 
148
   if (Platform.OS !== "android") {
147
   if (Platform.OS !== "android") {
149
     return RNPermissions.request(permission, { notificationOptions });
148
     return RNPermissions.request(permission, { notificationOptions });
150
   }
149
   }
150
+
151
   if (!(await RNPermissions.isPermissionAvailable(permission))) {
151
   if (!(await RNPermissions.isPermissionAvailable(permission))) {
152
     return RESULTS.UNAVAILABLE;
152
     return RESULTS.UNAVAILABLE;
153
   }
153
   }
154
 
154
 
155
   const status = await PermissionsAndroid.request(permission, rationale);
155
   const status = await PermissionsAndroid.request(permission, rationale);
156
-
157
-  // set permission as requested
158
-  await setRequestedPermissions([permission]);
159
-  return status;
156
+  return setRequestedPermissions([permission]).then(() => status);
160
 }
157
 }
161
 
158
 
162
 async function internalCheckMultiple(
159
 async function internalCheckMultiple(
168
 
165
 
169
   return Promise.all(available.map(p => internalCheck(p)))
166
   return Promise.all(available.map(p => internalCheck(p)))
170
     .then(statuses =>
167
     .then(statuses =>
171
-      statuses.reduce((acc, s, i) => ({ ...acc, [available[i]]: s }), {}),
168
+      statuses.reduce((acc, status, i) => {
169
+        return { ...acc, [available[i]]: status };
170
+      }, {}),
172
     )
171
     )
173
     .then(statuses => ({ ...result, ...statuses }));
172
     .then(statuses => ({ ...result, ...statuses }));
174
 }
173
 }
181
 
180
 
182
     for (let i = 0; i < permissions.length; i++) {
181
     for (let i = 0; i < permissions.length; i++) {
183
       const permission = permissions[i];
182
       const permission = permissions[i];
184
-      // avoid checking them all at once
185
-      result[permission] = await internalRequest(permission);
183
+      result[permission] = await internalRequest(permission); // once at the time
186
     }
184
     }
187
 
185
 
188
     return result;
186
     return result;
195
     permissions.filter(p => !unavailable.includes(p)),
193
     permissions.filter(p => !unavailable.includes(p)),
196
   ).then(statuses => ({ ...result, ...statuses }));
194
   ).then(statuses => ({ ...result, ...statuses }));
197
 
195
 
198
-  // set permissions as requested
199
-  await setRequestedPermissions(permissions);
200
-  return status;
196
+  return setRequestedPermissions(permissions).then(() => statuses);
201
 }
197
 }
202
 
198
 
203
 export function openSettings(): Promise<boolean> {
199
 export function openSettings(): Promise<boolean> {